Loading man/feh.pre +13 −7 Original line number Diff line number Diff line Loading @@ -260,7 +260,7 @@ Note: This option needs to load all images to calculate the dimensions of the window, so when using it with many files it will ake a while before a .Nm window is visible. Use .Ar --preload .Cm --preload to get a progress bar. . .It Cm -F , --fullscreen Loading Loading @@ -319,7 +319,7 @@ needs to load all images to calculate the dimensions of its own window. So when using them with many files, it will take a while before a .Nm window becomes visible. Use .Ar --preload .Cm --preload to get a progress bar. . .It Cm --info Ar commandline Loading Loading @@ -585,16 +585,22 @@ This will prevent any empty space in the final montage. . .It Cm -H , --limit-height Ar pixels . Limit the height of the montage. These options can be used together to define the image size exactly, or separately. If only one is specified, the other is calculated from the number of files specified and the size of the thumbnails. The default is to limit width to 800 pixels and calculate the height as necessary. Limit the height of the montage, defaults to 800 pixels. . .It Cm -W , --limit-width Ar pixels . Limit the width of the montage. . .Pp . If both .Cm --limit-width No and Cm --limit-height are specified, the montage will be exactly .Ar width pixels wide and up to .Ar height pixels high. . .It Cm -o , --output Ar file . Save the created montage to Loading src/index.c +86 −101 Original line number Diff line number Diff line Loading @@ -133,115 +133,27 @@ void init_index_mode(void) info in the selected font, work out how much space we need, and calculate the size of the image we will require */ if (opt.limit_w && opt.limit_h) { int rec_h = 0; if (opt.limit_w) { w = opt.limit_w; h = opt.limit_h; /* Work out if this is big enough, and give a warning if not */ /* Pretend we are limiting width by that specified, loop through, and see it we fit in the height specified. If not, continue the loop, and recommend the final value instead. Carry on and make the index anyway. */ for (l = filelist; l; l = l->next) { file = FEH_FILE(l->data); text_area_w = opt.thumb_w; if (opt.index_info) { 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; index_calculate_height(fn, w, &h, &tot_thumb_h); if ((x > w - text_area_w)) { x = 0; y += tot_thumb_h; } x += text_area_w; } rec_h = y + tot_thumb_h; if (h < rec_h) { if (opt.limit_h) { if (h > opt.limit_h) weprintf( "The image size you specified (%d by %d) is not large\n" "enough to hold all the thumnails you specified (%d). To fit all\n" "the thumnails, either decrease their size, choose a smaller font,\n" "or use a larger image (may I recommend %d by %d?)", opt.limit_w, opt.limit_h, filelist_len, opt.limit_w, rec_h); "The image size you specified (%dx%d) is not large\n" "enough to hold all %d thumbnails. To fit all the thumbnails,\n" "either decrease their size, choos e asmaller font,\n" "or use a larger image (like %dx%d)", opt.limit_w, opt.limit_h, filelist_len, w, h); h = opt.limit_h; } } else if (opt.limit_h) { vertical = 1; h = opt.limit_h; /* calc w */ for (l = filelist; l; l = l->next) { file = FEH_FILE(l->data); text_area_w = opt.thumb_w; /* Calc width of text */ if (opt.index_info) { 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; if (text_area_w > max_column_w) max_column_w = text_area_w; if ((y > h - tot_thumb_h)) { y = 0; x += max_column_w; max_column_w = 0; } y += tot_thumb_h; } w = x + text_area_w; max_column_w = 0; } else if (opt.limit_w) { w = opt.limit_w; /* calc h */ for (l = filelist; l; l = l->next) { file = FEH_FILE(l->data); text_area_w = opt.thumb_w; if (opt.index_info) { 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; index_calculate_width(fn, &w, h, &tot_thumb_h); } } if (text_area_w > opt.thumb_w) text_area_w += 5; if ((x > w - text_area_w)) { x = 0; y += tot_thumb_h; } x += text_area_w; } h = y + tot_thumb_h; } x = y = 0; index_image_width = w; index_image_height = h + title_area_h; Loading Loading @@ -445,6 +357,79 @@ void init_index_mode(void) return; } void index_calculate_height(Imlib_Font fn, int w, int *h, int *tot_thumb_h) { gib_list *l; feh_file *file = NULL; int x = 0, y = 0; int fw = 0, fh = 0; int text_area_w = 0, text_area_h = 0; for (l = filelist; l; l = l->next) { file = FEH_FILE(l->data); text_area_w = opt.thumb_w; if (opt.index_info) { 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; if ((x > w - text_area_w)) { x = 0; y += *tot_thumb_h; } x += text_area_w; } *h = y + *tot_thumb_h; } void index_calculate_width(Imlib_Font fn, int *w, int h, int *tot_thumb_h) { gib_list *l; feh_file *file = NULL; int x = 0, y = 0; int fw = 0, fh = 0; int text_area_w = 0, text_area_h = 0; int max_column_w = 0; for (l = filelist; l; l = l->next) { file = FEH_FILE(l->data); text_area_w = opt.thumb_w; /* Calc width of text */ if (opt.index_info) { 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; if (text_area_w > max_column_w) max_column_w = text_area_w; if ((y > h - *tot_thumb_h)) { y = 0; x += max_column_w; max_column_w = 0; } y += *tot_thumb_h; } *w = x + text_area_w; } void get_index_string_dim(feh_file *file, Imlib_Font fn, int *fw, int *fh) { int line_w, line_h; Loading src/index.h +2 −0 Original line number Diff line number Diff line Loading @@ -29,5 +29,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. char *create_index_string(feh_file *file); char *create_index_title_string(int num, int w, int h); void get_index_string_dim(feh_file *file, Imlib_Font fn, int *w, int *h); void index_calculate_height(Imlib_Font fn, int w, int *h, int *tot_thumb_w); void index_calculate_width(Imlib_Font fn, int *w, int h, int *tot_thumb_h); #endif src/thumbnail.c +15 −89 Original line number Diff line number Diff line Loading @@ -522,9 +522,9 @@ void feh_thumbnail_calculate_geometry(void) if (opt.verbose) fputs(PACKAGE " - No size restriction specified for index.\n" " Using defaults (width limited to 640)\n", " Using defaults (width limited to 800)\n", stdout); opt.limit_w = 640; opt.limit_w = 800; } } Loading @@ -532,100 +532,26 @@ void feh_thumbnail_calculate_geometry(void) info in the selected font, work out how much space we need, and calculate the size of the image we will require */ if (opt.limit_w && opt.limit_h) { int rec_h = 0; if (opt.limit_w) { td.w = opt.limit_w; td.h = opt.limit_h; /* Work out if this is big enough, and give a warning if not */ /* Pretend we are limiting width by that specified, loop through, and see it we fit in the height specified. If not, continue the loop, and recommend the final value instead. Carry on and make the index anyway. */ for (l = filelist; l; l = l->next) { file = FEH_FILE(l->data); td.text_area_w = opt.thumb_w; 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; if ((x > td.w - td.text_area_w)) { x = 0; y += td.thumb_tot_h; } x += td.text_area_w; } rec_h = y + td.thumb_tot_h; index_calculate_height(td.font_main, td.w, &td.h, &td.thumb_tot_h); if (td.h < rec_h) { weprintf ("The image size you specified (%d by %d) is not large\n" "enough to hold all the thumnails you specified (%d). To fit all\n" if (opt.limit_h) { if (td.h> opt.limit_h) weprintf( "The image size you specified (%dx%d) is not large\n" "enough to hold all %d thumbnails. To fit all\n" "the thumnails, either decrease their size, choose a smaller font,\n" "or use a larger image (may I recommend %d by %d?)", opt.limit_w, opt.limit_h, filelist_len, opt.limit_w, rec_h); "or use a larger image (like %dx%d)", opt.limit_w, opt.limit_h, filelist_len, opt.limit_w, td.h); td.h = opt.limit_h; } } else if (opt.limit_h) { td.vertical = 1; td.h = opt.limit_h; /* calc w */ for (l = filelist; l; l = l->next) { file = FEH_FILE(l->data); td.text_area_w = opt.thumb_w; /* Calc width of text */ 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; if (td.text_area_w > td.max_column_w) td.max_column_w = td.text_area_w; if ((y > td.h - td.thumb_tot_h)) { y = 0; x += td.max_column_w; td.max_column_w = 0; } y += td.thumb_tot_h; } td.w = x + td.text_area_w; td.max_column_w = 0; } else if (opt.limit_w) { td.w = opt.limit_w; /* calc h */ for (l = filelist; l; l = l->next) { file = FEH_FILE(l->data); td.text_area_w = opt.thumb_w; 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; if ((x > td.w - td.text_area_w)) { x = 0; y += td.thumb_tot_h; } x += td.text_area_w; } td.h = y + td.thumb_tot_h; index_calculate_width(td.font_main, &td.w, td.h, &td.thumb_tot_h); } } Loading Loading
man/feh.pre +13 −7 Original line number Diff line number Diff line Loading @@ -260,7 +260,7 @@ Note: This option needs to load all images to calculate the dimensions of the window, so when using it with many files it will ake a while before a .Nm window is visible. Use .Ar --preload .Cm --preload to get a progress bar. . .It Cm -F , --fullscreen Loading Loading @@ -319,7 +319,7 @@ needs to load all images to calculate the dimensions of its own window. So when using them with many files, it will take a while before a .Nm window becomes visible. Use .Ar --preload .Cm --preload to get a progress bar. . .It Cm --info Ar commandline Loading Loading @@ -585,16 +585,22 @@ This will prevent any empty space in the final montage. . .It Cm -H , --limit-height Ar pixels . Limit the height of the montage. These options can be used together to define the image size exactly, or separately. If only one is specified, the other is calculated from the number of files specified and the size of the thumbnails. The default is to limit width to 800 pixels and calculate the height as necessary. Limit the height of the montage, defaults to 800 pixels. . .It Cm -W , --limit-width Ar pixels . Limit the width of the montage. . .Pp . If both .Cm --limit-width No and Cm --limit-height are specified, the montage will be exactly .Ar width pixels wide and up to .Ar height pixels high. . .It Cm -o , --output Ar file . Save the created montage to Loading
src/index.c +86 −101 Original line number Diff line number Diff line Loading @@ -133,115 +133,27 @@ void init_index_mode(void) info in the selected font, work out how much space we need, and calculate the size of the image we will require */ if (opt.limit_w && opt.limit_h) { int rec_h = 0; if (opt.limit_w) { w = opt.limit_w; h = opt.limit_h; /* Work out if this is big enough, and give a warning if not */ /* Pretend we are limiting width by that specified, loop through, and see it we fit in the height specified. If not, continue the loop, and recommend the final value instead. Carry on and make the index anyway. */ for (l = filelist; l; l = l->next) { file = FEH_FILE(l->data); text_area_w = opt.thumb_w; if (opt.index_info) { 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; index_calculate_height(fn, w, &h, &tot_thumb_h); if ((x > w - text_area_w)) { x = 0; y += tot_thumb_h; } x += text_area_w; } rec_h = y + tot_thumb_h; if (h < rec_h) { if (opt.limit_h) { if (h > opt.limit_h) weprintf( "The image size you specified (%d by %d) is not large\n" "enough to hold all the thumnails you specified (%d). To fit all\n" "the thumnails, either decrease their size, choose a smaller font,\n" "or use a larger image (may I recommend %d by %d?)", opt.limit_w, opt.limit_h, filelist_len, opt.limit_w, rec_h); "The image size you specified (%dx%d) is not large\n" "enough to hold all %d thumbnails. To fit all the thumbnails,\n" "either decrease their size, choos e asmaller font,\n" "or use a larger image (like %dx%d)", opt.limit_w, opt.limit_h, filelist_len, w, h); h = opt.limit_h; } } else if (opt.limit_h) { vertical = 1; h = opt.limit_h; /* calc w */ for (l = filelist; l; l = l->next) { file = FEH_FILE(l->data); text_area_w = opt.thumb_w; /* Calc width of text */ if (opt.index_info) { 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; if (text_area_w > max_column_w) max_column_w = text_area_w; if ((y > h - tot_thumb_h)) { y = 0; x += max_column_w; max_column_w = 0; } y += tot_thumb_h; } w = x + text_area_w; max_column_w = 0; } else if (opt.limit_w) { w = opt.limit_w; /* calc h */ for (l = filelist; l; l = l->next) { file = FEH_FILE(l->data); text_area_w = opt.thumb_w; if (opt.index_info) { 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; index_calculate_width(fn, &w, h, &tot_thumb_h); } } if (text_area_w > opt.thumb_w) text_area_w += 5; if ((x > w - text_area_w)) { x = 0; y += tot_thumb_h; } x += text_area_w; } h = y + tot_thumb_h; } x = y = 0; index_image_width = w; index_image_height = h + title_area_h; Loading Loading @@ -445,6 +357,79 @@ void init_index_mode(void) return; } void index_calculate_height(Imlib_Font fn, int w, int *h, int *tot_thumb_h) { gib_list *l; feh_file *file = NULL; int x = 0, y = 0; int fw = 0, fh = 0; int text_area_w = 0, text_area_h = 0; for (l = filelist; l; l = l->next) { file = FEH_FILE(l->data); text_area_w = opt.thumb_w; if (opt.index_info) { 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; if ((x > w - text_area_w)) { x = 0; y += *tot_thumb_h; } x += text_area_w; } *h = y + *tot_thumb_h; } void index_calculate_width(Imlib_Font fn, int *w, int h, int *tot_thumb_h) { gib_list *l; feh_file *file = NULL; int x = 0, y = 0; int fw = 0, fh = 0; int text_area_w = 0, text_area_h = 0; int max_column_w = 0; for (l = filelist; l; l = l->next) { file = FEH_FILE(l->data); text_area_w = opt.thumb_w; /* Calc width of text */ if (opt.index_info) { 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; if (text_area_w > max_column_w) max_column_w = text_area_w; if ((y > h - *tot_thumb_h)) { y = 0; x += max_column_w; max_column_w = 0; } y += *tot_thumb_h; } *w = x + text_area_w; } void get_index_string_dim(feh_file *file, Imlib_Font fn, int *fw, int *fh) { int line_w, line_h; Loading
src/index.h +2 −0 Original line number Diff line number Diff line Loading @@ -29,5 +29,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. char *create_index_string(feh_file *file); char *create_index_title_string(int num, int w, int h); void get_index_string_dim(feh_file *file, Imlib_Font fn, int *w, int *h); void index_calculate_height(Imlib_Font fn, int w, int *h, int *tot_thumb_w); void index_calculate_width(Imlib_Font fn, int *w, int h, int *tot_thumb_h); #endif
src/thumbnail.c +15 −89 Original line number Diff line number Diff line Loading @@ -522,9 +522,9 @@ void feh_thumbnail_calculate_geometry(void) if (opt.verbose) fputs(PACKAGE " - No size restriction specified for index.\n" " Using defaults (width limited to 640)\n", " Using defaults (width limited to 800)\n", stdout); opt.limit_w = 640; opt.limit_w = 800; } } Loading @@ -532,100 +532,26 @@ void feh_thumbnail_calculate_geometry(void) info in the selected font, work out how much space we need, and calculate the size of the image we will require */ if (opt.limit_w && opt.limit_h) { int rec_h = 0; if (opt.limit_w) { td.w = opt.limit_w; td.h = opt.limit_h; /* Work out if this is big enough, and give a warning if not */ /* Pretend we are limiting width by that specified, loop through, and see it we fit in the height specified. If not, continue the loop, and recommend the final value instead. Carry on and make the index anyway. */ for (l = filelist; l; l = l->next) { file = FEH_FILE(l->data); td.text_area_w = opt.thumb_w; 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; if ((x > td.w - td.text_area_w)) { x = 0; y += td.thumb_tot_h; } x += td.text_area_w; } rec_h = y + td.thumb_tot_h; index_calculate_height(td.font_main, td.w, &td.h, &td.thumb_tot_h); if (td.h < rec_h) { weprintf ("The image size you specified (%d by %d) is not large\n" "enough to hold all the thumnails you specified (%d). To fit all\n" if (opt.limit_h) { if (td.h> opt.limit_h) weprintf( "The image size you specified (%dx%d) is not large\n" "enough to hold all %d thumbnails. To fit all\n" "the thumnails, either decrease their size, choose a smaller font,\n" "or use a larger image (may I recommend %d by %d?)", opt.limit_w, opt.limit_h, filelist_len, opt.limit_w, rec_h); "or use a larger image (like %dx%d)", opt.limit_w, opt.limit_h, filelist_len, opt.limit_w, td.h); td.h = opt.limit_h; } } else if (opt.limit_h) { td.vertical = 1; td.h = opt.limit_h; /* calc w */ for (l = filelist; l; l = l->next) { file = FEH_FILE(l->data); td.text_area_w = opt.thumb_w; /* Calc width of text */ 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; if (td.text_area_w > td.max_column_w) td.max_column_w = td.text_area_w; if ((y > td.h - td.thumb_tot_h)) { y = 0; x += td.max_column_w; td.max_column_w = 0; } y += td.thumb_tot_h; } td.w = x + td.text_area_w; td.max_column_w = 0; } else if (opt.limit_w) { td.w = opt.limit_w; /* calc h */ for (l = filelist; l; l = l->next) { file = FEH_FILE(l->data); td.text_area_w = opt.thumb_w; 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; if ((x > td.w - td.text_area_w)) { x = 0; y += td.thumb_tot_h; } x += td.text_area_w; } td.h = y + td.thumb_tot_h; index_calculate_width(td.font_main, &td.w, td.h, &td.thumb_tot_h); } } Loading