Commit 0da6b6d2 authored by Birte Kristina Friesel's avatar Birte Kristina Friesel
Browse files

Fix zoom mode once and for all[tm]

parent 9e0afdfe
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
* git HEAD
     * Warp the pointer when reaching a window border in pan mode
     * Various zoom mode improvements, should be more intuitive now
       + When entering zoom mode, always continue from previous zoom level
       + The image part you clicked on to start zoom mode will remain where it
         is. The zoom happen around at that pixel.

Fri Apr  2 16:20:55 CEST 2010  Daniel Friesel <derf@chaosdorf.de>

+1 −1
Original line number Diff line number Diff line
@@ -26,4 +26,4 @@ Maybe I'll someday find out how to fix that :>

Make --start-at work with paths as well

Fix zooming with middle mouse button
Document new zoom behaviour
+6 −15
Original line number Diff line number Diff line
@@ -132,8 +132,10 @@ static void feh_event_handle_ButtonPress(XEvent * ev)
			winwid->zoom = 1.0;

			/* required to adjust the image position in zoom mode */
			winwid->orig_im_x = winwid->im_x;
			winwid->orig_im_y = winwid->im_y;
			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;

			/* center the image */
			if (winwid->full_screen) {
@@ -152,15 +154,6 @@ static void feh_event_handle_ButtonPress(XEvent * ev)
				}
			}

			if (winwid->click_offset_x < 0)
				winwid->click_offset_x = 0;
			if (winwid->click_offset_y < 0)
				winwid->click_offset_y = 0;
			if (winwid->click_offset_x > winwid->w)
				winwid->click_offset_x = winwid->w;
			if (winwid->click_offset_y > winwid->h)
				winwid->click_offset_y = winwid->h;

			winwidget_render_image(winwid, 0, 0);
		}
	} else if (ev->xbutton.button == opt.reload_button) {
@@ -438,11 +431,9 @@ static void feh_event_handle_MotionNotify(XEvent * ev)

			/* center around click_offset */
			winwid->im_x = winwid->click_offset_x
					- (winwid->click_offset_x * winwid->zoom);
					/*+ (winwid->orig_im_x * winwid->zoom);*/
					- (winwid->im_click_offset_x * winwid->zoom);
			winwid->im_y = winwid->click_offset_y
					- (winwid->click_offset_y * winwid->zoom);
					/*+ (winwid->orig_im_y * winwid->zoom);*/
					- (winwid->im_click_offset_y * winwid->zoom);

			winwidget_render_image(winwid, 0, 0);
		}
+2 −4
Original line number Diff line number Diff line
@@ -101,10 +101,6 @@ struct __winwidget {
	int im_x;
	int im_y;

	/* same, as cache for zoom mode */
	int orig_im_x;
	int orig_im_y;

	/* From 0 (not visible) to 1.00 (actual size)
	 * all the way up to INT_MAX (eww)
	 */
@@ -113,6 +109,8 @@ struct __winwidget {

	int click_offset_x;
	int click_offset_y;
	int im_click_offset_x;
	int im_click_offset_y;

	unsigned char has_rotated;
};