nsxiv867940e
Pan by pixel count, if number prefix given
+25 −10
4 files changed
- M commands.c +2 −2
- M image.c +18 −5
- M image.h +1 −1
- M main.c +4 −2
| @@ -184,7 +184,7 @@ bool it_move(arg_t a) { | |||
| 184 | 184 | direction_t dir = (direction_t) a; | |
| 185 | 185 | ||
| 186 | 186 | if (mode == MODE_IMAGE) | |
| 187 | − | return img_pan(&img, dir, false); | |
| 187 | + | return img_pan(&img, dir, prefix); | |
| 188 | 188 | else | |
| 189 | 189 | return tns_move_selection(&tns, dir); | |
| 190 | 190 | } | |
| @@ -193,7 +193,7 @@ bool i_pan_screen(arg_t a) { | |||
| 193 | 193 | direction_t dir = (direction_t) a; | |
| 194 | 194 | ||
| 195 | 195 | if (mode == MODE_IMAGE) | |
| 196 | − | return img_pan(&img, dir, true); | |
| 196 | + | return img_pan(&img, dir, -1); | |
| 197 | 197 | else | |
| 198 | 198 | return false; | |
| 199 | 199 | } | |
| @@ -576,19 +576,32 @@ bool img_move(img_t *img, int dx, int dy) { | |||
| 576 | 576 | } | |
| 577 | 577 | } | |
| 578 | 578 | ||
| 579 | − | bool img_pan(img_t *img, direction_t dir, bool screen) { | |
| 579 | + | bool img_pan(img_t *img, direction_t dir, int d) { | |
| 580 | + | /* d < 0: screen-wise | |
| 581 | + | * d = 0: 1/5 of screen | |
| 582 | + | * d > 0: num of pixels | |
| 583 | + | */ | |
| 584 | + | int x, y; | |
| 585 | + | ||
| 580 | 586 | if (img == NULL || img->im == NULL || img->win == NULL) | |
| 581 | 587 | return false; | |
| 582 | 588 | ||
| 589 | + | if (d > 0) { | |
| 590 | + | x = y = MAX(1, d * img->zoom); | |
| 591 | + | } else { | |
| 592 | + | x = img->win->w / (d < 0 ? 1 : 5); | |
| 593 | + | y = img->win->h / (d < 0 ? 1 : 5); | |
| 594 | + | } | |
| 595 | + | ||
| 583 | 596 | switch (dir) { | |
| 584 | 597 | case DIR_LEFT: | |
| 585 | − | return img_move(img, img->win->w / (screen ? 1 : 5), 0); | |
| 598 | + | return img_move(img, x, 0); | |
| 586 | 599 | case DIR_RIGHT: | |
| 587 | − | return img_move(img, img->win->w / (screen ? 1 : 5) * -1, 0); | |
| 600 | + | return img_move(img, -x, 0); | |
| 588 | 601 | case DIR_UP: | |
| 589 | − | return img_move(img, 0, img->win->h / (screen ? 1 : 5)); | |
| 602 | + | return img_move(img, 0, y); | |
| 590 | 603 | case DIR_DOWN: | |
| 591 | − | return img_move(img, 0, img->win->h / (screen ? 1 : 5) * -1); | |
| 604 | + | return img_move(img, 0, -y); | |
| 592 | 605 | } | |
| 593 | 606 | return false; | |
| 594 | 607 | } | |
| @@ -76,7 +76,7 @@ bool img_zoom_in(img_t*); | |||
| 76 | 76 | bool img_zoom_out(img_t*); | |
| 77 | 77 | ||
| 78 | 78 | bool img_move(img_t*, int, int); | |
| 79 | − | bool img_pan(img_t*, direction_t, bool); | |
| 79 | + | bool img_pan(img_t*, direction_t, int); | |
| 80 | 80 | bool img_pan_edge(img_t*, direction_t); | |
| 81 | 81 | ||
| 82 | 82 | void img_rotate_left(img_t*); | |
| @@ -337,9 +337,11 @@ void on_keypress(XKeyEvent *kev) { | |||
| 337 | 337 | ||
| 338 | 338 | XLookupString(kev, &key, 1, &ksym, NULL); | |
| 339 | 339 | ||
| 340 | − | if (key >= '0' && key <= '9' && (kev->state & ControlMask) == 0) { | |
| 340 | + | if ((ksym == XK_Escape || (key >= '0' && key <= '9')) && | |
| 341 | + | (kev->state & ControlMask) == 0) | |
| 342 | + | { | |
| 341 | 343 | /* number prefix for commands */ | |
| 342 | − | prefix = prefix * 10 + (int) (key - '0'); | |
| 344 | + | prefix = ksym == XK_Escape ? 0 : prefix * 10 + (int) (key - '0'); | |
| 343 | 345 | return; | |
| 344 | 346 | } | |
| 345 | 347 | ||