diff options
-rw-r--r-- | ChangeLog | 1 | ||||
-rw-r--r-- | examples/buttons | 4 | ||||
-rw-r--r-- | man/feh.pre | 9 | ||||
-rw-r--r-- | src/events.c | 60 | ||||
-rw-r--r-- | src/options.h | 2 |
5 files changed, 76 insertions, 0 deletions
@@ -6,6 +6,7 @@ git HEAD * Use "feh -" to read image from stdin * Fix Imlib2 and X11 warnings when opening a URL that returned an HTTP error + * Add button bindings to zoom in / out (patch by sdaau) Mon, 24 Dec 2012 15:45:54 +0100 Daniel Friesel <derf+feh@finalrewind.org> diff --git a/examples/buttons b/examples/buttons index e625f9e..3c79413 100644 --- a/examples/buttons +++ b/examples/buttons @@ -11,3 +11,7 @@ # Switch menu and zoom keys, useful for two-button touchpads menu 2 zoom 3 + +# make scroll wheel (mousewheel up and down) zoom, instead of flipping images +zoom_in 4 +zoom_out 5
\ No newline at end of file diff --git a/man/feh.pre b/man/feh.pre index 706146f..14dfdc9 100644 --- a/man/feh.pre +++ b/man/feh.pre @@ -1376,6 +1376,15 @@ Blur current image . Rotate current image . +.It unbound Bq zoom_in +. +Zoom in +. +.It unbound Bq zoom_out +. +Zoom out +. +. .El . . diff --git a/src/events.c b/src/events.c index dcd1aa1..fadae9b 100644 --- a/src/events.c +++ b/src/events.c @@ -152,6 +152,10 @@ void init_buttonbindings(void) cur_bb = &buttons.blur; else if (!strcmp(action, "rotate")) cur_bb = &buttons.rotate; + else if (!strcmp(action, "zoom_in")) + cur_bb = &buttons.zoom_in; + else if (!strcmp(action, "zoom_out")) + cur_bb = &buttons.zoom_out; else weprintf("buttons: Invalid action: %s", action); @@ -246,6 +250,62 @@ static void feh_event_handle_ButtonPress(XEvent * ev) winwid->im_click_offset_y = (winwid->click_offset_y - winwid->im_y) / winwid->old_zoom; + } else if (feh_is_bb(&buttons.zoom_in, button, state)) { + D(("Zoom_In Button Press event\n")); + D(("click offset is %d,%d\n", ev->xbutton.x, ev->xbutton.y)); + winwid->click_offset_x = ev->xbutton.x; + winwid->click_offset_y = ev->xbutton.y; + winwid->old_zoom = winwid->zoom; + + /* required to adjust the image position in zoom mode */ + winwid->im_click_offset_x = (winwid->click_offset_x + - winwid->im_x) / winwid->old_zoom; + winwid->im_click_offset_y = (winwid->click_offset_y + - winwid->im_y) / winwid->old_zoom; + + /* copied from zoom_in, keyevents.c */ + winwid->zoom = winwid->zoom * 1.25; + + if (winwid->zoom > ZOOM_MAX) + winwid->zoom = ZOOM_MAX; + + /* copied from below (ZOOM, feh_event_handle_MotionNotify) */ + winwid->im_x = winwid->click_offset_x + - (winwid->im_click_offset_x * winwid->zoom); + winwid->im_y = winwid->click_offset_y + - (winwid->im_click_offset_y * winwid->zoom); + + winwidget_sanitise_offsets(winwid); + winwidget_render_image(winwid, 0, 0); + + } else if (feh_is_bb(&buttons.zoom_out, button, state)) { + D(("Zoom_Out Button Press event\n")); + D(("click offset is %d,%d\n", ev->xbutton.x, ev->xbutton.y)); + winwid->click_offset_x = ev->xbutton.x; + winwid->click_offset_y = ev->xbutton.y; + winwid->old_zoom = winwid->zoom; + + /* required to adjust the image position in zoom mode */ + winwid->im_click_offset_x = (winwid->click_offset_x + - winwid->im_x) / winwid->old_zoom; + winwid->im_click_offset_y = (winwid->click_offset_y + - winwid->im_y) / winwid->old_zoom; + + /* copied from zoom_out, keyevents.c */ + winwid->zoom = winwid->zoom * 0.80; + + if (winwid->zoom < ZOOM_MIN) + winwid->zoom = ZOOM_MIN; + + /* copied from below (ZOOM, feh_event_handle_MotionNotify) */ + winwid->im_x = winwid->click_offset_x + - (winwid->im_click_offset_x * winwid->zoom); + winwid->im_y = winwid->click_offset_y + - (winwid->im_click_offset_y * winwid->zoom); + + winwidget_sanitise_offsets(winwid); + winwidget_render_image(winwid, 0, 0); + } else if (feh_is_bb(&buttons.reload, button, state)) { D(("Reload Button Press event\n")); feh_reload_image(winwid, 0, 1); diff --git a/src/options.h b/src/options.h index f3f49eb..27d3d38 100644 --- a/src/options.h +++ b/src/options.h @@ -207,6 +207,8 @@ struct __fehbb { struct __fehbutton menu; struct __fehbutton blur; struct __fehbutton rotate; + struct __fehbutton zoom_in; + struct __fehbutton zoom_out; }; void init_parse_options(int argc, char **argv); |