aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohannes Schickel2010-10-13 15:42:16 +0000
committerJohannes Schickel2010-10-13 15:42:16 +0000
commita2b96a2516cd87203b22f7496a8d5a6b65749da3 (patch)
tree11617735d666c73cebd6979f7df32e01fb09fea1
parent75e8452b6e6a2bf4fb2f588aa00b428a60d873b5 (diff)
downloadscummvm-rg350-a2b96a2516cd87203b22f7496a8d5a6b65749da3.tar.gz
scummvm-rg350-a2b96a2516cd87203b22f7496a8d5a6b65749da3.tar.bz2
scummvm-rg350-a2b96a2516cd87203b22f7496a8d5a6b65749da3.zip
OPENGL: Replace SdlEventManager by SdlEventSource.
Formerly SdlEventManager was a subclass of DefaultEventManager but did not really have anything in common with the idea of our EventManager interface. Now I made a new object SdlEventSource which only subclasses EventSource and which is responsible for obtaining events from SDL (and processing them). svn-id: r53433
-rw-r--r--backends/events/sdl/sdl-events.cpp45
-rw-r--r--backends/events/sdl/sdl-events.h14
-rw-r--r--backends/graphics/sdl/sdl-graphics.cpp2
-rw-r--r--backends/modular-backend.h2
-rw-r--r--backends/platform/sdl/sdl.cpp7
-rw-r--r--backends/platform/sdl/sdl.h4
6 files changed, 32 insertions, 42 deletions
diff --git a/backends/events/sdl/sdl-events.cpp b/backends/events/sdl/sdl-events.cpp
index 20b7b7e957..deea8d35ca 100644
--- a/backends/events/sdl/sdl-events.cpp
+++ b/backends/events/sdl/sdl-events.cpp
@@ -48,13 +48,8 @@
#define JOY_BUT_SPACE 4
#define JOY_BUT_F5 5
-SdlEventManager::SdlEventManager(Common::EventSource *boss)
- :
- _scrollLock(false),
- _joystick(0),
- _lastScreenID(0),
- DefaultEventManager(boss) {
-
+SdlEventSource::SdlEventSource()
+ : _scrollLock(false), _joystick(0), _lastScreenID(0), EventSource() {
// Reset mouse state
memset(&_km, 0, sizeof(_km));
@@ -73,12 +68,12 @@ SdlEventManager::SdlEventManager(Common::EventSource *boss)
}
}
-SdlEventManager::~SdlEventManager() {
+SdlEventSource::~SdlEventSource() {
if (_joystick)
SDL_JoystickClose(_joystick);
}
-int SdlEventManager::mapKey(SDLKey key, SDLMod mod, Uint16 unicode) {
+int SdlEventSource::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) {
@@ -95,7 +90,7 @@ int SdlEventManager::mapKey(SDLKey key, SDLMod mod, Uint16 unicode) {
return key;
}
-void SdlEventManager::fillMouseEvent(Common::Event &event, int x, int y) {
+void SdlEventSource::fillMouseEvent(Common::Event &event, int x, int y) {
event.mouse.x = x;
event.mouse.y = y;
@@ -104,7 +99,7 @@ void SdlEventManager::fillMouseEvent(Common::Event &event, int x, int y) {
_km.y = y;
}
-void SdlEventManager::handleKbdMouse() {
+void SdlEventSource::handleKbdMouse() {
uint32 curTime = g_system->getMillis();
if (curTime >= _km.last_time + _km.delay_time) {
_km.last_time = curTime;
@@ -173,7 +168,7 @@ void SdlEventManager::handleKbdMouse() {
}
}
-void SdlEventManager::SDLModToOSystemKeyFlags(SDLMod mod, Common::Event &event) {
+void SdlEventSource::SDLModToOSystemKeyFlags(SDLMod mod, Common::Event &event) {
event.kbd.flags = 0;
@@ -198,7 +193,7 @@ void SdlEventManager::SDLModToOSystemKeyFlags(SDLMod mod, Common::Event &event)
event.kbd.flags |= Common::KBD_CAPS;
}
-bool SdlEventManager::pollSdlEvent(Common::Event &event) {
+bool SdlEventSource::pollEvent(Common::Event &event) {
handleKbdMouse();
// If the screen changed, send an Common::EVENT_SCREEN_CHANGED
@@ -219,7 +214,7 @@ bool SdlEventManager::pollSdlEvent(Common::Event &event) {
return false;
}
-bool SdlEventManager::dispatchSDLEvent(SDL_Event &ev, Common::Event &event) {
+bool SdlEventSource::dispatchSDLEvent(SDL_Event &ev, Common::Event &event) {
switch (ev.type) {
case SDL_KEYDOWN:
return handleKeyDown(ev, event);
@@ -260,7 +255,7 @@ bool SdlEventManager::dispatchSDLEvent(SDL_Event &ev, Common::Event &event) {
}
-bool SdlEventManager::handleKeyDown(SDL_Event &ev, Common::Event &event) {
+bool SdlEventSource::handleKeyDown(SDL_Event &ev, Common::Event &event) {
SDLModToOSystemKeyFlags(SDL_GetModState(), event);
@@ -312,7 +307,7 @@ bool SdlEventManager::handleKeyDown(SDL_Event &ev, Common::Event &event) {
return true;
}
-bool SdlEventManager::handleKeyUp(SDL_Event &ev, Common::Event &event) {
+bool SdlEventSource::handleKeyUp(SDL_Event &ev, Common::Event &event) {
if (remapKey(ev, event))
return true;
@@ -330,14 +325,14 @@ bool SdlEventManager::handleKeyUp(SDL_Event &ev, Common::Event &event) {
return true;
}
-bool SdlEventManager::handleMouseMotion(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);
return true;
}
-bool SdlEventManager::handleMouseButtonDown(SDL_Event &ev, Common::Event &event) {
+bool SdlEventSource::handleMouseButtonDown(SDL_Event &ev, Common::Event &event) {
if (ev.button.button == SDL_BUTTON_LEFT)
event.type = Common::EVENT_LBUTTONDOWN;
else if (ev.button.button == SDL_BUTTON_RIGHT)
@@ -360,7 +355,7 @@ bool SdlEventManager::handleMouseButtonDown(SDL_Event &ev, Common::Event &event)
return true;
}
-bool SdlEventManager::handleMouseButtonUp(SDL_Event &ev, Common::Event &event) {
+bool SdlEventSource::handleMouseButtonUp(SDL_Event &ev, Common::Event &event) {
if (ev.button.button == SDL_BUTTON_LEFT)
event.type = Common::EVENT_LBUTTONUP;
else if (ev.button.button == SDL_BUTTON_RIGHT)
@@ -376,7 +371,7 @@ bool SdlEventManager::handleMouseButtonUp(SDL_Event &ev, Common::Event &event) {
return true;
}
-bool SdlEventManager::handleJoyButtonDown(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);
@@ -407,7 +402,7 @@ bool SdlEventManager::handleJoyButtonDown(SDL_Event &ev, Common::Event &event) {
return true;
}
-bool SdlEventManager::handleJoyButtonUp(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);
@@ -438,7 +433,7 @@ bool SdlEventManager::handleJoyButtonUp(SDL_Event &ev, Common::Event &event) {
return true;
}
-bool SdlEventManager::handleJoyAxisMotion(SDL_Event &ev, Common::Event &event) {
+bool SdlEventSource::handleJoyAxisMotion(SDL_Event &ev, Common::Event &event) {
int axis = ev.jaxis.value;
if ( axis > JOY_DEADZONE) {
axis -= JOY_DEADZONE;
@@ -486,7 +481,7 @@ bool SdlEventManager::handleJoyAxisMotion(SDL_Event &ev, Common::Event &event) {
return true;
}
-bool SdlEventManager::remapKey(SDL_Event &ev, Common::Event &event) {
+bool SdlEventSource::remapKey(SDL_Event &ev, Common::Event &event) {
#ifdef LINUPY
// On Yopy map the End button to quit
if ((ev.key.keysym.sym == 293)) {
@@ -554,14 +549,14 @@ bool SdlEventManager::remapKey(SDL_Event &ev, Common::Event &event) {
return false;
}
-void SdlEventManager::toggleMouseGrab() {
+void SdlEventSource::toggleMouseGrab() {
if (SDL_WM_GrabInput(SDL_GRAB_QUERY) == SDL_GRAB_OFF)
SDL_WM_GrabInput(SDL_GRAB_ON);
else
SDL_WM_GrabInput(SDL_GRAB_OFF);
}
-void SdlEventManager::resetKeyboadEmulation(int16 x_max, int16 y_max) {
+void SdlEventSource::resetKeyboadEmulation(int16 x_max, int16 y_max) {
_km.x_max = x_max;
_km.y_max = y_max;
_km.delay_time = 25;
diff --git a/backends/events/sdl/sdl-events.h b/backends/events/sdl/sdl-events.h
index 4bc2277fcd..2c00ab0669 100644
--- a/backends/events/sdl/sdl-events.h
+++ b/backends/events/sdl/sdl-events.h
@@ -35,17 +35,17 @@
#endif
/**
- * The SDL event manager class.
+ * The SDL event source.
*/
-class SdlEventManager : public DefaultEventManager {
-public:
- SdlEventManager(Common::EventSource *boss);
- virtual ~SdlEventManager();
+class SdlEventSource : public virtual Common::EventSource {
+public:
+ SdlEventSource();
+ virtual ~SdlEventSource();
/**
- * Gets and proccess SDL events
+ * Gets and processes SDL events.
*/
- virtual bool pollSdlEvent(Common::Event &event);
+ virtual bool pollEvent(Common::Event &event);
/**
* Resets keyboard emulation after a video screen change
diff --git a/backends/graphics/sdl/sdl-graphics.cpp b/backends/graphics/sdl/sdl-graphics.cpp
index d4aad34c1e..2c0320f5d0 100644
--- a/backends/graphics/sdl/sdl-graphics.cpp
+++ b/backends/graphics/sdl/sdl-graphics.cpp
@@ -821,7 +821,7 @@ bool SdlGraphicsManager::loadGFXMode() {
SDL_SetColorKey(_osdSurface, SDL_RLEACCEL | SDL_SRCCOLORKEY | SDL_SRCALPHA, kOSDColorKey);
#endif
- ((SdlEventManager *)g_system->getEventManager())->resetKeyboadEmulation(
+ ((SdlEventSource *)g_system)->resetKeyboadEmulation(
_videoMode.screenWidth * _videoMode.scaleFactor - 1,
effectiveScreenHeight() - 1);
diff --git a/backends/modular-backend.h b/backends/modular-backend.h
index b7920d9d71..ed638fe303 100644
--- a/backends/modular-backend.h
+++ b/backends/modular-backend.h
@@ -52,7 +52,7 @@
* And, it should also initialize all the managers variables
* declared in this class, or override their related functions.
*/
-class ModularBackend : public OSystem, public Common::EventSource {
+class ModularBackend : public OSystem, public virtual Common::EventSource {
public:
ModularBackend();
virtual ~ModularBackend();
diff --git a/backends/platform/sdl/sdl.cpp b/backends/platform/sdl/sdl.cpp
index 5b38cbb9b4..38bf4d0ba9 100644
--- a/backends/platform/sdl/sdl.cpp
+++ b/backends/platform/sdl/sdl.cpp
@@ -112,7 +112,7 @@ void OSystem_SDL::initBackend() {
// Creates the backend managers, if they don't exist yet (we check
// for this to allow subclasses to provide their own).
if (_eventManager == 0)
- _eventManager = new SdlEventManager(this);
+ _eventManager = new DefaultEventManager(this);
// We have to initialize the graphics manager before the event manager
// so the virtual keyboard can be initialized, but we have to add the
@@ -289,11 +289,6 @@ void OSystem_SDL::setupIcon() {
free(icon);
}
-bool OSystem_SDL::pollEvent(Common::Event &event) {
- assert(_eventManager);
- return ((SdlEventManager *)_eventManager)->pollSdlEvent(event);
-}
-
uint32 OSystem_SDL::getMillis() {
uint32 millis = SDL_GetTicks();
g_eventRec.processMillis(millis);
diff --git a/backends/platform/sdl/sdl.h b/backends/platform/sdl/sdl.h
index 17d4dc4ed9..9ef2573dad 100644
--- a/backends/platform/sdl/sdl.h
+++ b/backends/platform/sdl/sdl.h
@@ -34,11 +34,12 @@
#include "backends/modular-backend.h"
#include "backends/mixer/sdl/sdl-mixer.h"
+#include "backends/events/sdl/sdl-events.h"
/**
* Base OSystem class for all SDL ports.
*/
-class OSystem_SDL : public ModularBackend {
+class OSystem_SDL : public ModularBackend, public SdlEventSource {
public:
OSystem_SDL();
virtual ~OSystem_SDL();
@@ -66,7 +67,6 @@ public:
virtual void addSysArchivesToSearchSet(Common::SearchSet &s, int priority = 0);
virtual Common::SeekableReadStream *createConfigReadStream();
virtual Common::WriteStream *createConfigWriteStream();
- virtual bool pollEvent(Common::Event &event);
virtual uint32 getMillis();
virtual void delayMillis(uint msecs);
virtual void getTimeAndDate(TimeDate &td) const;