[Scummvm-cvs-logs] scummvm master -> fd61a83bb52febb2d620d858d6685c8232251105

lordhoto lordhoto at gmail.com
Tue Aug 9 00:11:10 CEST 2011


This automated email contains information about 5 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
222064cdb6 BACKENDS: Add PaletteManager interface as comments to GraphicsManager.
dedc74abfa SDL: Add a new base class for graphics managers utilizing SDL.
0630a88a04 SDL: Let SDL based graphics managers inherit from SdlGraphicsManager.
04ab0e58b4 SDL: Take advantage of SdlGraphicsManager.
fd61a83bb5 SDL: Slight clean up in the surface based graphics manager.


Commit: 222064cdb64ba560b53d9cb6b3f07c915eb58d12
    https://github.com/scummvm/scummvm/commit/222064cdb64ba560b53d9cb6b3f07c915eb58d12
Author: Johannes Schickel (lordhoto at scummvm.org)
Date: 2011-08-08T15:03:10-07:00

Commit Message:
BACKENDS: Add PaletteManager interface as comments to GraphicsManager.

This should be a little more comfortable about finding out what's needed to
implement a new graphics manager.

Changed paths:
    backends/graphics/graphics.h



diff --git a/backends/graphics/graphics.h b/backends/graphics/graphics.h
index 20924ed..3f282df 100644
--- a/backends/graphics/graphics.h
+++ b/backends/graphics/graphics.h
@@ -84,6 +84,10 @@ public:
 	virtual void setCursorPalette(const byte *colors, uint start, uint num) = 0;
 
 	virtual void displayMessageOnOSD(const char *msg) {}
+
+	// Graphics::PaletteManager interface
+	//virtual void setPalette(const byte *colors, uint start, uint num) = 0;
+	//virtual void grabPalette(byte *colors, uint start, uint num) = 0;
 };
 
 #endif


Commit: dedc74abfa44f7dac344da1868588193f91dd4f1
    https://github.com/scummvm/scummvm/commit/dedc74abfa44f7dac344da1868588193f91dd4f1
Author: Johannes Schickel (lordhoto at scummvm.org)
Date: 2011-08-08T15:03:10-07:00

Commit Message:
SDL: Add a new base class for graphics managers utilizing SDL.

Changed paths:
  A backends/graphics/sdl/sdl-graphics.cpp
  A backends/graphics/sdl/sdl-graphics.h
    backends/module.mk



diff --git a/backends/graphics/sdl/sdl-graphics.cpp b/backends/graphics/sdl/sdl-graphics.cpp
new file mode 100644
index 0000000..90278a9
--- /dev/null
+++ b/backends/graphics/sdl/sdl-graphics.cpp
@@ -0,0 +1,33 @@
+/* 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.
+ *
+ */
+
+#include "backends/graphics/sdl/sdl-graphics.h"
+
+#include "backends/events/sdl/sdl-events.h"
+
+SdlGraphicsManager::SdlGraphicsManager(SdlEventSource *source)
+	: _eventSource(source) {
+}
+
+SdlGraphicsManager::~SdlGraphicsManager() {
+}
+
diff --git a/backends/graphics/sdl/sdl-graphics.h b/backends/graphics/sdl/sdl-graphics.h
new file mode 100644
index 0000000..b42eafd
--- /dev/null
+++ b/backends/graphics/sdl/sdl-graphics.h
@@ -0,0 +1,86 @@
+/* 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.
+ *
+ */
+
+#ifndef BACKENDS_GRAPHICS_SDL_SDLGRAPHICS_H
+#define BACKENDS_GRAPHICS_SDL_SDLGRAPHICS_H
+
+#include "common/rect.h"
+
+class SdlEventSource;
+
+/**
+ * Base class for a SDL based graphics manager.
+ *
+ * It features a few extra a few extra features required by SdlEventSource.
+ * FIXME/HACK:
+ * Note it does not inherit from GraphicsManager to avoid a diamon inheritance
+ * in the current OpenGLSdlGraphicsManager.
+ */
+class SdlGraphicsManager {
+public:
+	SdlGraphicsManager(SdlEventSource *source);
+	virtual ~SdlGraphicsManager();
+
+	/**
+	 * Notify the graphics manager that the graphics needs to be redrawn, since
+	 * the application window was modified.
+	 *
+	 * This is basically called when SDL_VIDEOEXPOSE was received.
+	 */
+	virtual void notifyVideoExpose() = 0;
+
+	/**
+	 * Notify the graphics manager about an resize event.
+	 *
+	 * It is noteworthy that the requested width/height should actually be set
+	 * up as is and not changed by the graphics manager, since else it might
+	 * lead to odd behavior for certain window managers.
+	 *
+	 * It is only required to overwrite this method in case you want a
+	 * resizable window. The default implementation just does nothing.
+	 *
+	 * @param width Requested window width.
+	 * @param height Requested window height.
+	 */
+	virtual void notifyResize(const uint width, const uint height) {}
+
+	/**
+	 * Transforms real screen coordinates into the current active screen
+	 * coordinates (may be either game screen or overlay).
+	 *
+	 * @param point Mouse coordinates to transform.
+	 */
+	virtual void transformMouseCoordinates(Common::Point &point) = 0;
+
+	/**
+	 * Notifies the graphics manager about a position change according to the
+	 * real screen coordinates.
+	 *
+	 * @param mouse Mouse position.
+	 */
+	virtual void notifyMousePos(Common::Point mouse) = 0;
+
+protected:
+	SdlEventSource *_eventSource;
+};
+
+#endif
diff --git a/backends/module.mk b/backends/module.mk
index 0e94426..7a8aab8 100644
--- a/backends/module.mk
+++ b/backends/module.mk
@@ -61,6 +61,7 @@ endif
 ifdef SDL_BACKEND
 MODULE_OBJS += \
 	events/sdl/sdl-events.o \
+	graphics/sdl/sdl-graphics.o \
 	graphics/surfacesdl/surfacesdl-graphics.o \
 	mixer/doublebuffersdl/doublebuffersdl-mixer.o \
 	mixer/sdl/sdl-mixer.o \


Commit: 0630a88a04e9688d664751b6a68edf622d76b348
    https://github.com/scummvm/scummvm/commit/0630a88a04e9688d664751b6a68edf622d76b348
Author: Johannes Schickel (lordhoto at scummvm.org)
Date: 2011-08-08T15:03:11-07:00

