Krolyxon
Commit b56989f

Branches

Refs →

nsxivb56989f

New commands: fit to the window's height/width

Author
baskerville
Date
2012-07-19 12:28 +0200
Parent
5b64679
Commit
b56989f8fbfa6ab32e1fa8f54c0d03ff924c7308

+30 −6

7 files changed

  1. M README.md +2 −0
  2. M commands.c +2 −1
  3. M config.def.h +3 −1
  4. M image.c +14 −3
  5. M image.h +1 −1
  6. M sxiv.1 +6 −0
  7. M types.h +2 −0
M README.md View
@@ -115,6 +115,8 @@ The following additional key commands are available in *image mode*:
115115 - Zoom out
116116 = Set zoom level to 100%, or [count]%
117117 w Fit image into window
118+ e Fit image to window's width
119+ E Fit image to window's height
118120
119121 h,j,k,l Pan image 1/5 of window width/height or [count] pixels
120122 left/down/up/right (also with arrow keys)
M commands.c View
@@ -310,9 +310,10 @@ bool i_set_zoom(arg_t a) {
310310
311311 bool i_fit_to_win(arg_t a) {
312312 bool ret = false;
313+ scalemode_t sm = (scalemode_t) a;
313314
314315 if (mode == MODE_IMAGE) {
315− if ((ret = img_fit_win(&img)))
316+ if ((ret = img_fit_win(&img, sm)))
316317 img_center(&img);
317318 }
318319 return ret;
M config.def.h View
@@ -108,7 +108,9 @@ static const keymap_t keys[] = {
108108 { false, XK_minus, i_zoom, (arg_t) -1 },
109109 { false, XK_KP_Subtract, i_zoom, (arg_t) -1 },
110110 { 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 },
112114 { false, XK_W, i_fit_to_img, (arg_t) None },
113115
114116 { false, XK_less, i_rotate, (arg_t) DIR_LEFT },
M image.c View
@@ -365,7 +365,18 @@ bool img_fit(img_t *img) {
365365 zw = (float) img->win->w / (float) img->w;
366366 zh = (float) img->win->h / (float) img->h;
367367
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+
369380 z = MAX(z, zoom_min);
370381 z = MIN(z, zmax);
371382
@@ -448,11 +459,11 @@ void img_render(img_t *img) {
448459 img->dirty = false;
449460 }
450461
451−bool img_fit_win(img_t *img) {
462+bool img_fit_win(img_t *img, scalemode_t sm) {
452463 if (img == NULL || img->im == NULL)
453464 return false;
454465
455− img->scalemode = SCALE_FIT;
466+ img->scalemode = sm;
456467 return img_fit(img);
457468 }
458469
M image.h View
@@ -65,7 +65,7 @@ void img_close(img_t*, bool);
6565
6666 void img_render(img_t*);
6767
68−bool img_fit_win(img_t*);
68+bool img_fit_win(img_t*, scalemode_t);
6969 bool img_center(img_t*);
7070
7171 bool img_zoom(img_t*, float);
M sxiv.1 View
@@ -197,6 +197,12 @@ Set zoom level to 100%, or
197197 .TP
198198 .B w
199199 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.
200206 .SS Panning
201207 .TP
202208 .BR h ", " Left
M types.h View
@@ -31,6 +31,8 @@ typedef enum {
3131 typedef enum {
3232 SCALE_DOWN,
3333 SCALE_FIT,
34+ SCALE_WIDTH,
35+ SCALE_HEIGHT,
3436 SCALE_ZOOM
3537 } scalemode_t;
3638