aboutsummaryrefslogtreecommitdiff
path: root/backends/events
diff options
context:
space:
mode:
authorAlyssa Milburn2011-08-22 20:03:05 +0200
committerAlyssa Milburn2011-08-22 20:03:05 +0200
commit84063dc9727a9f55e09d39574027beab695680e6 (patch)
treed71a9599cb550d9f7949a2d3209574064e054d85 /backends/events
parentc6e89df3d940747a85d447f172e2323c800f5eaf (diff)
parenta39a3eda46aea108a51556f001617ad28d29e520 (diff)
downloadscummvm-rg350-84063dc9727a9f55e09d39574027beab695680e6.tar.gz
scummvm-rg350-84063dc9727a9f55e09d39574027beab695680e6.tar.bz2
scummvm-rg350-84063dc9727a9f55e09d39574027beab695680e6.zip
Merge remote-tracking branch 'origin/master' into soltys_wip2
Diffstat (limited to 'backends/events')
-rw-r--r--backends/events/dinguxsdl/dinguxsdl-events.cpp12
-rw-r--r--backends/events/gph/gph-events.cpp18
-rw-r--r--backends/events/linuxmotosdl/linuxmotosdl-events.cpp14
-rw-r--r--backends/events/openpandora/op-events.cpp12
-rw-r--r--backends/events/ps3sdl/ps3sdl-events.cpp8
-rw-r--r--backends/events/sdl/sdl-events.cpp186
-rw-r--r--backends/events/sdl/sdl-events.h18
-rw-r--r--backends/events/symbiansdl/symbiansdl-events.cpp15
-rw-r--r--backends/events/symbiansdl/symbiansdl-events.h1
-rw-r--r--backends/events/webossdl/webossdl-events.cpp12
-rw-r--r--backends/events/wincesdl/wincesdl-events.cpp16
-rw-r--r--backends/events/wincesdl/wincesdl-events.h2
12 files changed, 235 insertions, 79 deletions
diff --git a/backends/events/dinguxsdl/dinguxsdl-events.cpp b/backends/events/dinguxsdl/dinguxsdl-events.cpp
index 946507ccfd..64d8fbeb62 100644
--- a/backends/events/dinguxsdl/dinguxsdl-events.cpp
+++ b/backends/events/dinguxsdl/dinguxsdl-events.cpp
@@ -50,7 +50,7 @@ bool DINGUXSdlEventSource::remapKey(SDL_Event &ev, Common::Event &event) {
}
event.type = Common::EVENT_MOUSEMOVE;
- fillMouseEvent(event, _km.x, _km.y);
+ processMouseEvent(event, _km.x, _km.y);
return true;
} else if (ev.key.keysym.sym == PAD_DOWN) {
@@ -63,7 +63,7 @@ bool DINGUXSdlEventSource::remapKey(SDL_Event &ev, Common::Event &event) {
}
event.type = Common::EVENT_MOUSEMOVE;
- fillMouseEvent(event, _km.x, _km.y);
+ processMouseEvent(event, _km.x, _km.y);
return true;
} else if (ev.key.keysym.sym == PAD_LEFT) {
@@ -76,7 +76,7 @@ bool DINGUXSdlEventSource::remapKey(SDL_Event &ev, Common::Event &event) {
}
event.type = Common::EVENT_MOUSEMOVE;
- fillMouseEvent(event, _km.x, _km.y);
+ processMouseEvent(event, _km.x, _km.y);
return true;
} else if (ev.key.keysym.sym == PAD_RIGHT) {
@@ -89,7 +89,7 @@ bool DINGUXSdlEventSource::remapKey(SDL_Event &ev, Common::Event &event) {
}
event.type = Common::EVENT_MOUSEMOVE;
- fillMouseEvent(event, _km.x, _km.y);
+ processMouseEvent(event, _km.x, _km.y);
return true;
} else if (ev.key.keysym.sym == BUT_Y) { // left mouse button
@@ -99,7 +99,7 @@ bool DINGUXSdlEventSource::remapKey(SDL_Event &ev, Common::Event &event) {
event.type = Common::EVENT_LBUTTONUP;
}
- fillMouseEvent(event, _km.x, _km.y);
+ processMouseEvent(event, _km.x, _km.y);
return true;
} else if (ev.key.keysym.sym == BUT_B) { // right mouse button
@@ -109,7 +109,7 @@ bool DINGUXSdlEventSource::remapKey(SDL_Event &ev, Common::Event &event) {
event.type = Common::EVENT_RBUTTONUP;
}
- fillMouseEvent(event, _km.x, _km.y);
+ processMouseEvent(event, _km.x, _km.y);
return true;
} else if (ev.key.keysym.sym == BUT_X) { // '.' skip dialogue
diff --git a/backends/events/gph/gph-events.cpp b/backends/events/gph/gph-events.cpp
index b461f85fbb..ce5d892957 100644
--- a/backends/events/gph/gph-events.cpp
+++ b/backends/events/gph/gph-events.cpp
@@ -165,7 +165,7 @@ GPHEventSource::GPHEventSource()
: _buttonStateL(false){
}
-//void GPHEventSource::fillMouseEvent(Common::Event &event, int x, int y) {
+//void GPHEventSource::processMouseEvent(Common::Event &event, int x, int y) {
// if (GPHGraphicsManager::_videoMode.mode == GFX_HALF && !GPHGraphicsManager::_overlayVisible){
// event.mouse.x = x*2;
// event.mouse.y = y*2;
@@ -260,7 +260,7 @@ bool GPHEventSource::handleMouseButtonDown(SDL_Event &ev, Common::Event &event)
else
return false;
- fillMouseEvent(event, ev.button.x, ev.button.y);
+ processMouseEvent(event, ev.button.x, ev.button.y);
return true;
}
@@ -287,7 +287,7 @@ bool GPHEventSource::handleMouseButtonUp(SDL_Event &ev, Common::Event &event) {
else
return false;
- fillMouseEvent(event, ev.button.x, ev.button.y);
+ processMouseEvent(event, ev.button.x, ev.button.y);
return true;
}
@@ -310,16 +310,16 @@ bool GPHEventSource::handleJoyButtonDown(SDL_Event &ev, Common::Event &event) {
case BUTTON_UPRIGHT:
moveStick();
event.type = Common::EVENT_MOUSEMOVE;
- fillMouseEvent(event, _km.x, _km.y);
+ processMouseEvent(event, _km.x, _km.y);
break;
case BUTTON_B:
case BUTTON_CLICK:
event.type = Common::EVENT_LBUTTONDOWN;
- fillMouseEvent(event, _km.x, _km.y);
+ processMouseEvent(event, _km.x, _km.y);
break;
case BUTTON_X:
event.type = Common::EVENT_RBUTTONDOWN;
- fillMouseEvent(event, _km.x, _km.y);
+ processMouseEvent(event, _km.x, _km.y);
break;
case BUTTON_L:
BUTTON_STATE_L = true;
@@ -433,16 +433,16 @@ bool GPHEventSource::handleJoyButtonUp(SDL_Event &ev, Common::Event &event) {
case BUTTON_UPRIGHT:
moveStick();
event.type = Common::EVENT_MOUSEMOVE;
- fillMouseEvent(event, _km.x, _km.y);
+ processMouseEvent(event, _km.x, _km.y);
break;
case BUTTON_B:
case BUTTON_CLICK:
event.type = Common::EVENT_LBUTTONUP;
- fillMouseEvent(event, _km.x, _km.y);
+ processMouseEvent(event, _km.x, _km.y);
break;
case BUTTON_X:
event.type = Common::EVENT_RBUTTONUP;
- fillMouseEvent(event, _km.x, _km.y);
+ processMouseEvent(event, _km.x, _km.y);
break;
case BUTTON_L:
BUTTON_STATE_L = false;
diff --git a/backends/events/linuxmotosdl/linuxmotosdl-events.cpp b/backends/events/linuxmotosdl/linuxmotosdl-events.cpp
index e859c5291b..5d9f032e19 100644
--- a/backends/events/linuxmotosdl/linuxmotosdl-events.cpp
+++ b/backends/events/linuxmotosdl/linuxmotosdl-events.cpp
@@ -132,7 +132,7 @@ bool LinuxmotoSdlEventSource::remapKey(SDL_Event &ev, Common::Event &event) {
}
event.type = Common::EVENT_MOUSEMOVE;
- fillMouseEvent(event, _km.x, _km.y);
+ processMouseEvent(event, _km.x, _km.y);
return true;
} else if (ev.key.keysym.sym == SDLK_RIGHT) {
if (ev.type == SDL_KEYDOWN) {
@@ -144,7 +144,7 @@ bool LinuxmotoSdlEventSource::remapKey(SDL_Event &ev, Common::Event &event) {
}
event.type = Common::EVENT_MOUSEMOVE;
- fillMouseEvent(event, _km.x, _km.y);
+ processMouseEvent(event, _km.x, _km.y);
return true;
} else if (ev.key.keysym.sym == SDLK_DOWN) {
@@ -157,7 +157,7 @@ bool LinuxmotoSdlEventSource::remapKey(SDL_Event &ev, Common::Event &event) {
}
event.type = Common::EVENT_MOUSEMOVE;
- fillMouseEvent(event, _km.x, _km.y);
+ processMouseEvent(event, _km.x, _km.y);
return true;
} else if (ev.key.keysym.sym == SDLK_UP) {
@@ -170,7 +170,7 @@ bool LinuxmotoSdlEventSource::remapKey(SDL_Event &ev, Common::Event &event) {
}
event.type = Common::EVENT_MOUSEMOVE;
- fillMouseEvent(event, _km.x, _km.y);
+ processMouseEvent(event, _km.x, _km.y);
return true;
} else if (ev.key.keysym.sym == SDLK_RETURN) {
@@ -181,7 +181,7 @@ bool LinuxmotoSdlEventSource::remapKey(SDL_Event &ev, Common::Event &event) {
event.type = Common::EVENT_LBUTTONUP;
}
- fillMouseEvent(event, _km.x, _km.y);
+ processMouseEvent(event, _km.x, _km.y);
return true;
} else if (ev.key.keysym.sym == SDLK_PLUS) {
@@ -191,7 +191,7 @@ bool LinuxmotoSdlEventSource::remapKey(SDL_Event &ev, Common::Event &event) {
} else {
event.type = Common::EVENT_RBUTTONUP;
}
- fillMouseEvent(event, _km.x, _km.y);
+ processMouseEvent(event, _km.x, _km.y);
return true;
} else if (ev.key.keysym.sym == SDLK_MINUS) {
@@ -202,7 +202,7 @@ bool LinuxmotoSdlEventSource::remapKey(SDL_Event &ev, Common::Event &event) {
event.type = Common::EVENT_LBUTTONUP;
}
- fillMouseEvent(event, _km.x, _km.y);
+ processMouseEvent(event, _km.x, _km.y);
return true;
} else {
diff --git a/backends/events/openpandora/op-events.cpp b/backends/events/openpandora/op-events.cpp
index 72bc56c95d..56915f96fe 100644
--- a/backends/events/openpandora/op-events.cpp
+++ b/backends/events/openpandora/op-events.cpp
@@ -81,7 +81,7 @@ bool OPEventSource::handleMouseButtonDown(SDL_Event &ev, Common::Event &event) {
else
return false;
- fillMouseEvent(event, ev.button.x, ev.button.y);
+ processMouseEvent(event, ev.button.x, ev.button.y);
return true;
}
@@ -108,7 +108,7 @@ bool OPEventSource::handleMouseButtonUp(SDL_Event &ev, Common::Event &event) {
else
return false;
- fillMouseEvent(event, ev.button.x, ev.button.y);
+ processMouseEvent(event, ev.button.x, ev.button.y);
return true;
}
@@ -123,12 +123,12 @@ bool OPEventSource::remapKey(SDL_Event &ev, Common::Event &event) {
switch (ev.key.keysym.sym) {
case SDLK_HOME:
event.type = Common::EVENT_LBUTTONDOWN;
- fillMouseEvent(event, _km.x, _km.y);
+ processMouseEvent(event, _km.x, _km.y);
return true;
break;
case SDLK_END:
event.type = Common::EVENT_RBUTTONDOWN;
- fillMouseEvent(event, _km.x, _km.y);
+ processMouseEvent(event, _km.x, _km.y);
return true;
break;
case SDLK_PAGEDOWN:
@@ -159,12 +159,12 @@ bool OPEventSource::remapKey(SDL_Event &ev, Common::Event &event) {
switch (ev.key.keysym.sym) {
case SDLK_HOME:
event.type = Common::EVENT_LBUTTONUP;
- fillMouseEvent(event, _km.x, _km.y);
+ processMouseEvent(event, _km.x, _km.y);
return true;
break;
case SDLK_END:
event.type = Common::EVENT_RBUTTONUP;
- fillMouseEvent(event, _km.x, _km.y);
+ processMouseEvent(event, _km.x, _km.y);
return true;
break;
case SDLK_PAGEDOWN:
diff --git a/backends/events/ps3sdl/ps3sdl-events.cpp b/backends/events/ps3sdl/ps3sdl-events.cpp
index eefc641844..723942af11 100644
--- a/backends/events/ps3sdl/ps3sdl-events.cpp
+++ b/backends/events/ps3sdl/ps3sdl-events.cpp
@@ -60,11 +60,11 @@ bool PS3SdlEventSource::handleJoyButtonDown(SDL_Event &ev, Common::Event &event)
switch (ev.jbutton.button) {
case BTN_CROSS: // Left mouse button
event.type = Common::EVENT_LBUTTONDOWN;
- fillMouseEvent(event, _km.x, _km.y);
+ processMouseEvent(event, _km.x, _km.y);
break;
case BTN_CIRCLE: // Right mouse button
event.type = Common::EVENT_RBUTTONDOWN;
- fillMouseEvent(event, _km.x, _km.y);
+ processMouseEvent(event, _km.x, _km.y);
break;
case BTN_TRIANGLE: // Game menu
event.type = Common::EVENT_KEYDOWN;
@@ -98,11 +98,11 @@ bool PS3SdlEventSource::handleJoyButtonUp(SDL_Event &ev, Common::Event &event) {
switch (ev.jbutton.button) {
case BTN_CROSS: // Left mouse button
event.type = Common::EVENT_LBUTTONUP;
- fillMouseEvent(event, _km.x, _km.y);
+ processMouseEvent(event, _km.x, _km.y);
break;
case BTN_CIRCLE: // Right mouse button
event.type = Common::EVENT_RBUTTONUP;
- fillMouseEvent(event, _km.x, _km.y);
+ processMouseEvent(event, _km.x, _km.y);
break;
case BTN_TRIANGLE: // Game menu
event.type = Common::EVENT_KEYUP;
diff --git a/backends/events/sdl/sdl-events.cpp b/backends/events/sdl/sdl-events.cpp
index 4489a2e580..9d235e9044 100644
--- a/backends/events/sdl/sdl-events.cpp
+++ b/backends/events/sdl/sdl-events.cpp
@@ -50,7 +50,7 @@
#define JOY_BUT_F5 5
SdlEventSource::SdlEventSource()
- : _scrollLock(false), _joystick(0), _lastScreenID(0), EventSource() {
+ : EventSource(), _scrollLock(false), _joystick(0), _lastScreenID(0), _graphicsManager(0) {
// Reset mouse state
memset(&_km, 0, sizeof(_km));
@@ -91,10 +91,15 @@ int SdlEventSource::mapKey(SDLKey key, SDLMod mod, Uint16 unicode) {
return key;
}
-void SdlEventSource::fillMouseEvent(Common::Event &event, int x, int y) {
+void SdlEventSource::processMouseEvent(Common::Event &event, int x, int y) {
event.mouse.x = x;
event.mouse.y = y;
+ if (_graphicsManager) {
+ _graphicsManager->notifyMousePos(Common::Point(x, y));
+ _graphicsManager->transformMouseCoordinates(event.mouse);
+ }
+
// Update the "keyboard mouse" coords
_km.x = x;
_km.y = y;
@@ -194,6 +199,149 @@ void SdlEventSource::SDLModToOSystemKeyFlags(SDLMod mod, Common::Event &event) {
event.kbd.flags |= Common::KBD_CAPS;
}
+Common::KeyCode SdlEventSource::SDLToOSystemKeycode(const SDLKey key) {
+ switch (key) {
+ case SDLK_BACKSPACE: return Common::KEYCODE_BACKSPACE;
+ case SDLK_TAB: return Common::KEYCODE_TAB;
+ case SDLK_CLEAR: return Common::KEYCODE_CLEAR;
+ case SDLK_RETURN: return Common::KEYCODE_RETURN;
+ case SDLK_PAUSE: return Common::KEYCODE_PAUSE;
+ case SDLK_ESCAPE: return Common::KEYCODE_ESCAPE;
+ case SDLK_SPACE: return Common::KEYCODE_SPACE;
+ case SDLK_EXCLAIM: return Common::KEYCODE_EXCLAIM;
+ case SDLK_QUOTEDBL: return Common::KEYCODE_QUOTEDBL;
+ case SDLK_HASH: return Common::KEYCODE_HASH;
+ case SDLK_DOLLAR: return Common::KEYCODE_DOLLAR;
+ case SDLK_AMPERSAND: return Common::KEYCODE_AMPERSAND;
+ case SDLK_QUOTE: return Common::KEYCODE_QUOTE;
+ case SDLK_LEFTPAREN: return Common::KEYCODE_LEFTPAREN;
+ case SDLK_RIGHTPAREN: return Common::KEYCODE_RIGHTPAREN;
+ case SDLK_ASTERISK: return Common::KEYCODE_ASTERISK;
+ case SDLK_PLUS: return Common::KEYCODE_PLUS;
+ case SDLK_COMMA: return Common::KEYCODE_COMMA;
+ case SDLK_MINUS: return Common::KEYCODE_MINUS;
+ case SDLK_PERIOD: return Common::KEYCODE_PERIOD;
+ case SDLK_SLASH: return Common::KEYCODE_SLASH;
+ case SDLK_0: return Common::KEYCODE_0;
+ case SDLK_1: return Common::KEYCODE_1;
+ case SDLK_2: return Common::KEYCODE_2;
+ case SDLK_3: return Common::KEYCODE_3;
+ case SDLK_4: return Common::KEYCODE_4;
+ case SDLK_5: return Common::KEYCODE_5;
+ case SDLK_6: return Common::KEYCODE_6;
+ case SDLK_7: return Common::KEYCODE_7;
+ case SDLK_8: return Common::KEYCODE_8;
+ case SDLK_9: return Common::KEYCODE_9;
+ case SDLK_COLON: return Common::KEYCODE_COLON;
+ case SDLK_SEMICOLON: return Common::KEYCODE_SEMICOLON;
+ case SDLK_LESS: return Common::KEYCODE_LESS;
+ case SDLK_EQUALS: return Common::KEYCODE_EQUALS;
+ case SDLK_GREATER: return Common::KEYCODE_GREATER;
+ case SDLK_QUESTION: return Common::KEYCODE_QUESTION;
+ case SDLK_AT: return Common::KEYCODE_AT;
+ case SDLK_LEFTBRACKET: return Common::KEYCODE_LEFTBRACKET;
+ case SDLK_BACKSLASH: return Common::KEYCODE_BACKSLASH;
+ case SDLK_RIGHTBRACKET: return Common::KEYCODE_RIGHTBRACKET;
+ case SDLK_CARET: return Common::KEYCODE_CARET;
+ case SDLK_UNDERSCORE: return Common::KEYCODE_UNDERSCORE;
+ case SDLK_BACKQUOTE: return Common::KEYCODE_BACKQUOTE;
+ case SDLK_a: return Common::KEYCODE_a;
+ case SDLK_b: return Common::KEYCODE_b;
+ case SDLK_c: return Common::KEYCODE_c;
+ case SDLK_d: return Common::KEYCODE_d;
+ case SDLK_e: return Common::KEYCODE_e;
+ case SDLK_f: return Common::KEYCODE_f;
+ case SDLK_g: return Common::KEYCODE_g;
+ case SDLK_h: return Common::KEYCODE_h;
+ case SDLK_i: return Common::KEYCODE_i;
+ case SDLK_j: return Common::KEYCODE_j;
+ case SDLK_k: return Common::KEYCODE_k;
+ case SDLK_l: return Common::KEYCODE_l;
+ case SDLK_m: return Common::KEYCODE_m;
+ case SDLK_n: return Common::KEYCODE_n;
+ case SDLK_o: return Common::KEYCODE_o;
+ case SDLK_p: return Common::KEYCODE_p;
+ case SDLK_q: return Common::KEYCODE_q;
+ case SDLK_r: return Common::KEYCODE_r;
+ case SDLK_s: return Common::KEYCODE_s;
+ case SDLK_t: return Common::KEYCODE_t;
+ case SDLK_u: return Common::KEYCODE_u;
+ case SDLK_v: return Common::KEYCODE_v;
+ case SDLK_w: return Common::KEYCODE_w;
+ case SDLK_x: return Common::KEYCODE_x;
+ case SDLK_y: return Common::KEYCODE_y;
+ case SDLK_z: return Common::KEYCODE_z;
+ case SDLK_DELETE: return Common::KEYCODE_DELETE;
+#if SDL_VERSION_ATLEAST(1, 3, 0)
+ case SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_GRAVE): return Common::KEYCODE_TILDE;
+#else
+ case SDLK_WORLD_16: return Common::KEYCODE_TILDE;
+#endif
+ case SDLK_KP0: return Common::KEYCODE_KP0;
+ case SDLK_KP1: return Common::KEYCODE_KP1;
+ case SDLK_KP2: return Common::KEYCODE_KP2;
+ case SDLK_KP3: return Common::KEYCODE_KP3;
+ case SDLK_KP4: return Common::KEYCODE_KP4;
+ case SDLK_KP5: return Common::KEYCODE_KP5;
+ case SDLK_KP6: return Common::KEYCODE_KP6;
+ case SDLK_KP7: return Common::KEYCODE_KP7;
+ case SDLK_KP8: return Common::KEYCODE_KP8;
+ case SDLK_KP9: return Common::KEYCODE_KP9;
+ case SDLK_KP_PERIOD: return Common::KEYCODE_KP_PERIOD;
+ case SDLK_KP_DIVIDE: return Common::KEYCODE_KP_DIVIDE;
+ case SDLK_KP_MULTIPLY: return Common::KEYCODE_KP_MULTIPLY;
+ case SDLK_KP_MINUS: return Common::KEYCODE_KP_MINUS;
+ case SDLK_KP_PLUS: return Common::KEYCODE_KP_PLUS;
+ case SDLK_KP_ENTER: return Common::KEYCODE_KP_ENTER;
+ case SDLK_KP_EQUALS: return Common::KEYCODE_KP_EQUALS;
+ case SDLK_UP: return Common::KEYCODE_UP;
+ case SDLK_DOWN: return Common::KEYCODE_DOWN;
+ case SDLK_RIGHT: return Common::KEYCODE_RIGHT;
+ case SDLK_LEFT: return Common::KEYCODE_LEFT;
+ case SDLK_INSERT: return Common::KEYCODE_INSERT;
+ case SDLK_HOME: return Common::KEYCODE_HOME;
+ case SDLK_END: return Common::KEYCODE_END;
+ case SDLK_PAGEUP: return Common::KEYCODE_PAGEUP;
+ case SDLK_PAGEDOWN: return Common::KEYCODE_PAGEDOWN;
+ case SDLK_F1: return Common::KEYCODE_F1;
+ case SDLK_F2: return Common::KEYCODE_F2;
+ case SDLK_F3: return Common::KEYCODE_F3;
+ case SDLK_F4: return Common::KEYCODE_F4;
+ case SDLK_F5: return Common::KEYCODE_F5;
+ case SDLK_F6: return Common::KEYCODE_F6;
+ case SDLK_F7: return Common::KEYCODE_F7;
+ case SDLK_F8: return Common::KEYCODE_F8;
+ case SDLK_F9: return Common::KEYCODE_F9;
+ case SDLK_F10: return Common::KEYCODE_F10;
+ case SDLK_F11: return Common::KEYCODE_F11;
+ case SDLK_F12: return Common::KEYCODE_F12;
+ case SDLK_F13: return Common::KEYCODE_F13;
+ case SDLK_F14: return Common::KEYCODE_F14;
+ case SDLK_F15: return Common::KEYCODE_F15;
+ case SDLK_NUMLOCK: return Common::KEYCODE_NUMLOCK;
+ case SDLK_CAPSLOCK: return Common::KEYCODE_CAPSLOCK;
+ case SDLK_SCROLLOCK: return Common::KEYCODE_SCROLLOCK;
+ case SDLK_RSHIFT: return Common::KEYCODE_RSHIFT;
+ case SDLK_LSHIFT: return Common::KEYCODE_LSHIFT;
+ case SDLK_RCTRL: return Common::KEYCODE_RCTRL;
+ case SDLK_LCTRL: return Common::KEYCODE_LCTRL;
+ case SDLK_RALT: return Common::KEYCODE_RALT;
+ case SDLK_LALT: return Common::KEYCODE_LALT;
+ case SDLK_LSUPER: return Common::KEYCODE_LSUPER;
+ case SDLK_RSUPER: return Common::KEYCODE_RSUPER;
+ case SDLK_MODE: return Common::KEYCODE_MODE;
+ case SDLK_COMPOSE: return Common::KEYCODE_COMPOSE;
+ case SDLK_HELP: return Common::KEYCODE_HELP;
+ case SDLK_PRINT: return Common::KEYCODE_PRINT;
+ case SDLK_SYSREQ: return Common::KEYCODE_SYSREQ;
+ case SDLK_BREAK: return Common::KEYCODE_BREAK;
+ case SDLK_MENU: return Common::KEYCODE_MENU;
+ case SDLK_POWER: return Common::KEYCODE_POWER;
+ case SDLK_UNDO: return Common::KEYCODE_UNDO;
+ default: return Common::KEYCODE_INVALID;
+ }
+}
+
bool SdlEventSource::pollEvent(Common::Event &event) {
handleKbdMouse();
@@ -234,16 +382,14 @@ bool SdlEventSource::dispatchSDLEvent(SDL_Event &ev, Common::Event &event) {
return handleJoyAxisMotion(ev, event);
case SDL_VIDEOEXPOSE:
- // HACK: Send a fake event, handled by SdlGraphicsManager
- event.type = (Common::EventType)OSystem_SDL::kSdlEventExpose;
- return true;
+ if (_graphicsManager)
+ _graphicsManager->notifyVideoExpose();
+ return false;
case SDL_VIDEORESIZE:
- // HACK: Send a fake event, handled by OpenGLSdlGraphicsManager
- event.type = (Common::EventType)OSystem_SDL::kSdlEventResize;
- event.mouse.x = ev.resize.w;
- event.mouse.y = ev.resize.h;
- return true;
+ if (_graphicsManager)
+ _graphicsManager->notifyResize(ev.resize.w, ev.resize.h);
+ return false;
case SDL_QUIT:
event.type = Common::EVENT_QUIT;
@@ -302,7 +448,7 @@ bool SdlEventSource::handleKeyDown(SDL_Event &ev, Common::Event &event) {
return true;
event.type = Common::EVENT_KEYDOWN;
- event.kbd.keycode = (Common::KeyCode)ev.key.keysym.sym;
+ event.kbd.keycode = SDLToOSystemKeycode(ev.key.keysym.sym);
event.kbd.ascii = mapKey(ev.key.keysym.sym, (SDLMod)ev.key.keysym.mod, (Uint16)ev.key.keysym.unicode);
return true;
@@ -346,7 +492,7 @@ bool SdlEventSource::handleKeyUp(SDL_Event &ev, Common::Event &event) {
// continue normally
event.type = Common::EVENT_KEYUP;
- event.kbd.keycode = (Common::KeyCode)ev.key.keysym.sym;
+ event.kbd.keycode = SDLToOSystemKeycode(ev.key.keysym.sym);
event.kbd.ascii = mapKey(ev.key.keysym.sym, (SDLMod)ev.key.keysym.mod, (Uint16)ev.key.keysym.unicode);
// Ctrl-Alt-<key> will change the GFX mode
@@ -361,7 +507,7 @@ bool SdlEventSource::handleKeyUp(SDL_Event &ev, Common::Event &event) {
bool SdlEventSource::handleMouseMotion(SDL_Event &ev, Common::Event &event) {
event.type = Common::EVENT_MOUSEMOVE;
- fillMouseEvent(event, ev.motion.x, ev.motion.y);
+ processMouseEvent(event, ev.motion.x, ev.motion.y);
return true;
}
@@ -384,7 +530,7 @@ bool SdlEventSource::handleMouseButtonDown(SDL_Event &ev, Common::Event &event)
else
return false;
- fillMouseEvent(event, ev.button.x, ev.button.y);
+ processMouseEvent(event, ev.button.x, ev.button.y);
return true;
}
@@ -400,7 +546,7 @@ bool SdlEventSource::handleMouseButtonUp(SDL_Event &ev, Common::Event &event) {
#endif
else
return false;
- fillMouseEvent(event, ev.button.x, ev.button.y);
+ processMouseEvent(event, ev.button.x, ev.button.y);
return true;
}
@@ -408,10 +554,10 @@ bool SdlEventSource::handleMouseButtonUp(SDL_Event &ev, Common::Event &event) {
bool SdlEventSource::handleJoyButtonDown(SDL_Event &ev, Common::Event &event) {
if (ev.jbutton.button == JOY_BUT_LMOUSE) {
event.type = Common::EVENT_LBUTTONDOWN;
- fillMouseEvent(event, _km.x, _km.y);
+ processMouseEvent(event, _km.x, _km.y);
} else if (ev.jbutton.button == JOY_BUT_RMOUSE) {
event.type = Common::EVENT_RBUTTONDOWN;
- fillMouseEvent(event, _km.x, _km.y);
+ processMouseEvent(event, _km.x, _km.y);
} else {
event.type = Common::EVENT_KEYDOWN;
switch (ev.jbutton.button) {
@@ -439,10 +585,10 @@ bool SdlEventSource::handleJoyButtonDown(SDL_Event &ev, Common::Event &event) {
bool SdlEventSource::handleJoyButtonUp(SDL_Event &ev, Common::Event &event) {
if (ev.jbutton.button == JOY_BUT_LMOUSE) {
event.type = Common::EVENT_LBUTTONUP;
- fillMouseEvent(event, _km.x, _km.y);
+ processMouseEvent(event, _km.x, _km.y);
} else if (ev.jbutton.button == JOY_BUT_RMOUSE) {
event.type = Common::EVENT_RBUTTONUP;
- fillMouseEvent(event, _km.x, _km.y);
+ processMouseEvent(event, _km.x, _km.y);
} else {
event.type = Common::EVENT_KEYUP;
switch (ev.jbutton.button) {
@@ -510,7 +656,7 @@ bool SdlEventSource::handleJoyAxisMotion(SDL_Event &ev, Common::Event &event) {
#endif
}
- fillMouseEvent(event, _km.x, _km.y);
+ processMouseEvent(event, _km.x, _km.y);
return true;
}
diff --git a/backends/events/sdl/sdl-events.h b/backends/events/sdl/sdl-events.h
index 805b76b108..2ba88c702b 100644
--- a/backends/events/sdl/sdl-events.h
+++ b/backends/events/sdl/sdl-events.h
@@ -24,6 +24,7 @@
#define BACKEND_EVENTS_SDL_H
#include "backends/platform/sdl/sdl-sys.h"
+#include "backends/graphics/sdl/sdl-graphics.h"
#include "common/events.h"
@@ -36,6 +37,8 @@ public:
SdlEventSource();
virtual ~SdlEventSource();
+ void setGraphicsManager(SdlGraphicsManager *gMan) { _graphicsManager = gMan; }
+
/**
* Gets and processes SDL events.
*/
@@ -77,6 +80,11 @@ protected:
int _lastScreenID;
/**
+ * The associated graphics manager.
+ */
+ SdlGraphicsManager *_graphicsManager;
+
+ /**
* Pre process an event before it is dispatched.
*/
virtual void preprocessEvents(SDL_Event *event) {}
@@ -108,9 +116,10 @@ protected:
//@}
/**
- * Assigns the mouse coords to the mouse event
+ * Assigns the mouse coords to the mouse event. Furthermore notify the
+ * graphics manager about the position change.
*/
- virtual void fillMouseEvent(Common::Event &event, int x, int y);
+ virtual void processMouseEvent(Common::Event &event, int x, int y);
/**
* Remaps key events. This allows platforms to configure
@@ -127,6 +136,11 @@ protected:
* Configures the key modifiers flags status
*/
virtual void SDLModToOSystemKeyFlags(SDLMod mod, Common::Event &event);
+
+ /**
+ * Translates SDL key codes to OSystem key codes
+ */
+ Common::KeyCode SDLToOSystemKeycode(const SDLKey key);
};
#endif
diff --git a/backends/events/symbiansdl/symbiansdl-events.cpp b/backends/events/symbiansdl/symbiansdl-events.cpp
index 40bd89b8dc..308621e697 100644
--- a/backends/events/symbiansdl/symbiansdl-events.cpp
+++ b/backends/events/symbiansdl/symbiansdl-events.cpp
@@ -63,7 +63,7 @@ bool SymbianSdlEventSource::remapKey(SDL_Event &ev, Common::Event &event) {
_km.y_down_count = 0;
}
event.type = Common::EVENT_MOUSEMOVE;
- fillMouseEvent(event, _km.x, _km.y);
+ processMouseEvent(event, _km.x, _km.y);
return true;
@@ -76,7 +76,7 @@ bool SymbianSdlEventSource::remapKey(SDL_Event &ev, Common::Event &event) {
_km.y_down_count = 0;
}
event.type = Common::EVENT_MOUSEMOVE;
- fillMouseEvent(event, _km.x, _km.y);
+ processMouseEvent(event, _km.x, _km.y);
return true;
@@ -89,7 +89,7 @@ bool SymbianSdlEventSource::remapKey(SDL_Event &ev, Common::Event &event) {
_km.x_down_count = 0;
}
event.type = Common::EVENT_MOUSEMOVE;
- fillMouseEvent(event, _km.x, _km.y);
+ processMouseEvent(event, _km.x, _km.y);
return true;
@@ -102,19 +102,19 @@ bool SymbianSdlEventSource::remapKey(SDL_Event &ev, Common::Event &event) {
_km.x_down_count = 0;
}
event.type = Common::EVENT_MOUSEMOVE;
- fillMouseEvent(event, _km.x, _km.y);
+ processMouseEvent(event, _km.x, _km.y);
return true;
case GUI::ACTION_LEFTCLICK:
event.type = (ev.type == SDL_KEYDOWN ? Common::EVENT_LBUTTONDOWN : Common::EVENT_LBUTTONUP);
- fillMouseEvent(event, _km.x, _km.y);
+ processMouseEvent(event, _km.x, _km.y);
return true;
case GUI::ACTION_RIGHTCLICK:
event.type = (ev.type == SDL_KEYDOWN ? Common::EVENT_RBUTTONDOWN : Common::EVENT_RBUTTONUP);
- fillMouseEvent(event, _km.x, _km.y);
+ processMouseEvent(event, _km.x, _km.y);
return true;
@@ -132,7 +132,7 @@ bool SymbianSdlEventSource::remapKey(SDL_Event &ev, Common::Event &event) {
if (_currentZone >= TOTAL_ZONES)
_currentZone = 0;
event.type = Common::EVENT_MOUSEMOVE;
- fillMouseEvent(event, _mouseXZone[_currentZone], _mouseYZone[_currentZone]);
+ processMouseEvent(event, _mouseXZone[_currentZone], _mouseYZone[_currentZone]);
SDL_WarpMouse(event.mouse.x, event.mouse.y);
}
@@ -195,4 +195,3 @@ bool SymbianSdlEventSource::remapKey(SDL_Event &ev, Common::Event &event) {
}
#endif
-
diff --git a/backends/events/symbiansdl/symbiansdl-events.h b/backends/events/symbiansdl/symbiansdl-events.h
index 7186fc9116..66c0b451eb 100644
--- a/backends/events/symbiansdl/symbiansdl-events.h
+++ b/backends/events/symbiansdl/symbiansdl-events.h
@@ -53,4 +53,3 @@ protected:
};
#endif
-
diff --git a/backends/events/webossdl/webossdl-events.cpp b/backends/events/webossdl/webossdl-events.cpp
index 102eb5802e..a6a2ed3644 100644
--- a/backends/events/webossdl/webossdl-events.cpp
+++ b/backends/events/webossdl/webossdl-events.cpp
@@ -159,7 +159,7 @@ bool WebOSSdlEventSource::handleMouseButtonDown(SDL_Event &ev, Common::Event &ev
if (getMillis() - dragStartTime < 250) {
dragging = true;
event.type = Common::EVENT_LBUTTONDOWN;
- fillMouseEvent(event, curX, curY);
+ processMouseEvent(event, curX, curY);
}
}
return true;
@@ -180,7 +180,7 @@ bool WebOSSdlEventSource::handleMouseButtonUp(SDL_Event &ev, Common::Event &even
if (dragging)
{
event.type = Common::EVENT_LBUTTONUP;
- fillMouseEvent(event, curX, curY);
+ processMouseEvent(event, curX, curY);
dragging = false;
return true;
}
@@ -195,7 +195,7 @@ bool WebOSSdlEventSource::handleMouseButtonUp(SDL_Event &ev, Common::Event &even
// left mouse click.
if (duration < 500) {
event.type = Common::EVENT_LBUTTONUP;
- fillMouseEvent(event, curX, curY);
+ processMouseEvent(event, curX, curY);
g_system->getEventManager()->pushEvent(event);
event.type = Common::EVENT_LBUTTONDOWN;
dragStartTime = getMillis();
@@ -205,7 +205,7 @@ bool WebOSSdlEventSource::handleMouseButtonUp(SDL_Event &ev, Common::Event &even
// right mouse click.
else if (duration < 1000) {
event.type = Common::EVENT_RBUTTONUP;
- fillMouseEvent(event, curX, curY);
+ processMouseEvent(event, curX, curY);
g_system->getEventManager()->pushEvent(event);
event.type = Common::EVENT_RBUTTONDOWN;
}
@@ -214,7 +214,7 @@ bool WebOSSdlEventSource::handleMouseButtonUp(SDL_Event &ev, Common::Event &even
// middle mouse click.
else {
event.type = Common::EVENT_MBUTTONUP;
- fillMouseEvent(event, curX, curY);
+ processMouseEvent(event, curX, curY);
g_system->getEventManager()->pushEvent(event);
event.type = Common::EVENT_MBUTTONDOWN;
}
@@ -240,7 +240,7 @@ bool WebOSSdlEventSource::handleMouseMotion(SDL_Event &ev, Common::Event &event)
dragDiffX += ev.motion.xrel;
dragDiffY += ev.motion.yrel;
event.type = Common::EVENT_MOUSEMOVE;
- fillMouseEvent(event, curX, curY);
+ processMouseEvent(event, curX, curY);
}
return true;
}
diff --git a/backends/events/wincesdl/wincesdl-events.cpp b/backends/events/wincesdl/wincesdl-events.cpp
index 1116cbbb8d..e73a4e66dd 100644
--- a/backends/events/wincesdl/wincesdl-events.cpp
+++ b/backends/events/wincesdl/wincesdl-events.cpp
@@ -43,7 +43,7 @@ void WINCESdlEventSource::init(WINCESdlGraphicsManager *graphicsMan) {
_graphicsMan = graphicsMan;
}
-void WINCESdlEventSource::fillMouseEvent(Common::Event &event, int x, int y) {
+void WINCESdlEventSource::processMouseEvent(Common::Event &event, int x, int y) {
event.mouse.x = x;
event.mouse.y = y;
@@ -153,7 +153,7 @@ bool WINCESdlEventSource::pollEvent(Common::Event &event) {
case SDL_MOUSEMOTION:
event.type = Common::EVENT_MOUSEMOVE;
- fillMouseEvent(event, ev.motion.x, ev.motion.y);
+ processMouseEvent(event, ev.motion.x, ev.motion.y);
_graphicsMan->setMousePos(event.mouse.x, event.mouse.y);
return true;
@@ -165,7 +165,7 @@ bool WINCESdlEventSource::pollEvent(Common::Event &event) {
event.type = Common::EVENT_RBUTTONDOWN;
else
break;
- fillMouseEvent(event, ev.button.x, ev.button.y);
+ processMouseEvent(event, ev.button.x, ev.button.y);
if (event.mouse.x > _tapX)
@@ -241,7 +241,7 @@ bool WINCESdlEventSource::pollEvent(Common::Event &event) {
_rbutton = false;
}
- fillMouseEvent(event, ev.button.x, ev.button.y);
+ processMouseEvent(event, ev.button.x, ev.button.y);
if (freeLookActive && !_closeClick) {
_tapX = event.mouse.x;
@@ -261,8 +261,7 @@ bool WINCESdlEventSource::pollEvent(Common::Event &event) {
return true;
case SDL_VIDEOEXPOSE:
- // HACK: Send a fake event, handled by SdlGraphicsManager
- event.type = (Common::EventType)OSystem_SDL::kSdlEventExpose;
+ _graphicsMan->notifyVideoExpose();
break;
case SDL_QUIT:
@@ -279,9 +278,8 @@ bool WINCESdlEventSource::pollEvent(Common::Event &event) {
if (ev.active.state & SDL_APPINPUTFOCUS) {
_graphicsMan->_hasfocus = ev.active.gain;
SDL_PauseAudio(!_graphicsMan->_hasfocus);
- if (_graphicsMan->_hasfocus) {
- event.type = (Common::EventType)OSystem_SDL::kSdlEventExpose;
- }
+ if (_graphicsMan->_hasfocus)
+ _graphicsMan->notifyVideoExpose();
}
break;
}
diff --git a/backends/events/wincesdl/wincesdl-events.h b/backends/events/wincesdl/wincesdl-events.h
index deeee6196c..5eff630c2a 100644
--- a/backends/events/wincesdl/wincesdl-events.h
+++ b/backends/events/wincesdl/wincesdl-events.h
@@ -43,7 +43,7 @@ public:
// Overloaded from SDL backend (toolbar handling)
bool pollEvent(Common::Event &event);
// Overloaded from SDL backend (mouse and new scaler handling)
- void fillMouseEvent(Common::Event &event, int x, int y);
+ void processMouseEvent(Common::Event &event, int x, int y);
protected: