Handle all shortcuts in the same function
Shortcuts are sometimes initiated from a keycode event, and sometimes from a text input event. Move the handling to a unique function.
This commit is contained in:
parent
7f6a565401
commit
deba69d022
1 changed files with 55 additions and 49 deletions
104
app/src/scrcpy.c
104
app/src/scrcpy.c
|
@ -320,18 +320,41 @@ static SDL_bool is_ctrl_down(void) {
|
|||
return state[SDL_SCANCODE_LCTRL] || state[SDL_SCANCODE_RCTRL];
|
||||
}
|
||||
|
||||
static void handle_shortcut(char c) {
|
||||
switch (c) {
|
||||
case 'h':
|
||||
send_keycode(AKEYCODE_HOME, "HOME");
|
||||
break;
|
||||
case 'b':
|
||||
send_keycode(AKEYCODE_BACK, "BACK");
|
||||
break;
|
||||
case 'm':
|
||||
send_keycode(AKEYCODE_APP_SWITCH, "APP_SWITCH");
|
||||
break;
|
||||
case 'p':
|
||||
send_keycode(AKEYCODE_POWER, "POWER");
|
||||
break;
|
||||
case '+':
|
||||
send_keycode(AKEYCODE_VOLUME_UP, "VOLUME_UP");
|
||||
break;
|
||||
case '-':
|
||||
send_keycode(AKEYCODE_VOLUME_DOWN, "VOLUME_DOWN");
|
||||
break;
|
||||
case 'f':
|
||||
switch_fullscreen();
|
||||
break;
|
||||
case 'x':
|
||||
resize_to_fit();
|
||||
break;
|
||||
case 'g':
|
||||
resize_to_pixel_perfect();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void handle_text_input(const SDL_TextInputEvent *event) {
|
||||
if (is_ctrl_down()) {
|
||||
char c = event->text[0];
|
||||
switch (c) {
|
||||
case '+':
|
||||
send_keycode(AKEYCODE_VOLUME_UP, "VOLUME_UP");
|
||||
break;
|
||||
case '-':
|
||||
send_keycode(AKEYCODE_VOLUME_DOWN, "VOLUME_DOWN");
|
||||
break;
|
||||
}
|
||||
// ignore
|
||||
handle_shortcut(event->text[0]);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -357,50 +380,33 @@ static void handle_key(const SDL_KeyboardEvent *event) {
|
|||
return;
|
||||
}
|
||||
|
||||
// Ctrl+x: optimal size (remove black borders)
|
||||
if (keycode == SDLK_x && !shift) {
|
||||
resize_to_fit();
|
||||
if (shift) {
|
||||
// currently, there is no shortcut implying SHIFT
|
||||
return;
|
||||
}
|
||||
|
||||
// Ctrl+g: pixel-perfect (ratio 1:1)
|
||||
if (keycode == SDLK_g && !shift) {
|
||||
resize_to_pixel_perfect();
|
||||
return;
|
||||
switch (keycode) {
|
||||
case SDLK_f:
|
||||
handle_shortcut('f');
|
||||
return;
|
||||
case SDLK_x:
|
||||
handle_shortcut('x');
|
||||
return;
|
||||
case SDLK_g:
|
||||
handle_shortcut('g');
|
||||
return;
|
||||
case SDLK_b: // fall-through
|
||||
case SDLK_BACKSPACE:
|
||||
handle_shortcut('b');
|
||||
return;
|
||||
case SDLK_m:
|
||||
handle_shortcut('m');
|
||||
return;
|
||||
case SDLK_p:
|
||||
handle_shortcut('p');
|
||||
return;
|
||||
}
|
||||
|
||||
// Ctrl+f: switch fullscreen
|
||||
if (keycode == SDLK_f && !shift) {
|
||||
switch_fullscreen();
|
||||
return;
|
||||
}
|
||||
|
||||
// Ctrl+h: HOME (the HOME key also works natively)
|
||||
if (keycode == SDLK_h && !shift) {
|
||||
send_keycode(AKEYCODE_HOME, "HOME");
|
||||
return;
|
||||
}
|
||||
|
||||
// Ctrl+b or Ctrl+BACKSPACE: BACK (the ESCAPE key also works natively)
|
||||
if ((keycode == SDLK_b && !shift) || keycode == SDLK_BACKSPACE) {
|
||||
send_keycode(AKEYCODE_BACK, "BACK");
|
||||
return;
|
||||
}
|
||||
|
||||
// Ctrl+m: APP_SWITCH
|
||||
if (keycode == SDLK_m && !shift) {
|
||||
send_keycode(AKEYCODE_APP_SWITCH, "APP_SWITCH");
|
||||
return;
|
||||
}
|
||||
|
||||
// Ctrl+p: POWER
|
||||
if (keycode == SDLK_p && !shift) {
|
||||
send_keycode(AKEYCODE_POWER, "POWER");
|
||||
return;
|
||||
}
|
||||
|
||||
// volume shortcuts are handled in handle_text_input()
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue