Commit 2bb1b9e3 authored by Birte Kristina Friesel's avatar Birte Kristina Friesel
Browse files

patch by sdaau: button bindings for zoom in / out

parent acae8f06
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -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>

+4 −0
Original line number Diff line number Diff line
@@ -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
+9 −0
Original line number Diff line number Diff line
@@ -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
.
.
+60 −0
Original line number Diff line number Diff line
@@ -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);
+2 −0
Original line number Diff line number Diff line
@@ -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);