From f933dd396cf0f5cbb5b053d5a8f85fbcfc9761fd Mon Sep 17 00:00:00 2001 From: Daniel Friesel Date: Fri, 30 Sep 2011 03:10:07 +0200 Subject: Apply changes to thumbnail mode --- src/thumbnail.c | 173 +++++++++++--------------------------------------------- 1 file changed, 33 insertions(+), 140 deletions(-) (limited to 'src/thumbnail.c') diff --git a/src/thumbnail.c b/src/thumbnail.c index 16dbcf3..191fc8e 100644 --- a/src/thumbnail.c +++ b/src/thumbnail.c @@ -31,10 +31,8 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. #include "thumbnail.h" #include "md5.h" #include "feh_png.h" +#include "index.h" -static char *create_index_dimension_string(int w, int h); -static char *create_index_size_string(char *file); -static char *create_index_title_string(int num, int w, int h); static gib_list *thumbnails = NULL; static thumbmode_data td; @@ -65,15 +63,15 @@ void init_thumbnail_mode(void) unsigned char trans_bg = 0; int title_area_h = 0; int tw = 0, th = 0; - int fw_name, fw_size, fw_dim, fh; + int fw, fh; int thumbnailcount = 0; feh_file *file = NULL; gib_list *l, *last = NULL; - int lines; + int lineno; int index_image_width, index_image_height; - int x_offset_name = 0, x_offset_dim = 0, x_offset_size = 0; char *s; unsigned int thumb_counter = 0; + gib_list *line, *lines; /* initialize thumbnail mode data */ td.im_main = NULL; @@ -119,9 +117,8 @@ void init_thumbnail_mode(void) /* Work out how tall the font is */ gib_imlib_get_text_size(td.font_main, "W", NULL, &tw, &th, IMLIB_TEXT_TO_RIGHT); - /* For now, allow room for the right number of lines with small gaps */ - td.text_area_h = ((th + 2) * (opt.index_show_name + opt.index_show_size + - opt.index_show_dim)) + 5; + get_index_string_dim(NULL, td.font_main, &fw, &fh); + td.text_area_h = fh + 5; /* This includes the text area for index data */ td.thumb_tot_h = opt.thumb_h + td.text_area_h; @@ -264,34 +261,14 @@ void init_thumbnail_mode(void) td.text_area_w = opt.thumb_w; /* Now draw on the info text */ - if (opt.index_show_name) { - gib_imlib_get_text_size(td.font_main, file->name, NULL, - &fw_name, &fh, IMLIB_TEXT_TO_RIGHT); - if (fw_name > td.text_area_w) - td.text_area_w = fw_name; - } - if (opt.index_show_dim) { - gib_imlib_get_text_size(td.font_main, - create_index_dimension_string(ww, hh), - NULL, &fw_dim, &fh, IMLIB_TEXT_TO_RIGHT); - if (fw_dim > td.text_area_w) - td.text_area_w = fw_dim; - } - if (opt.index_show_size) { - gib_imlib_get_text_size(td.font_main, - create_index_size_string(file->filename), - NULL, &fw_size, &fh, IMLIB_TEXT_TO_RIGHT); - if (fw_size > td.text_area_w) - td.text_area_w = fw_size; + if (opt.index_info) { + get_index_string_dim(file, td.font_main, &fw, &fh); + if (fw > td.text_area_w) + td.text_area_w = fw; } if (td.text_area_w > opt.thumb_w) td.text_area_w += 5; - /* offsets for centering text */ - x_offset_name = (td.text_area_w - fw_name) / 2; - x_offset_dim = (td.text_area_w - fw_dim) / 2; - x_offset_size = (td.text_area_w - fw_size) / 2; - if (td.vertical) { if (td.text_area_w > td.max_column_w) td.max_column_w = td.text_area_w; @@ -332,28 +309,23 @@ void init_thumbnail_mode(void) gib_imlib_free_image_and_decache(im_thumb); - lines = 0; - if (opt.index_show_name) - gib_imlib_text_draw(td.im_main, - td.font_main, NULL, - x + x_offset_name, - y + opt.thumb_h + (lines++ * (th + 2)) + 2, - file->name, IMLIB_TEXT_TO_RIGHT, - 255, 255, 255, 255); - if (opt.index_show_dim) - gib_imlib_text_draw(td.im_main, - td.font_main, NULL, - x + x_offset_dim, - y + opt.thumb_h + (lines++ * (th + 2)) + 2, - create_index_dimension_string(orig_w, orig_h), - IMLIB_TEXT_TO_RIGHT, 255, 255, 255, 255); - if (opt.index_show_size) - gib_imlib_text_draw(td.im_main, - td.font_main, NULL, - x + x_offset_size, - y + opt.thumb_h + (lines++ * (th + 2)) + 2, - create_index_size_string(file->filename), - IMLIB_TEXT_TO_RIGHT, 255, 255, 255, 255); + lineno = 0; + if (opt.index_info) { + line = lines = feh_wrap_string(create_index_string(file), + opt.thumb_w * 3, td.font_main, NULL); + + while (line) { + gib_imlib_get_text_size(td.font_main, (char *) line -> data, + NULL, &fw, &fh, IMLIB_TEXT_TO_RIGHT); + gib_imlib_text_draw(td.im_main, td.font_main, NULL, + x + ((td.text_area_w - fw) >> 1), + y + opt.thumb_h + (lineno++ * (th + 2)) + 2, + (char *) line->data, + IMLIB_TEXT_TO_RIGHT, 255, 255, 255, 255); + line = line->next; + } + gib_list_free_and_data(lines); + } if (td.vertical) y += td.thumb_tot_h; @@ -424,40 +396,6 @@ void init_thumbnail_mode(void) return; } -static char *create_index_size_string(char *file) -{ - static char str[50]; - int size = 0; - double kbs = 0.0; - struct stat st; - - if (stat(file, &st)) - kbs = 0.0; - else { - size = st.st_size; - kbs = (double) size / 1000; - } - - snprintf(str, sizeof(str), "%.2fKb", kbs); - return(str); -} - -static char *create_index_dimension_string(int w, int h) -{ - static char str[50]; - - snprintf(str, sizeof(str), "%dx%d", w, h); - return(str); -} - -static char *create_index_title_string(int num, int w, int h) -{ - static char str[50]; - - snprintf(str, sizeof(str), PACKAGE " index - %d thumbnails, %d by %d pixels", num, w, h); - return(str); -} - feh_thumbnail *feh_thumbnail_new(feh_file * file, int x, int y, int w, int h) { feh_thumbnail *thumb; @@ -606,23 +544,8 @@ void feh_thumbnail_calculate_geometry(void) for (l = filelist; l; l = l->next) { file = FEH_FILE(l->data); td.text_area_w = opt.thumb_w; - if (opt.index_show_name) { - gib_imlib_get_text_size(td.font_main, file->name, NULL, - &fw, &fh, IMLIB_TEXT_TO_RIGHT); - if (fw > td.text_area_w) - td.text_area_w = fw; - } - if (opt.index_show_dim) { - gib_imlib_get_text_size(td.font_main, - create_index_dimension_string(1000, 1000), - NULL, &fw, &fh, IMLIB_TEXT_TO_RIGHT); - if (fw > td.text_area_w) - td.text_area_w = fw; - } - if (opt.index_show_size) { - gib_imlib_get_text_size(td.font_main, - create_index_size_string(file->filename), - NULL, &fw, &fh, IMLIB_TEXT_TO_RIGHT); + if (opt.index_info) { + get_index_string_dim(file, td.font_main, &fw, &fh); if (fw > td.text_area_w) td.text_area_w = fw; } @@ -654,23 +577,8 @@ void feh_thumbnail_calculate_geometry(void) file = FEH_FILE(l->data); td.text_area_w = opt.thumb_w; /* Calc width of text */ - if (opt.index_show_name) { - gib_imlib_get_text_size(td.font_main, file->name, NULL, - &fw, &fh, IMLIB_TEXT_TO_RIGHT); - if (fw > td.text_area_w) - td.text_area_w = fw; - } - if (opt.index_show_dim) { - gib_imlib_get_text_size(td.font_main, - create_index_dimension_string(1000, 1000), - NULL, &fw, &fh, IMLIB_TEXT_TO_RIGHT); - if (fw > td.text_area_w) - td.text_area_w = fw; - } - if (opt.index_show_size) { - gib_imlib_get_text_size(td.font_main, - create_index_size_string(file->filename), - NULL, &fw, &fh, IMLIB_TEXT_TO_RIGHT); + if (opt.index_info) { + get_index_string_dim(file, td.font_main, &fw, &fh); if (fw > td.text_area_w) td.text_area_w = fw; } @@ -697,23 +605,8 @@ void feh_thumbnail_calculate_geometry(void) for (l = filelist; l; l = l->next) { file = FEH_FILE(l->data); td.text_area_w = opt.thumb_w; - if (opt.index_show_name) { - gib_imlib_get_text_size(td.font_main, file->name, NULL, - &fw, &fh, IMLIB_TEXT_TO_RIGHT); - if (fw > td.text_area_w) - td.text_area_w = fw; - } - if (opt.index_show_dim) { - gib_imlib_get_text_size(td.font_main, - create_index_dimension_string(1000, 1000), - NULL, &fw, &fh, IMLIB_TEXT_TO_RIGHT); - if (fw > td.text_area_w) - td.text_area_w = fw; - } - if (opt.index_show_size) { - gib_imlib_get_text_size(td.font_main, - create_index_size_string(file->filename), - NULL, &fw, &fh, IMLIB_TEXT_TO_RIGHT); + if (opt.index_info) { + get_index_string_dim(file, td.font_main, &fw, &fh); if (fw > td.text_area_w) td.text_area_w = fw; } -- cgit v1.2.3 From ad1b17d8f170c499a441fe24924f994ccf0b7e74 Mon Sep 17 00:00:00 2001 From: Daniel Friesel Date: Fri, 30 Sep 2011 03:24:45 +0200 Subject: Fix memory leaks --- src/index.c | 1 + src/thumbnail.c | 3 +++ 2 files changed, 4 insertions(+) (limited to 'src/thumbnail.c') diff --git a/src/index.c b/src/index.c index 49efc17..580585d 100644 --- a/src/index.c +++ b/src/index.c @@ -448,6 +448,7 @@ void get_index_string_dim(feh_file *file, Imlib_Font fn, int *fw, int *fh) * leading e.g. to a 0x0 report for index_dim = "%n". */ if (file == NULL) { + fake_file = 1; file = feh_file_new("foo"); file->info = feh_file_info_new(); } diff --git a/src/thumbnail.c b/src/thumbnail.c index 191fc8e..f7a31c6 100644 --- a/src/thumbnail.c +++ b/src/thumbnail.c @@ -921,11 +921,14 @@ int feh_thumbnail_setup_thumbnail_dir(void) weprintf("unable to create %s directory", dir_thumbnails); } + free(dir_thumbnails); + if (mkdir(dir, 0700) == -1) weprintf("unable to create %s directory", dir); else status = 1; } + free(dir); } return status; -- cgit v1.2.3 From f55de5185347da52e7cd282491afdc7114418e50 Mon Sep 17 00:00:00 2001 From: Daniel Friesel Date: Sat, 1 Oct 2011 22:42:09 +0200 Subject: index.c, thumbnail.c: Fix alignment issues --- src/index.c | 14 +++++++++++++- src/thumbnail.c | 4 ++++ 2 files changed, 17 insertions(+), 1 deletion(-) (limited to 'src/thumbnail.c') diff --git a/src/index.c b/src/index.c index 580585d..d9e068a 100644 --- a/src/index.c +++ b/src/index.c @@ -153,6 +153,10 @@ void init_index_mode(void) get_index_string_dim(file, fn, &fw, &fh); if (fw > text_area_w) text_area_w = fw; + if (fh > text_area_h) { + text_area_h = fh + 5; + tot_thumb_h = opt.thumb_h + text_area_h; + } } if (text_area_w > opt.thumb_w) text_area_w += 5; @@ -186,6 +190,10 @@ void init_index_mode(void) get_index_string_dim(file, fn, &fw, &fh); if (fw > text_area_w) text_area_w = fw; + if (fh > text_area_h) { + text_area_h = fh + 5; + tot_thumb_h = opt.thumb_h + text_area_h; + } } if (text_area_w > opt.thumb_w) text_area_w += 5; @@ -214,6 +222,10 @@ void init_index_mode(void) get_index_string_dim(file, fn, &fw, &fh); if (fw > text_area_w) text_area_w = fw; + if (fh > text_area_h) { + text_area_h = fh + 5; + tot_thumb_h = opt.thumb_h + text_area_h; + } } if (text_area_w > opt.thumb_w) @@ -438,7 +450,7 @@ void get_index_string_dim(feh_file *file, Imlib_Font fn, int *fw, int *fh) int line_w, line_h; char fake_file = 0; gib_list *line, *lines; - static int max_w = 0, total_h = 0; + int max_w = 0, total_h = 0; if (!opt.index_info) return; diff --git a/src/thumbnail.c b/src/thumbnail.c index f7a31c6..86d254b 100644 --- a/src/thumbnail.c +++ b/src/thumbnail.c @@ -265,6 +265,10 @@ void init_thumbnail_mode(void) get_index_string_dim(file, td.font_main, &fw, &fh); if (fw > td.text_area_w) td.text_area_w = fw; + if (fh > td.text_area_h) { + td.text_area_h = fh + 5; + td.thumb_tot_h = opt.thumb_h + td.text_area_h; + } } if (td.text_area_w > opt.thumb_w) td.text_area_w += 5; -- cgit v1.2.3