Touch support

This commit is contained in:
kichikuou
2017-05-01 10:24:13 +09:00
parent bd8d7ebecf
commit 270e65ab78
2 changed files with 40 additions and 17 deletions
+36 -13
View File
@@ -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)