Commit Message:
SDL: Let SDL based graphics managers inherit from SdlGraphicsManager.

This also adapts port I can not test (not even the compilation). So if this
breaks anything I am sorry about it.

Changed paths:
    backends/graphics/dinguxsdl/dinguxsdl-graphics.cpp
    backends/graphics/dinguxsdl/dinguxsdl-graphics.h
    backends/graphics/gph/gph-graphics.cpp
    backends/graphics/gph/gph-graphics.h
    backends/graphics/linuxmotosdl/linuxmotosdl-graphics.cpp
    backends/graphics/linuxmotosdl/linuxmotosdl-graphics.h
    backends/graphics/openglsdl/openglsdl-graphics.cpp
    backends/graphics/openglsdl/openglsdl-graphics.h
    backends/graphics/surfacesdl/surfacesdl-graphics.cpp
    backends/graphics/surfacesdl/surfacesdl-graphics.h
    backends/graphics/wincesdl/wincesdl-graphics.cpp
    backends/graphics/wincesdl/wincesdl-graphics.h
    backends/platform/sdl/sdl.cpp



diff --git a/backends/graphics/dinguxsdl/dinguxsdl-graphics.cpp b/backends/graphics/dinguxsdl/dinguxsdl-graphics.cpp
index 8075d0d..5aa39aa 100644
--- a/backends/graphics/dinguxsdl/dinguxsdl-graphics.cpp
+++ b/backends/graphics/dinguxsdl/dinguxsdl-graphics.cpp
@@ -514,17 +514,22 @@ void DINGUXSdlGraphicsManager::adjustMouseEvent(const Common::Event &event) {
 	if (!event.synthetic) {
 		Common::Event newEvent(event);
 		newEvent.synthetic = true;
-		if (!_overlayVisible) {
-			if (_videoMode.mode == GFX_HALF) {
-				newEvent.mouse.x *= 2;
-				newEvent.mouse.y *= 2;
-			}
-			newEvent.mouse.x /= _videoMode.scaleFactor;
-			newEvent.mouse.y /= _videoMode.scaleFactor;
-			if (_videoMode.aspectRatioCorrection)
-				newEvent.mouse.y = aspect2Real(newEvent.mouse.y);
+		transformMouseCoordinates(newEvent.mouse);
+		g_system->getEventManager()->pushEvent(newEvent);
+	}
+}
+
+void DINGUXSdlGraphicsManager::transformMouseCoordinates(Common::Point &point) {
+	if (!_overlayVisible) {
+		if (_videoMode.mode == GFX_HALF) {
+			point.x *= 2;
+			point.y *= 2;
 		}
 		g_system->getEventManager()->pushEvent(newEvent);
+		point.x /= _videoMode.scaleFactor;
+		point.y /= _videoMode.scaleFactor;
+		if (_videoMode.aspectRatioCorrection)
+			point.y = aspect2Real(point.y);
 	}
 }
 
diff --git a/backends/graphics/dinguxsdl/dinguxsdl-graphics.h b/backends/graphics/dinguxsdl/dinguxsdl-graphics.h
index 84a784b..468a19a 100644
--- a/backends/graphics/dinguxsdl/dinguxsdl-graphics.h
+++ b/backends/graphics/dinguxsdl/dinguxsdl-graphics.h
@@ -58,6 +58,7 @@ public:
 	SurfaceSdlGraphicsManager::VideoState *getVideoMode();
 
 	virtual void adjustMouseEvent(const Common::Event &event);
+	virtual void transformMouseCoordinates(Common::Point &point);
 };
 
 #endif /* BACKENDS_GRAPHICS_SDL_DINGUX_H */
diff --git a/backends/graphics/gph/gph-graphics.cpp b/backends/graphics/gph/gph-graphics.cpp
index 82a3220..12643fb 100644
--- a/backends/graphics/gph/gph-graphics.cpp
+++ b/backends/graphics/gph/gph-graphics.cpp
@@ -583,17 +583,22 @@ void GPHGraphicsManager::adjustMouseEvent(const Common::Event &event) {
 	if (!event.synthetic) {
 		Common::Event newEvent(event);
 		newEvent.synthetic = true;
-		if (!_overlayVisible) {
-			if (_videoMode.mode == GFX_HALF) {
-				newEvent.mouse.x *= 2;
-				newEvent.mouse.y *= 2;
-			}
-			newEvent.mouse.x /= _videoMode.scaleFactor;
-			newEvent.mouse.y /= _videoMode.scaleFactor;
-			if (_videoMode.aspectRatioCorrection)
-				newEvent.mouse.y = aspect2Real(newEvent.mouse.y);
+		transformMouseCoordinates(newEvent.mouse);
+		g_system->getEventManager()->pushEvent(newEvent);
+	}
+}
+
+void GPHGraphicsManager::transformMouseCoordinates(Common::Point &point) {
+	if (!_overlayVisible) {
+		if (_videoMode.mode == GFX_HALF) {
+			point.x *= 2;
+			point.y *= 2;
 		}
 		g_system->getEventManager()->pushEvent(newEvent);
+		point.x /= _videoMode.scaleFactor;
+		point.y /= _videoMode.scaleFactor;
+		if (_videoMode.aspectRatioCorrection)
+			point.y = aspect2Real(point.y);
 	}
 }
 
diff --git a/backends/graphics/gph/gph-graphics.h b/backends/graphics/gph/gph-graphics.h
index 45b8618..f7d0ce4 100644
--- a/backends/graphics/gph/gph-graphics.h
+++ b/backends/graphics/gph/gph-graphics.h
@@ -57,6 +57,7 @@ public:
 	SurfaceSdlGraphicsManager::VideoState *getVideoMode();
 
 	virtual void adjustMouseEvent(const Common::Event &event);
+	virtual void transformMouseCoordinates(Common::Point &point);
 };
 
 #endif /* BACKENDS_GRAPHICS_GPH_H */
