Skip to content

Commit

Permalink
emscripten: send fake mouse events for touches, like other targets do.
Browse files Browse the repository at this point in the history
(This really should be handled at the higher level and not in the individual
targets, but this fixes the immediate bug.)
  • Loading branch information
icculus committed Aug 12, 2016
1 parent 3b88f5c commit d05ae19
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 3 deletions.
19 changes: 16 additions & 3 deletions src/video/emscripten/SDL_emscriptenevents.c
Expand Up @@ -391,11 +391,24 @@ Emscripten_HandleTouch(int eventType, const EmscriptenTouchEvent *touchEvent, vo
x = touchEvent->touches[i].canvasX / (float)window_data->windowed_width;
y = touchEvent->touches[i].canvasY / (float)window_data->windowed_height;

if (eventType == EMSCRIPTEN_EVENT_TOUCHMOVE) {
SDL_SendTouchMotion(deviceId, id, x, y, 1.0f);
} else if (eventType == EMSCRIPTEN_EVENT_TOUCHSTART) {
if (eventType == EMSCRIPTEN_EVENT_TOUCHSTART) {
if (!window_data->finger_touching) {
window_data->finger_touching = SDL_TRUE;
window_data->first_finger = id;
SDL_SendMouseMotion(window_data->window, SDL_TOUCH_MOUSEID, 0, x, y);
SDL_SendMouseButton(window_data->window, SDL_TOUCH_MOUSEID, SDL_PRESSED, SDL_BUTTON_LEFT);
}
SDL_SendTouch(deviceId, id, SDL_TRUE, x, y, 1.0f);
} else if (eventType == EMSCRIPTEN_EVENT_TOUCHMOVE) {
if ((window_data->finger_touching) && (window_data->first_finger == id)) {
SDL_SendMouseMotion(window_data->window, SDL_TOUCH_MOUSEID, 0, x, y);
}
SDL_SendTouchMotion(deviceId, id, x, y, 1.0f);
} else {
if ((window_data->finger_touching) && (window_data->first_finger == id)) {
SDL_SendMouseButton(window_data->window, SDL_TOUCH_MOUSEID, SDL_RELEASED, SDL_BUTTON_LEFT);
window_data->finger_touching = SDL_FALSE;
}
SDL_SendTouch(deviceId, id, SDL_FALSE, x, y, 1.0f);
}
}
Expand Down
4 changes: 4 additions & 0 deletions src/video/emscripten/SDL_emscriptenvideo.h
Expand Up @@ -24,6 +24,7 @@
#define _SDL_emscriptenvideo_h

#include "../SDL_sysvideo.h"
#include "../../events/SDL_touch_c.h"
#include <emscripten/emscripten.h>
#include <emscripten/html5.h>

Expand All @@ -45,6 +46,9 @@ typedef struct SDL_WindowData
SDL_bool external_size;

int requested_fullscreen_mode;

SDL_bool finger_touching; /* for mapping touch events to mice */
SDL_FingerID first_finger;
} SDL_WindowData;

#endif /* _SDL_emscriptenvideo_h */
Expand Down

0 comments on commit d05ae19

Please sign in to comment.