Browse Source

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

master
baskerville 12 years ago
parent
commit
b56989f8fb
7 changed files with 30 additions and 6 deletions
  1. +2
    -0
      README.md
  2. +2
    -1
      commands.c
  3. +3
    -1
      config.def.h
  4. +14
    -3
      image.c
  5. +1
    -1
      image.h
  6. +6
    -0
      sxiv.1
  7. +2
    -0
      types.h

+ 2
- 0
README.md View File

@@ -115,6 +115,8 @@ The following additional key commands are available in *image mode*:
- Zoom out - Zoom out
= Set zoom level to 100%, or [count]% = Set zoom level to 100%, or [count]%
w Fit image into window w Fit image into window
e Fit image to window's width
E Fit image to window's height


h,j,k,l Pan image 1/5 of window width/height or [count] pixels h,j,k,l Pan image 1/5 of window width/height or [count] pixels
left/down/up/right (also with arrow keys) left/down/up/right (also with arrow keys)


+ 2
- 1
commands.c View File

@@ -310,9 +310,10 @@ bool i_set_zoom(arg_t a) {


bool i_fit_to_win(arg_t a) { bool i_fit_to_win(arg_t a) {
bool ret = false; bool ret = false;
scalemode_t sm = (scalemode_t) a;


if (mode == MODE_IMAGE) { if (mode == MODE_IMAGE) {
if ((ret = img_fit_win(&img)))
if ((ret = img_fit_win(&img, sm)))
img_center(&img); img_center(&img);
} }
return ret; return ret;


+ 3
- 1
config.def.h View File

@@ -108,7 +108,9 @@ static const keymap_t keys[] = {
{ false, XK_minus, i_zoom, (arg_t) -1 }, { false, XK_minus, i_zoom, (arg_t) -1 },
{ false, XK_KP_Subtract, i_zoom, (arg_t) -1 }, { false, XK_KP_Subtract, i_zoom, (arg_t) -1 },
{ false, XK_equal, i_set_zoom, (arg_t) 100 }, { false, XK_equal, i_set_zoom, (arg_t) 100 },
{ false, XK_w, i_fit_to_win, (arg_t) None },
{ false, XK_w, i_fit_to_win, (arg_t) SCALE_FIT },
{ false, XK_e, i_fit_to_win, (arg_t) SCALE_WIDTH },
{ false, XK_E, i_fit_to_win, (arg_t) SCALE_HEIGHT },
{ false, XK_W, i_fit_to_img, (arg_t) None }, { false, XK_W, i_fit_to_img, (arg_t) None },


{ false, XK_less, i_rotate, (arg_t) DIR_LEFT }, { false, XK_less, i_rotate, (arg_t) DIR_LEFT },


+ 14
- 3
image.c View File

@@ -365,7 +365,18 @@ bool img_fit(img_t *img) {
zw = (float) img->win->w / (float) img->w; zw = (float) img->win->w / (float) img->w;
zh = (float) img->win->h / (float) img->h; zh = (float) img->win->h / (float) img->h;


z = MIN(zw, zh);
switch (img->scalemode) {
case SCALE_WIDTH:
z = zw;
break;
case SCALE_HEIGHT:
z = zh;
break;
default:
z = MIN(zw, zh);
break;
}

z = MAX(z, zoom_min); z = MAX(z, zoom_min);
z = MIN(z, zmax); z = MIN(z, zmax);


@@ -448,11 +459,11 @@ void img_render(img_t *img) {
img->dirty = false; img->dirty = false;
} }


bool img_fit_win(img_t *img) {
bool img_fit_win(img_t *img, scalemode_t sm) {
if (img == NULL || img->im == NULL) if (img == NULL || img->im == NULL)
return false; return false;


img->scalemode = SCALE_FIT;
img->scalemode = sm;
return img_fit(img); return img_fit(img);
} }




+ 1
- 1
image.h View File

@@ -65,7 +65,7 @@ void img_close(img_t*, bool);


void img_render(img_t*); void img_render(img_t*);


bool img_fit_win(img_t*);
bool img_fit_win(img_t*, scalemode_t);
bool img_center(img_t*); bool img_center(img_t*);


bool img_zoom(img_t*, float); bool img_zoom(img_t*, float);


+ 6
- 0
sxiv.1 View File

@@ -197,6 +197,12 @@ Set zoom level to 100%, or
.TP .TP
.B w .B w
Set zoom level to fit image into window. Set zoom level to fit image into window.
.TP
.B e
Set zoom level to fit image into the window's width.
.TP
.B E
Set zoom level to fit image into the window's height.
.SS Panning .SS Panning
.TP .TP
.BR h ", " Left .BR h ", " Left


+ 2
- 0
types.h View File

@@ -31,6 +31,8 @@ typedef enum {
typedef enum { typedef enum {
SCALE_DOWN, SCALE_DOWN,
SCALE_FIT, SCALE_FIT,
SCALE_WIDTH,
SCALE_HEIGHT,
SCALE_ZOOM SCALE_ZOOM
} scalemode_t; } scalemode_t;




Loading…
Cancel
Save