diff --git a/backends/graphics/linuxmotosdl/linuxmotosdl-graphics.cpp b/backends/graphics/linuxmotosdl/linuxmotosdl-graphics.cpp
index 732074b..bf21bec 100644
--- a/backends/graphics/linuxmotosdl/linuxmotosdl-graphics.cpp
+++ b/backends/graphics/linuxmotosdl/linuxmotosdl-graphics.cpp
@@ -482,17 +482,22 @@ void LinuxmotoSdlGraphicsManager::adjustMouseEvent(const Common::Event &event) {
 	if (!event.synthetic) {
 		Common::Event newEvent(event);
 		newEvent.synthetic = true;
-		if (!_overlayVisible) {
-			if (_videoMode.mode == GFX_HALF) {
-				newEvent.mouse.x *= 2;
-				newEvent.mouse.y *= 2;
-			}
-			newEvent.mouse.x /= _videoMode.scaleFactor;
-			newEvent.mouse.y /= _videoMode.scaleFactor;
-			if (_videoMode.aspectRatioCorrection)
-				newEvent.mouse.y = aspect2Real(newEvent.mouse.y);
+		transformMouseCoordinates(newEvent.mouse);
+		g_system->getEventManager()->pushEvent(newEvent);
+	}
+}
+
+void LinuxmotoSdlGraphicsManager::transformMouseCoordinates(Common::Point &point) {
+	if (!_overlayVisible) {
+		if (_videoMode.mode == GFX_HALF) {
+			point.x *= 2;
+			point.y *= 2;
 		}
 		g_system->getEventManager()->pushEvent(newEvent);
+		point.x /= _videoMode.scaleFactor;
+		point.y /= _videoMode.scaleFactor;
+		if (_videoMode.aspectRatioCorrection)
+			point.y = aspect2Real(point.y);
 	}
 }
 
diff --git a/backends/graphics/linuxmotosdl/linuxmotosdl-graphics.h b/backends/graphics/linuxmotosdl/linuxmotosdl-graphics.h
index 938512f..f615018 100644
--- a/backends/graphics/linuxmotosdl/linuxmotosdl-graphics.h
+++ b/backends/graphics/linuxmotosdl/linuxmotosdl-graphics.h
@@ -42,6 +42,7 @@ public:
 	virtual void hideOverlay();
 	virtual void warpMouse(int x, int y);
 
+	virtual void transformMouseCoordinates(Common::Point &point);
 protected:
 	virtual void adjustMouseEvent(const Common::Event &event);
 };
diff --git a/backends/graphics/openglsdl/openglsdl-graphics.cpp b/backends/graphics/openglsdl/openglsdl-graphics.cpp
index bd7dd32..8828cb5 100644
--- a/backends/graphics/openglsdl/openglsdl-graphics.cpp
+++ b/backends/graphics/openglsdl/openglsdl-graphics.cpp
@@ -30,8 +30,9 @@
 #include "common/textconsole.h"
 #include "common/translation.h"
 
-OpenGLSdlGraphicsManager::OpenGLSdlGraphicsManager()
+OpenGLSdlGraphicsManager::OpenGLSdlGraphicsManager(SdlEventSource *eventSource)
 	:
+	SdlGraphicsManager(eventSource),
 	_hwscreen(0),
 	_screenResized(false),
 	_activeFullscreenMode(-2),
@@ -655,4 +656,50 @@ bool OpenGLSdlGraphicsManager::notifyEvent(const Common::Event &event) {
 	return OpenGLGraphicsManager::notifyEvent(event);
 }
 
+void OpenGLSdlGraphicsManager::notifyVideoExpose() {
+}
+
+void OpenGLSdlGraphicsManager::notifyResize(const uint width, const uint height) {
+	// Do not resize if ignoring resize events.
+	if (!_ignoreResizeFrames && !getFullscreenMode()) {
+		bool scaleChanged = false;
+		beginGFXTransaction();
+			_videoMode.hardwareWidth = width;
+			_videoMode.hardwareHeight = height;
+
+			if (_videoMode.mode != OpenGL::GFX_ORIGINAL) {
+				_screenResized = true;
+				calculateDisplaySize(_videoMode.hardwareWidth, _videoMode.hardwareHeight);
+			}
+
+			int scale = MIN(_videoMode.hardwareWidth / _videoMode.screenWidth,
+			                _videoMode.hardwareHeight / _videoMode.screenHeight);
+
+			if (getScale() != scale) {
+				scaleChanged = true;
+				setScale(MAX(MIN(scale, 3), 1));
+			}
+
+			if (_videoMode.mode == OpenGL::GFX_ORIGINAL) {
+				calculateDisplaySize(_videoMode.hardwareWidth, _videoMode.hardwareHeight);
+			}
+
+			_transactionDetails.sizeChanged = true;
+		endGFXTransaction();
+#ifdef USE_OSD
+		if (scaleChanged)
+			displayScaleChangedMsg();
+#endif
+	}
+}
+
+void OpenGLSdlGraphicsManager::transformMouseCoordinates(Common::Point &point) {
+	adjustMousePosition(point.x, point.y);
+}
+ 
+void OpenGLSdlGraphicsManager::notifyMousePos(Common::Point mouse) {
+	_cursorState.x = mouse.x;
+	_cursorState.y = mouse.y;
+}
+
 #endif
diff --git a/backends/graphics/openglsdl/openglsdl-graphics.h b/backends/graphics/openglsdl/openglsdl-graphics.h
index ba9f94d..6cd255b 100644
--- a/backends/graphics/openglsdl/openglsdl-graphics.h
+++ b/backends/graphics/openglsdl/openglsdl-graphics.h
@@ -23,19 +23,20 @@
 #ifndef BACKENDS_GRAPHICS_OPENGLSDL_H
 #define BACKENDS_GRAPHICS_OPENGLSDL_H
 
-#include "backends/platform/sdl/sdl-sys.h"
 #if defined(ARRAYSIZE) && !defined(_WINDOWS_)
 #undef ARRAYSIZE
 #endif
+#include "backends/platform/sdl/sdl-sys.h"
+#include "backends/graphics/sdl/sdl-graphics.h"
 
 #include "backends/graphics/opengl/opengl-graphics.h"
 
 /**
  * SDL OpenGL graphics manager
  */
