X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fevents.c;h=22cfdcd12ebadba2d7084591f3d6ec9bac91ab12;hb=70fe541d68f18a22eb3bd134f128c0d56b885701;hp=5a4023ec36b3e621d0d22fa5e8dc1b3765dfc293;hpb=73b48f8afe7e1e1faf0e87436d7d74b27bba5f27;p=rocksndiamonds.git diff --git a/src/events.c b/src/events.c index 5a4023ec..22cfdcd1 100644 --- a/src/events.c +++ b/src/events.c @@ -649,21 +649,16 @@ void HandleWindowEvent(WindowEvent *event) int x, y; if (game_status == GAME_MODE_SETUP) - { - // save active virtual buttons (in case of just configuring them) - for (x = 0; x < MAX_GRID_XSIZE; x++) - for (y = 0; y < MAX_GRID_YSIZE; y++) - overlay.grid_button_all[nr][x][y] = overlay.grid_button[x][y]; - } + RedrawSetupScreenAfterScreenRotation(nr); nr = GRID_ACTIVE_NR(); - overlay.grid_xsize = overlay.grid_xsize_all[nr]; - overlay.grid_ysize = overlay.grid_ysize_all[nr]; + overlay.grid_xsize = setup.touch.grid_xsize[nr]; + overlay.grid_ysize = setup.touch.grid_ysize[nr]; for (x = 0; x < MAX_GRID_XSIZE; x++) for (y = 0; y < MAX_GRID_YSIZE; y++) - overlay.grid_button[x][y] = overlay.grid_button_all[nr][x][y]; + overlay.grid_button[x][y] = setup.touch.grid_button[nr][x][y]; } } } @@ -683,6 +678,19 @@ static struct void HandleFingerEvent_VirtualButtons(FingerEvent *event) { +#if 1 + int x = event->x * overlay.grid_xsize; + int y = event->y * overlay.grid_ysize; + int grid_button = overlay.grid_button[x][y]; + int grid_button_action = GET_ACTION_FROM_GRID_BUTTON(grid_button); + Key key = (grid_button == CHAR_GRID_BUTTON_LEFT ? setup.input[0].key.left : + grid_button == CHAR_GRID_BUTTON_RIGHT ? setup.input[0].key.right : + grid_button == CHAR_GRID_BUTTON_UP ? setup.input[0].key.up : + grid_button == CHAR_GRID_BUTTON_DOWN ? setup.input[0].key.down : + grid_button == CHAR_GRID_BUTTON_SNAP ? setup.input[0].key.snap : + grid_button == CHAR_GRID_BUTTON_DROP ? setup.input[0].key.drop : + KSYM_UNDEFINED); +#else float ypos = 1.0 - 1.0 / 3.0 * video.display_width / video.display_height; float event_x = (event->x); float event_y = (event->y - ypos) / (1 - ypos); @@ -705,6 +713,7 @@ void HandleFingerEvent_VirtualButtons(FingerEvent *event) event_y > 2.0 / 3.0 && event_y < 1 ? setup.input[0].key.down : KSYM_UNDEFINED); +#endif int key_status = (event->type == EVENT_FINGERRELEASE ? KEY_RELEASED : KEY_PRESSED); char *key_status_name = (key_status == KEY_RELEASED ? "KEY_RELEASED" : @@ -717,6 +726,11 @@ void HandleFingerEvent_VirtualButtons(FingerEvent *event) Error(ERR_DEBUG, "::: key '%s' was '%s' [fingerId: %lld]", getKeyNameFromKey(key), key_status_name, event->fingerId); + if (key_status == KEY_PRESSED) + overlay.grid_button_action |= grid_button_action; + else + overlay.grid_button_action &= ~grid_button_action; + // check if we already know this touch event's finger id for (i = 0; i < NUM_TOUCH_FINGERS; i++) { @@ -1661,6 +1675,11 @@ static void HandleKeysSpecial(Key key) { InsertSolutionTape(); } + else if (is_string_suffix(cheat_input, ":play-solution-tape") || + is_string_suffix(cheat_input, ":pst")) + { + PlaySolutionTape(); + } else if (is_string_suffix(cheat_input, ":reload-graphics") || is_string_suffix(cheat_input, ":rg")) { @@ -1741,6 +1760,14 @@ static void HandleKeysSpecial(Key key) DumpBrush_Small(); } } + + /* special key shortcuts for all game modes */ + if (is_string_suffix(cheat_input, ":dump-gadget-ids") || + is_string_suffix(cheat_input, ":dgi") || + is_string_suffix(cheat_input, ":DGI")) + { + DumpGadgetIdentifiers(); + } } void HandleKeysDebug(Key key) @@ -2404,24 +2431,38 @@ void HandleJoystick() void HandleSpecialGameControllerButtons(Event *event) { #if defined(TARGET_SDL2) + int key_status; + Key key; + switch (event->type) { case SDL_CONTROLLERBUTTONDOWN: - if (event->cbutton.button == SDL_CONTROLLER_BUTTON_START) - HandleKey(KSYM_space, KEY_PRESSED); - else if (event->cbutton.button == SDL_CONTROLLER_BUTTON_BACK) - HandleKey(KSYM_Escape, KEY_PRESSED); - + key_status = KEY_PRESSED; break; case SDL_CONTROLLERBUTTONUP: - if (event->cbutton.button == SDL_CONTROLLER_BUTTON_START) - HandleKey(KSYM_space, KEY_RELEASED); - else if (event->cbutton.button == SDL_CONTROLLER_BUTTON_BACK) - HandleKey(KSYM_Escape, KEY_RELEASED); + key_status = KEY_RELEASED; + break; + + default: + return; + } + + switch (event->cbutton.button) + { + case SDL_CONTROLLER_BUTTON_START: + key = KSYM_space; + break; + case SDL_CONTROLLER_BUTTON_BACK: + key = KSYM_Escape; break; + + default: + return; } + + HandleKey(key, key_status); #endif }