From b1e497e7555d2c72fb8b64a00c3e6804f36bd62f Mon Sep 17 00:00:00 2001 From: Daniel Friesel Date: Mon, 6 Feb 2012 11:08:58 +0100 Subject: EXIF fixes by reald (closes #80) commit 9c8226a1a54d1246e086923bb1b36e3827b25767 Merge: e4483e5 132ecc0 Author: Dennis Real Date: Sun Feb 5 17:24:17 2012 +0100 Merge branch 'master' of ssh://github.com/reald/feh commit e4483e5e25a1471728a31a18d22ba86def489509 Author: Dennis Real Date: Sun Feb 5 16:56:29 2012 +0100 - improved handling of images which have exif tags but not ours - fixed uninitialized pointer in thumbnail mode - added nikon lens info if available commit 132ecc0f9f0a2243c4f6745d0af36be810bf9eba Author: Dennis Real Date: Sun Feb 5 16:56:29 2012 +0100 - improved handling of images which have exif tags but not ours - fixed uninitialzed pointer in thumbnail mode - added nikon lens info if available --- .gitignore | 1 + src/exif.c | 8 +++++--- src/filelist.c | 5 ++++- src/imlib.c | 2 ++ 4 files changed, 12 insertions(+), 4 deletions(-) diff --git a/.gitignore b/.gitignore index dd0b562..559c5ab 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,4 @@ /src/*.inc /src/feh /man/*.1 +*~ \ No newline at end of file diff --git a/src/exif.c b/src/exif.c index 02154e4..9d26072 100644 --- a/src/exif.c +++ b/src/exif.c @@ -45,10 +45,10 @@ static void exif_trim_spaces(char *str) { if (*str != ' ') { - end = str; + end = str+1; } } - *++end = '\0'; + *end = '\0'; } @@ -146,7 +146,7 @@ void exif_get_info(ExifData * ed, char *buffer, unsigned int maxsize) { return; } - else if (ed == NULL ) + else if (ed == NULL) { snprintf(buffer, (size_t)maxsize, "%s\n", "No Exif data in file."); return; @@ -187,6 +187,8 @@ void exif_get_info(ExifData * ed, char *buffer, unsigned int maxsize) { /* Digital Vari-Program */ exif_get_mnote_tag(ed, 171, buffer + strlen(buffer), maxsize - strlen(buffer)); + /* Lens */ + exif_get_mnote_tag(ed, 132, buffer + strlen(buffer), maxsize - strlen(buffer)); } } diff --git a/src/filelist.c b/src/filelist.c index 32bc2a5..9756c27 100644 --- a/src/filelist.c +++ b/src/filelist.c @@ -54,6 +54,9 @@ feh_file *feh_file_new(char *filename) else newfile->name = estrdup(filename); newfile->info = NULL; +#ifdef HAVE_LIBEXIF + newfile->ed = NULL; +#endif return(newfile); } @@ -70,7 +73,7 @@ void feh_file_free(feh_file * file) if (file->info) feh_file_info_free(file->info); #ifdef HAVE_LIBEXIF - if (file->info) + if (file->ed) exif_data_unref(file->ed); #endif free(file); diff --git a/src/imlib.c b/src/imlib.c index 0b60180..197b8f5 100644 --- a/src/imlib.c +++ b/src/imlib.c @@ -522,6 +522,8 @@ void feh_draw_exif(winwidget w) return; } + + buffer[0] = '\0'; exif_get_info(FEH_FILE(w->file->data)->ed, buffer, MAX_EXIF_DATA); fn = feh_load_font(w); -- cgit v1.2.3 From b6a1cff6db874f4708d5ff5ea6a17248610b7d90 Mon Sep 17 00:00:00 2001 From: Daniel Friesel Date: Sun, 12 Feb 2012 14:02:36 +0100 Subject: Merge --scale-down / window dimension change patch --- ChangeLog | 4 ++++ src/events.c | 2 ++ src/keyevents.c | 18 ++++++++++++------ src/winwidget.c | 7 ++++++- src/winwidget.h | 1 + 5 files changed, 25 insertions(+), 7 deletions(-) diff --git a/ChangeLog b/ChangeLog index c29a1d9..cd02384 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +git HEAD + + * Patch to improve --scale-down behaviour when window size is changed + Thu, 02 Feb 2012 21:04:06 +0100 Daniel Friesel * Release v2.3 diff --git a/src/events.c b/src/events.c index 0d5e07d..9fb2379 100644 --- a/src/events.c +++ b/src/events.c @@ -235,6 +235,7 @@ static void feh_event_handle_ButtonPress(XEvent * ev) winwid->click_offset_x = ev->xbutton.x; winwid->click_offset_y = ev->xbutton.y; winwid->old_zoom = winwid->zoom; + winwid->has_manual_zoom = 1; /* required to adjust the image position in zoom mode */ winwid->im_click_offset_x = (winwid->click_offset_x @@ -332,6 +333,7 @@ static void feh_event_handle_ButtonRelease(XEvent * ev) && (ev->xbutton.x == winwid->click_offset_x) && (ev->xbutton.y == winwid->click_offset_y)) { winwid->zoom = 1.0; + winwid->has_manual_zoom = 0; winwidget_center_image(winwid); } else winwidget_sanitise_offsets(winwid); diff --git a/src/keyevents.c b/src/keyevents.c index 0ada751..c551ae3 100644 --- a/src/keyevents.c +++ b/src/keyevents.c @@ -573,6 +573,9 @@ void feh_event_handle_keypress(XEvent * ev) feh_event_invoke_action(winwid, 9); } else if (feh_is_kp(&keys.zoom_in, keysym, state)) { + if (!winwid->has_manual_zoom) + winwid->has_manual_zoom = 1; + winwid->old_zoom = winwid->zoom; winwid->zoom = winwid->zoom * 1.25; @@ -587,6 +590,9 @@ void feh_event_handle_keypress(XEvent * ev) winwidget_render_image(winwid, 0, 0); } else if (feh_is_kp(&keys.zoom_out, keysym, state)) { + if (!winwid->has_manual_zoom) + winwid->has_manual_zoom = 1; + winwid->old_zoom = winwid->zoom; winwid->zoom = winwid->zoom * 0.80; @@ -601,17 +607,17 @@ void feh_event_handle_keypress(XEvent * ev) winwidget_render_image(winwid, 0, 0); } else if (feh_is_kp(&keys.zoom_default, keysym, state)) { + if (!winwid->has_manual_zoom) + winwid->has_manual_zoom = 1; + winwid->zoom = 1.0; - /* --scale-down will revert our operation if old_zoom == 1.0 */ - if (opt.scale_down) - winwid->old_zoom = 1.001; winwidget_center_image(winwid); winwidget_render_image(winwid, 0, 0); - /* --scale-down will also do weird stuff if zoom is 1.0 */ - if (opt.scale_down) - winwid->zoom = 1.001; } else if (feh_is_kp(&keys.zoom_fit, keysym, state)) { + if (!winwid->has_manual_zoom) + winwid->has_manual_zoom = 1; + feh_calc_needed_zoom(&winwid->zoom, winwid->im_w, winwid->im_h, winwid->w, winwid->h); winwidget_center_image(winwid); winwidget_render_image(winwid, 0, 0); diff --git a/src/winwidget.c b/src/winwidget.c index ae34045..36720ac 100644 --- a/src/winwidget.c +++ b/src/winwidget.c @@ -71,6 +71,7 @@ static winwidget winwidget_allocate(void) ret->im_y = 0; ret->zoom = 1.0; ret->old_zoom = 1.0; + ret->has_manual_zoom = 0; ret->click_offset_x = 0; ret->click_offset_y = 0; @@ -394,6 +395,9 @@ void winwidget_render_image(winwidget winwid, int resize, int force_alias) if (winwid->im_y > winwid->h) winwid->im_y = winwid->h; + if (!winwid->has_manual_zoom && winwid->zoom < 1.0) + winwid->zoom = 1.0; + D(("winwidget_render_image resize %d force_alias %d im %dx%d\n", resize, force_alias, winwid->im_w, winwid->im_h)); @@ -401,7 +405,7 @@ void winwidget_render_image(winwidget winwid, int resize, int force_alias) if (!winwid->full_screen && opt.scale_down && ((winwid->w < winwid->im_w) || (winwid->h < winwid->im_h)) && - (winwid->old_zoom == 1.0)) { + (!winwid->has_manual_zoom)) { D(("scaling down image %dx%d\n", winwid->w, winwid->h)); feh_calc_needed_zoom(&(winwid->zoom), winwid->im_w, winwid->im_h, winwid->w, winwid->h); @@ -950,6 +954,7 @@ void feh_debug_print_winwid(winwidget w) void winwidget_reset_image(winwidget winwid) { + winwid->has_manual_zoom = 0; winwid->zoom = 1.0; winwid->old_zoom = 1.0; winwid->im_x = 0; diff --git a/src/winwidget.h b/src/winwidget.h index 33ad945..3a99868 100644 --- a/src/winwidget.h +++ b/src/winwidget.h @@ -108,6 +108,7 @@ struct __winwidget { */ double zoom; double old_zoom; + unsigned char has_manual_zoom; int click_offset_x; int click_offset_y; -- cgit v1.2.3 From be7b3df6c008f74b2ebec9a61dda3db7da9a2a9d Mon Sep 17 00:00:00 2001 From: Daniel Friesel Date: Sun, 12 Feb 2012 16:12:40 +0100 Subject: Revert "Merge --scale-down / window dimension change patch" This reverts commit b6a1cff6db874f4708d5ff5ea6a17248610b7d90. --- ChangeLog | 4 ---- src/events.c | 2 -- src/keyevents.c | 18 ++++++------------ src/winwidget.c | 7 +------ src/winwidget.h | 1 - 5 files changed, 7 insertions(+), 25 deletions(-) diff --git a/ChangeLog b/ChangeLog index cd02384..c29a1d9 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,7 +1,3 @@ -git HEAD - - * Patch to improve --scale-down behaviour when window size is changed - Thu, 02 Feb 2012 21:04:06 +0100 Daniel Friesel * Release v2.3 diff --git a/src/events.c b/src/events.c index 9fb2379..0d5e07d 100644 --- a/src/events.c +++ b/src/events.c @@ -235,7 +235,6 @@ static void feh_event_handle_ButtonPress(XEvent * ev) winwid->click_offset_x = ev->xbutton.x; winwid->click_offset_y = ev->xbutton.y; winwid->old_zoom = winwid->zoom; - winwid->has_manual_zoom = 1; /* required to adjust the image position in zoom mode */ winwid->im_click_offset_x = (winwid->click_offset_x @@ -333,7 +332,6 @@ static void feh_event_handle_ButtonRelease(XEvent * ev) && (ev->xbutton.x == winwid->click_offset_x) && (ev->xbutton.y == winwid->click_offset_y)) { winwid->zoom = 1.0; - winwid->has_manual_zoom = 0; winwidget_center_image(winwid); } else winwidget_sanitise_offsets(winwid); diff --git a/src/keyevents.c b/src/keyevents.c index c551ae3..0ada751 100644 --- a/src/keyevents.c +++ b/src/keyevents.c @@ -573,9 +573,6 @@ void feh_event_handle_keypress(XEvent * ev) feh_event_invoke_action(winwid, 9); } else if (feh_is_kp(&keys.zoom_in, keysym, state)) { - if (!winwid->has_manual_zoom) - winwid->has_manual_zoom = 1; - winwid->old_zoom = winwid->zoom; winwid->zoom = winwid->zoom * 1.25; @@ -590,9 +587,6 @@ void feh_event_handle_keypress(XEvent * ev) winwidget_render_image(winwid, 0, 0); } else if (feh_is_kp(&keys.zoom_out, keysym, state)) { - if (!winwid->has_manual_zoom) - winwid->has_manual_zoom = 1; - winwid->old_zoom = winwid->zoom; winwid->zoom = winwid->zoom * 0.80; @@ -607,17 +601,17 @@ void feh_event_handle_keypress(XEvent * ev) winwidget_render_image(winwid, 0, 0); } else if (feh_is_kp(&keys.zoom_default, keysym, state)) { - if (!winwid->has_manual_zoom) - winwid->has_manual_zoom = 1; - winwid->zoom = 1.0; + /* --scale-down will revert our operation if old_zoom == 1.0 */ + if (opt.scale_down) + winwid->old_zoom = 1.001; winwidget_center_image(winwid); winwidget_render_image(winwid, 0, 0); + /* --scale-down will also do weird stuff if zoom is 1.0 */ + if (opt.scale_down) + winwid->zoom = 1.001; } else if (feh_is_kp(&keys.zoom_fit, keysym, state)) { - if (!winwid->has_manual_zoom) - winwid->has_manual_zoom = 1; - feh_calc_needed_zoom(&winwid->zoom, winwid->im_w, winwid->im_h, winwid->w, winwid->h); winwidget_center_image(winwid); winwidget_render_image(winwid, 0, 0); diff --git a/src/winwidget.c b/src/winwidget.c index 36720ac..ae34045 100644 --- a/src/winwidget.c +++ b/src/winwidget.c @@ -71,7 +71,6 @@ static winwidget winwidget_allocate(void) ret->im_y = 0; ret->zoom = 1.0; ret->old_zoom = 1.0; - ret->has_manual_zoom = 0; ret->click_offset_x = 0; ret->click_offset_y = 0; @@ -395,9 +394,6 @@ void winwidget_render_image(winwidget winwid, int resize, int force_alias) if (winwid->im_y > winwid->h) winwid->im_y = winwid->h; - if (!winwid->has_manual_zoom && winwid->zoom < 1.0) - winwid->zoom = 1.0; - D(("winwidget_render_image resize %d force_alias %d im %dx%d\n", resize, force_alias, winwid->im_w, winwid->im_h)); @@ -405,7 +401,7 @@ void winwidget_render_image(winwidget winwid, int resize, int force_alias) if (!winwid->full_screen && opt.scale_down && ((winwid->w < winwid->im_w) || (winwid->h < winwid->im_h)) && - (!winwid->has_manual_zoom)) { + (winwid->old_zoom == 1.0)) { D(("scaling down image %dx%d\n", winwid->w, winwid->h)); feh_calc_needed_zoom(&(winwid->zoom), winwid->im_w, winwid->im_h, winwid->w, winwid->h); @@ -954,7 +950,6 @@ void feh_debug_print_winwid(winwidget w) void winwidget_reset_image(winwidget winwid) { - winwid->has_manual_zoom = 0; winwid->zoom = 1.0; winwid->old_zoom = 1.0; winwid->im_x = 0; diff --git a/src/winwidget.h b/src/winwidget.h index 3a99868..33ad945 100644 --- a/src/winwidget.h +++ b/src/winwidget.h @@ -108,7 +108,6 @@ struct __winwidget { */ double zoom; double old_zoom; - unsigned char has_manual_zoom; int click_offset_x; int click_offset_y; -- cgit v1.2.3 From bf52095c2a870571475b6a7731428f5533882ac8 Mon Sep 17 00:00:00 2001 From: Daniel Friesel Date: Sun, 26 Feb 2012 09:56:01 +0100 Subject: feh_printf: Fix/Add %S/%P for human-readable sizes, use them in --list --- ChangeLog | 8 ++++++++ man/feh.pre | 7 ++++--- src/feh.h | 1 + src/list.c | 10 ++++++---- src/slideshow.c | 25 +++++++++++++++++++------ 5 files changed, 38 insertions(+), 13 deletions(-) diff --git a/ChangeLog b/ChangeLog index c29a1d9..eda2b30 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +git HEAD + + * exif-support fixes by Dennis Real + * format specifier %S now uses the appropriate suffix (B/kB/MB) + * format specifier %P now prints the number of pixels with k/M suffix, + like %S. Printing the program name ("feh") is no longer supported + * feh --list now uses %S/%P to print image size and amount of pixels + Thu, 02 Feb 2012 21:04:06 +0100 Daniel Friesel * Release v2.3 diff --git a/man/feh.pre b/man/feh.pre index e460fad..acb4948 100644 --- a/man/feh.pre +++ b/man/feh.pre @@ -791,7 +791,8 @@ Number of image pixels . .It \&%P . -.Nm +Numbor of image pixels +.Pq kilopixels / megapixels . .It %s . @@ -799,8 +800,8 @@ Image size in bytes . .It %S . -Image size in kilobytes -.Pq with kB postfix +Human-readable image size +.Pq kB / MB . .It %t . diff --git a/src/feh.h b/src/feh.h index 6719963..996de84 100644 --- a/src/feh.h +++ b/src/feh.h @@ -137,6 +137,7 @@ void init_keyevents(void); void init_buttonbindings(void); void feh_event_handle_keypress(XEvent * ev); void feh_action_run(feh_file * file, char *action); +char *format_size(int size); char *feh_printf(char *str, feh_file * file); void im_weprintf(winwidget w, char *fmt, ...); void feh_draw_zoom(winwidget w); diff --git a/src/list.c b/src/list.c index e052c05..3cb9a3d 100644 --- a/src/list.c +++ b/src/list.c @@ -37,7 +37,7 @@ void init_list_mode(void) mode = "list"; if (!opt.customlist) - fputs("NUM\tFORMAT\tWIDTH\tHEIGHT\tPIXELS\tSIZE(bytes)\tALPHA\tFILENAME\n", + fputs("NUM\tFORMAT\tWIDTH\tHEIGHT\tPIXELS\tSIZE\tALPHA\tFILENAME\n", stdout); for (l = filelist; l; l = l->next) { @@ -45,10 +45,12 @@ void init_list_mode(void) if (opt.customlist) printf("%s\n", feh_printf(opt.customlist, file)); else - printf("%d\t%s\t%d\t%d\t%d\t%d\t\t%c\t%s\n", ++j, + printf("%d\t%s\t%d\t%d\t%s", ++j, file->info->format, file->info->width, - file->info->height, file->info->pixels, - file->info->size, + file->info->height, + format_size(file->info->pixels)); + printf("\t%s\t\t%c\t%s\n", + format_size(file->info->size), file->info->has_alpha ? 'X' : '-', file->filename); feh_action_run(file, opt.actions[0]); diff --git a/src/slideshow.c b/src/slideshow.c index 189357d..a65d95e 100644 --- a/src/slideshow.c +++ b/src/slideshow.c @@ -404,6 +404,19 @@ char *shell_escape(char *input) return ret; } +char *format_size(int size) +{ + static char ret[5]; + char units[] = {' ', 'k', 'M', 'G', 'T'}; + unsigned char postfix = 0; + while (size >= 1000) { + size /= 1000; + postfix++; + } + snprintf(ret, 5, "%3d%c", size, units[postfix]); + return ret; +} + char *feh_printf(char *str, feh_file * file) { char *c; @@ -452,9 +465,7 @@ char *feh_printf(char *str, feh_file * file) break; case 'S': if (file && (file->info || !feh_file_info_load(file, NULL))) { - snprintf(buf, sizeof(buf), - "%.2fkB", ((double)file->info->size / 1000)); - strcat(ret, buf); + strcat(ret, format_size(file->info->size)); } break; case 'p': @@ -463,14 +474,16 @@ char *feh_printf(char *str, feh_file * file) strcat(ret, buf); } break; + case 'P': + if (file && (file->info || !feh_file_info_load(file, NULL))) { + strcat(ret, format_size(file->info->pixels)); + } + break; case 't': if (file && (file->info || !feh_file_info_load(file, NULL))) { strcat(ret, file->info->format); } break; - case 'P': - strcat(ret, PACKAGE); - break; case 'v': strcat(ret, VERSION); break; -- cgit v1.2.3 From 54deb9b8e21354a1670c179a7d8bd09e4e391026 Mon Sep 17 00:00:00 2001 From: Daniel Friesel Date: Sun, 26 Feb 2012 13:06:24 +0100 Subject: list: Remove now useless double tab --- src/list.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/list.c b/src/list.c index 3cb9a3d..3317da7 100644 --- a/src/list.c +++ b/src/list.c @@ -49,7 +49,7 @@ void init_list_mode(void) file->info->format, file->info->width, file->info->height, format_size(file->info->pixels)); - printf("\t%s\t\t%c\t%s\n", + printf("\t%s\t%c\t%s\n", format_size(file->info->size), file->info->has_alpha ? 'X' : '-', file->filename); -- cgit v1.2.3