mouse wheel support under SDL; fix SDL build on windows

This commit is contained in:
Vadim Lopatin 2014-12-10 17:20:26 +03:00
parent a2fd7868fc
commit 866693d9c5
1 changed files with 29 additions and 9 deletions

View File

@ -387,16 +387,31 @@ class SDLWindow : Window {
return MouseButton.None; return MouseButton.None;
} }
ushort lastFlags;
short lastx;
short lasty;
void processMouseEvent(MouseAction action, uint button, uint state, int x, int y) { void processMouseEvent(MouseAction action, uint button, uint state, int x, int y) {
ushort flags = convertMouseFlags(state); MouseEvent event = null;
if (action == MouseAction.Wheel) {
// handle wheel
short wheelDelta = cast(short)y;
if (wheelDelta)
event = new MouseEvent(action, MouseButton.None, lastFlags, lastx, lasty, wheelDelta);
} else {
lastFlags = convertMouseFlags(state);
lastx = cast(short)x;
lasty = cast(short)y;
MouseButton btn = convertMouseButton(button); MouseButton btn = convertMouseButton(button);
MouseEvent event = new MouseEvent(action, btn, flags, cast(short)x, cast(short)y); event = new MouseEvent(action, btn, lastFlags, lastx, lasty);
}
if (event) {
bool res = dispatchMouseEvent(event); bool res = dispatchMouseEvent(event);
if (res) { if (res) {
debug(mouse) Log.d("Calling update() after mouse event"); debug(mouse) Log.d("Calling update() after mouse event");
invalidate(); invalidate();
} }
} }
}
uint convertKeyCode(uint keyCode) { uint convertKeyCode(uint keyCode) {
switch(keyCode) { switch(keyCode) {
@ -877,6 +892,11 @@ class SDLPlatform : Platform {
} }
break; break;
case SDL_MOUSEWHEEL: case SDL_MOUSEWHEEL:
SDLWindow w = getWindow(event.wheel.windowID);
if (w) {
Log.d("SDL_MOUSEWHEEL x=", event.wheel.x, " y=", event.wheel.y);
w.processMouseEvent(MouseAction.Wheel, 0, 0, event.wheel.x, event.wheel.y);
}
break; break;
default: default:
// not supported event // not supported event
@ -948,7 +968,7 @@ version (Windows) {
} }
catch (Throwable e) // catch any uncaught exceptions catch (Throwable e) // catch any uncaught exceptions
{ {
MessageBox(null, toUTF16z(e.toString ~ "\nStack trace:\n" ~ defaultTraceHandler.toString), "Error", MessageBoxW(null, toUTF16z(e.toString ~ "\nStack trace:\n" ~ defaultTraceHandler.toString), "Error",
MB_OK | MB_ICONEXCLAMATION); MB_OK | MB_ICONEXCLAMATION);
result = 0; // failed result = 0; // failed
} }