From 270e65ab78c0093f19c4e2ba1dc08ebc0d0ef656 Mon Sep 17 00:00:00 2001 From: kichikuou Date: Mon, 1 May 2017 10:24:13 +0900 Subject: [PATCH] Touch support --- src/sys/nact_input.cpp | 49 +++++++++++++++++++++++++++++++----------- src/sys/nact_sys3.cpp | 8 +++---- 2 files changed, 40 insertions(+), 17 deletions(-) diff --git a/src/sys/nact_input.cpp b/src/sys/nact_input.cpp index 95d6f7b..7e9b3d7 100644 --- a/src/sys/nact_input.cpp +++ b/src/sys/nact_input.cpp @@ -5,14 +5,29 @@ */ #include "nact.h" +#include "ags.h" -static bool pump_events() +static int mousex, mousey; + +static bool pump_events(int screen_height) { SDL_Event e; while (SDL_PollEvent(&e)) { switch (e.type) { case SDL_QUIT: return true; + + case SDL_MOUSEMOTION: + mousex = e.motion.x; + mousey = e.motion.y; + break; + + case SDL_FINGERDOWN: + case SDL_FINGERUP: + case SDL_FINGERMOTION: + mousex = e.tfinger.x * 640; + mousey = e.tfinger.y * screen_height; + break; } } return false; @@ -22,20 +37,27 @@ uint8 NACT::get_key() { uint8 val = 0; - if (pump_events()) + if (pump_events(ags->screen_height)) terminate = true; // キーボード&マウス const Uint8* key = SDL_GetKeyboardState(NULL); - Uint32 mouse = SDL_GetMouseState(NULL, NULL); - if(key[SDL_SCANCODE_UP ] || key[SDL_SCANCODE_KP_8 ]) val |= 0x01; - if(key[SDL_SCANCODE_DOWN ] || key[SDL_SCANCODE_KP_2 ]) val |= 0x02; - if(key[SDL_SCANCODE_LEFT ] || key[SDL_SCANCODE_KP_4 ]) val |= 0x04; - if(key[SDL_SCANCODE_RIGHT ] || key[SDL_SCANCODE_KP_6 ]) val |= 0x08; - if(key[SDL_SCANCODE_RETURN] || (mouse & SDL_BUTTON(1))) val |= 0x10; - if(key[SDL_SCANCODE_SPACE ] || (mouse & SDL_BUTTON(3))) val |= 0x20; - if(key[SDL_SCANCODE_ESCAPE] ) val |= 0x40; - if(key[SDL_SCANCODE_TAB ] ) val |= 0x80; + Uint32 mouse; + int fingers = SDL_GetNumTouchFingers(SDL_GetTouchDevice(0)); + if (fingers) { + mouse = fingers == 1 ? SDL_BUTTON_LMASK : SDL_BUTTON_RMASK; + } else { + mouse = SDL_GetMouseState(NULL, NULL); + } + + if(key[SDL_SCANCODE_UP ] || key[SDL_SCANCODE_KP_8 ] ) val |= 0x01; + if(key[SDL_SCANCODE_DOWN ] || key[SDL_SCANCODE_KP_2 ] ) val |= 0x02; + if(key[SDL_SCANCODE_LEFT ] || key[SDL_SCANCODE_KP_4 ] ) val |= 0x04; + if(key[SDL_SCANCODE_RIGHT ] || key[SDL_SCANCODE_KP_6 ] ) val |= 0x08; + if(key[SDL_SCANCODE_RETURN] || mouse & SDL_BUTTON_LMASK) val |= 0x10; + if(key[SDL_SCANCODE_SPACE ] || mouse & SDL_BUTTON_RMASK) val |= 0x20; + if(key[SDL_SCANCODE_ESCAPE] ) val |= 0x40; + if(key[SDL_SCANCODE_TAB ] ) val |= 0x80; // マウス移動で方向入力はサポートしない @@ -61,9 +83,10 @@ uint8 NACT::get_key() void NACT::get_cursor(int* x, int* y) { - if (pump_events()) + if (pump_events(ags->screen_height)) terminate = true; - SDL_GetMouseState(x, y); + *x = mousex; + *y = mousey; } void NACT::set_cursor(int x, int y) diff --git a/src/sys/nact_sys3.cpp b/src/sys/nact_sys3.cpp index ca1680a..1187731 100644 --- a/src/sys/nact_sys3.cpp +++ b/src/sys/nact_sys3.cpp @@ -189,15 +189,15 @@ int NACT::menu_select(int num_items) if(terminate) { return -1; } - if(val = get_key()) { - SDL_Delay(100); - break; - } get_cursor(¤t_mx, ¤t_my); int dx = mx - current_mx; int dy = my - current_my; if (dx*dx + dy*dy > 10) break; + if(val = get_key()) { + SDL_Delay(100); + break; + } SDL_Delay(16); } if(val) {