nsxiv795beac
Merge remote-tracking branch 'baskerville/master'
+30 −6
7 files changed
- M README.md +2 −0
- M commands.c +2 −1
- M config.def.h +3 −1
- M image.c +14 −3
- M image.h +1 −1
- M sxiv.1 +6 −0
- M types.h +2 −0
| @@ -115,6 +115,8 @@ The following additional key commands are available in *image mode*: | |||
| 115 | 115 | - Zoom out | |
| 116 | 116 | = Set zoom level to 100%, or [count]% | |
| 117 | 117 | w Fit image into window | |
| 118 | + | e Fit image to window's width | |
| 119 | + | E Fit image to window's height | |
| 118 | 120 | ||
| 119 | 121 | h,j,k,l Pan image 1/5 of window width/height or [count] pixels | |
| 120 | 122 | left/down/up/right (also with arrow keys) | |
| @@ -310,9 +310,10 @@ bool i_set_zoom(arg_t a) { | |||
| 310 | 310 | ||
| 311 | 311 | bool i_fit_to_win(arg_t a) { | |
| 312 | 312 | bool ret = false; | |
| 313 | + | scalemode_t sm = (scalemode_t) a; | |
| 313 | 314 | ||
| 314 | 315 | if (mode == MODE_IMAGE) { | |
| 315 | − | if ((ret = img_fit_win(&img))) | |
| 316 | + | if ((ret = img_fit_win(&img, sm))) | |
| 316 | 317 | img_center(&img); | |
| 317 | 318 | } | |
| 318 | 319 | return ret; | |
| @@ -108,7 +108,9 @@ static const keymap_t keys[] = { | |||
| 108 | 108 | { false, XK_minus, i_zoom, (arg_t) -1 }, | |
| 109 | 109 | { false, XK_KP_Subtract, i_zoom, (arg_t) -1 }, | |
| 110 | 110 | { false, XK_equal, i_set_zoom, (arg_t) 100 }, | |
| 111 | − | { false, XK_w, i_fit_to_win, (arg_t) None }, | |
| 111 | + | { false, XK_w, i_fit_to_win, (arg_t) SCALE_FIT }, | |
| 112 | + | { false, XK_e, i_fit_to_win, (arg_t) SCALE_WIDTH }, | |
| 113 | + | { false, XK_E, i_fit_to_win, (arg_t) SCALE_HEIGHT }, | |
| 112 | 114 | { false, XK_W, i_fit_to_img, (arg_t) None }, | |
| 113 | 115 | ||
| 114 | 116 | { false, XK_less, i_rotate, (arg_t) DIR_LEFT }, | |
| @@ -365,7 +365,18 @@ bool img_fit(img_t *img) { | |||
| 365 | 365 | zw = (float) img->win->w / (float) img->w; | |
| 366 | 366 | zh = (float) img->win->h / (float) img->h; | |
| 367 | 367 | ||
| 368 | − | z = MIN(zw, zh); | |
| 368 | + | switch (img->scalemode) { | |
| 369 | + | case SCALE_WIDTH: | |
| 370 | + | z = zw; | |
| 371 | + | break; | |
| 372 | + | case SCALE_HEIGHT: | |
| 373 | + | z = zh; | |
| 374 | + | break; | |
| 375 | + | default: | |
| 376 | + | z = MIN(zw, zh); | |
| 377 | + | break; | |
| 378 | + | } | |
| 379 | + | ||
| 369 | 380 | z = MAX(z, zoom_min); | |
| 370 | 381 | z = MIN(z, zmax); | |
| 371 | 382 | ||
| @@ -448,11 +459,11 @@ void img_render(img_t *img) { | |||
| 448 | 459 | img->dirty = false; | |
| 449 | 460 | } | |
| 450 | 461 | ||
| 451 | − | bool img_fit_win(img_t *img) { | |
| 462 | + | bool img_fit_win(img_t *img, scalemode_t sm) { | |
| 452 | 463 | if (img == NULL || img->im == NULL) | |
| 453 | 464 | return false; | |
| 454 | 465 | ||
| 455 | − | img->scalemode = SCALE_FIT; | |
| 466 | + | img->scalemode = sm; | |
| 456 | 467 | return img_fit(img); | |
| 457 | 468 | } | |
| 458 | 469 | ||
| @@ -65,7 +65,7 @@ void img_close(img_t*, bool); | |||
| 65 | 65 | ||
| 66 | 66 | void img_render(img_t*); | |
| 67 | 67 | ||
| 68 | − | bool img_fit_win(img_t*); | |
| 68 | + | bool img_fit_win(img_t*, scalemode_t); | |
| 69 | 69 | bool img_center(img_t*); | |
| 70 | 70 | ||
| 71 | 71 | bool img_zoom(img_t*, float); | |
| @@ -197,6 +197,12 @@ Set zoom level to 100%, or | |||
| 197 | 197 | .TP | |
| 198 | 198 | .B w | |
| 199 | 199 | Set zoom level to fit image into window. | |
| 200 | + | .TP | |
| 201 | + | .B e | |
| 202 | + | Set zoom level to fit image into the window's width. | |
| 203 | + | .TP | |
| 204 | + | .B E | |
| 205 | + | Set zoom level to fit image into the window's height. | |
| 200 | 206 | .SS Panning | |
| 201 | 207 | .TP | |
| 202 | 208 | .BR h ", " Left | |
| @@ -31,6 +31,8 @@ typedef enum { | |||
| 31 | 31 | typedef enum { | |
| 32 | 32 | SCALE_DOWN, | |
| 33 | 33 | SCALE_FIT, | |
| 34 | + | SCALE_WIDTH, | |
| 35 | + | SCALE_HEIGHT, | |
| 34 | 36 | SCALE_ZOOM | |
| 35 | 37 | } scalemode_t; | |
| 36 | 38 | ||