Krolyxon
Commit ba293b0

Branches

Refs →

nsxivba293b0

Center zoomed area

Author
Bert
Date
2011-04-19 13:27 +0200
Parent
548b383
Commit
ba293b09dfd6bea651bc40e711813302b87e6437

+19 −19

4 files changed

  1. M Makefile +1 −1
  2. M image.c +10 −10
  3. M image.h +3 −3
  4. M main.c +5 −5
M Makefile View
@@ -1,6 +1,6 @@
11 all: sxiv
22
3−VERSION=git-20110415
3+VERSION=git-20110419
44
55 CC?=gcc
66 PREFIX?=/usr/local
M image.c View
@@ -212,8 +212,8 @@ int img_center(img_t *img, win_t *win) {
212212 return ox != img->x || oy != img->y;
213213 }
214214
215−int img_zoom(img_t *img, float z) {
216− if (!img || !img->im)
215+int img_zoom(img_t *img, win_t *win, float z) {
216+ if (!img || !img->im || !win)
217217 return 0;
218218
219219 z = MAX(z, zoom_min);
@@ -222,8 +222,8 @@ int img_zoom(img_t *img, float z) {
222222 img->scalemode = SCALE_ZOOM;
223223
224224 if (z != img->zoom) {
225− img->x -= (img->w * z - img->w * img->zoom) / 2;
226− img->y -= (img->h * z - img->h * img->zoom) / 2;
225+ img->x = win->w / 2 - (win->w / 2 - img->x) * z / img->zoom;
226+ img->y = win->h / 2 - (win->h / 2 - img->y) * z / img->zoom;
227227 img->zoom = z;
228228 img->checkpan = 1;
229229 return 1;
@@ -232,28 +232,28 @@ int img_zoom(img_t *img, float z) {
232232 }
233233 }
234234
235−int img_zoom_in(img_t *img) {
235+int img_zoom_in(img_t *img, win_t *win) {
236236 int i;
237237
238− if (!img || !img->im)
238+ if (!img || !img->im || !win)
239239 return 0;
240240
241241 for (i = 1; i < zl_cnt; ++i) {
242242 if (zoom_levels[i] > img->zoom * 100.0)
243− return img_zoom(img, zoom_levels[i] / 100.0);
243+ return img_zoom(img, win, zoom_levels[i] / 100.0);
244244 }
245245 return 0;
246246 }
247247
248−int img_zoom_out(img_t *img) {
248+int img_zoom_out(img_t *img, win_t *win) {
249249 int i;
250250
251− if (!img || !img->im)
251+ if (!img || !img->im || !win)
252252 return 0;
253253
254254 for (i = zl_cnt - 2; i >= 0; --i) {
255255 if (zoom_levels[i] < img->zoom * 100.0)
256− return img_zoom(img, zoom_levels[i] / 100.0);
256+ return img_zoom(img, win, zoom_levels[i] / 100.0);
257257 }
258258 return 0;
259259 }
M image.h View
@@ -63,9 +63,9 @@ void img_render(img_t*, win_t*);
6363 int img_fit_win(img_t*, win_t*);
6464 int img_center(img_t*, win_t*);
6565
66−int img_zoom(img_t*, float);
67−int img_zoom_in(img_t*);
68−int img_zoom_out(img_t*);
66+int img_zoom(img_t*, win_t*, float);
67+int img_zoom_in(img_t*, win_t*);
68+int img_zoom_out(img_t*, win_t*);
6969
7070 int img_move(img_t*, win_t*, int, int);
7171 int img_pan(img_t*, win_t*, pandir_t);
M main.c View
@@ -424,13 +424,13 @@ void on_keypress(XKeyEvent *kev) {
424424 /* zooming */
425425 case XK_plus:
426426 case XK_equal:
427− changed = img_zoom_in(&img);
427+ changed = img_zoom_in(&img, &win);
428428 break;
429429 case XK_minus:
430− changed = img_zoom_out(&img);
430+ changed = img_zoom_out(&img, &win);
431431 break;
432432 case XK_0:
433− changed = img_zoom(&img, 1.0);
433+ changed = img_zoom(&img, &win, 1.0);
434434 break;
435435 case XK_w:
436436 if ((changed = img_fit_win(&img, &win)))
@@ -607,7 +607,7 @@ void on_buttonpress(XButtonEvent *bev) {
607607 break;
608608 case Button4:
609609 if (mask == ControlMask)
610− changed = img_zoom_in(&img);
610+ changed = img_zoom_in(&img, &win);
611611 else if (mask == ShiftMask)
612612 changed = img_pan(&img, &win, PAN_LEFT);
613613 else
@@ -615,7 +615,7 @@ void on_buttonpress(XButtonEvent *bev) {
615615 break;
616616 case Button5:
617617 if (mask == ControlMask)
618− changed = img_zoom_out(&img);
618+ changed = img_zoom_out(&img, &win);
619619 else if (mask == ShiftMask)
620620 changed = img_pan(&img, &win, PAN_RIGHT);
621621 else