-class OpenGLSdlGraphicsManager : public OpenGLGraphicsManager {
+class OpenGLSdlGraphicsManager : public OpenGLGraphicsManager, public SdlGraphicsManager {
 public:
-	OpenGLSdlGraphicsManager();
+	OpenGLSdlGraphicsManager(SdlEventSource *eventSource);
 	virtual ~OpenGLSdlGraphicsManager();
 
 	virtual bool hasFeature(OSystem::Feature f);
@@ -49,6 +50,12 @@ public:
 
 	virtual void updateScreen();
 
+	// SdlGraphicsManager interface
+	virtual void notifyVideoExpose();
+	virtual void notifyResize(const uint width, const uint height);
+	virtual void transformMouseCoordinates(Common::Point &point);
+	virtual void notifyMousePos(Common::Point mouse);
+
 protected:
 	virtual void internUpdateScreen();
 
diff --git a/backends/graphics/surfacesdl/surfacesdl-graphics.cpp b/backends/graphics/surfacesdl/surfacesdl-graphics.cpp
index 2d41ece..293fd9b 100644
--- a/backends/graphics/surfacesdl/surfacesdl-graphics.cpp
+++ b/backends/graphics/surfacesdl/surfacesdl-graphics.cpp
@@ -122,7 +122,7 @@ static AspectRatio getDesiredAspectRatio() {
 
 SurfaceSdlGraphicsManager::SurfaceSdlGraphicsManager(SdlEventSource *sdlEventSource)
 	:
-	_sdlEventSource(sdlEventSource),
+	SdlGraphicsManager(sdlEventSource), _sdlEventSource(sdlEventSource),
 #ifdef USE_OSD
 	_osdSurface(0), _osdAlpha(SDL_ALPHA_TRANSPARENT), _osdFadeStartTime(0),
 #endif
@@ -2324,4 +2324,22 @@ bool SurfaceSdlGraphicsManager::notifyEvent(const Common::Event &event) {
 	return false;
 }
 
+void SurfaceSdlGraphicsManager::notifyVideoExpose() {
+	_forceFull = true;
+}
+
+void SurfaceSdlGraphicsManager::transformMouseCoordinates(Common::Point &point) {
+	if (!_overlayVisible) {
+		point.x /= _videoMode.scaleFactor;
+		point.y /= _videoMode.scaleFactor;
+		if (_videoMode.aspectRatioCorrection)
+			point.y = aspect2Real(point.y);
+	}
+}
+
+void SurfaceSdlGraphicsManager::notifyMousePos(Common::Point mouse) {
+	transformMouseCoordinates(mouse);
+	setMousePos(mouse.x, mouse.y);
+}
+
 #endif
diff --git a/backends/graphics/surfacesdl/surfacesdl-graphics.h b/backends/graphics/surfacesdl/surfacesdl-graphics.h
index cd8710d..3de59c7 100644
--- a/backends/graphics/surfacesdl/surfacesdl-graphics.h
+++ b/backends/graphics/surfacesdl/surfacesdl-graphics.h
@@ -24,6 +24,7 @@
 #define BACKENDS_GRAPHICS_SURFACESDL_GRAPHICS_H
 
 #include "backends/graphics/graphics.h"
+#include "backends/graphics/sdl/sdl-graphics.h"
 #include "graphics/pixelformat.h"
 #include "graphics/scaler.h"
 #include "common/events.h"
@@ -74,7 +75,7 @@ public:
 /**
  * SDL graphics manager
  */
-class SurfaceSdlGraphicsManager : public GraphicsManager, public Common::EventObserver {
+class SurfaceSdlGraphicsManager : public GraphicsManager, public SdlGraphicsManager, public Common::EventObserver {
 public:
 	SurfaceSdlGraphicsManager(SdlEventSource *sdlEventSource);
 	virtual ~SurfaceSdlGraphicsManager();
@@ -140,6 +141,11 @@ public:
 	// Override from Common::EventObserver
 	bool notifyEvent(const Common::Event &event);
 
+	// SdlGraphicsManager interface
+	virtual void notifyVideoExpose();
+	virtual void transformMouseCoordinates(Common::Point &point);
+	virtual void notifyMousePos(Common::Point mouse);
+
 protected:
 	SdlEventSource *_sdlEventSource;
 
diff --git a/backends/graphics/wincesdl/wincesdl-graphics.cpp b/backends/graphics/wincesdl/wincesdl-graphics.cpp
index b1b4d4c..023000d 100644
--- a/backends/graphics/wincesdl/wincesdl-graphics.cpp
+++ b/backends/graphics/wincesdl/wincesdl-graphics.cpp
@@ -1162,20 +1162,24 @@ void WINCESdlGraphicsManager::adjustMouseEvent(const Common::Event &event) {
 	if (!event.synthetic) {
 		Common::Event newEvent(event);
 		newEvent.synthetic = true;
-		/*
-		if (!_overlayVisible) {
-			newEvent.mouse.x = newEvent.mouse.x * _scaleFactorXd / _scaleFactorXm;
-			newEvent.mouse.y = newEvent.mouse.y * _scaleFactorYd / _scaleFactorYm;
-			newEvent.mouse.x /= _videoMode.scaleFactor;
-			newEvent.mouse.y /= _videoMode.scaleFactor;
-			if (_videoMode.aspectRatioCorrection)
-				newEvent.mouse.y = aspect2Real(newEvent.mouse.y);
-		}
-		*/
+		transformMouseCoordinates(newEvent.mouse);
 		g_system->getEventManager()->pushEvent(newEvent);
 	}
 }
 
+void WINCESdlGraphicsManager::transformMouseCoordinates(Common::Point &point) {
+	/*
+	if (!_overlayVisible) {
+		point.x = point.x * _scaleFactorXd / _scaleFactorXm;
+		point.y = point.y * _scaleFactorYd / _scaleFactorYm;
+		point.x /= _videoMode.scaleFactor;
+		point.y /= _videoMode.scaleFactor;
+		if (_videoMode.aspectRatioCorrection)
+			point.y = aspect2Real(point.y);
+	}
+	*/
+}
+
 void WINCESdlGraphicsManager::setMousePos(int x, int y) {
 	if (x != _mouseCurState.x || y != _mouseCurState.y) {
 		undrawMouse();
diff --git a/backends/graphics/wincesdl/wincesdl-graphics.h b/backends/graphics/wincesdl/wincesdl-graphics.h
index c9fc145..f80a72b 100644
--- a/backends/graphics/wincesdl/wincesdl-graphics.h
+++ b/backends/graphics/wincesdl/wincesdl-graphics.h
@@ -158,6 +158,8 @@ public:
 
 	static zoneDesc _zones[TOTAL_ZONES];
 
+	virtual void transformMouseCoordinates(Common::Point &point);
+
 protected:
 	virtual void adjustMouseEvent(const Common::Event &event);
 
diff --git a/backends/platform/sdl/sdl.cpp b/backends/platform/sdl/sdl.cpp
index e72b95b..63871f5 100644
--- a/backends/platform/sdl/sdl.cpp
+++ b/backends/platform/sdl/sdl.cpp
@@ -174,7 +174,7 @@ void OSystem_SDL::initBackend() {
 
 			// If the gfx_mode is from OpenGL, create the OpenGL graphics manager
 			if (use_opengl) {
-				_graphicsManager = new OpenGLSdlGraphicsManager();
+				_graphicsManager = new OpenGLSdlGraphicsManager(_eventSource);
 				graphicsManagerType = 1;
 			}
 		}
@@ -538,7 +538,7 @@ bool OSystem_SDL::setGraphicsMode(int mode) {
 			} else if (_graphicsMode < _sdlModesCount && mode >= _sdlModesCount) {
 				debug(1, "switching to OpenGL graphics");
 				delete _graphicsManager;
-				_graphicsManager = new OpenGLSdlGraphicsManager();
+				_graphicsManager = new OpenGLSdlGraphicsManager(_eventSource);
 				((OpenGLSdlGraphicsManager *)_graphicsManager)->initEventObserver();
 				_graphicsManager->beginGFXTransaction();
 			}


Commit: 04ab0e58b4142bf58db2180a2bac6897821d069f
    https://github.com/scummvm/scummvm/commit/04ab0e58b4142bf58db2180a2bac6897821d069f
Author: Johannes Schickel (lordhoto at scummvm.org)
Date: 2011-08-08T15:03:11-07:00

Commit Message:
SDL: Take advantage of SdlGraphicsManager.

This gets rid of the hacks, where SdlEventSource added events with custom type
numbers to pass SDL_VIDEOEXPOSE and SDL_VIDEORESIZE to the graphics manager.

Furthermore it get rids of the uninituitive and hard to trace way of assigning
the proper mouse coordinates to mouse related events. Formerly it passed the
real screen coordinates through the even dispatching api to the graphics
manager (at least hopefully ;-) and let that handle creating a new event with
the proper coordinates. Now instead SdlEventSource handles the proper
coordinate setup itself.

Since this is a behavior change and I can not test all the SDL based small
devices ports this commit might break compilation for them and more serve it
might also break mouse position behavior. If any of that occurs I am sorry
about it.

Changed paths:
    backends/events/dinguxsdl/dinguxsdl-events.cpp
    backends/events/gph/gph-events.cpp
    backends/events/linuxmotosdl/linuxmotosdl-events.cpp
    backends/events/openpandora/op-events.cpp
    backends/events/ps3sdl/ps3sdl-events.cpp
    backends/events/sdl/sdl-events.cpp
    backends/events/sdl/sdl-events.h
    backends/events/symbiansdl/symbiansdl-events.cpp
    backends/events/webossdl/webossdl-events.cpp
    backends/events/wincesdl/wincesdl-events.cpp
    backends/events/wincesdl/wincesdl-events.h
    backends/graphics/dinguxsdl/dinguxsdl-graphics.cpp
    backends/graphics/dinguxsdl/dinguxsdl-graphics.h
    backends/graphics/gph/gph-graphics.cpp
    backends/graphics/gph/gph-graphics.h
    backends/graphics/linuxmotosdl/linuxmotosdl-graphics.cpp
    backends/graphics/linuxmotosdl/linuxmotosdl-graphics.h
    backends/graphics/opengl/opengl-graphics.cpp
    backends/graphics/opengl/opengl-graphics.h
    backends/graphics/openglsdl/openglsdl-graphics.cpp
    backends/graphics/openglsdl/openglsdl-graphics.h
    backends/graphics/sdl/sdl-graphics.cpp
    backends/graphics/surfacesdl/surfacesdl-graphics.cpp
    backends/graphics/surfacesdl/surfacesdl-graphics.h
    backends/graphics/wincesdl/wincesdl-graphics.cpp
    backends/graphics/wincesdl/wincesdl-graphics.h
    backends/platform/sdl/sdl.h



diff --git a/backends/events/dinguxsdl/dinguxsdl-events.cpp b/backends/events/dinguxsdl/dinguxsdl-events.cpp
index 946507c..64d8fbe 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 b461f85..ce5d892 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 e859c52..5d9f032 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 72bc56c..56915f9 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 eefc641..723942a 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 d4f4095..9d235e9 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;
@@ -377,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;
@@ -504,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;
 }
@@ -527,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;
 }
@@ -543,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;
 }
@@ -551,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) {
@@ -582,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) {
@@ -653,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 9122692..2ba88c7 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
diff --git a/backends/events/symbiansdl/symbiansdl-events.cpp b/backends/events/symbiansdl/symbiansdl-events.cpp
index 1ffaae2..308621e 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);
 				}
 
diff --git a/backends/events/webossdl/webossdl-events.cpp b/backends/events/webossdl/webossdl-events.cpp
index 102eb58..a6a2ed3 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 1116cbb..e73a4e6 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 deeee61..5eff630 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:
 
diff --git a/backends/graphics/dinguxsdl/dinguxsdl-graphics.cpp b/backends/graphics/dinguxsdl/dinguxsdl-graphics.cpp
index 5aa39aa..2fd22c4 100644
--- a/backends/graphics/dinguxsdl/dinguxsdl-graphics.cpp
+++ b/backends/graphics/dinguxsdl/dinguxsdl-graphics.cpp
@@ -510,15 +510,6 @@ void DINGUXSdlGraphicsManager::warpMouse(int x, int y) {
 	SurfaceSdlGraphicsManager::warpMouse(x, y);
 }
 
-void DINGUXSdlGraphicsManager::adjustMouseEvent(const Common::Event &event) {
-	if (!event.synthetic) {
-		Common::Event newEvent(event);
-		newEvent.synthetic = true;
-		transformMouseCoordinates(newEvent.mouse);
-		g_system->getEventManager()->pushEvent(newEvent);
-	}
-}
-
 void DINGUXSdlGraphicsManager::transformMouseCoordinates(Common::Point &point) {
 	if (!_overlayVisible) {
 		if (_videoMode.mode == GFX_HALF) {
diff --git a/backends/graphics/dinguxsdl/dinguxsdl-graphics.h b/backends/graphics/dinguxsdl/dinguxsdl-graphics.h
index 468a19a..ecdd01d 100644
--- a/backends/graphics/dinguxsdl/dinguxsdl-graphics.h
+++ b/backends/graphics/dinguxsdl/dinguxsdl-graphics.h
@@ -57,7 +57,6 @@ public:
 	SurfaceSdlGraphicsManager::MousePos *getMouseCurState();
 	SurfaceSdlGraphicsManager::VideoState *getVideoMode();
 
-	virtual void adjustMouseEvent(const Common::Event &event);
 	virtual void transformMouseCoordinates(Common::Point &point);
 };
 
diff --git a/backends/graphics/gph/gph-graphics.cpp b/backends/graphics/gph/gph-graphics.cpp
index 12643fb..2e8bfa6 100644
--- a/backends/graphics/gph/gph-graphics.cpp
+++ b/backends/graphics/gph/gph-graphics.cpp
@@ -579,15 +579,6 @@ void GPHGraphicsManager::warpMouse(int x, int y) {
 	SurfaceSdlGraphicsManager::warpMouse(x, y);
 }
 
-void GPHGraphicsManager::adjustMouseEvent(const Common::Event &event) {
-	if (!event.synthetic) {
-		Common::Event newEvent(event);
-		newEvent.synthetic = true;
-		transformMouseCoordinates(newEvent.mouse);
-		g_system->getEventManager()->pushEvent(newEvent);
-	}
-}
-
 void GPHGraphicsManager::transformMouseCoordinates(Common::Point &point) {
 	if (!_overlayVisible) {
 		if (_videoMode.mode == GFX_HALF) {
diff --git a/backends/graphics/gph/gph-graphics.h b/backends/graphics/gph/gph-graphics.h
index f7d0ce4..0118fc7 100644
--- a/backends/graphics/gph/gph-graphics.h
+++ b/backends/graphics/gph/gph-graphics.h
@@ -56,7 +56,6 @@ public:
 	SurfaceSdlGraphicsManager::MousePos *getMouseCurState();
 	SurfaceSdlGraphicsManager::VideoState *getVideoMode();
 
-	virtual void adjustMouseEvent(const Common::Event &event);
 	virtual void transformMouseCoordinates(Common::Point &point);
 };
 
diff --git a/backends/graphics/linuxmotosdl/linuxmotosdl-graphics.cpp b/backends/graphics/linuxmotosdl/linuxmotosdl-graphics.cpp
index bf21bec..e59d3f9 100644
--- a/backends/graphics/linuxmotosdl/linuxmotosdl-graphics.cpp
+++ b/backends/graphics/linuxmotosdl/linuxmotosdl-graphics.cpp
@@ -478,15 +478,6 @@ void LinuxmotoSdlGraphicsManager::warpMouse(int x, int y) {
 	SurfaceSdlGraphicsManager::warpMouse(x, y);
 }
 
-void LinuxmotoSdlGraphicsManager::adjustMouseEvent(const Common::Event &event) {
-	if (!event.synthetic) {
-		Common::Event newEvent(event);
-		newEvent.synthetic = true;
-		transformMouseCoordinates(newEvent.mouse);
-		g_system->getEventManager()->pushEvent(newEvent);
-	}
-}
-
 void LinuxmotoSdlGraphicsManager::transformMouseCoordinates(Common::Point &point) {
 	if (!_overlayVisible) {
 		if (_videoMode.mode == GFX_HALF) {
diff --git a/backends/graphics/linuxmotosdl/linuxmotosdl-graphics.h b/backends/graphics/linuxmotosdl/linuxmotosdl-graphics.h
index f615018..ee2a566 100644
--- a/backends/graphics/linuxmotosdl/linuxmotosdl-graphics.h
+++ b/backends/graphics/linuxmotosdl/linuxmotosdl-graphics.h
@@ -43,8 +43,6 @@ public:
 	virtual void warpMouse(int x, int y);
 
 	virtual void transformMouseCoordinates(Common::Point &point);
-protected:
-	virtual void adjustMouseEvent(const Common::Event &event);
 };
 
 #endif
diff --git a/backends/graphics/opengl/opengl-graphics.cpp b/backends/graphics/opengl/opengl-graphics.cpp
index 046be4c..57c2378 100644
--- a/backends/graphics/opengl/opengl-graphics.cpp
+++ b/backends/graphics/opengl/opengl-graphics.cpp
@@ -67,10 +67,6 @@ OpenGLGraphicsManager::OpenGLGraphicsManager()
 }
 
 OpenGLGraphicsManager::~OpenGLGraphicsManager() {
-	// Unregister the event observer
-	if (g_system->getEventManager()->getEventDispatcher() != NULL)
-		g_system->getEventManager()->getEventDispatcher()->unregisterObserver(this);
-
 	free(_gamePalette);
 	free(_cursorPalette);
 
@@ -79,11 +75,6 @@ OpenGLGraphicsManager::~OpenGLGraphicsManager() {
 	delete _cursorTexture;
 }
 
-void OpenGLGraphicsManager::initEventObserver() {
-	// Register the graphics manager as a event observer
-	g_system->getEventManager()->getEventDispatcher()->registerObserver(this, 10, false);
-}
-
 //
 // Feature
 //
@@ -1282,36 +1273,6 @@ void OpenGLGraphicsManager::adjustMousePosition(int16 &x, int16 &y) {
 	}
 }
 
-bool OpenGLGraphicsManager::notifyEvent(const Common::Event &event) {
-	switch (event.type) {
-	case Common::EVENT_MOUSEMOVE:
-		if (!event.synthetic) {
-			_cursorState.x = event.mouse.x;
-			_cursorState.y = 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:
-		if (!event.synthetic) {
-			Common::Event newEvent(event);
-			newEvent.synthetic = true;
-			adjustMousePosition(newEvent.mouse.x, newEvent.mouse.y);
-			g_system->getEventManager()->pushEvent(newEvent);
-		}
-		return !event.synthetic;
-
-	default:
-		break;
-	}
-
-	return false;
-}
-
 bool OpenGLGraphicsManager::saveScreenshot(const char *filename) {
 	int width = _videoMode.hardwareWidth;
 	int height = _videoMode.hardwareHeight;
diff --git a/backends/graphics/opengl/opengl-graphics.h b/backends/graphics/opengl/opengl-graphics.h
index 56f7d92..8a110b2 100644
--- a/backends/graphics/opengl/opengl-graphics.h
+++ b/backends/graphics/opengl/opengl-graphics.h
@@ -26,7 +26,7 @@
 #include "backends/graphics/opengl/gltexture.h"
 #include "backends/graphics/graphics.h"
 #include "common/array.h"
-#include "common/events.h"
+#include "common/rect.h"
 #include "graphics/pixelformat.h"
 
 // Uncomment this to enable the 'on screen display' code.
@@ -50,13 +50,11 @@ enum {
  * the buffers swap, and implement loadGFXMode for handling the window/context if
  * needed. If USE_RGB_COLOR is enabled, getSupportedFormats must be implemented.
  */
-class OpenGLGraphicsManager : public GraphicsManager, public Common::EventObserver {
+class OpenGLGraphicsManager : public GraphicsManager {
 public:
 	OpenGLGraphicsManager();
 	virtual ~OpenGLGraphicsManager();
 
-	virtual void initEventObserver();
-
 	virtual bool hasFeature(OSystem::Feature f);
 	virtual void setFeatureState(OSystem::Feature f, bool enable);
 	virtual bool getFeatureState(OSystem::Feature f);
@@ -109,10 +107,6 @@ public:
 	virtual void setCursorPalette(const byte *colors, uint start, uint num);
 
 	virtual void displayMessageOnOSD(const char *msg);
-
-	// Override from Common::EventObserver
-	bool notifyEvent(const Common::Event &event);
-
 protected:
 	/**
 	 * Setup OpenGL settings
diff --git a/backends/graphics/openglsdl/openglsdl-graphics.cpp b/backends/graphics/openglsdl/openglsdl-graphics.cpp
index 8828cb5..8ea9576 100644
--- a/backends/graphics/openglsdl/openglsdl-graphics.cpp
+++ b/backends/graphics/openglsdl/openglsdl-graphics.cpp
@@ -72,6 +72,14 @@ OpenGLSdlGraphicsManager::OpenGLSdlGraphicsManager(SdlEventSource *eventSource)
 }
 
 OpenGLSdlGraphicsManager::~OpenGLSdlGraphicsManager() {
+	// Unregister the event observer
+	if (g_system->getEventManager()->getEventDispatcher() != NULL)
+		g_system->getEventManager()->getEventDispatcher()->unregisterObserver(this);
+}
+
+void OpenGLSdlGraphicsManager::initEventObserver() {
+	// Register the graphics manager as a event observer
+	g_system->getEventManager()->getEventDispatcher()->registerObserver(this, 10, false);
 }
 
 bool OpenGLSdlGraphicsManager::hasFeature(OSystem::Feature f) {
@@ -610,50 +618,15 @@ bool OpenGLSdlGraphicsManager::notifyEvent(const Common::Event &event) {
 			}
 		}
 		break;
+
 	case Common::EVENT_KEYUP:
 		return isHotkey(event);
-	// HACK: Handle special SDL event
-	// The new screen size is saved on the mouse event as part of HACK,
-	// there is no common resize event.
-	case OSystem_SDL::kSdlEventResize:
-		// Do not resize if ignoring resize events.
-		if (!_ignoreResizeFrames && !getFullscreenMode()) {
-			bool scaleChanged = false;
-			beginGFXTransaction();
-				_videoMode.hardwareWidth = event.mouse.x;
-				_videoMode.hardwareHeight = event.mouse.y;
-
-				if (_videoMode.mode != OpenGL::GFX_ORIGINAL) {
-					_screenResized = true;
-					calculateDisplaySize(_videoMode.hardwareWidth, _videoMode.hardwareHeight);
-				}
-
-				int scale = MIN(_videoMode.hardwareWidth / _videoMode.screenWidth,
-				                _videoMode.hardwareHeight / _videoMode.screenHeight);
-
-				if (getScale() != scale) {
-					scaleChanged = true;
-					setScale(MAX(MIN(scale, 3), 1));
-				}
-
-				if (_videoMode.mode == OpenGL::GFX_ORIGINAL) {
-					calculateDisplaySize(_videoMode.hardwareWidth, _videoMode.hardwareHeight);
-				}
-
-				_transactionDetails.sizeChanged = true;
-			endGFXTransaction();
-#ifdef USE_OSD
-			if (scaleChanged)
-				displayScaleChangedMsg();
-#endif
-		}
-		return true;
 
 	default:
 		break;
 	}
 
-	return OpenGLGraphicsManager::notifyEvent(event);
+	return false;
 }
 
 void OpenGLSdlGraphicsManager::notifyVideoExpose() {
diff --git a/backends/graphics/openglsdl/openglsdl-graphics.h b/backends/graphics/openglsdl/openglsdl-graphics.h
index 6cd255b..1587183 100644
--- a/backends/graphics/openglsdl/openglsdl-graphics.h
+++ b/backends/graphics/openglsdl/openglsdl-graphics.h
@@ -23,18 +23,19 @@
 #ifndef BACKENDS_GRAPHICS_OPENGLSDL_H
 #define BACKENDS_GRAPHICS_OPENGLSDL_H
 
+#include "backends/platform/sdl/sdl-sys.h"
 #if defined(ARRAYSIZE) && !defined(_WINDOWS_)
 #undef ARRAYSIZE
 #endif
-#include "backends/platform/sdl/sdl-sys.h"
 #include "backends/graphics/sdl/sdl-graphics.h"
-
 #include "backends/graphics/opengl/opengl-graphics.h"
 
+#include "common/events.h"
+
 /**
  * SDL OpenGL graphics manager
  */
-class OpenGLSdlGraphicsManager : public OpenGLGraphicsManager, public SdlGraphicsManager {
+class OpenGLSdlGraphicsManager : public OpenGLGraphicsManager, public SdlGraphicsManager, public Common::EventObserver {
 public:
 	OpenGLSdlGraphicsManager(SdlEventSource *eventSource);
 	virtual ~OpenGLSdlGraphicsManager();
@@ -46,6 +47,7 @@ public:
 	virtual Common::List<Graphics::PixelFormat> getSupportedFormats() const;
 #endif
 
+	virtual void initEventObserver();
 	virtual bool notifyEvent(const Common::Event &event);
 
 	virtual void updateScreen();
diff --git a/backends/graphics/sdl/sdl-graphics.cpp b/backends/graphics/sdl/sdl-graphics.cpp
index 90278a9..2eca4b8 100644
--- a/backends/graphics/sdl/sdl-graphics.cpp
+++ b/backends/graphics/sdl/sdl-graphics.cpp
@@ -26,8 +26,10 @@
 
 SdlGraphicsManager::SdlGraphicsManager(SdlEventSource *source)
 	: _eventSource(source) {
+	_eventSource->setGraphicsManager(this);
 }
 
 SdlGraphicsManager::~SdlGraphicsManager() {
+	_eventSource->setGraphicsManager(0);
 }
 
diff --git a/backends/graphics/surfacesdl/surfacesdl-graphics.cpp b/backends/graphics/surfacesdl/surfacesdl-graphics.cpp
index 293fd9b..f2dfdb8 100644
--- a/backends/graphics/surfacesdl/surfacesdl-graphics.cpp
+++ b/backends/graphics/surfacesdl/surfacesdl-graphics.cpp
@@ -2235,20 +2235,6 @@ bool SurfaceSdlGraphicsManager::isScalerHotkey(const Common::Event &event) {
 	return false;
 }
 
-void SurfaceSdlGraphicsManager::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);
-	}
-}
-
 void SurfaceSdlGraphicsManager::toggleFullScreen() {
 	beginGFXTransaction();
 		setFullscreenMode(!_videoMode.fullscreen);
@@ -2297,26 +2283,10 @@ bool SurfaceSdlGraphicsManager::notifyEvent(const Common::Event &event) {
 			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;
-
-	// HACK: Handle special SDL event
-	case OSystem_SDL::kSdlEventExpose:
-		_forceFull = true;
-		return false;
+
 	default:
 		break;
 	}
diff --git a/backends/graphics/surfacesdl/surfacesdl-graphics.h b/backends/graphics/surfacesdl/surfacesdl-graphics.h
index 3de59c7..925563b 100644
--- a/backends/graphics/surfacesdl/surfacesdl-graphics.h
+++ b/backends/graphics/surfacesdl/surfacesdl-graphics.h
@@ -335,7 +335,6 @@ protected:
 
 	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);
diff --git a/backends/graphics/wincesdl/wincesdl-graphics.cpp b/backends/graphics/wincesdl/wincesdl-graphics.cpp
index 023000d..b0cbb87 100644
--- a/backends/graphics/wincesdl/wincesdl-graphics.cpp
+++ b/backends/graphics/wincesdl/wincesdl-graphics.cpp
@@ -1158,15 +1158,6 @@ void WINCESdlGraphicsManager::setMouseCursor(const byte *buf, uint w, uint h, in
 	}
 }
 
-void WINCESdlGraphicsManager::adjustMouseEvent(const Common::Event &event) {
-	if (!event.synthetic) {
-		Common::Event newEvent(event);
-		newEvent.synthetic = true;
-		transformMouseCoordinates(newEvent.mouse);
-		g_system->getEventManager()->pushEvent(newEvent);
-	}
-}
-
 void WINCESdlGraphicsManager::transformMouseCoordinates(Common::Point &point) {
 	/*
 	if (!_overlayVisible) {
diff --git a/backends/graphics/wincesdl/wincesdl-graphics.h b/backends/graphics/wincesdl/wincesdl-graphics.h
index f80a72b..edf3cc5 100644
--- a/backends/graphics/wincesdl/wincesdl-graphics.h
+++ b/backends/graphics/wincesdl/wincesdl-graphics.h
@@ -160,8 +160,7 @@ public:
 
 	virtual void transformMouseCoordinates(Common::Point &point);
 
-protected:
-	virtual void adjustMouseEvent(const Common::Event &event);
+	virtual void transformMouseCoordinates(Common::Point &point);
 
 private:
 	bool update_scalers();
diff --git a/backends/platform/sdl/sdl.h b/backends/platform/sdl/sdl.h
index 395b2b3..22d79db 100644
--- a/backends/platform/sdl/sdl.h
+++ b/backends/platform/sdl/sdl.h
@@ -74,12 +74,6 @@ public:
 	virtual void getTimeAndDate(TimeDate &td) const;
 	virtual Audio::Mixer *getMixer();
 
-	// HACK: Special SDL events types
-	enum SdlEvent {
-		kSdlEventExpose = 100,
-		kSdlEventResize = 101
-	};
-
 protected:
 	bool _inited;
 	bool _initedSDL;


Commit: fd61a83bb52febb2d620d858d6685c8232251105
    https://github.com/scummvm/scummvm/commit/fd61a83bb52febb2d620d858d6685c8232251105
Author: Johannes Schickel (lordhoto at scummvm.org)
Date: 2011-08-08T15:04:19-07:00

Commit Message:
SDL: Slight clean up in the surface based graphics manager.

Changed paths:
    backends/graphics/surfacesdl/surfacesdl-graphics.cpp
    backends/graphics/surfacesdl/surfacesdl-graphics.h



diff --git a/backends/graphics/surfacesdl/surfacesdl-graphics.cpp b/backends/graphics/surfacesdl/surfacesdl-graphics.cpp
index f2dfdb8..81c439e 100644
--- a/backends/graphics/surfacesdl/surfacesdl-graphics.cpp
+++ b/backends/graphics/surfacesdl/surfacesdl-graphics.cpp
@@ -122,7 +122,7 @@ static AspectRatio getDesiredAspectRatio() {
 
 SurfaceSdlGraphicsManager::SurfaceSdlGraphicsManager(SdlEventSource *sdlEventSource)
 	:
-	SdlGraphicsManager(sdlEventSource), _sdlEventSource(sdlEventSource),
+	SdlGraphicsManager(sdlEventSource),
 #ifdef USE_OSD
 	_osdSurface(0), _osdAlpha(SDL_ALPHA_TRANSPARENT), _osdFadeStartTime(0),
 #endif
@@ -846,7 +846,7 @@ bool SurfaceSdlGraphicsManager::loadGFXMode() {
 	SDL_SetColorKey(_osdSurface, SDL_RLEACCEL | SDL_SRCCOLORKEY | SDL_SRCALPHA, kOSDColorKey);
 #endif
 
-	_sdlEventSource->resetKeyboadEmulation(
+	_eventSource->resetKeyboadEmulation(
 		_videoMode.screenWidth * _videoMode.scaleFactor - 1,
 		effectiveScreenHeight() - 1);
 
diff --git a/backends/graphics/surfacesdl/surfacesdl-graphics.h b/backends/graphics/surfacesdl/surfacesdl-graphics.h
index 925563b..f71096d 100644
--- a/backends/graphics/surfacesdl/surfacesdl-graphics.h
+++ b/backends/graphics/surfacesdl/surfacesdl-graphics.h
@@ -147,8 +147,6 @@ public:
 	virtual void notifyMousePos(Common::Point mouse);
 
 protected:
-	SdlEventSource *_sdlEventSource;
-
 #ifdef USE_OSD
 	/** Surface containing the OSD message */
 	SDL_Surface *_osdSurface;






More information about the Scummvm-git-logs mailing list