nsxivf554cdf
Made key mappings mode-dependent
+111 −105
1 file changed
- M main.c +111 −105
| @@ -284,6 +284,117 @@ void on_keypress(XKeyEvent *kev) { | |||
| 284 | 284 | XLookupString(kev, &key, 1, &ksym, NULL); | |
| 285 | 285 | changed = 0; | |
| 286 | 286 | ||
| 287 | + | if (mode == MODE_NORMAL) { | |
| 288 | + | switch (ksym) { | |
| 289 | + | /* navigate image list */ | |
| 290 | + | case XK_n: | |
| 291 | + | case XK_space: | |
| 292 | + | if (fileidx + 1 < filecnt) { | |
| 293 | + | ++fileidx; | |
| 294 | + | changed = load_image(); | |
| 295 | + | } | |
| 296 | + | break; | |
| 297 | + | case XK_p: | |
| 298 | + | case XK_BackSpace: | |
| 299 | + | if (fileidx > 0) { | |
| 300 | + | --fileidx; | |
| 301 | + | changed = load_image(); | |
| 302 | + | } | |
| 303 | + | break; | |
| 304 | + | case XK_bracketleft: | |
| 305 | + | if (fileidx != 0) { | |
| 306 | + | fileidx = MAX(0, fileidx - 10); | |
| 307 | + | changed = load_image(); | |
| 308 | + | } | |
| 309 | + | break; | |
| 310 | + | case XK_bracketright: | |
| 311 | + | if (fileidx != filecnt - 1) { | |
| 312 | + | fileidx = MIN(fileidx + 10, filecnt - 1); | |
| 313 | + | changed = load_image(); | |
| 314 | + | } | |
| 315 | + | break; | |
| 316 | + | case XK_g: | |
| 317 | + | if (fileidx != 0) { | |
| 318 | + | fileidx = 0; | |
| 319 | + | changed = load_image(); | |
| 320 | + | } | |
| 321 | + | break; | |
| 322 | + | case XK_G: | |
| 323 | + | if (fileidx != filecnt - 1) { | |
| 324 | + | fileidx = filecnt - 1; | |
| 325 | + | changed = load_image(); | |
| 326 | + | } | |
| 327 | + | break; | |
| 328 | + | ||
| 329 | + | /* zooming */ | |
| 330 | + | case XK_plus: | |
| 331 | + | case XK_equal: | |
| 332 | + | changed = img_zoom_in(&img); | |
| 333 | + | break; | |
| 334 | + | case XK_minus: | |
| 335 | + | changed = img_zoom_out(&img); | |
| 336 | + | break; | |
| 337 | + | case XK_0: | |
| 338 | + | changed = img_zoom(&img, 1.0); | |
| 339 | + | break; | |
| 340 | + | case XK_w: | |
| 341 | + | if ((changed = img_fit_win(&img, &win))) | |
| 342 | + | img_center(&img, &win); | |
| 343 | + | break; | |
| 344 | + | ||
| 345 | + | /* panning */ | |
| 346 | + | case XK_h: | |
| 347 | + | case XK_Left: | |
| 348 | + | changed = img_pan(&img, &win, PAN_LEFT); | |
| 349 | + | break; | |
| 350 | + | case XK_j: | |
| 351 | + | case XK_Down: | |
| 352 | + | changed = img_pan(&img, &win, PAN_DOWN); | |
| 353 | + | break; | |
| 354 | + | case XK_k: | |
| 355 | + | case XK_Up: | |
| 356 | + | changed = img_pan(&img, &win, PAN_UP); | |
| 357 | + | break; | |
| 358 | + | case XK_l: | |
| 359 | + | case XK_Right: | |
| 360 | + | changed = img_pan(&img, &win, PAN_RIGHT); | |
| 361 | + | break; | |
| 362 | + | ||
| 363 | + | /* rotation */ | |
| 364 | + | case XK_less: | |
| 365 | + | img_rotate_left(&img, &win); | |
| 366 | + | changed = 1; | |
| 367 | + | break; | |
| 368 | + | case XK_greater: | |
| 369 | + | img_rotate_right(&img, &win); | |
| 370 | + | changed = 1; | |
| 371 | + | break; | |
| 372 | + | ||
| 373 | + | /* control window */ | |
| 374 | + | case XK_W: | |
| 375 | + | x = win.x + img.x; | |
| 376 | + | y = win.y + img.y; | |
| 377 | + | w = img.w * img.zoom; | |
| 378 | + | h = img.h * img.zoom; | |
| 379 | + | if ((changed = win_moveresize(&win, x, y, w, h))) { | |
| 380 | + | img.x = x - win.x; | |
| 381 | + | img.y = y - win.y; | |
| 382 | + | } | |
| 383 | + | break; | |
| 384 | + | ||
| 385 | + | /* miscellaneous */ | |
| 386 | + | case XK_a: | |
| 387 | + | img_toggle_antialias(&img); | |
| 388 | + | changed = 1; | |
| 389 | + | break; | |
| 390 | + | case XK_r: | |
| 391 | + | changed = load_image(); | |
| 392 | + | break; | |
| 393 | + | } | |
| 394 | + | } else { | |
| 395 | + | } | |
| 396 | + | ||
| 397 | + | /* common key mappings */ | |
| 287 | 398 | switch (ksym) { | |
| 288 | 399 | case XK_Escape: | |
| 289 | 400 | cleanup(); | |
| @@ -291,115 +402,10 @@ void on_keypress(XKeyEvent *kev) { | |||
| 291 | 402 | case XK_q: | |
| 292 | 403 | cleanup(); | |
| 293 | 404 | exit(0); | |
| 294 | − | ||
| 295 | − | /* navigate image list */ | |
| 296 | − | case XK_n: | |
| 297 | − | case XK_space: | |
| 298 | − | if (fileidx + 1 < filecnt) { | |
| 299 | − | ++fileidx; | |
| 300 | − | changed = load_image(); | |
| 301 | − | } | |
| 302 | − | break; | |
| 303 | − | case XK_p: | |
| 304 | − | case XK_BackSpace: | |
| 305 | − | if (fileidx > 0) { | |
| 306 | − | --fileidx; | |
| 307 | − | changed = load_image(); | |
| 308 | − | } | |
| 309 | − | break; | |
| 310 | − | case XK_bracketleft: | |
| 311 | − | if (fileidx != 0) { | |
| 312 | − | fileidx = MAX(0, fileidx - 10); | |
| 313 | − | changed = load_image(); | |
| 314 | − | } | |
| 315 | − | break; | |
| 316 | − | case XK_bracketright: | |
| 317 | − | if (fileidx != filecnt - 1) { | |
| 318 | − | fileidx = MIN(fileidx + 10, filecnt - 1); | |
| 319 | − | changed = load_image(); | |
| 320 | − | } | |
| 321 | − | break; | |
| 322 | − | case XK_g: | |
| 323 | − | if (fileidx != 0) { | |
| 324 | − | fileidx = 0; | |
| 325 | − | changed = load_image(); | |
| 326 | − | } | |
| 327 | − | break; | |
| 328 | − | case XK_G: | |
| 329 | − | if (fileidx != filecnt - 1) { | |
| 330 | − | fileidx = filecnt - 1; | |
| 331 | − | changed = load_image(); | |
| 332 | − | } | |
| 333 | − | break; | |
| 334 | − | ||
| 335 | − | /* zooming */ | |
| 336 | − | case XK_plus: | |
| 337 | − | case XK_equal: | |
| 338 | − | changed = img_zoom_in(&img); | |
| 339 | − | break; | |
| 340 | − | case XK_minus: | |
| 341 | − | changed = img_zoom_out(&img); | |
| 342 | − | break; | |
| 343 | − | case XK_0: | |
| 344 | − | changed = img_zoom(&img, 1.0); | |
| 345 | − | break; | |
| 346 | − | case XK_w: | |
| 347 | − | if ((changed = img_fit_win(&img, &win))) | |
| 348 | − | img_center(&img, &win); | |
| 349 | − | break; | |
| 350 | − | ||
| 351 | − | /* panning */ | |
| 352 | − | case XK_h: | |
| 353 | − | case XK_Left: | |
| 354 | − | changed = img_pan(&img, &win, PAN_LEFT); | |
| 355 | − | break; | |
| 356 | − | case XK_j: | |
| 357 | − | case XK_Down: | |
| 358 | − | changed = img_pan(&img, &win, PAN_DOWN); | |
| 359 | − | break; | |
| 360 | − | case XK_k: | |
| 361 | − | case XK_Up: | |
| 362 | − | changed = img_pan(&img, &win, PAN_UP); | |
| 363 | − | break; | |
| 364 | − | case XK_l: | |
| 365 | − | case XK_Right: | |
| 366 | − | changed = img_pan(&img, &win, PAN_RIGHT); | |
| 367 | − | break; | |
| 368 | − | ||
| 369 | − | /* rotation */ | |
| 370 | − | case XK_less: | |
| 371 | − | img_rotate_left(&img, &win); | |
| 372 | − | changed = 1; | |
| 373 | − | break; | |
| 374 | − | case XK_greater: | |
| 375 | − | img_rotate_right(&img, &win); | |
| 376 | − | changed = 1; | |
| 377 | − | break; | |
| 378 | − | ||
| 379 | − | /* control window */ | |
| 380 | 405 | case XK_f: | |
| 381 | 406 | win_toggle_fullscreen(&win); | |
| 382 | 407 | /* render on next configurenotify */ | |
| 383 | 408 | break; | |
| 384 | − | case XK_W: | |
| 385 | − | x = win.x + img.x; | |
| 386 | − | y = win.y + img.y; | |
| 387 | − | w = img.w * img.zoom; | |
| 388 | − | h = img.h * img.zoom; | |
| 389 | − | if ((changed = win_moveresize(&win, x, y, w, h))) { | |
| 390 | − | img.x = x - win.x; | |
| 391 | − | img.y = y - win.y; | |
| 392 | − | } | |
| 393 | − | break; | |
| 394 | − | ||
| 395 | − | /* miscellaneous */ | |
| 396 | − | case XK_a: | |
| 397 | − | img_toggle_antialias(&img); | |
| 398 | − | changed = 1; | |
| 399 | − | break; | |
| 400 | − | case XK_r: | |
| 401 | − | changed = load_image(); | |
| 402 | − | break; | |
| 403 | 409 | } | |
| 404 | 410 | ||
| 405 | 411 | if (changed) | |