aboutsummaryrefslogtreecommitdiff
path: root/backends/events
diff options
context:
space:
mode:
authorAlejandro Marzini2010-06-29 01:08:36 +0000
committerAlejandro Marzini2010-06-29 01:08:36 +0000
commitfd77e4b09c8ca80c8e449ad7266afaa494f98500 (patch)
tree232ce052cfecd5f4d32d15dabc6fc2d2e46e7a43 /backends/events
parent494755cc36d4bd6bac46c63b6624fe5a294c493a (diff)
downloadscummvm-rg350-fd77e4b09c8ca80c8e449ad7266afaa494f98500.tar.gz
scummvm-rg350-fd77e4b09c8ca80c8e449ad7266afaa494f98500.tar.bz2
scummvm-rg350-fd77e4b09c8ca80c8e449ad7266afaa494f98500.zip
Modularized Linuxmoto port.
svn-id: r50474
Diffstat (limited to 'backends/events')
-rw-r--r--backends/events/linuxmotosdl/linuxmotosdl-events.cpp248
-rw-r--r--backends/events/linuxmotosdl/linuxmotosdl-events.h41
-rw-r--r--backends/events/sdl/sdl-events.h5
3 files changed, 292 insertions, 2 deletions
diff --git a/backends/events/linuxmotosdl/linuxmotosdl-events.cpp b/backends/events/linuxmotosdl/linuxmotosdl-events.cpp
new file mode 100644
index 0000000000..f27042ea5d
--- /dev/null
+++ b/backends/events/linuxmotosdl/linuxmotosdl-events.cpp
@@ -0,0 +1,248 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * $URL$
+ * $Id$
+ *
+ */
+
+#if defined(LINUXMOTO)
+
+#include "backends/events/linuxmotosdl/linuxmotosdl-events.h"
+#include "backends/platform/linuxmoto/linuxmoto-sdl.h"
+
+enum {
+ GFX_HALF = 12
+};
+
+LinuxmotoSdlEventManager::LinuxmotoSdlEventManager(Common::EventSource *boss)
+ :
+ SdlEventManager(boss) {
+
+}
+
+LinuxmotoSdlEventManager::~LinuxmotoSdlEventManager() {
+
+}
+
+void LinuxmotoSdlEventManager::preprocessEvents(SDL_Event *event) {
+ if (event->type == SDL_ACTIVEEVENT) {
+ if (event->active.state == SDL_APPINPUTFOCUS && !event->active.gain) {
+ ((OSystem_SDL* )g_system)->getMixerManager()->suspendAudio();
+ for (;;) {
+ if (!SDL_WaitEvent(event)) {
+ SDL_Delay(10);
+ continue;
+ }
+ if (event->type == SDL_QUIT)
+ return;
+ if (event->type != SDL_ACTIVEEVENT)
+ continue;
+ if (event->active.state == SDL_APPINPUTFOCUS && event->active.gain) {
+ ((OSystem_SDL* )g_system)->getMixerManager()->resumeAudio();
+ return;
+ }
+ }
+ }
+ }
+}
+
+static int mapKey(SDLKey key, SDLMod mod, Uint16 unicode) {
+ if (key >= SDLK_F1 && key <= SDLK_F9) {
+ return key - SDLK_F1 + Common::ASCII_F1;
+ } else if (key >= SDLK_KP0 && key <= SDLK_KP9) {
+ return key - SDLK_KP0 + '0';
+ } else if (key >= SDLK_UP && key <= SDLK_PAGEDOWN) {
+ return key;
+ } else if (unicode) {
+ return unicode;
+ } else if (key >= 'a' && key <= 'z' && (mod & KMOD_SHIFT)) {
+ return key & ~0x20;
+ } else if (key >= SDLK_NUMLOCK && key <= SDLK_EURO) {
+ return 0;
+ }
+ return key;
+}
+
+bool LinuxmotoSdlEventManager::remapKey(SDL_Event &ev, Common::Event &event) {
+ if (false) {}
+
+ // Motorol A1200/E6/A1600 remapkey by Lubomyr
+#ifdef MOTOEZX
+ // Quit on MOD+Camera Key on A1200
+ if (ev.key.keysym.sym == SDLK_e) {
+ event.type = Common::EVENT_QUIT;
+ return true;
+ }
+ // '1' Bypass security protection - MOD+Call key
+ if (ev.key.keysym.sym == SDLK_f) {
+ ev.key.keysym.sym = SDLK_1;
+ }
+ // F5 Game Menu - Call key
+ else if (ev.key.keysym.sym == SDLK_SPACE) {
+ ev.key.keysym.sym = SDLK_F5;
+ }
+ // VirtualKeyboard - Camera key
+ else if (ev.key.keysym.sym == SDLK_PAUSE) {
+ ev.key.keysym.sym = SDLK_F7;
+ }
+ // Enter - mod+fire key
+ else if (ev.key.keysym.sym == SDLK_b) {
+ ev.key.keysym.sym = SDLK_RETURN;
+ }
+ // '3' - mod+up key
+ else if (ev.key.keysym.sym == SDLK_j) {
+ ev.key.keysym.sym = SDLK_3;
+ }
+ // '6' - mod+up key
+ else if (ev.key.keysym.sym == SDLK_i) {
+ ev.key.keysym.sym = SDLK_6;
+ }
+ // 'y' - mod+right key
+ else if (ev.key.keysym.sym == SDLK_g) {
+ ev.key.keysym.sym = SDLK_y;
+ }
+ // 'n' - mod+right key
+ else if (ev.key.keysym.sym == SDLK_h) {
+ ev.key.keysym.sym = SDLK_n;
+ }
+ // mod+vol'+' -> volume'+'
+ else if (ev.key.keysym.sym == SDLK_c) {
+ ev.key.keysym.sym = SDLK_RIGHTBRACKET;
+ }
+ // mod+vol'-' -> volume'-'
+ else if (ev.key.keysym.sym == SDLK_d) {
+ ev.key.keysym.sym = SDLK_LEFTBRACKET;
+ }
+#endif
+
+#ifdef MOTOMAGX
+ // Quit on Clr
+ if (ev.key.keysym.sym == SDLK_BACKSPACE) {
+ event.type = Common::EVENT_QUIT;
+ return true;
+ }
+ // Game Menu - Left Soft key
+ else if (ev.key.keysym.sym == SDLK_F9) {
+ ev.key.keysym.sym = SDLK_F5;
+ }
+ // VirtualKeyboard - Right Soft key
+ else if (ev.key.keysym.sym == SDLK_F11) {
+ ev.key.keysym.sym = SDLK_F7;
+ }
+#endif
+
+// Joystick to Mouse
+ else if (ev.key.keysym.sym == SDLK_LEFT) {
+ if (ev.type == SDL_KEYDOWN) {
+ _km.x_vel = -1;
+ _km.x_down_count = 1;
+ } else {
+ _km.x_vel = 0;
+ _km.x_down_count = 0;
+ }
+
+ event.type = Common::EVENT_MOUSEMOVE;
+ fillMouseEvent(event, _km.x, _km.y);
+ return true;
+ } else if (ev.key.keysym.sym == SDLK_RIGHT) {
+ if (ev.type == SDL_KEYDOWN) {
+ _km.x_vel = 1;
+ _km.x_down_count = 1;
+ } else {
+ _km.x_vel = 0;
+ _km.x_down_count = 0;
+ }
+
+ event.type = Common::EVENT_MOUSEMOVE;
+ fillMouseEvent(event, _km.x, _km.y);
+
+ return true;
+ } else if (ev.key.keysym.sym == SDLK_DOWN) {
+ if (ev.type == SDL_KEYDOWN) {
+ _km.y_vel = 1;
+ _km.y_down_count = 1;
+ } else {
+ _km.y_vel = 0;
+ _km.y_down_count = 0;
+ }
+
+ event.type = Common::EVENT_MOUSEMOVE;
+ fillMouseEvent(event, _km.x, _km.y);
+
+ return true;
+ } else if (ev.key.keysym.sym == SDLK_UP) {
+ if (ev.type == SDL_KEYDOWN) {
+ _km.y_vel = -1;
+ _km.y_down_count = 1;
+ } else {
+ _km.y_vel = 0;
+ _km.y_down_count = 0;
+ }
+
+ event.type = Common::EVENT_MOUSEMOVE;
+ fillMouseEvent(event, _km.x, _km.y);
+
+ return true;
+ } else if (ev.key.keysym.sym == SDLK_RETURN) {
+ // Joystick center to pressing Left Mouse
+ if (ev.key.type == SDL_KEYDOWN) {
+ event.type = Common::EVENT_LBUTTONDOWN;
+ } else {
+ event.type = Common::EVENT_LBUTTONUP;
+ }
+
+ fillMouseEvent(event, _km.x, _km.y);
+
+ return true;
+ } else if (ev.key.keysym.sym == SDLK_PLUS) {
+ // Volume Up to pressing Right Mouse
+ if (ev.key.type == SDL_KEYDOWN ) {
+ event.type = Common::EVENT_RBUTTONDOWN;
+ } else {
+ event.type = Common::EVENT_RBUTTONUP;
+ }
+ fillMouseEvent(event, _km.x, _km.y);
+
+ return true;
+ } else if (ev.key.keysym.sym == SDLK_MINUS) {
+ // Volume Down to pressing Left Mouse
+ if (ev.key.type == SDL_KEYDOWN) {
+ event.type = Common::EVENT_LBUTTONDOWN;
+ } else {
+ event.type = Common::EVENT_LBUTTONUP;
+ }
+
+ fillMouseEvent(event, _km.x, _km.y);
+
+ return true;
+ } else {
+ // Let the events fall through if we didn't change them, this may not be the best way to
+ // set it up, but i'm not sure how sdl would like it if we let if fall through then redid it though.
+ // and yes i have an huge terminal size so i dont wrap soon enough.
+ event.type = Common::EVENT_KEYDOWN;
+ event.kbd.keycode = (Common::KeyCode)ev.key.keysym.sym;
+ event.kbd.ascii = mapKey(ev.key.keysym.sym, ev.key.keysym.mod, ev.key.keysym.unicode);
+ }
+
+ return false;
+}
+
+#endif
diff --git a/backends/events/linuxmotosdl/linuxmotosdl-events.h b/backends/events/linuxmotosdl/linuxmotosdl-events.h
new file mode 100644
index 0000000000..d7ad715adb
--- /dev/null
+++ b/backends/events/linuxmotosdl/linuxmotosdl-events.h
@@ -0,0 +1,41 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * $URL$
+ * $Id$
+ *
+ */
+
+#if !defined(BACKEND_EVENTS_SDL_LINUXMOTO_H) && !defined(DISABLE_DEFAULT_EVENTMANAGER)
+#define BACKEND_EVENTS_SDL_LINUXMOTO_H
+
+#include "backends/events/sdl/sdl-events.h"
+
+class LinuxmotoSdlEventManager : public SdlEventManager {
+public:
+ LinuxmotoSdlEventManager(Common::EventSource *boss);
+ virtual ~LinuxmotoSdlEventManager();
+
+protected:
+ virtual void preprocessEvents(SDL_Event *event);
+ virtual bool remapKey(SDL_Event &ev, Common::Event &event);
+};
+
+#endif
diff --git a/backends/events/sdl/sdl-events.h b/backends/events/sdl/sdl-events.h
index 7a399cc186..0f6cb998a8 100644
--- a/backends/events/sdl/sdl-events.h
+++ b/backends/events/sdl/sdl-events.h
@@ -43,6 +43,8 @@ public:
virtual void resetKeyboadEmulation(int16 x_max, int16 y_max);
+ virtual void toggleMouseGrab();
+
protected:
virtual void preprocessEvents(SDL_Event *event) {}
@@ -77,8 +79,7 @@ protected:
virtual bool handleJoyButtonUp(SDL_Event &ev, Common::Event &event);
virtual bool handleJoyAxisMotion(SDL_Event &ev, Common::Event &event);
- virtual void fillMouseEvent(Common::Event &event, int x, int y); // overloaded by CE backend
- virtual void toggleMouseGrab();
+ virtual void fillMouseEvent(Common::Event &event, int x, int y);
virtual void handleKbdMouse();
virtual bool remapKey(SDL_Event &ev, Common::Event &event);