Made key mappings mode-dependent
This commit is contained in:
		
							parent
							
								
									ac747c3f91
								
							
						
					
					
						commit
						f554cdf60e
					
				
							
								
								
									
										216
									
								
								main.c
									
									
									
									
									
								
							
							
						
						
									
										216
									
								
								main.c
									
									
									
									
									
								
							| @ -284,6 +284,117 @@ void on_keypress(XKeyEvent *kev) { | |||||||
| 	XLookupString(kev, &key, 1, &ksym, NULL); | 	XLookupString(kev, &key, 1, &ksym, NULL); | ||||||
| 	changed = 0; | 	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) { | 	switch (ksym) { | ||||||
| 		case XK_Escape: | 		case XK_Escape: | ||||||
| 			cleanup(); | 			cleanup(); | ||||||
| @ -291,115 +402,10 @@ void on_keypress(XKeyEvent *kev) { | |||||||
| 		case XK_q: | 		case XK_q: | ||||||
| 			cleanup(); | 			cleanup(); | ||||||
| 			exit(0); | 			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: | 		case XK_f: | ||||||
| 			win_toggle_fullscreen(&win); | 			win_toggle_fullscreen(&win); | ||||||
| 			/* render on next configurenotify */ | 			/* render on next configurenotify */ | ||||||
| 			break; | 			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) | 	if (changed) | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Bert
						Bert