Add keybind to scroll to image center (#203)

There are keybinds for scrolling to the edges of an image but there's no way back to the center. This is particularly annoying while zooming.
This commit is contained in:
Nick Hanley 2022-01-15 17:51:31 -05:00 committed by GitHub
parent 7a75c42b37
commit 2ac44709bd
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 20 additions and 0 deletions

View file

@ -325,6 +325,11 @@ bool ci_scroll(arg_t dir)
return img_pan(&img, dir, prefix); return img_pan(&img, dir, prefix);
} }
bool ci_scroll_to_center(arg_t _)
{
return img_pan_center(&img);
}
bool ci_scroll_to_edge(arg_t dir) bool ci_scroll_to_edge(arg_t dir)
{ {
return img_pan_edge(&img, dir); return img_pan_edge(&img, dir);

View file

@ -30,6 +30,7 @@ bool ci_navigate(arg_t);
bool ci_navigate_frame(arg_t); bool ci_navigate_frame(arg_t);
bool ci_rotate(arg_t); bool ci_rotate(arg_t);
bool ci_scroll(arg_t); bool ci_scroll(arg_t);
bool ci_scroll_to_center(arg_t);
bool ci_scroll_to_edge(arg_t); bool ci_scroll_to_edge(arg_t);
bool ci_set_zoom(arg_t); bool ci_set_zoom(arg_t);
bool ci_slideshow(arg_t); bool ci_slideshow(arg_t);
@ -72,6 +73,7 @@ bool ct_select(arg_t);
#define i_navigate_frame { ci_navigate_frame, MODE_IMAGE } #define i_navigate_frame { ci_navigate_frame, MODE_IMAGE }
#define i_rotate { ci_rotate, MODE_IMAGE } #define i_rotate { ci_rotate, MODE_IMAGE }
#define i_scroll { ci_scroll, MODE_IMAGE } #define i_scroll { ci_scroll, MODE_IMAGE }
#define i_scroll_to_center { ci_scroll_to_center, MODE_IMAGE }
#define i_scroll_to_edge { ci_scroll_to_edge, MODE_IMAGE } #define i_scroll_to_edge { ci_scroll_to_edge, MODE_IMAGE }
#define i_set_zoom { ci_set_zoom, MODE_IMAGE } #define i_set_zoom { ci_set_zoom, MODE_IMAGE }
#define i_slideshow { ci_slideshow, MODE_IMAGE } #define i_slideshow { ci_slideshow, MODE_IMAGE }

View file

@ -158,6 +158,7 @@ static const keymap_t keys[] = {
{ 0, XK_J, i_scroll_to_edge, DIR_DOWN }, { 0, XK_J, i_scroll_to_edge, DIR_DOWN },
{ 0, XK_K, i_scroll_to_edge, DIR_UP }, { 0, XK_K, i_scroll_to_edge, DIR_UP },
{ 0, XK_L, i_scroll_to_edge, DIR_RIGHT }, { 0, XK_L, i_scroll_to_edge, DIR_RIGHT },
{ 0, XK_z, i_scroll_to_center, None },
{ 0, XK_equal, i_set_zoom, 100 }, { 0, XK_equal, i_set_zoom, 100 },
{ 0, XK_w, i_fit_to_win, SCALE_DOWN }, { 0, XK_w, i_fit_to_win, SCALE_DOWN },
{ 0, XK_W, i_fit_to_win, SCALE_FIT }, { 0, XK_W, i_fit_to_win, SCALE_FIT },

View file

@ -744,6 +744,14 @@ bool img_pan(img_t *img, direction_t dir, int d)
return false; return false;
} }
bool img_pan_center(img_t *img)
{
float x, y;
x = (img->win->w - img->w * img->zoom) / 2.0;
y = (img->win->h - img->h * img->zoom) / 2.0;
return img_pos(img, x, y);
}
bool img_pan_edge(img_t *img, direction_t dir) bool img_pan_edge(img_t *img, direction_t dir)
{ {
float ox, oy; float ox, oy;

View file

@ -318,6 +318,9 @@ Scroll to top image edge.
.B L .B L
Scroll to right image edge. Scroll to right image edge.
.TP .TP
.B z
Scroll to image center.
.TP
Zooming: Zooming:
.TP .TP
.B = .B =

View file

@ -229,6 +229,7 @@ bool img_zoom(img_t*, int);
bool img_zoom_to(img_t*, float); bool img_zoom_to(img_t*, float);
bool img_pos(img_t*, float, float); bool img_pos(img_t*, float, float);
bool img_pan(img_t*, direction_t, int); bool img_pan(img_t*, direction_t, int);
bool img_pan_center(img_t*);
bool img_pan_edge(img_t*, direction_t); bool img_pan_edge(img_t*, direction_t);
void img_rotate(img_t*, degree_t); void img_rotate(img_t*, degree_t);
void img_flip(img_t*, flipdir_t); void img_flip(img_t*, flipdir_t);