From f554cdf60ea3808b88053077dc5dae83e427732c Mon Sep 17 00:00:00 2001 From: Bert Date: Thu, 17 Feb 2011 15:08:58 +0100 Subject: Made key mappings mode-dependent --- main.c | 216 +++++++++++++++++++++++++++++++++-------------------------------- 1 file changed, 111 insertions(+), 105 deletions(-) (limited to 'main.c') diff --git a/main.c b/main.c index e6353d3..ab2508f 100644 --- a/main.c +++ b/main.c @@ -284,6 +284,117 @@ void on_keypress(XKeyEvent *kev) { XLookupString(kev, &key, 1, &ksym, NULL); changed = 0; + if (mode == MODE_NORMAL) { + switch (ksym) { + /* navigate image list */ + case XK_n: + case XK_space: + if (fileidx + 1 < filecnt) { + ++fileidx; + changed = load_image(); + } + break; + case XK_p: + case XK_BackSpace: + if (fileidx > 0) { + --fileidx; + changed = load_image(); + } + break; + case XK_bracketleft: + if (fileidx != 0) { + fileidx = MAX(0, fileidx - 10); + changed = load_image(); + } + break; + case XK_bracketright: + if (fileidx != filecnt - 1) { + fileidx = MIN(fileidx + 10, filecnt - 1); + changed = load_image(); + } + break; + case XK_g: + if (fileidx != 0) { + fileidx = 0; + changed = load_image(); + } + break; + case XK_G: + if (fileidx != filecnt - 1) { + fileidx = filecnt - 1; + changed = load_image(); + } + break; + + /* zooming */ + case XK_plus: + case XK_equal: + changed = img_zoom_in(&img); + break; + case XK_minus: + changed = img_zoom_out(&img); + break; + case XK_0: + changed = img_zoom(&img, 1.0); + break; + case XK_w: + if ((changed = img_fit_win(&img, &win))) + img_center(&img, &win); + break; + + /* panning */ + case XK_h: + case XK_Left: + changed = img_pan(&img, &win, PAN_LEFT); + break; + case XK_j: + case XK_Down: + changed = img_pan(&img, &win, PAN_DOWN); + break; + case XK_k: + case XK_Up: + changed = img_pan(&img, &win, PAN_UP); + break; + case XK_l: + case XK_Right: + changed = img_pan(&img, &win, PAN_RIGHT); + break; + + /* rotation */ + case XK_less: + img_rotate_left(&img, &win); + changed = 1; + break; + case XK_greater: + img_rotate_right(&img, &win); + changed = 1; + break; + + /* control window */ + case XK_W: + x = win.x + img.x; + y = win.y + img.y; + w = img.w * img.zoom; + h = img.h * img.zoom; + if ((changed = win_moveresize(&win, x, y, w, h))) { + img.x = x - win.x; + img.y = y - win.y; + } + break; + + /* miscellaneous */ + case XK_a: + img_toggle_antialias(&img); + changed = 1; + break; + case XK_r: + changed = load_image(); + break; + } + } else { + } + + /* common key mappings */ switch (ksym) { case XK_Escape: cleanup(); @@ -291,115 +402,10 @@ void on_keypress(XKeyEvent *kev) { case XK_q: cleanup(); exit(0); - - /* navigate image list */ - case XK_n: - case XK_space: - if (fileidx + 1 < filecnt) { - ++fileidx; - changed = load_image(); - } - break; - case XK_p: - case XK_BackSpace: - if (fileidx > 0) { - --fileidx; - changed = load_image(); - } - break; - case XK_bracketleft: - if (fileidx != 0) { - fileidx = MAX(0, fileidx - 10); - changed = load_image(); - } - break; - case XK_bracketright: - if (fileidx != filecnt - 1) { - fileidx = MIN(fileidx + 10, filecnt - 1); - changed = load_image(); - } - break; - case XK_g: - if (fileidx != 0) { - fileidx = 0; - changed = load_image(); - } - break; - case XK_G: - if (fileidx != filecnt - 1) { - fileidx = filecnt - 1; - changed = load_image(); - } - break; - - /* zooming */ - case XK_plus: - case XK_equal: - changed = img_zoom_in(&img); - break; - case XK_minus: - changed = img_zoom_out(&img); - break; - case XK_0: - changed = img_zoom(&img, 1.0); - break; - case XK_w: - if ((changed = img_fit_win(&img, &win))) - img_center(&img, &win); - break; - - /* panning */ - case XK_h: - case XK_Left: - changed = img_pan(&img, &win, PAN_LEFT); - break; - case XK_j: - case XK_Down: - changed = img_pan(&img, &win, PAN_DOWN); - break; - case XK_k: - case XK_Up: - changed = img_pan(&img, &win, PAN_UP); - break; - case XK_l: - case XK_Right: - changed = img_pan(&img, &win, PAN_RIGHT); - break; - - /* rotation */ - case XK_less: - img_rotate_left(&img, &win); - changed = 1; - break; - case XK_greater: - img_rotate_right(&img, &win); - changed = 1; - break; - - /* control window */ case XK_f: win_toggle_fullscreen(&win); /* render on next configurenotify */ break; - case XK_W: - x = win.x + img.x; - y = win.y + img.y; - w = img.w * img.zoom; - h = img.h * img.zoom; - if ((changed = win_moveresize(&win, x, y, w, h))) { - img.x = x - win.x; - img.y = y - win.y; - } - break; - - /* miscellaneous */ - case XK_a: - img_toggle_antialias(&img); - changed = 1; - break; - case XK_r: - changed = load_image(); - break; } if (changed) -- cgit v1.2.3-54-g00ecf