diff options
Diffstat (limited to 'backends')
42 files changed, 509 insertions, 571 deletions
| diff --git a/backends/events/gph/gph-events.cpp b/backends/events/gph/gph-events.cpp index b4e106b790..91118d36c1 100644 --- a/backends/events/gph/gph-events.cpp +++ b/backends/events/gph/gph-events.cpp @@ -161,49 +161,6 @@ GPHEventSource::GPHEventSource()  	: _buttonStateL(false) {  } -void GPHEventSource::moveStick() { -	bool stickBtn[32]; - -	memcpy(stickBtn, _stickBtn, sizeof(stickBtn)); - -	if ((stickBtn[0]) || (stickBtn[2]) || (stickBtn[4]) || (stickBtn[6])) -		stickBtn[1] = stickBtn[3] = stickBtn[5] = stickBtn[7] = 0; - -	if ((stickBtn[1]) || (stickBtn[2]) || (stickBtn[3])) { -		if (_km.x_down_count != 2) { -			_km.x_vel = -1; -			_km.x_down_count = 1; -		} else -			_km.x_vel = -4; -	} else if ((stickBtn[5]) || (stickBtn[6]) || (stickBtn[7])) { -		if (_km.x_down_count != 2) { -			_km.x_vel = 1; -			_km.x_down_count = 1; -		} else -			_km.x_vel = 4; -	} else { -		_km.x_vel = 0; -		_km.x_down_count = 0; -	} - -	if ((stickBtn[0]) || (stickBtn[1]) || (stickBtn[7])) { -		if (_km.y_down_count != 2) { -			_km.y_vel = -1; -			_km.y_down_count = 1; -		} else -			_km.y_vel = -4; -	} else if ((stickBtn[3]) || (stickBtn[4]) || (stickBtn[5])) { -		if (_km.y_down_count != 2) { -			_km.y_vel = 1; -			_km.y_down_count = 1; -		} else -			_km.y_vel = 4; -	} else { -		_km.y_vel = 0; -		_km.y_down_count = 0; -	} -} -  /* Custom handleMouseButtonDown/handleMouseButtonUp to deal with 'Tap Mode' for the touchscreen */  bool GPHEventSource::handleMouseButtonDown(SDL_Event &ev, Common::Event &event) { @@ -268,19 +225,110 @@ bool GPHEventSource::handleMouseButtonUp(SDL_Event &ev, Common::Event &event) {  bool GPHEventSource::handleJoyButtonDown(SDL_Event &ev, Common::Event &event) { -	_stickBtn[ev.jbutton.button] = 1;  	event.kbd.flags = 0;  	switch (ev.jbutton.button) {  	case BUTTON_UP: -	case BUTTON_UPLEFT: -	case BUTTON_LEFT: -	case BUTTON_DOWNLEFT: +		if (_km.y_down_count != 2) { +			_km.y_vel = -1; +			_km.y_down_count = 1; +		} else { +			_km.y_vel = -4; +		} +		event.type = Common::EVENT_MOUSEMOVE; +		processMouseEvent(event, _km.x, _km.y); +		break;  	case BUTTON_DOWN: -	case BUTTON_DOWNRIGHT: +		if (_km.y_down_count != 2) { +			_km.y_vel = 1; +			_km.y_down_count = 1; +		} else { +			_km.y_vel = 4; +		} +		event.type = Common::EVENT_MOUSEMOVE; +		processMouseEvent(event, _km.x, _km.y); +		break; +	case BUTTON_LEFT: +		if (_km.x_down_count != 2) { +			_km.x_vel = -1; +			_km.x_down_count = 1; +		} else { +			_km.x_vel = -4; +		} +		event.type = Common::EVENT_MOUSEMOVE; +		processMouseEvent(event, _km.x, _km.y); +		break;  	case BUTTON_RIGHT: +		if (_km.x_down_count != 3) { +			_km.x_vel = 1; +			_km.x_down_count = 1; +		} else { +			_km.x_vel = 4; +		} +		event.type = Common::EVENT_MOUSEMOVE; +		processMouseEvent(event, _km.x, _km.y); +		break; +	case BUTTON_UPLEFT: +		if (_km.x_down_count != 2) { +			_km.x_vel = -1; +			_km.x_down_count = 1; +		} else { +				_km.x_vel = -4; +		} +		if (_km.y_down_count != 2) { +			_km.y_vel = -1; +			_km.y_down_count = 1; +		} else { +			_km.y_vel = -4; +		} +		event.type = Common::EVENT_MOUSEMOVE; +		processMouseEvent(event, _km.x, _km.y); +		break;  	case BUTTON_UPRIGHT: -		moveStick(); +		if (_km.x_down_count != 2) { +			_km.x_vel = 1; +			_km.x_down_count = 1; +		} else { +			_km.x_vel = 4; +		} +		if (_km.y_down_count != 2) { +			_km.y_vel = -1; +			_km.y_down_count = 1; +		} else { +			_km.y_vel = -4; +		} +		event.type = Common::EVENT_MOUSEMOVE; +		processMouseEvent(event, _km.x, _km.y); +		break; +	case BUTTON_DOWNLEFT: +		if (_km.x_down_count != 2) { +			_km.x_vel = -1; +			_km.x_down_count = 1; +		} else { +			_km.x_vel = -4; +		} +		if (_km.y_down_count != 2) { +			_km.y_vel = 1; +			_km.y_down_count = 1; +		} else { +			_km.y_vel = 4; +		} +		event.type = Common::EVENT_MOUSEMOVE; +		processMouseEvent(event, _km.x, _km.y); +		break; +	case BUTTON_DOWNRIGHT: +		if (_km.x_down_count != 2) { +			_km.x_vel = 1; +			_km.x_down_count = 1; +		} else { +			_km.x_vel = 4; +		} +		if (_km.y_down_count != 2) { +			_km.y_vel = 1; +			_km.y_down_count = 1; +		} else { +			_km.y_vel = 4; +		}  		event.type = Common::EVENT_MOUSEMOVE;  		processMouseEvent(event, _km.x, _km.y);  		break; @@ -391,7 +439,6 @@ bool GPHEventSource::handleJoyButtonDown(SDL_Event &ev, Common::Event &event) {  bool GPHEventSource::handleJoyButtonUp(SDL_Event &ev, Common::Event &event) { -	_stickBtn[ev.jbutton.button] = 0;  	event.kbd.flags = 0;  	switch (ev.jbutton.button) { @@ -403,7 +450,10 @@ bool GPHEventSource::handleJoyButtonUp(SDL_Event &ev, Common::Event &event) {  	case BUTTON_DOWNRIGHT:  	case BUTTON_RIGHT:  	case BUTTON_UPRIGHT: -		moveStick(); +		_km.y_vel = 0; +		_km.y_down_count = 0; +		_km.x_vel = 0; +		_km.x_down_count = 0;  		event.type = Common::EVENT_MOUSEMOVE;  		processMouseEvent(event, _km.x, _km.y);  		break; diff --git a/backends/events/gph/gph-events.h b/backends/events/gph/gph-events.h index 7672bffed2..3b1e6f090a 100644 --- a/backends/events/gph/gph-events.h +++ b/backends/events/gph/gph-events.h @@ -34,18 +34,11 @@ public:  	GPHEventSource();  protected: -	bool _stickBtn[32]; -  	/**  	 * Button state for L button modifier  	 */  	bool _buttonStateL; -	/** -	 * Handles the stick movement -	 */ -	void moveStick(); -  	bool handleJoyButtonDown(SDL_Event &ev, Common::Event &event);  	bool handleJoyButtonUp(SDL_Event &ev, Common::Event &event);  	bool handleMouseButtonDown(SDL_Event &ev, Common::Event &event); diff --git a/backends/events/openpandora/op-events.cpp b/backends/events/openpandora/op-events.cpp index c1d6362fcb..fc63cdf74f 100644 --- a/backends/events/openpandora/op-events.cpp +++ b/backends/events/openpandora/op-events.cpp @@ -44,7 +44,8 @@ enum {  	/* Touchscreen TapMode */  	TAPMODE_LEFT        = 0,  	TAPMODE_RIGHT       = 1, -	TAPMODE_HOVER       = 2 +	TAPMODE_HOVER       = 2, +	TAPMODE_HOVER_DPAD  = 3  };  OPEventSource::OPEventSource() @@ -63,6 +64,8 @@ bool OPEventSource::handleMouseButtonDown(SDL_Event &ev, Common::Event &event) {  			event.type = Common::EVENT_RBUTTONDOWN;  		else if (OP::tapmodeLevel == TAPMODE_HOVER) /* TAPMODE_HOVER = Hover (No Click) Tap Mode */  			event.type = Common::EVENT_MOUSEMOVE; +		else if (OP::tapmodeLevel == TAPMODE_HOVER_DPAD) /* TAPMODE_HOVER_DPAD = Hover (DPad Clicks) Tap Mode */ +			event.type = Common::EVENT_MOUSEMOVE;  		else  			event.type = Common::EVENT_LBUTTONDOWN; /* For normal mice etc. */  	} else if (ev.button.button == SDL_BUTTON_RIGHT) @@ -95,6 +98,8 @@ bool OPEventSource::handleMouseButtonUp(SDL_Event &ev, Common::Event &event) {  			event.type = Common::EVENT_RBUTTONUP;  		else if (OP::tapmodeLevel == TAPMODE_HOVER) /* TAPMODE_HOVER = Hover (No Click) Tap Mode */  			event.type = Common::EVENT_MOUSEMOVE; +		else if (OP::tapmodeLevel == TAPMODE_HOVER_DPAD) /* TAPMODE_HOVER_DPAD = Hover (DPad Clicks) Tap Mode */ +			event.type = Common::EVENT_MOUSEMOVE;  		else  			event.type = Common::EVENT_LBUTTONUP; /* For normal mice etc. */  	} else if (ev.button.button == SDL_BUTTON_RIGHT) @@ -117,6 +122,30 @@ bool OPEventSource::handleMouseButtonUp(SDL_Event &ev, Common::Event &event) {  bool OPEventSource::remapKey(SDL_Event &ev, Common::Event &event) { +	if (OP::tapmodeLevel == TAPMODE_HOVER_DPAD) { +		switch (ev.key.keysym.sym) { +		case SDLK_LEFT: +			event.type = (ev.type == SDL_KEYDOWN) ? Common::EVENT_LBUTTONDOWN : Common::EVENT_LBUTTONUP; +			processMouseEvent(event, _km.x, _km.y); +			return true; +			break; +		case SDLK_RIGHT: +			event.type = (ev.type == SDL_KEYDOWN) ? Common::EVENT_RBUTTONDOWN : Common::EVENT_RBUTTONUP; +			processMouseEvent(event, _km.x, _km.y); +			return true; +			break; +#if defined(SDL_BUTTON_MIDDLE) +		case SDLK_UP: +			event.type = (ev.type == SDL_KEYDOWN) ? Common::EVENT_MBUTTONDOWN : Common::EVENT_MBUTTONUP; +			processMouseEvent(event, _km.x, _km.y); +			return true; +			break; +#endif +		default: +		  break; +		} +	} +  	if (ev.type == SDL_KEYDOWN) {  		switch (ev.key.keysym.sym) {  		case SDLK_HOME: @@ -141,6 +170,8 @@ bool OPEventSource::remapKey(SDL_Event &ev, Common::Event &event) {  				g_system->displayMessageOnOSD(_("Touchscreen 'Tap Mode' - Right Click"));  			} else if (OP::tapmodeLevel == TAPMODE_HOVER) {  				g_system->displayMessageOnOSD(_("Touchscreen 'Tap Mode' - Hover (No Click)")); +			} else if (OP::tapmodeLevel == TAPMODE_HOVER_DPAD) { +				g_system->displayMessageOnOSD(_("Touchscreen 'Tap Mode' - Hover (DPad Clicks)"));  			}  			break;  		case SDLK_RSHIFT: diff --git a/backends/events/sdl/sdl-events.cpp b/backends/events/sdl/sdl-events.cpp index f94171646a..0ca5bbb059 100644 --- a/backends/events/sdl/sdl-events.cpp +++ b/backends/events/sdl/sdl-events.cpp @@ -191,6 +191,8 @@ void SdlEventSource::SDLModToOSystemKeyFlags(SDLMod mod, Common::Event &event) {  #endif  	if (mod & KMOD_CTRL)  		event.kbd.flags |= Common::KBD_CTRL; +	if (mod & KMOD_META) +		event.kbd.flags |= Common::KBD_META;  	// Sticky flags  	if (mod & KMOD_NUM) diff --git a/backends/events/sdl/sdl-events.h b/backends/events/sdl/sdl-events.h index 2ba88c702b..ca4835126f 100644 --- a/backends/events/sdl/sdl-events.h +++ b/backends/events/sdl/sdl-events.h @@ -116,7 +116,7 @@ protected:  	//@}  	/** -	 * Assigns the mouse coords to the mouse event. Furthermore notify the  +	 * Assigns the mouse coords to the mouse event. Furthermore notify the  	 * graphics manager about the position change.  	 */  	virtual void processMouseEvent(Common::Event &event, int x, int y); diff --git a/backends/events/webossdl/webossdl-events.h b/backends/events/webossdl/webossdl-events.h index 99ed3105f8..1ba5c6fcbf 100644 --- a/backends/events/webossdl/webossdl-events.h +++ b/backends/events/webossdl/webossdl-events.h @@ -73,10 +73,10 @@ protected:  	// The current mouse position on the screen.  	int _curX, _curY; -	 +  	// The current screen dimensions  	int _screenX, _screenY; -	 +  	// The drag distance for linear gestures  	int _swipeDistX, _swipeDistY; @@ -107,7 +107,7 @@ protected:  	virtual bool handleMouseButtonUp(SDL_Event &ev, Common::Event &event);  	virtual bool handleMouseMotion(SDL_Event &ev, Common::Event &event);  	virtual bool pollEvent(Common::Event &event); -	 +  	// Utility functions  	void calculateDimensions();  }; diff --git a/backends/graphics/dinguxsdl/dinguxsdl-graphics.cpp b/backends/graphics/dinguxsdl/dinguxsdl-graphics.cpp index 205dcfdbec..bd87c9fafd 100644 --- a/backends/graphics/dinguxsdl/dinguxsdl-graphics.cpp +++ b/backends/graphics/dinguxsdl/dinguxsdl-graphics.cpp @@ -432,7 +432,7 @@ bool DINGUXSdlGraphicsManager::loadGFXMode() {  	// Forcefully disable aspect ratio correction for games  	// which starts with a native 240px height resolution.  	// This fixes games with weird resolutions, like MM Nes (256x240) -	if(_videoMode.screenHeight == 240) { +	if (_videoMode.screenHeight == 240) {  		_videoMode.aspectRatioCorrection = false;  	} @@ -479,7 +479,7 @@ void DINGUXSdlGraphicsManager::setFeatureState(OSystem::Feature f, bool enable)  	case OSystem::kFeatureCursorPalette:  		_cursorPaletteDisabled = !enable;  		blitCursor(); -		break;	 +		break;  	default:  		break;  	} diff --git a/backends/graphics/gph/gph-graphics.cpp b/backends/graphics/gph/gph-graphics.cpp index 8521e88eaf..92553564bf 100644 --- a/backends/graphics/gph/gph-graphics.cpp +++ b/backends/graphics/gph/gph-graphics.cpp @@ -486,7 +486,13 @@ bool GPHGraphicsManager::loadGFXMode() {  		if (_videoMode.aspectRatioCorrection)  			_videoMode.overlayHeight = real2Aspect(_videoMode.overlayHeight);  	} -	return SurfaceSdlGraphicsManager::loadGFXMode(); +	SurfaceSdlGraphicsManager::loadGFXMode(); + +	// The old GP2X hacked SDL needs this after any call to SDL_SetVideoMode +	// and it does not hurt other devices. +	SDL_ShowCursor(SDL_DISABLE); + +	return true;  }  bool GPHGraphicsManager::hasFeature(OSystem::Feature f) { diff --git a/backends/graphics/opengl/opengl-graphics.cpp b/backends/graphics/opengl/opengl-graphics.cpp index dce902d894..48e2663d44 100644 --- a/backends/graphics/opengl/opengl-graphics.cpp +++ b/backends/graphics/opengl/opengl-graphics.cpp @@ -902,7 +902,7 @@ void OpenGLGraphicsManager::getGLPixelFormat(Graphics::PixelFormat pixelFormat,  		bpp = 4;  		intFormat = GL_RGBA;  		glFormat = GL_RGBA; -		gltype = GL_UNSIGNED_BYTE; +		gltype = GL_UNSIGNED_INT_8_8_8_8;  	} else if (pixelFormat == Graphics::PixelFormat(3, 8, 8, 8, 0, 16, 8, 0, 0)) { // RGB888  		bpp = 3;  		intFormat = GL_RGB; @@ -918,11 +918,6 @@ void OpenGLGraphicsManager::getGLPixelFormat(Graphics::PixelFormat pixelFormat,  		intFormat = GL_RGBA;  		glFormat = GL_RGBA;  		gltype = GL_UNSIGNED_SHORT_5_5_5_1; -	} else if (pixelFormat == Graphics::PixelFormat(2, 5, 5, 5, 0, 10, 5, 0, 0)) { // RGB555 -		bpp = 2; -		intFormat = GL_RGB; -		glFormat = GL_BGRA; -		gltype = GL_UNSIGNED_SHORT_1_5_5_5_REV;  	} else if (pixelFormat == Graphics::PixelFormat(2, 4, 4, 4, 4, 12, 8, 4, 0)) { // RGBA4444  		bpp = 2;  		intFormat = GL_RGBA; @@ -936,6 +931,13 @@ void OpenGLGraphicsManager::getGLPixelFormat(Graphics::PixelFormat pixelFormat,  		glFormat = GL_RGB;  		gltype = GL_UNSIGNED_BYTE;  #ifndef USE_GLES +	} else if (pixelFormat == Graphics::PixelFormat(2, 5, 5, 5, 0, 10, 5, 0, 0)) { // RGB555 +		// GL_BGRA does not exist in every GLES implementation so should not be configured if +		// USE_GLES is set. +		bpp = 2; +		intFormat = GL_RGB; +		glFormat = GL_BGRA; +		gltype = GL_UNSIGNED_SHORT_1_5_5_5_REV;  	} else if (pixelFormat == Graphics::PixelFormat(4, 8, 8, 8, 8, 16, 8, 0, 24)) { // ARGB8888  		bpp = 4;  		intFormat = GL_RGBA; diff --git a/backends/graphics/openglsdl/openglsdl-graphics.cpp b/backends/graphics/openglsdl/openglsdl-graphics.cpp index 67041ae17b..fed02ef22e 100644 --- a/backends/graphics/openglsdl/openglsdl-graphics.cpp +++ b/backends/graphics/openglsdl/openglsdl-graphics.cpp @@ -665,7 +665,7 @@ void OpenGLSdlGraphicsManager::notifyResize(const uint width, const uint height)  void OpenGLSdlGraphicsManager::transformMouseCoordinates(Common::Point &point) {  	adjustMousePosition(point.x, point.y);  } -  +  void OpenGLSdlGraphicsManager::notifyMousePos(Common::Point mouse) {  	setMousePosition(mouse.x, mouse.y);  } diff --git a/backends/graphics/openpandora/op-graphics.cpp b/backends/graphics/openpandora/op-graphics.cpp index 5f0301a0c8..f371081fde 100644 --- a/backends/graphics/openpandora/op-graphics.cpp +++ b/backends/graphics/openpandora/op-graphics.cpp @@ -26,28 +26,59 @@  #include "backends/graphics/openpandora/op-graphics.h"  #include "backends/events/openpandora/op-events.h" -//#include "backends/platform/openpandora/op-sdl.h"  #include "graphics/scaler/aspect.h"  #include "common/mutex.h"  #include "common/textconsole.h" +static SDL_Cursor *hiddenCursor; +  OPGraphicsManager::OPGraphicsManager(SdlEventSource *sdlEventSource)  	: SurfaceSdlGraphicsManager(sdlEventSource) {  }  bool OPGraphicsManager::loadGFXMode() { -	/* FIXME: For now we just cheat and set the overlay to 640*480 not 800*480 and let SDL -	   deal with the boarders (it saves cleaning up the overlay when the game screen is -	   smaller than the overlay ;) + +	uint8_t hiddenCursorData = 0; +	hiddenCursor = SDL_CreateCursor(&hiddenCursorData, &hiddenCursorData, 8, 1, 0, 0); + +	/* On the OpenPandora we need to work around an SDL assumption that +	   returns relative mouse coordinates when you get to the screen +	   edges using the touchscreen. The workaround is to set a blank +	   SDL cursor and not disable it (Hackish I know). + +	   The root issues likes in the Windows Manager GRAB code in SDL. +	   That is why the issue is not seen on framebuffer devices like the +	   GP2X (there is no X window manager ;)).  	*/ -	_videoMode.overlayWidth = 640; -	_videoMode.overlayHeight = 480; +	SDL_ShowCursor(SDL_ENABLE); +	SDL_SetCursor(hiddenCursor); +  	_videoMode.fullscreen = true; +	_videoMode.overlayWidth = _videoMode.screenWidth * _videoMode.scaleFactor; +	_videoMode.overlayHeight = _videoMode.screenHeight * _videoMode.scaleFactor; +  	if (_videoMode.screenHeight != 200 && _videoMode.screenHeight != 400)  		_videoMode.aspectRatioCorrection = false; +	if (_videoMode.aspectRatioCorrection) +		_videoMode.overlayHeight = real2Aspect(_videoMode.overlayHeight); + +	_videoMode.hardwareWidth = _videoMode.screenWidth * _videoMode.scaleFactor; +	_videoMode.hardwareHeight = effectiveScreenHeight(); +  	return SurfaceSdlGraphicsManager::loadGFXMode();  } +void OPGraphicsManager::unloadGFXMode() { + +	uint8_t hiddenCursorData = 0; +	hiddenCursor = SDL_CreateCursor(&hiddenCursorData, &hiddenCursorData, 8, 1, 0, 0); + +	// Free the hidden SDL cursor created in loadGFXMode +	SDL_FreeCursor(hiddenCursor); + +	SurfaceSdlGraphicsManager::unloadGFXMode(); +} +  #endif diff --git a/backends/graphics/openpandora/op-graphics.h b/backends/graphics/openpandora/op-graphics.h index 0b3eeae8ec..2e3d63e3ad 100644 --- a/backends/graphics/openpandora/op-graphics.h +++ b/backends/graphics/openpandora/op-graphics.h @@ -24,7 +24,6 @@  #define BACKENDS_GRAPHICS_OP_H  #include "backends/graphics/surfacesdl/surfacesdl-graphics.h" -#include "graphics/scaler/aspect.h" // for aspect2Real  #include "graphics/scaler/downscaler.h"  enum { @@ -35,28 +34,8 @@ class OPGraphicsManager : public SurfaceSdlGraphicsManager {  public:  	OPGraphicsManager(SdlEventSource *sdlEventSource); -//	bool hasFeature(OSystem::Feature f); -//	void setFeatureState(OSystem::Feature f, bool enable); -//	bool getFeatureState(OSystem::Feature f); -//	int getDefaultGraphicsMode() const; - -//	void initSize(uint w, uint h, const Graphics::PixelFormat *format = NULL); -//	const OSystem::GraphicsMode *getSupportedGraphicsModes() const; -//	bool setGraphicsMode(const char *name); -//	bool setGraphicsMode(int mode); -//	void setGraphicsModeIntern(); -//	void internUpdateScreen(); -//	void showOverlay(); -//	void hideOverlay();  	bool loadGFXMode(); -//	void drawMouse(); -//	void undrawMouse(); -//	virtual void warpMouse(int x, int y); - -//	SurfaceSdlGraphicsManager::MousePos *getMouseCurState(); -//	SurfaceSdlGraphicsManager::VideoState *getVideoMode(); - -//	virtual void adjustMouseEvent(const Common::Event &event); +	void unloadGFXMode();  };  #endif /* BACKENDS_GRAPHICS_OP_H */ diff --git a/backends/midi/coreaudio.cpp b/backends/midi/coreaudio.cpp index 43c801287d..94262d0d92 100644 --- a/backends/midi/coreaudio.cpp +++ b/backends/midi/coreaudio.cpp @@ -172,10 +172,15 @@ int MidiDriver_CORE::open() {  	// Load custom soundfont, if specified  	if (ConfMan.hasKey("soundfont")) { -		FSRef	fsref; -		FSSpec	fsSpec;  		const char *soundfont = ConfMan.get("soundfont").c_str(); +		// TODO: We should really check whether the file contains an +		// actual soundfont... + +#if USE_DEPRECATED_COREAUDIO_API +		// Before 10.5, we need to use kMusicDeviceProperty_SoundBankFSSpec +		FSRef	fsref; +		FSSpec	fsSpec;  		err = FSPathMakeRef ((const byte *)soundfont, &fsref, NULL);  		if (err == noErr) { @@ -183,8 +188,6 @@ int MidiDriver_CORE::open() {  		}  		if (err == noErr) { -			// TODO: We should really check here whether the file contains an -			// actual soundfont...  			err = AudioUnitSetProperty (  				_synth,  				kMusicDeviceProperty_SoundBankFSSpec, kAudioUnitScope_Global, @@ -192,9 +195,27 @@ int MidiDriver_CORE::open() {  				&fsSpec, sizeof(fsSpec)  			);  		} +#else +		// kMusicDeviceProperty_SoundBankFSSpec is present on 10.6+, but broken +		// kMusicDeviceProperty_SoundBankURL was added in 10.5 as a replacement +		CFURLRef url = CFURLCreateFromFileSystemRepresentation(kCFAllocatorDefault, (const UInt8 *)soundfont, strlen(soundfont), false); + +		if (url) { +			err = AudioUnitSetProperty ( +				_synth, +				kMusicDeviceProperty_SoundBankURL, kAudioUnitScope_Global, +				0, +				&url, sizeof(url) +			); + +			CFRelease(url); +		} else { +			warning("Failed to allocate CFURLRef from '%s'", soundfont); +		} +#endif  		if (err != noErr) -			warning("Failed loading custom sound font '%s' (error %ld)\n", soundfont, (long)err); +			error("Failed loading custom sound font '%s' (error %ld)", soundfont, (long)err);  	}  #ifdef COREAUDIO_DISABLE_REVERB diff --git a/backends/midi/sndio.cpp b/backends/midi/sndio.cpp index 21c9ea4fec..a065a658e1 100644 --- a/backends/midi/sndio.cpp +++ b/backends/midi/sndio.cpp @@ -81,7 +81,7 @@ void MidiDriver_Sndio::send(uint32 b) {  	if (!hdl)  		return; -	buf[0] = b & 0xff;	 +	buf[0] = b & 0xff;  	buf[1] = (b >> 8) & 0xff;  	buf[2] = (b >> 16) & 0xff;  	buf[3] = (b >> 24) & 0xff; @@ -101,7 +101,7 @@ void MidiDriver_Sndio::send(uint32 b) {  void MidiDriver_Sndio::sysEx(const byte *msg, uint16 length) {  	if (!hdl)  		return; -	 +  	unsigned char buf[266];  	assert(length + 2 <= ARRAYSIZE(buf)); diff --git a/backends/mixer/sdl13/sdl13-mixer.cpp b/backends/mixer/sdl13/sdl13-mixer.cpp index 84777c8bab..24d3434fde 100644 --- a/backends/mixer/sdl13/sdl13-mixer.cpp +++ b/backends/mixer/sdl13/sdl13-mixer.cpp @@ -69,13 +69,13 @@ void Sdl13MixerManager::init() {  		warning("Could not open audio device: %s", SDL_GetError());  		_mixer = new Audio::MixerImpl(g_system, desired.freq); -		assert(_mixer);  +		assert(_mixer);  		_mixer->setReady(false);  	} else {  		debug(1, "Output sample rate: %d Hz", _obtained.freq);  		_mixer = new Audio::MixerImpl(g_system, _obtained.freq); -		assert(_mixer);  +		assert(_mixer);  		_mixer->setReady(true);  		startAudio(); diff --git a/backends/platform/android/texture.cpp b/backends/platform/android/texture.cpp index 95c96e0d25..b174e93191 100644 --- a/backends/platform/android/texture.cpp +++ b/backends/platform/android/texture.cpp @@ -52,9 +52,6 @@  // Supported GL extensions  static bool npot_supported = false; -#ifdef GL_OES_draw_texture -static bool draw_tex_supported = false; -#endif  static inline GLfixed xdiv(int numerator, int denominator) {  	assert(numerator < (1 << 16)); @@ -85,11 +82,6 @@ void GLESBaseTexture::initGLExtensions() {  		if (token == "GL_ARB_texture_non_power_of_two")  			npot_supported = true; - -#ifdef GL_OES_draw_texture -		if (token == "GL_OES_draw_texture") -			draw_tex_supported = true; -#endif  	}  } @@ -180,45 +172,28 @@ void GLESBaseTexture::allocBuffer(GLuint w, GLuint h) {  void GLESBaseTexture::drawTexture(GLshort x, GLshort y, GLshort w, GLshort h) {  	GLCALL(glBindTexture(GL_TEXTURE_2D, _texture_name)); -#ifdef GL_OES_draw_texture -	// Great extension, but only works under specific conditions. -	// Still a work-in-progress - disabled for now. -	if (false && draw_tex_supported && !hasPalette()) { -		//GLCALL(glTexEnvx(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE)); -		const GLint crop[4] = { 0, _surface.h, _surface.w, -_surface.h }; +	const GLfixed tex_width = xdiv(_surface.w, _texture_width); +	const GLfixed tex_height = xdiv(_surface.h, _texture_height); +	const GLfixed texcoords[] = { +		0, 0, +		tex_width, 0, +		0, tex_height, +		tex_width, tex_height, +	}; -		GLCALL(glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_CROP_RECT_OES, crop)); +	GLCALL(glTexCoordPointer(2, GL_FIXED, 0, texcoords)); -		// Android GLES bug? -		GLCALL(glColor4ub(0xff, 0xff, 0xff, 0xff)); +	const GLshort vertices[] = { +		x, y, +		x + w, y, +		x, y + h, +		x + w, y + h, +	}; -		GLCALL(glDrawTexiOES(x, y, 0, w, h)); -	} else -#endif -	{ -		const GLfixed tex_width = xdiv(_surface.w, _texture_width); -		const GLfixed tex_height = xdiv(_surface.h, _texture_height); -		const GLfixed texcoords[] = { -			0, 0, -			tex_width, 0, -			0, tex_height, -			tex_width, tex_height, -		}; - -		GLCALL(glTexCoordPointer(2, GL_FIXED, 0, texcoords)); - -		const GLshort vertices[] = { -			x, y, -			x + w, y, -			x, y + h, -			x + w, y + h, -		}; - -		GLCALL(glVertexPointer(2, GL_SHORT, 0, vertices)); - -		assert(ARRAYSIZE(vertices) == ARRAYSIZE(texcoords)); -		GLCALL(glDrawArrays(GL_TRIANGLE_STRIP, 0, ARRAYSIZE(vertices) / 2)); -	} +	GLCALL(glVertexPointer(2, GL_SHORT, 0, vertices)); + +	assert(ARRAYSIZE(vertices) == ARRAYSIZE(texcoords)); +	GLCALL(glDrawArrays(GL_TRIANGLE_STRIP, 0, ARRAYSIZE(vertices) / 2));  	clearDirty();  } diff --git a/backends/platform/bada/application.cpp b/backends/platform/bada/application.cpp index ba8e544983..e761649245 100644 --- a/backends/platform/bada/application.cpp +++ b/backends/platform/bada/application.cpp @@ -103,7 +103,7 @@ void BadaScummVM::pauseGame(bool pause) {  		if (pause && g_engine && !g_engine->isPaused()) {  			_appForm->pushKey(Common::KEYCODE_SPACE);  		} -		 +  		if (g_system) {  			((BadaSystem *)g_system)->setMute(pause);  		} diff --git a/backends/platform/bada/sscanf.cpp b/backends/platform/bada/sscanf.cpp index b5e5b88cb5..aa846698f6 100644 --- a/backends/platform/bada/sscanf.cpp +++ b/backends/platform/bada/sscanf.cpp @@ -56,7 +56,7 @@ bool scanInt(const char **in, va_list *ap, int max) {  	bool err = false;  	if (end == *in || (max > 0 && (end - *in) > max)) { -		err = true;  +		err = true;  	} else {  		*arg = (int)n;  		*in = end; diff --git a/backends/platform/gph/gph-backend.cpp b/backends/platform/gph/gph-backend.cpp index 49a1edf411..485780b472 100644 --- a/backends/platform/gph/gph-backend.cpp +++ b/backends/platform/gph/gph-backend.cpp @@ -20,6 +20,8 @@   *   */ +#if defined(GPH_DEVICE) +  // Disable symbol overrides so that we can use system headers.  #define FORBIDDEN_SYMBOL_ALLOW_ALL @@ -32,8 +34,6 @@  #include "backends/saves/default/default-saves.h"  #include "backends/timer/default/default-timer.h" -#include "base/main.h" -  #include "common/archive.h"  #include "common/config-manager.h"  #include "common/debug.h" @@ -64,23 +64,6 @@ void OSystem_GPH::initBackend() {  	assert(!_inited); -	// Create the events manager -	if (_eventSource == 0) -		_eventSource = new GPHEventSource(); - -	// Create the graphics manager -	if (_graphicsManager == 0) { -		_graphicsManager = new GPHGraphicsManager(_eventSource); -	} - -	// Create the mixer manager -	if (_mixer == 0) { -		_mixerManager = new DoubleBufferSDLMixerManager(); - -		// Setup and start mixer -		_mixerManager->init(); -	} -  	/* Setup default save path to be workingdir/saves */  	char savePath[PATH_MAX+1]; @@ -165,16 +148,42 @@ void OSystem_GPH::initBackend() {  	/* Make sure that aspect ratio correction is enabled on the 1st run to stop  	   users asking me what the 'wasted space' at the bottom is ;-). */  	ConfMan.registerDefault("aspect_ratio", true); +	ConfMan.registerDefault("fullscreen", true);  	/* Make sure SDL knows that we have a joystick we want to use. */  	ConfMan.setInt("joystick_num", 0); +	// Create the events manager +	if (_eventSource == 0) +		_eventSource = new GPHEventSource(); + +	// Create the graphics manager +	if (_graphicsManager == 0) { +		_graphicsManager = new GPHGraphicsManager(_eventSource); +	} +  	/* Pass to POSIX method to do the heavy lifting */  	OSystem_POSIX::initBackend();  	_inited = true;  } +void OSystem_GPH::initSDL() { +	// Check if SDL has not been initialized +	if (!_initedSDL) { + +		uint32 sdlFlags = SDL_INIT_EVENTTHREAD; +		if (ConfMan.hasKey("disable_sdl_parachute")) +			sdlFlags |= SDL_INIT_NOPARACHUTE; + +		// Initialize SDL (SDL Subsystems are initiliazed in the corresponding sdl managers) +		if (SDL_Init(sdlFlags) == -1) +			error("Could not initialize SDL: %s", SDL_GetError()); + +		_initedSDL = true; +	} +} +  void OSystem_GPH::addSysArchivesToSearchSet(Common::SearchSet &s, int priority) {  	/* Setup default extra data paths for engine data files and plugins */ @@ -222,3 +231,5 @@ void OSystem_GPH::quit() {  	OSystem_POSIX::quit();  } + +#endif diff --git a/backends/platform/gph/gph-main.cpp b/backends/platform/gph/gph-main.cpp index 2c43af151f..876de0f358 100644 --- a/backends/platform/gph/gph-main.cpp +++ b/backends/platform/gph/gph-main.cpp @@ -21,7 +21,7 @@   */  #include "backends/platform/gph/gph.h" -#include "backends/plugins/posix/posix-provider.h" +#include "backends/plugins/sdl/sdl-provider.h"  #include "base/main.h"  #if defined(GPH_DEVICE) @@ -36,7 +36,7 @@ int main(int argc, char *argv[]) {  	((OSystem_GPH *)g_system)->init();  #ifdef DYNAMIC_MODULES -	PluginManager::instance().addPluginProvider(new POSIXPluginProvider()); +	PluginManager::instance().addPluginProvider(new SDLPluginProvider());  #endif  	// Invoke the actual ScummVM main entry point: diff --git a/backends/platform/gph/gph.h b/backends/platform/gph/gph.h index 80f43f0bab..90a798154f 100644 --- a/backends/platform/gph/gph.h +++ b/backends/platform/gph/gph.h @@ -26,13 +26,11 @@  #if defined(GPH_DEVICE)  #include "backends/base-backend.h" -#include "backends/platform/sdl/sdl.h" +#include "backends/platform/sdl/sdl-sys.h"  #include "backends/platform/sdl/posix/posix.h"  #include "backends/events/gph/gph-events.h"  #include "backends/graphics/gph/gph-graphics.h" -#define __GP2XWIZ__ -  #ifndef PATH_MAX  #define PATH_MAX 255  #endif @@ -45,6 +43,11 @@ public:  	void addSysArchivesToSearchSet(Common::SearchSet &s, int priority);  	void initBackend();  	void quit(); + +protected: +	bool _inited; +	bool _initedSDL; +	virtual void initSDL();  };  #endif diff --git a/backends/platform/iphone/iphone_video.mm b/backends/platform/iphone/iphone_video.mm index 7877bc6430..0bfae30fc7 100644 --- a/backends/platform/iphone/iphone_video.mm +++ b/backends/platform/iphone/iphone_video.mm @@ -161,9 +161,9 @@ const char *iPhone_getDocumentsDir() {  - (id)initWithFrame:(struct CGRect)frame {  	self = [super initWithFrame: frame]; -	if ([[UIScreen mainScreen] respondsToSelector: NSSelectorFromString(@"scale")]) { -		if ([self respondsToSelector: NSSelectorFromString(@"contentScaleFactor")]) { -			//self.contentScaleFactor = [[UIScreen mainScreen] scale]; +	if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)]) { +		if ([self respondsToSelector:@selector(setContentScaleFactor:)]) { +			[self setContentScaleFactor:[[UIScreen mainScreen] scale]];  		}  	} @@ -268,6 +268,11 @@ const char *iPhone_getDocumentsDir() {  	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, filter); printOpenGLError();  	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, filter); printOpenGLError(); +	// We use GL_CLAMP_TO_EDGE here to avoid artifacts when linear filtering +	// is used. If we would not use this for example the cursor in Loom would +	// have a line/border artifact on the right side of the covered rect. +	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); printOpenGLError(); +	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); printOpenGLError();  }  - (void)setGraphicsMode { @@ -476,7 +481,7 @@ const char *iPhone_getDocumentsDir() {  		else if (_videoContext.screenWidth == 640 && _videoContext.screenHeight == 400)  			adjustedHeight = 480;  	} -	 +  	float overlayPortraitRatio;  	if (_orientation == UIDeviceOrientationLandscapeLeft || _orientation ==  UIDeviceOrientationLandscapeRight) { diff --git a/backends/platform/iphone/osys_video.mm b/backends/platform/iphone/osys_video.mm index aa1856490f..ebe435cb25 100644 --- a/backends/platform/iphone/osys_video.mm +++ b/backends/platform/iphone/osys_video.mm @@ -353,7 +353,7 @@ void OSystem_IPHONE::copyRectToOverlay(const void *buf, int pitch, int x, int y,  	}  	byte *dst = (byte *)_videoContext->overlayTexture.getBasePtr(x, y); -	do {  +	do {  		memcpy(dst, src, w * sizeof(uint16));  		src += pitch;  		dst += _videoContext->overlayTexture.pitch; @@ -435,7 +435,7 @@ void OSystem_IPHONE::setCursorPalette(const byte *colors, uint start, uint num)  	for (uint i = start; i < start + num; ++i, colors += 3)  		_mouseCursorPalette[i] = Graphics::RGBToColor<Graphics::ColorMasks<5551> >(colors[0], colors[1], colors[2]); -	 +  	// FIXME: This is just stupid, our client code seems to assume that this  	// automatically enables the cursor palette.  	_mouseCursorPaletteEnabled = true; diff --git a/backends/platform/maemo/debian/changelog b/backends/platform/maemo/debian/changelog index f3e4c4eadb..ea44574e96 100644 --- a/backends/platform/maemo/debian/changelog +++ b/backends/platform/maemo/debian/changelog @@ -8,7 +8,7 @@ scummvm (1.5.0) unstable; urgency=low    * 1.5.0 release - -- Tarek Soliman <tsoliman@scummvm.org>  Tue, 10 Jul 2012 22:57:32 -0500 + -- Tarek Soliman <tsoliman@scummvm.org>  Fri, 20 Jul 2012 14:48:44 -0500  scummvm (1.4.1) unstable; urgency=low diff --git a/backends/platform/maemo/debian/control b/backends/platform/maemo/debian/control index 6e1dfe2fd4..bdaccd2359 100644 --- a/backends/platform/maemo/debian/control +++ b/backends/platform/maemo/debian/control @@ -2,7 +2,7 @@ Source: scummvm  Section: user/games  Priority: optional  Maintainer: Tarek Soliman <tsoliman@scummvm.org> -Build-Depends: debhelper (>> 4.0.0), libsdl1.2-dev, libmad0-dev, libasound2-dev, libvorbisidec-dev, libmpeg2-4-dev, libflac-dev (>= 1.1.2), libz-dev, quilt +Build-Depends: debhelper (>> 4.0.0), libsdl1.2-dev, libmad0-dev, libasound2-dev, libvorbisidec-dev, libmpeg2-4-dev, libflac-dev (>= 1.1.2), libfreetype6-dev, libz-dev, quilt  Standards-Version: 3.6.1.1  Package: scummvm diff --git a/backends/platform/maemo/debian/rules b/backends/platform/maemo/debian/rules index 64add08de8..c713403876 100755 --- a/backends/platform/maemo/debian/rules +++ b/backends/platform/maemo/debian/rules @@ -47,10 +47,10 @@ install: build  	install -m0644 gui/themes/scummclassic.zip  gui/themes/scummmodern.zip debian/scummvm/opt/scummvm/share  	install -m0644 backends/vkeybd/packs/vkeybd_default.zip debian/scummvm/opt/scummvm/share  # for optified version we can also add engine datafiles -	install -m0644 dists/engine-data/drascula.dat dists/engine-data/hugo.dat dists/engine-data/kyra.dat dists/engine-data/lure.dat dists/engine-data/queen.tbl dists/engine-data/sky.cpt dists/engine-data/teenagent.dat dists/engine-data/toon.dat debian/scummvm/opt/scummvm/share +	install -m0644 dists/engine-data/drascula.dat dists/engine-data/hugo.dat dists/engine-data/kyra.dat dists/engine-data/lure.dat dists/engine-data/queen.tbl dists/engine-data/sky.cpt dists/engine-data/teenagent.dat dists/engine-data/tony.dat dists/engine-data/toon.dat debian/scummvm/opt/scummvm/share  	install -m0644 -d debian/scummvm/usr/share/doc/scummvm -	install -m0644 NEWS README COPYRIGHT debian/scummvm/usr/share/doc/scummvm +	install -m0644 AUTHORS COPYING COPYING.BSD COPYING.FREEFONT COPYING.LGPL COPYRIGHT NEWS README debian/scummvm/usr/share/doc/scummvm  binary: binary-arch  binary-arch: build install diff --git a/backends/platform/openpandora/op-backend.cpp b/backends/platform/openpandora/op-backend.cpp index dcec387f97..354aa24b24 100644 --- a/backends/platform/openpandora/op-backend.cpp +++ b/backends/platform/openpandora/op-backend.cpp @@ -54,53 +54,15 @@  /* Dump console info to files. */  #define DUMP_STDOUT -static SDL_Cursor *hiddenCursor; -  OSystem_OP::OSystem_OP()  	:  	OSystem_POSIX() {  } -//static Uint32 timer_handler(Uint32 interval, void *param) { -//	((DefaultTimerManager *)param)->handler(); -//	return interval; -//} -  void OSystem_OP::initBackend() {  	assert(!_inited); -	// Create the events manager -	if (_eventSource == 0) -		_eventSource = new OPEventSource(); - -	// Create the graphics manager -	if (_graphicsManager == 0) { -		_graphicsManager = new OPGraphicsManager(_eventSource); -	} - -//	int joystick_num = ConfMan.getInt("joystick_num"); -//	uint32 sdlFlags = SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_TIMER; -// -//	if (ConfMan.hasKey("disable_sdl_parachute")) -//		sdlFlags |= SDL_INIT_NOPARACHUTE; -// -//	if (joystick_num > -1) -//		sdlFlags |= SDL_INIT_JOYSTICK; -// -//	if (SDL_Init(sdlFlags) == -1) { -//		error("Could not initialize SDL: %s", SDL_GetError()); -//	} -// - -	// Create the mixer manager -//	if (_mixer == 0) { -//		_mixerManager = new DoubleBufferSDLMixerManager(); - -	// Setup and start mixer -//		_mixerManager->init(); -//	} -  	/* Setup default save path to be workingdir/saves */  	char savePath[PATH_MAX+1]; @@ -179,7 +141,14 @@ void OSystem_OP::initBackend() {  	/* Make sure SDL knows that we have a joystick we want to use. */  	ConfMan.setInt("joystick_num", 0); -//	_graphicsMutex = createMutex(); +	// Create the events manager +	if (_eventSource == 0) +		_eventSource = new OPEventSource(); + +	// Create the graphics manager +	if (_graphicsManager == 0) { +		_graphicsManager = new OPGraphicsManager(_eventSource); +	}  	/* Pass to POSIX method to do the heavy lifting */  	OSystem_POSIX::initBackend(); @@ -187,24 +156,6 @@ void OSystem_OP::initBackend() {  	_inited = true;  } -// enable joystick -//	if (joystick_num > -1 && SDL_NumJoysticks() > 0) { -//		printf("Using joystick: %s\n", SDL_JoystickName(0)); -//		_joystick = SDL_JoystickOpen(joystick_num); -//	} -// -//	setupMixer(); - -// Note: We could implement a custom SDLTimerManager by using -// SDL_AddTimer. That might yield better timer resolution, but it would -// also change the semantics of a timer: Right now, ScummVM timers -// *never* run in parallel, due to the way they are implemented. If we -// switched to SDL_AddTimer, each timer might run in a separate thread. -// However, not all our code is prepared for that, so we can't just -// switch. Still, it's a potential future change to keep in mind. -//	_timer = new DefaultTimerManager(); -//	_timerID = SDL_AddTimer(10, &timer_handler, _timer); -  void OSystem_OP::initSDL() {  	// Check if SDL has not been initialized  	if (!_initedSDL) { @@ -217,38 +168,7 @@ void OSystem_OP::initSDL() {  		if (SDL_Init(sdlFlags) == -1)  			error("Could not initialize SDL: %s", SDL_GetError()); -		uint8_t hiddenCursorData = 0; - -		hiddenCursor = SDL_CreateCursor(&hiddenCursorData, &hiddenCursorData, 8, 1, 0, 0); - -		/* On the OpenPandora we need to work around an SDL assumption that -		   returns relative mouse coordinates when you get to the screen -		   edges using the touchscreen. The workaround is to set a blank -		   SDL cursor and not disable it (Hackish I know). - -		   The root issues likes in the Windows Manager GRAB code in SDL. -		   That is why the issue is not seen on framebuffer devices like the -		   GP2X (there is no X window manager ;)). -		*/ -		SDL_ShowCursor(SDL_ENABLE); -		SDL_SetCursor(hiddenCursor); -		SDL_EnableUNICODE(1); - -//		memset(&_oldVideoMode, 0, sizeof(_oldVideoMode)); -//		memset(&_videoMode, 0, sizeof(_videoMode)); -//		memset(&_transactionDetails, 0, sizeof(_transactionDetails)); - -//		_videoMode.mode = GFX_DOUBLESIZE; -//		_videoMode.scaleFactor = 2; -//		_videoMode.aspectRatioCorrection = ConfMan.getBool("aspect_ratio"); -//		_scalerProc = Normal2x; -//		_scalerType = 0; - -//		_videoMode.fullscreen = true; -  		_initedSDL = true; - -//	OSystem_POSIX::initSDL();  	}  } @@ -275,8 +195,6 @@ void OSystem_OP::addSysArchivesToSearchSet(Common::SearchSet &s, int priority) {  void OSystem_OP::quit() { -	SDL_FreeCursor(hiddenCursor); -  #ifdef DUMP_STDOUT  	printf("%s\n", "Debug: STDOUT and STDERR text files closed.");  	fclose(stdout); diff --git a/backends/platform/openpandora/op-options.cpp b/backends/platform/openpandora/op-options.cpp index 58f0fb7188..005a76b76c 100644 --- a/backends/platform/openpandora/op-options.cpp +++ b/backends/platform/openpandora/op-options.cpp @@ -33,7 +33,8 @@ enum {  	/* Touchscreen TapMode */  	TAPMODE_LEFT        = 0,  	TAPMODE_RIGHT       = 1, -	TAPMODE_HOVER       = 2 +	TAPMODE_HOVER       = 2, +	TAPMODE_HOVER_DPAD  = 3  };  int tapmodeLevel = TAPMODE_LEFT; @@ -44,6 +45,8 @@ void ToggleTapMode() {  	} else if (tapmodeLevel == TAPMODE_RIGHT) {  		tapmodeLevel = TAPMODE_HOVER;  	} else if (tapmodeLevel == TAPMODE_HOVER) { +		tapmodeLevel = TAPMODE_HOVER_DPAD; +	} else if (tapmodeLevel == TAPMODE_HOVER_DPAD) {  		tapmodeLevel = TAPMODE_LEFT;  	} else {  		tapmodeLevel = TAPMODE_LEFT; diff --git a/backends/platform/openpandora/op-sdl.h b/backends/platform/openpandora/op-sdl.h index 8cccbb5f86..1eddad5c4a 100644 --- a/backends/platform/openpandora/op-sdl.h +++ b/backends/platform/openpandora/op-sdl.h @@ -31,8 +31,6 @@  #include "backends/events/openpandora/op-events.h"  #include "backends/graphics/openpandora/op-graphics.h" -//#define MIXER_DOUBLE_BUFFERING 1 -  #ifndef PATH_MAX  #define PATH_MAX 255  #endif diff --git a/backends/platform/sdl/macosx/macosx.cpp b/backends/platform/sdl/macosx/macosx.cpp index 639bd980f6..fb76c111f2 100644 --- a/backends/platform/sdl/macosx/macosx.cpp +++ b/backends/platform/sdl/macosx/macosx.cpp @@ -156,7 +156,7 @@ Common::String OSystem_MacOSX::getSystemLanguage() const {  			}  			CFRelease(preferredLocalizations);  		} -		 +  	}  	// Falback to POSIX implementation  	return OSystem_POSIX::getSystemLanguage(); diff --git a/backends/platform/sdl/macosx/macosx.h b/backends/platform/sdl/macosx/macosx.h index 4837e643b3..d9cb28b973 100644 --- a/backends/platform/sdl/macosx/macosx.h +++ b/backends/platform/sdl/macosx/macosx.h @@ -32,7 +32,7 @@ public:  	virtual bool hasFeature(Feature f);  	virtual bool displayLogFile(); -	 +  	virtual Common::String getSystemLanguage() const;  	virtual void initBackend(); diff --git a/backends/platform/sdl/main.cpp b/backends/platform/sdl/main.cpp deleted file mode 100644 index 040028079d..0000000000 --- a/backends/platform/sdl/main.cpp +++ /dev/null @@ -1,66 +0,0 @@ -/* 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 "common/scummsys.h" - -// Several SDL based ports use a custom main, and hence do not want to compile -// of this file. The following "#if" ensures that. -#if !defined(POSIX) && \ -    !defined(WIN32) && \ -    !defined(MAEMO) && \ -    !defined(__SYMBIAN32__) && \ -    !defined(_WIN32_WCE) && \ -    !defined(__amigaos4__) && \ -    !defined(DINGUX) && \ -    !defined(CAANOO) && \ -    !defined(LINUXMOTO) && \ -    !defined(SAMSUNGTV) && \ -    !defined(PLAYSTATION3) && \ -    !defined(OPENPANDORA) - -#include "backends/platform/sdl/sdl.h" -#include "backends/plugins/sdl/sdl-provider.h" -#include "base/main.h" - -int main(int argc, char *argv[]) { - -	// Create our OSystem instance -	g_system = new OSystem_SDL(); -	assert(g_system); - -	// Pre initialize the backend -	((OSystem_SDL *)g_system)->init(); - -#ifdef DYNAMIC_MODULES -	PluginManager::instance().addPluginProvider(new SDLPluginProvider()); -#endif - -	// Invoke the actual ScummVM main entry point: -	int res = scummvm_main(argc, argv); - -	// Free OSystem -	delete (OSystem_SDL *)g_system; - -	return res; -} - -#endif diff --git a/backends/platform/sdl/module.mk b/backends/platform/sdl/module.mk index 98a8265301..a17a326889 100644 --- a/backends/platform/sdl/module.mk +++ b/backends/platform/sdl/module.mk @@ -1,7 +1,6 @@  MODULE := backends/platform/sdl  MODULE_OBJS := \ -	main.o \  	sdl.o  ifdef POSIX diff --git a/backends/platform/webos/webos.cpp b/backends/platform/webos/webos.cpp index 4ec153a7e9..fc18628235 100644 --- a/backends/platform/webos/webos.cpp +++ b/backends/platform/webos/webos.cpp @@ -45,24 +45,4 @@ void OSystem_SDL_WebOS::initBackend() {  	OSystem_SDL::initBackend();  } -/** - * Gets the original SDL hardware key set, adds WebOS specific keys and - * returns the new key set. - * - * @return The hardware key set with added webOS specific keys. - */ -#ifdef ENABLE_KEYMAPPER -HardwareInputSet *OSystem_SDL_WebOS::getHardwareInputSet() { -	// Get the original SDL hardware key set -	HardwareInputSet *inputSet = OSystem_SDL::getHardwareInputSet(); - -	// Add WebOS specific keys -	inputSet->addHardwareInput(new HardwareInput("FORWARD", -		KeyState((KeyCode) 229, 229, 0), "Forward")); - -	// Return the modified hardware key set -	return inputSet; -} -#endif -  #endif diff --git a/backends/platform/webos/webos.h b/backends/platform/webos/webos.h index 8dfa43239c..dda56a70da 100644 --- a/backends/platform/webos/webos.h +++ b/backends/platform/webos/webos.h @@ -31,9 +31,6 @@ public:  	OSystem_SDL_WebOS();  	virtual void initBackend(); -#ifdef ENABLE_KEYMAPPER -	virtual Common::HardwareInputSet *getHardwareInputSet(); -#endif  };  #endif diff --git a/backends/platform/wii/osystem.cpp b/backends/platform/wii/osystem.cpp index 681675529a..22a6495f8f 100644 --- a/backends/platform/wii/osystem.cpp +++ b/backends/platform/wii/osystem.cpp @@ -39,7 +39,7 @@  OSystem_Wii::OSystem_Wii() :  	_startup_time(0), -	_cursorScale(1), +	_cursorDontScale(true),  	_cursorPaletteDisabled(true),  	_cursorPalette(NULL),  	_cursorPaletteDirty(false), diff --git a/backends/platform/wii/osystem.h b/backends/platform/wii/osystem.h index abafa7f642..5d6998d0b6 100644 --- a/backends/platform/wii/osystem.h +++ b/backends/platform/wii/osystem.h @@ -56,7 +56,7 @@ class OSystem_Wii : public EventsBaseBackend, public PaletteManager {  private:  	s64 _startup_time; -	int _cursorScale; +	bool _cursorDontScale;  	bool _cursorPaletteDisabled;  	u16 *_cursorPalette;  	bool _cursorPaletteDirty; diff --git a/backends/platform/wii/osystem_gfx.cpp b/backends/platform/wii/osystem_gfx.cpp index 90e4d98c6b..fc0802dd4c 100644 --- a/backends/platform/wii/osystem_gfx.cpp +++ b/backends/platform/wii/osystem_gfx.cpp @@ -451,7 +451,7 @@ bool OSystem_Wii::needsScreenUpdate() {  void OSystem_Wii::updateScreen() {  	static f32 ar;  	static gfx_screen_coords_t cc; -	static int cs; +	static f32 csx, csy;  	u32 now = getMillis();  	if (now - _lastScreenUpdate < 1000 / MAX_FPS) @@ -466,7 +466,6 @@ void OSystem_Wii::updateScreen() {  	wii_memstats();  #endif -	cs = _cursorScale;  	_lastScreenUpdate = now;  	if (_overlayVisible || _consoleVisible) @@ -488,12 +487,6 @@ void OSystem_Wii::updateScreen() {  		if (_gameRunning)  			ar = gfx_set_ar(4.0 / 3.0); -		// ugly, but the modern theme sets a factor of 3, only god knows why -		if (cs > 2) -			cs = 1; -		else -			cs *= 2; -  		if (_overlayDirty) {  			gfx_tex_convert(&_texOverlay, _overlayPixels);  			_overlayDirty = false; @@ -503,10 +496,18 @@ void OSystem_Wii::updateScreen() {  	}  	if (_mouseVisible) { -		cc.x = f32(_mouseX - cs * _mouseHotspotX) * _currentXScale; -		cc.y = f32(_mouseY - cs * _mouseHotspotY) * _currentYScale; -		cc.w = f32(_texMouse.width) * _currentXScale * cs; -		cc.h = f32(_texMouse.height) * _currentYScale * cs; +		if (_cursorDontScale) { +			csx = 1.0f / _currentXScale; +			csy = 1.0f / _currentYScale; +		} else { +			csx = 1.0f; +			csy = 1.0f; +		} + +		cc.x = f32(_mouseX - csx * _mouseHotspotX) * _currentXScale; +		cc.y = f32(_mouseY - csy * _mouseHotspotY) * _currentYScale; +		cc.w = f32(_texMouse.width) * _currentXScale * csx; +		cc.h = f32(_texMouse.height) * _currentYScale * csy;  		if (_texMouse.palette && _cursorPaletteDirty) {  			_texMouse.palette[_mouseKeyColor] = 0; @@ -745,8 +746,7 @@ void OSystem_Wii::setMouseCursor(const void *buf, uint w, uint h, int hotspotX,  	_mouseHotspotX = hotspotX;  	_mouseHotspotY = hotspotY; -	// TODO: Adapt to new dontScale logic! -	_cursorScale = 1; +	_cursorDontScale = dontScale;  	if ((_texMouse.palette) && (oldKeycolor != _mouseKeyColor))  		_cursorPaletteDirty = true; diff --git a/backends/taskbar/win32/mingw-compat.h b/backends/taskbar/win32/mingw-compat.h index 55105407c6..f6151936f1 100644 --- a/backends/taskbar/win32/mingw-compat.h +++ b/backends/taskbar/win32/mingw-compat.h @@ -70,7 +70,7 @@ DECLARE_INTERFACE_(IPropertyStore, IUnknown) {  	STDMETHOD (GetValue) (REFPROPERTYKEY key, PROPVARIANT *pv) PURE;  	STDMETHOD (SetValue) (REFPROPERTYKEY key, REFPROPVARIANT propvar) PURE;  	STDMETHOD (Commit) (void) PURE; -	 +  private:  	~IPropertyStore();  }; @@ -137,7 +137,7 @@ DECLARE_INTERFACE_(ITaskbarList3, IUnknown) {  	STDMETHOD (SetOverlayIcon) (THIS_ HWND hwnd, HICON hIcon, LPCWSTR pszDescription) PURE;  	STDMETHOD (SetThumbnailTooltip) (THIS_ HWND hwnd, LPCWSTR pszTip) PURE;  	STDMETHOD (SetThumbnailClip) (THIS_ HWND hwnd, RECT *prcClip) PURE; -	 +  private:  	~ITaskbarList3();  }; diff --git a/backends/timer/bada/timer.cpp b/backends/timer/bada/timer.cpp index f030e0695f..e41ecd4864 100644 --- a/backends/timer/bada/timer.cpp +++ b/backends/timer/bada/timer.cpp @@ -1,115 +1,115 @@ -/* 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.
 - *
 - */
 -
 -#if defined(BADA)
 -
 -#include "backends/timer/bada/timer.h"
 -
 -//
 -// TimerSlot
 -//
 -TimerSlot::TimerSlot(Common::TimerManager::TimerProc callback,
 -										 uint32 interval, void *refCon) :
 -	_timer(0),
 -	_callback(callback),
 -	_interval(interval),
 -	_refCon(refCon) {
 -}
 -
 -TimerSlot::~TimerSlot() {
 -}
 -
 -bool TimerSlot::OnStart() {
 -	_timer = new Osp::Base::Runtime::Timer();
 -	if (!_timer || IsFailed(_timer->Construct(*this))) {
 -		AppLog("Failed to create timer");
 -		return false;
 -	}
 -
 -	if (IsFailed(_timer->Start(_interval))) {
 -		AppLog("failed to start timer");
 -		return false;
 -	}
 -	
 -	AppLog("started timer %d", _interval);
 -	return true;
 -}
 -
 -void TimerSlot::OnStop() {
 -	AppLog("timer stopped");
 -	if (_timer) {
 -		_timer->Cancel();		 
 -		delete _timer;
 -		_timer = NULL;
 -	}
 -}
 -
 -void TimerSlot::OnTimerExpired(Timer &timer) {
 -	_callback(_refCon);
 -	timer.Start(_interval);
 -}
 -
 -//
 -// BadaTimerManager
 -//
 -BadaTimerManager::BadaTimerManager() {
 -}
 -
 -BadaTimerManager::~BadaTimerManager() {
 -	for (Common::List<TimerSlot>::iterator slot = _timers.begin();
 -			 slot != _timers.end(); ) {
 -		slot->Stop();
 -		slot = _timers.erase(slot);
 -	}
 -}
 -
 -bool BadaTimerManager::installTimerProc(TimerProc proc, int32 interval, void *refCon,
 -																				const Common::String &id) {
 -	TimerSlot *slot = new TimerSlot(proc, interval / 1000, refCon);
 -
 -	if (IsFailed(slot->Construct(THREAD_TYPE_EVENT_DRIVEN))) {
 -		AppLog("Failed to create timer thread");
 -		delete slot;
 -		return false;
 -	}
 -
 -	if (IsFailed(slot->Start())) {
 -		delete slot;
 -		AppLog("Failed to start timer thread");
 -		return false;
 -	}
 -
 -	_timers.push_back(*slot);
 -	return true;
 -}
 -
 -void BadaTimerManager::removeTimerProc(TimerProc proc) {
 -	for (Common::List<TimerSlot>::iterator slot = _timers.begin();
 -			 slot != _timers.end(); ++slot) {
 -		if (slot->_callback == proc) {
 -			slot->Stop();
 -			slot = _timers.erase(slot);
 -		}
 -	}
 -}
 -
 -#endif
 +/* 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. + * + */ + +#if defined(BADA) + +#include "backends/timer/bada/timer.h" + +// +// TimerSlot +// +TimerSlot::TimerSlot(Common::TimerManager::TimerProc callback, +										 uint32 interval, void *refCon) : +	_timer(0), +	_callback(callback), +	_interval(interval), +	_refCon(refCon) { +} + +TimerSlot::~TimerSlot() { +} + +bool TimerSlot::OnStart() { +	_timer = new Osp::Base::Runtime::Timer(); +	if (!_timer || IsFailed(_timer->Construct(*this))) { +		AppLog("Failed to create timer"); +		return false; +	} + +	if (IsFailed(_timer->Start(_interval))) { +		AppLog("failed to start timer"); +		return false; +	} + +	AppLog("started timer %d", _interval); +	return true; +} + +void TimerSlot::OnStop() { +	AppLog("timer stopped"); +	if (_timer) { +		_timer->Cancel(); +		delete _timer; +		_timer = NULL; +	} +} + +void TimerSlot::OnTimerExpired(Timer &timer) { +	_callback(_refCon); +	timer.Start(_interval); +} + +// +// BadaTimerManager +// +BadaTimerManager::BadaTimerManager() { +} + +BadaTimerManager::~BadaTimerManager() { +	for (Common::List<TimerSlot>::iterator slot = _timers.begin(); +			 slot != _timers.end(); ) { +		slot->Stop(); +		slot = _timers.erase(slot); +	} +} + +bool BadaTimerManager::installTimerProc(TimerProc proc, int32 interval, void *refCon, +																				const Common::String &id) { +	TimerSlot *slot = new TimerSlot(proc, interval / 1000, refCon); + +	if (IsFailed(slot->Construct(THREAD_TYPE_EVENT_DRIVEN))) { +		AppLog("Failed to create timer thread"); +		delete slot; +		return false; +	} + +	if (IsFailed(slot->Start())) { +		delete slot; +		AppLog("Failed to start timer thread"); +		return false; +	} + +	_timers.push_back(*slot); +	return true; +} + +void BadaTimerManager::removeTimerProc(TimerProc proc) { +	for (Common::List<TimerSlot>::iterator slot = _timers.begin(); +			 slot != _timers.end(); ++slot) { +		if (slot->_callback == proc) { +			slot->Stop(); +			slot = _timers.erase(slot); +		} +	} +} + +#endif diff --git a/backends/timer/bada/timer.h b/backends/timer/bada/timer.h index 04ca771c26..826064d7ff 100644 --- a/backends/timer/bada/timer.h +++ b/backends/timer/bada/timer.h @@ -1,62 +1,62 @@ -/* 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 BADA_TIMER_H
 -#define BADA_TIMER_H
 -
 -#include <FBase.h>
 -
 -#include "common/timer.h"
 -#include "common/list.h"
 -
 -using namespace Osp::Base::Runtime;
 -
 -struct TimerSlot: public ITimerEventListener, public Thread {
 -	TimerSlot(Common::TimerManager::TimerProc callback,
 -						uint32 interval,
 -						void *refCon);
 -	~TimerSlot();
 -
 -	bool OnStart(void);
 -	void OnStop(void);
 -	void OnTimerExpired(Timer &timer);
 -
 -	Timer *_timer;
 -	Common::TimerManager::TimerProc _callback;
 -	uint32 _interval;	// in microseconds
 -	void *_refCon;
 -};
 -
 -class BadaTimerManager : public Common::TimerManager {
 -public:
 -	BadaTimerManager();
 -	~BadaTimerManager();
 -
 -	bool installTimerProc(TimerProc proc, int32 interval, void *refCon, 
 -												const Common::String &id);
 -	void removeTimerProc(TimerProc proc);
 -
 -private:
 -	Common::List<TimerSlot> _timers;
 -};
 -
 -#endif
 +/* 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 BADA_TIMER_H +#define BADA_TIMER_H + +#include <FBase.h> + +#include "common/timer.h" +#include "common/list.h" + +using namespace Osp::Base::Runtime; + +struct TimerSlot: public ITimerEventListener, public Thread { +	TimerSlot(Common::TimerManager::TimerProc callback, +						uint32 interval, +						void *refCon); +	~TimerSlot(); + +	bool OnStart(void); +	void OnStop(void); +	void OnTimerExpired(Timer &timer); + +	Timer *_timer; +	Common::TimerManager::TimerProc _callback; +	uint32 _interval;	// in microseconds +	void *_refCon; +}; + +class BadaTimerManager : public Common::TimerManager { +public: +	BadaTimerManager(); +	~BadaTimerManager(); + +	bool installTimerProc(TimerProc proc, int32 interval, void *refCon, +												const Common::String &id); +	void removeTimerProc(TimerProc proc); + +private: +	Common::List<TimerSlot> _timers; +}; + +#endif diff --git a/backends/timer/default/default-timer.cpp b/backends/timer/default/default-timer.cpp index 9cd803f148..9f56d58b12 100644 --- a/backends/timer/default/default-timer.cpp +++ b/backends/timer/default/default-timer.cpp @@ -156,7 +156,7 @@ void DefaultTimerManager::removeTimerProc(TimerProc callback) {  	}  	// We need to remove all names referencing the timer proc here. -	//  +	//  	// Else we run into troubles, when the client code removes and readds timer  	// callbacks.  	// | 
