diff options
-rw-r--r-- | backends/events/sdl/sdl-events.cpp | 44 | ||||
-rw-r--r-- | backends/graphics/graphics.h | 35 | ||||
-rw-r--r-- | backends/graphics/linuxmotosdl/linuxmotosdl-graphics.cpp | 23 | ||||
-rw-r--r-- | backends/graphics/linuxmotosdl/linuxmotosdl-graphics.h | 4 | ||||
-rw-r--r-- | backends/graphics/openglsdl/openglsdl-graphics.cpp | 24 | ||||
-rw-r--r-- | backends/graphics/openglsdl/openglsdl-graphics.h | 7 | ||||
-rw-r--r-- | backends/graphics/sdl/sdl-graphics.cpp | 83 | ||||
-rw-r--r-- | backends/graphics/sdl/sdl-graphics.h | 21 |
8 files changed, 102 insertions, 139 deletions
diff --git a/backends/events/sdl/sdl-events.cpp b/backends/events/sdl/sdl-events.cpp index df9efe54b1..0fa7c1d8ab 100644 --- a/backends/events/sdl/sdl-events.cpp +++ b/backends/events/sdl/sdl-events.cpp @@ -102,9 +102,6 @@ void SdlEventManager::fillMouseEvent(Common::Event &event, int x, int y) { // Update the "keyboard mouse" coords _km.x = x; _km.y = y; - - // Adjust for the screen scaling - ((OSystem_SDL *)g_system)->getGraphicsManager()->adjustMouseEvent(event); } void SdlEventManager::handleKbdMouse() { @@ -241,10 +238,6 @@ bool SdlEventManager::dispatchSDLEvent(SDL_Event &ev, Common::Event &event) { case SDL_JOYAXISMOTION: return handleJoyAxisMotion(ev, event); - case SDL_VIDEOEXPOSE: - ((OSystem_SDL *) g_system)->getGraphicsManager()->forceFullRedraw(); - break; - case SDL_QUIT: event.type = Common::EVENT_QUIT; return true; @@ -266,32 +259,6 @@ bool SdlEventManager::handleKeyDown(SDL_Event &ev, Common::Event &event) { if (_scrollLock) event.kbd.flags |= Common::KBD_SCRL; - // Alt-Return and Alt-Enter toggle full screen mode - if (event.kbd.hasFlags(Common::KBD_ALT) && (ev.key.keysym.sym == SDLK_RETURN || ev.key.keysym.sym == SDLK_KP_ENTER)) { - ((OSystem_SDL *) g_system)->getGraphicsManager()->toggleFullScreen(); - return false; - } - - // Alt-S: Create a screenshot - if (event.kbd.hasFlags(Common::KBD_ALT) && ev.key.keysym.sym == 's') { - char filename[20]; - - for (int n = 0;; n++) { - SDL_RWops *file; - - sprintf(filename, "scummvm%05d.bmp", n); - file = SDL_RWFromFile(filename, "r"); - if (!file) - break; - SDL_RWclose(file); - } - if (((OSystem_SDL *) g_system)->getGraphicsManager()->saveScreenshot(filename)) - printf("Saved '%s'\n", filename); - else - printf("Could not save screenshot!\n"); - return false; - } - // Ctrl-m toggles mouse capture if (event.kbd.hasFlags(Common::KBD_CTRL) && ev.key.keysym.sym == 'm') { toggleMouseGrab(); @@ -323,12 +290,6 @@ bool SdlEventManager::handleKeyDown(SDL_Event &ev, Common::Event &event) { return true; } - // Ctrl-Alt-<key> will change the GFX mode - if ((event.kbd.flags & (Common::KBD_CTRL|Common::KBD_ALT)) == (Common::KBD_CTRL|Common::KBD_ALT)) { - if (((OSystem_SDL *) g_system)->getGraphicsManager()->handleScalerHotkeys((Common::KeyCode)ev.key.keysym.sym)) - return false; - } - if (remapKey(ev, event)) return true; @@ -354,10 +315,6 @@ bool SdlEventManager::handleKeyUp(SDL_Event &ev, Common::Event &event) { if (_scrollLock) event.kbd.flags |= Common::KBD_SCRL; - if (((OSystem_SDL *) g_system)->getGraphicsManager()->isScalerHotkey(event)) - // Swallow these key up events - return false; - return true; } @@ -365,7 +322,6 @@ bool SdlEventManager::handleMouseMotion(SDL_Event &ev, Common::Event &event) { event.type = Common::EVENT_MOUSEMOVE; fillMouseEvent(event, ev.motion.x, ev.motion.y); - ((OSystem_SDL *) g_system)->getGraphicsManager()->setMousePos(event.mouse.x, event.mouse.y); return true; } diff --git a/backends/graphics/graphics.h b/backends/graphics/graphics.h index 9eb354aee4..0a123d2cb4 100644 --- a/backends/graphics/graphics.h +++ b/backends/graphics/graphics.h @@ -85,41 +85,6 @@ public: virtual void disableCursorPalette(bool disable) = 0; virtual void displayMessageOnOSD(const char *msg) {} - - /** - * Marks the screen for a full redraw - */ - virtual void forceFullRedraw() {}; - - /** - * Handles the scalar hotkeys - */ - virtual bool handleScalerHotkeys(Common::KeyCode key) { return false; }; - - /** - * Returns if the event passed is a hotkey for the graphics scalers - */ - virtual bool isScalerHotkey(const Common::Event &event) { return false; }; - - /** - * Adjusts mouse event coords for the current scaler - */ - virtual void adjustMouseEvent(Common::Event &event) {}; - - /** - * Updates the mouse cursor position - */ - virtual void setMousePos(int x, int y) {}; - - /** - * Toggles fullscreen - */ - virtual void toggleFullScreen() {}; - - /** - * Saves a screenshot to a file - */ - virtual bool saveScreenshot(const char *filename) { return false; }; }; #endif diff --git a/backends/graphics/linuxmotosdl/linuxmotosdl-graphics.cpp b/backends/graphics/linuxmotosdl/linuxmotosdl-graphics.cpp index 390b27e5a5..dbedb2e1a7 100644 --- a/backends/graphics/linuxmotosdl/linuxmotosdl-graphics.cpp +++ b/backends/graphics/linuxmotosdl/linuxmotosdl-graphics.cpp @@ -474,16 +474,21 @@ void LinuxmotoSdlGraphicsManager::warpMouse(int x, int y) { SdlGraphicsManager::warpMouse(x, y); } -void LinuxmotoSdlGraphicsManager::adjustMouseEvent(Common::Event &event) { - if (!_overlayVisible) { - if (_videoMode.mode == GFX_HALF) { - event.mouse.x *= 2; - event.mouse.y *= 2; +void LinuxmotoSdlGraphicsManager::adjustMouseEvent(const Common::Event &event) { + if (!event.synthetic) { + Common::Event newEvent(event); + newEvent.synthetic = true; + if (!_overlayVisible) { + if (_videoMode.mode == GFX_HALF) { + event.mouse.x *= 2; + event.mouse.y *= 2; + } + newEvent.mouse.x /= _videoMode.scaleFactor; + newEvent.mouse.y /= _videoMode.scaleFactor; + if (_videoMode.aspectRatioCorrection) + newEvent.mouse.y = aspect2Real(newEvent.mouse.y); } - event.mouse.x /= _videoMode.scaleFactor; - event.mouse.y /= _videoMode.scaleFactor; - if (_videoMode.aspectRatioCorrection) - event.mouse.y = aspect2Real(event.mouse.y); + g_system->getEventManager()->pushEvent(newEvent); } } diff --git a/backends/graphics/linuxmotosdl/linuxmotosdl-graphics.h b/backends/graphics/linuxmotosdl/linuxmotosdl-graphics.h index ce24e23992..1b387ca189 100644 --- a/backends/graphics/linuxmotosdl/linuxmotosdl-graphics.h +++ b/backends/graphics/linuxmotosdl/linuxmotosdl-graphics.h @@ -42,7 +42,9 @@ public: virtual void showOverlay(); virtual void hideOverlay(); virtual void warpMouse(int x, int y); - virtual void adjustMouseEvent(Common::Event &event); + +protected: + virtual void adjustMouseEvent(const Common::Event &event); }; #endif diff --git a/backends/graphics/openglsdl/openglsdl-graphics.cpp b/backends/graphics/openglsdl/openglsdl-graphics.cpp index 1b9ef6d663..ceaa20c425 100644 --- a/backends/graphics/openglsdl/openglsdl-graphics.cpp +++ b/backends/graphics/openglsdl/openglsdl-graphics.cpp @@ -122,30 +122,6 @@ void OpenGLSdlGraphicsManager::warpMouse(int x, int y) { } -void OpenGLSdlGraphicsManager::forceFullRedraw() { - -} - -bool OpenGLSdlGraphicsManager::handleScalerHotkeys(const SDL_KeyboardEvent &key) { - return false; -} - -bool OpenGLSdlGraphicsManager::isScalerHotkey(const Common::Event &event) { - return false; -} - -void OpenGLSdlGraphicsManager::adjustMouseEvent(Common::Event &event) { - -} - -void OpenGLSdlGraphicsManager::toggleFullScreen() { - -} - -bool OpenGLSdlGraphicsManager::saveScreenshot(const char *filename) { - return false; -} - // // Intern // diff --git a/backends/graphics/openglsdl/openglsdl-graphics.h b/backends/graphics/openglsdl/openglsdl-graphics.h index 56aae27ab7..c678f3f0ca 100644 --- a/backends/graphics/openglsdl/openglsdl-graphics.h +++ b/backends/graphics/openglsdl/openglsdl-graphics.h @@ -50,13 +50,6 @@ public: virtual void warpMouse(int x, int y); - virtual void forceFullRedraw(); - virtual bool handleScalerHotkeys(const SDL_KeyboardEvent &key); - virtual bool isScalerHotkey(const Common::Event &event); - virtual void adjustMouseEvent(Common::Event &event); - virtual void toggleFullScreen(); - virtual bool saveScreenshot(const char *filename); - protected: virtual void internUpdateScreen(); diff --git a/backends/graphics/sdl/sdl-graphics.cpp b/backends/graphics/sdl/sdl-graphics.cpp index e8251a779d..8a95d757cc 100644 --- a/backends/graphics/sdl/sdl-graphics.cpp +++ b/backends/graphics/sdl/sdl-graphics.cpp @@ -184,6 +184,9 @@ SdlGraphicsManager::SdlGraphicsManager() #else _videoMode.fullscreen = true; #endif + + // Register the graphics manager as a event observer + g_system->getEventManager()->getEventDispatcher()->registerObserver(this, 2, false); } SdlGraphicsManager::~SdlGraphicsManager() { @@ -2087,16 +2090,17 @@ bool SdlGraphicsManager::isScalerHotkey(const Common::Event &event) { return false; } -void SdlGraphicsManager::forceFullRedraw() { - _forceFull = true; -} - -void SdlGraphicsManager::adjustMouseEvent(Common::Event &event) { - if (!_overlayVisible) { - event.mouse.x /= _videoMode.scaleFactor; - event.mouse.y /= _videoMode.scaleFactor; - if (_videoMode.aspectRatioCorrection) - event.mouse.y = aspect2Real(event.mouse.y); +void SdlGraphicsManager::adjustMouseEvent(const Common::Event &event) { + if (!event.synthetic) { + Common::Event newEvent(event); + newEvent.synthetic = true; + if (!_overlayVisible) { + newEvent.mouse.x /= _videoMode.scaleFactor; + newEvent.mouse.y /= _videoMode.scaleFactor; + if (_videoMode.aspectRatioCorrection) + newEvent.mouse.y = aspect2Real(newEvent.mouse.y); + } + g_system->getEventManager()->pushEvent(newEvent); } } @@ -2112,4 +2116,63 @@ void SdlGraphicsManager::toggleFullScreen() { #endif } +bool SdlGraphicsManager::notifyEvent(const Common::Event &event) { + switch (event.type) { + case Common::EVENT_KEYDOWN: + // Alt-Return and Alt-Enter toggle full screen mode + if (event.kbd.hasFlags(Common::KBD_ALT) && + (event.kbd.keycode == Common::KEYCODE_RETURN || + event.kbd.keycode == SDLK_KP_ENTER)) { + toggleFullScreen(); + return true; + } + + // Alt-S: Create a screenshot + if (event.kbd.hasFlags(Common::KBD_ALT) && event.kbd.keycode == 's') { + char filename[20]; + + for (int n = 0;; n++) { + SDL_RWops *file; + + sprintf(filename, "scummvm%05d.bmp", n); + file = SDL_RWFromFile(filename, "r"); + if (!file) + break; + SDL_RWclose(file); + } + if (saveScreenshot(filename)) + printf("Saved '%s'\n", filename); + else + printf("Could not save screenshot!\n"); + return true; + } + + // Ctrl-Alt-<key> will change the GFX mode + if ((event.kbd.flags & (Common::KBD_CTRL|Common::KBD_ALT)) == (Common::KBD_CTRL|Common::KBD_ALT)) { + if (handleScalerHotkeys(event.kbd.keycode)) + return true; + } + case Common::EVENT_KEYUP: + return isScalerHotkey(event); + case Common::EVENT_MOUSEMOVE: + if (event.synthetic) + setMousePos(event.mouse.x, event.mouse.y); + case Common::EVENT_LBUTTONDOWN: + case Common::EVENT_RBUTTONDOWN: + case Common::EVENT_WHEELUP: + case Common::EVENT_WHEELDOWN: + case Common::EVENT_MBUTTONDOWN: + case Common::EVENT_LBUTTONUP: + case Common::EVENT_RBUTTONUP: + case Common::EVENT_MBUTTONUP: + adjustMouseEvent(event); + return !event.synthetic; + /*case SDL_VIDEOEXPOSE: + _forceFull = true; + return false;*/ + } + + return false; +} + #endif diff --git a/backends/graphics/sdl/sdl-graphics.h b/backends/graphics/sdl/sdl-graphics.h index 0218be55dc..157c754a5f 100644 --- a/backends/graphics/sdl/sdl-graphics.h +++ b/backends/graphics/sdl/sdl-graphics.h @@ -27,8 +27,9 @@ #define BACKENDS_GRAPHICS_SDL_H #include "backends/graphics/graphics.h" -#include "common/system.h" #include "graphics/scaler.h" +#include "common/events.h" +#include "common/system.h" #if defined(__SYMBIAN32__) #include <esdl\SDL.h> @@ -72,7 +73,7 @@ public: /** * SDL graphics manager */ -class SdlGraphicsManager : public GraphicsManager { +class SdlGraphicsManager : public GraphicsManager, public Common::EventObserver { public: SdlGraphicsManager(); virtual ~SdlGraphicsManager(); @@ -127,13 +128,8 @@ public: virtual void displayMessageOnOSD(const char *msg); #endif - virtual void forceFullRedraw(); - virtual bool handleScalerHotkeys(Common::KeyCode key); - virtual bool isScalerHotkey(const Common::Event &event); - virtual void adjustMouseEvent(Common::Event &event); - virtual void setMousePos(int x, int y); - virtual void toggleFullScreen(); - virtual bool saveScreenshot(const char *filename); + // Override from Common::EventObserver + bool notifyEvent(const Common::Event &event); protected: #ifdef USE_OSD @@ -313,6 +309,13 @@ protected: virtual int effectiveScreenHeight() const; virtual void setGraphicsModeIntern(); + + virtual bool handleScalerHotkeys(Common::KeyCode key); + virtual bool isScalerHotkey(const Common::Event &event); + virtual void adjustMouseEvent(const Common::Event &event); + virtual void setMousePos(int x, int y); + virtual void toggleFullScreen(); + virtual bool saveScreenshot(const char *filename); }; #endif |