diff options
Diffstat (limited to 'backends')
262 files changed, 4183 insertions, 583 deletions
| diff --git a/backends/base-backend.cpp b/backends/base-backend.cpp index 8d22ab732d..3e0005dedd 100644 --- a/backends/base-backend.cpp +++ b/backends/base-backend.cpp @@ -8,19 +8,16 @@   * modify it under the terms of the GNU General Public License   * as published by the Free Software Foundation; either version 2   * of the License, or (at your option) any later version. - + *   * This program is distributed in the hope that it will be useful,   * but WITHOUT ANY WARRANTY; without even the implied warranty of   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the   * GNU General Public License for more details. - + *   * You should have received a copy of the GNU General Public License   * along with this program; if not, write to the Free Software   * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.   * - * $URL$ - * $Id$ - *   */  #include "backends/base-backend.h" diff --git a/backends/events/dinguxsdl/dinguxsdl-events.cpp b/backends/events/dinguxsdl/dinguxsdl-events.cpp index 946507ccfd..64d8fbeb62 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 b461f85fbb..ce5d892957 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 e859c5291b..5d9f032e19 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 72bc56c95d..56915f96fe 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 eefc641844..723942af11 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 4489a2e580..9d235e9044 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; @@ -194,6 +199,149 @@ void SdlEventSource::SDLModToOSystemKeyFlags(SDLMod mod, Common::Event &event) {  		event.kbd.flags |= Common::KBD_CAPS;  } +Common::KeyCode SdlEventSource::SDLToOSystemKeycode(const SDLKey key) { +	switch (key) { +	case SDLK_BACKSPACE: return Common::KEYCODE_BACKSPACE; +	case SDLK_TAB: return Common::KEYCODE_TAB; +	case SDLK_CLEAR: return Common::KEYCODE_CLEAR; +	case SDLK_RETURN: return Common::KEYCODE_RETURN; +	case SDLK_PAUSE: return Common::KEYCODE_PAUSE; +	case SDLK_ESCAPE: return Common::KEYCODE_ESCAPE; +	case SDLK_SPACE: return Common::KEYCODE_SPACE; +	case SDLK_EXCLAIM: return Common::KEYCODE_EXCLAIM; +	case SDLK_QUOTEDBL: return Common::KEYCODE_QUOTEDBL; +	case SDLK_HASH: return Common::KEYCODE_HASH; +	case SDLK_DOLLAR: return Common::KEYCODE_DOLLAR; +	case SDLK_AMPERSAND: return Common::KEYCODE_AMPERSAND; +	case SDLK_QUOTE: return Common::KEYCODE_QUOTE; +	case SDLK_LEFTPAREN: return Common::KEYCODE_LEFTPAREN; +	case SDLK_RIGHTPAREN: return Common::KEYCODE_RIGHTPAREN; +	case SDLK_ASTERISK: return Common::KEYCODE_ASTERISK; +	case SDLK_PLUS: return Common::KEYCODE_PLUS; +	case SDLK_COMMA: return Common::KEYCODE_COMMA; +	case SDLK_MINUS: return Common::KEYCODE_MINUS; +	case SDLK_PERIOD: return Common::KEYCODE_PERIOD; +	case SDLK_SLASH: return Common::KEYCODE_SLASH; +	case SDLK_0: return Common::KEYCODE_0; +	case SDLK_1: return Common::KEYCODE_1; +	case SDLK_2: return Common::KEYCODE_2; +	case SDLK_3: return Common::KEYCODE_3; +	case SDLK_4: return Common::KEYCODE_4; +	case SDLK_5: return Common::KEYCODE_5; +	case SDLK_6: return Common::KEYCODE_6; +	case SDLK_7: return Common::KEYCODE_7; +	case SDLK_8: return Common::KEYCODE_8; +	case SDLK_9: return Common::KEYCODE_9; +	case SDLK_COLON: return Common::KEYCODE_COLON; +	case SDLK_SEMICOLON: return Common::KEYCODE_SEMICOLON; +	case SDLK_LESS: return Common::KEYCODE_LESS; +	case SDLK_EQUALS: return Common::KEYCODE_EQUALS; +	case SDLK_GREATER: return Common::KEYCODE_GREATER; +	case SDLK_QUESTION: return Common::KEYCODE_QUESTION; +	case SDLK_AT: return Common::KEYCODE_AT; +	case SDLK_LEFTBRACKET: return Common::KEYCODE_LEFTBRACKET; +	case SDLK_BACKSLASH: return Common::KEYCODE_BACKSLASH; +	case SDLK_RIGHTBRACKET: return Common::KEYCODE_RIGHTBRACKET; +	case SDLK_CARET: return Common::KEYCODE_CARET; +	case SDLK_UNDERSCORE: return Common::KEYCODE_UNDERSCORE; +	case SDLK_BACKQUOTE: return Common::KEYCODE_BACKQUOTE; +	case SDLK_a: return Common::KEYCODE_a; +	case SDLK_b: return Common::KEYCODE_b; +	case SDLK_c: return Common::KEYCODE_c; +	case SDLK_d: return Common::KEYCODE_d; +	case SDLK_e: return Common::KEYCODE_e; +	case SDLK_f: return Common::KEYCODE_f; +	case SDLK_g: return Common::KEYCODE_g; +	case SDLK_h: return Common::KEYCODE_h; +	case SDLK_i: return Common::KEYCODE_i; +	case SDLK_j: return Common::KEYCODE_j; +	case SDLK_k: return Common::KEYCODE_k; +	case SDLK_l: return Common::KEYCODE_l; +	case SDLK_m: return Common::KEYCODE_m; +	case SDLK_n: return Common::KEYCODE_n; +	case SDLK_o: return Common::KEYCODE_o; +	case SDLK_p: return Common::KEYCODE_p; +	case SDLK_q: return Common::KEYCODE_q; +	case SDLK_r: return Common::KEYCODE_r; +	case SDLK_s: return Common::KEYCODE_s; +	case SDLK_t: return Common::KEYCODE_t; +	case SDLK_u: return Common::KEYCODE_u; +	case SDLK_v: return Common::KEYCODE_v; +	case SDLK_w: return Common::KEYCODE_w; +	case SDLK_x: return Common::KEYCODE_x; +	case SDLK_y: return Common::KEYCODE_y; +	case SDLK_z: return Common::KEYCODE_z; +	case SDLK_DELETE: return Common::KEYCODE_DELETE; +#if SDL_VERSION_ATLEAST(1, 3, 0) +	case SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_GRAVE): return Common::KEYCODE_TILDE; +#else +	case SDLK_WORLD_16: return Common::KEYCODE_TILDE; +#endif +	case SDLK_KP0: return Common::KEYCODE_KP0; +	case SDLK_KP1: return Common::KEYCODE_KP1; +	case SDLK_KP2: return Common::KEYCODE_KP2; +	case SDLK_KP3: return Common::KEYCODE_KP3; +	case SDLK_KP4: return Common::KEYCODE_KP4; +	case SDLK_KP5: return Common::KEYCODE_KP5; +	case SDLK_KP6: return Common::KEYCODE_KP6; +	case SDLK_KP7: return Common::KEYCODE_KP7; +	case SDLK_KP8: return Common::KEYCODE_KP8; +	case SDLK_KP9: return Common::KEYCODE_KP9; +	case SDLK_KP_PERIOD: return Common::KEYCODE_KP_PERIOD; +	case SDLK_KP_DIVIDE: return Common::KEYCODE_KP_DIVIDE; +	case SDLK_KP_MULTIPLY: return Common::KEYCODE_KP_MULTIPLY; +	case SDLK_KP_MINUS: return Common::KEYCODE_KP_MINUS; +	case SDLK_KP_PLUS: return Common::KEYCODE_KP_PLUS; +	case SDLK_KP_ENTER: return Common::KEYCODE_KP_ENTER; +	case SDLK_KP_EQUALS: return Common::KEYCODE_KP_EQUALS; +	case SDLK_UP: return Common::KEYCODE_UP; +	case SDLK_DOWN: return Common::KEYCODE_DOWN; +	case SDLK_RIGHT: return Common::KEYCODE_RIGHT; +	case SDLK_LEFT: return Common::KEYCODE_LEFT; +	case SDLK_INSERT: return Common::KEYCODE_INSERT; +	case SDLK_HOME: return Common::KEYCODE_HOME; +	case SDLK_END: return Common::KEYCODE_END; +	case SDLK_PAGEUP: return Common::KEYCODE_PAGEUP; +	case SDLK_PAGEDOWN: return Common::KEYCODE_PAGEDOWN; +	case SDLK_F1: return Common::KEYCODE_F1; +	case SDLK_F2: return Common::KEYCODE_F2; +	case SDLK_F3: return Common::KEYCODE_F3; +	case SDLK_F4: return Common::KEYCODE_F4; +	case SDLK_F5: return Common::KEYCODE_F5; +	case SDLK_F6: return Common::KEYCODE_F6; +	case SDLK_F7: return Common::KEYCODE_F7; +	case SDLK_F8: return Common::KEYCODE_F8; +	case SDLK_F9: return Common::KEYCODE_F9; +	case SDLK_F10: return Common::KEYCODE_F10; +	case SDLK_F11: return Common::KEYCODE_F11; +	case SDLK_F12: return Common::KEYCODE_F12; +	case SDLK_F13: return Common::KEYCODE_F13; +	case SDLK_F14: return Common::KEYCODE_F14; +	case SDLK_F15: return Common::KEYCODE_F15; +	case SDLK_NUMLOCK: return Common::KEYCODE_NUMLOCK; +	case SDLK_CAPSLOCK: return Common::KEYCODE_CAPSLOCK; +	case SDLK_SCROLLOCK: return Common::KEYCODE_SCROLLOCK; +	case SDLK_RSHIFT: return Common::KEYCODE_RSHIFT; +	case SDLK_LSHIFT: return Common::KEYCODE_LSHIFT; +	case SDLK_RCTRL: return Common::KEYCODE_RCTRL; +	case SDLK_LCTRL: return Common::KEYCODE_LCTRL; +	case SDLK_RALT: return Common::KEYCODE_RALT; +	case SDLK_LALT: return Common::KEYCODE_LALT; +	case SDLK_LSUPER: return Common::KEYCODE_LSUPER; +	case SDLK_RSUPER: return Common::KEYCODE_RSUPER; +	case SDLK_MODE: return Common::KEYCODE_MODE; +	case SDLK_COMPOSE: return Common::KEYCODE_COMPOSE; +	case SDLK_HELP: return Common::KEYCODE_HELP; +	case SDLK_PRINT: return Common::KEYCODE_PRINT; +	case SDLK_SYSREQ: return Common::KEYCODE_SYSREQ; +	case SDLK_BREAK: return Common::KEYCODE_BREAK; +	case SDLK_MENU: return Common::KEYCODE_MENU; +	case SDLK_POWER: return Common::KEYCODE_POWER; +	case SDLK_UNDO: return Common::KEYCODE_UNDO; +	default: return Common::KEYCODE_INVALID; +	} +} +  bool SdlEventSource::pollEvent(Common::Event &event) {  	handleKbdMouse(); @@ -234,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; @@ -302,7 +448,7 @@ bool SdlEventSource::handleKeyDown(SDL_Event &ev, Common::Event &event) {  		return true;  	event.type = Common::EVENT_KEYDOWN; -	event.kbd.keycode = (Common::KeyCode)ev.key.keysym.sym; +	event.kbd.keycode = SDLToOSystemKeycode(ev.key.keysym.sym);  	event.kbd.ascii = mapKey(ev.key.keysym.sym, (SDLMod)ev.key.keysym.mod, (Uint16)ev.key.keysym.unicode);  	return true; @@ -346,7 +492,7 @@ bool SdlEventSource::handleKeyUp(SDL_Event &ev, Common::Event &event) {  	// continue normally  	event.type = Common::EVENT_KEYUP; -	event.kbd.keycode = (Common::KeyCode)ev.key.keysym.sym; +	event.kbd.keycode = SDLToOSystemKeycode(ev.key.keysym.sym);  	event.kbd.ascii = mapKey(ev.key.keysym.sym, (SDLMod)ev.key.keysym.mod, (Uint16)ev.key.keysym.unicode);  	// Ctrl-Alt-<key> will change the GFX mode @@ -361,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;  } @@ -384,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;  } @@ -400,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;  } @@ -408,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) { @@ -439,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) { @@ -510,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 805b76b108..2ba88c702b 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 @@ -127,6 +136,11 @@ protected:  	 * Configures the key modifiers flags status  	 */  	virtual void SDLModToOSystemKeyFlags(SDLMod mod, Common::Event &event); + +	/** +	 * Translates SDL key codes to OSystem key codes +	 */ +	Common::KeyCode SDLToOSystemKeycode(const SDLKey key);  };  #endif diff --git a/backends/events/symbiansdl/symbiansdl-events.cpp b/backends/events/symbiansdl/symbiansdl-events.cpp index 40bd89b8dc..308621e697 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);  				} @@ -195,4 +195,3 @@ bool SymbianSdlEventSource::remapKey(SDL_Event &ev, Common::Event &event) {  }  #endif - diff --git a/backends/events/symbiansdl/symbiansdl-events.h b/backends/events/symbiansdl/symbiansdl-events.h index 7186fc9116..66c0b451eb 100644 --- a/backends/events/symbiansdl/symbiansdl-events.h +++ b/backends/events/symbiansdl/symbiansdl-events.h @@ -53,4 +53,3 @@ protected:  };  #endif - diff --git a/backends/events/webossdl/webossdl-events.cpp b/backends/events/webossdl/webossdl-events.cpp index 102eb5802e..a6a2ed3644 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 1116cbbb8d..e73a4e66dd 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 deeee6196c..5eff630c2a 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/fs/n64/n64-fs-factory.cpp b/backends/fs/n64/n64-fs-factory.cpp index 7cabbf4f7a..5c588c5eb5 100644 --- a/backends/fs/n64/n64-fs-factory.cpp +++ b/backends/fs/n64/n64-fs-factory.cpp @@ -42,4 +42,3 @@ AbstractFSNode *N64FilesystemFactory::makeFileNodePath(const Common::String &pat  }  #endif - diff --git a/backends/fs/n64/n64-fs.cpp b/backends/fs/n64/n64-fs.cpp index e712c198a9..fe37dad467 100644 --- a/backends/fs/n64/n64-fs.cpp +++ b/backends/fs/n64/n64-fs.cpp @@ -161,4 +161,3 @@ Common::WriteStream *N64FilesystemNode::createWriteStream() {  }  #endif //#ifdef __N64__ - diff --git a/backends/fs/n64/romfsstream.cpp b/backends/fs/n64/romfsstream.cpp index c833a228f5..570f25932d 100644 --- a/backends/fs/n64/romfsstream.cpp +++ b/backends/fs/n64/romfsstream.cpp @@ -83,4 +83,3 @@ RomfsStream *RomfsStream::makeFromPath(const Common::String &path, bool writeMod  }  #endif /* __N64__ */ - diff --git a/backends/fs/stdiostream.cpp b/backends/fs/stdiostream.cpp index 7342df0029..3ea0f9898b 100644 --- a/backends/fs/stdiostream.cpp +++ b/backends/fs/stdiostream.cpp @@ -20,6 +20,8 @@   *   */ +#if !defined(DISABLE_STDIO_FILESTREAM) +  // Disable symbol overrides so that we can use FILE, fopen etc.  #define FORBIDDEN_SYMBOL_ALLOW_ALL @@ -100,3 +102,5 @@ StdioStream *StdioStream::makeFromPath(const Common::String &path, bool writeMod  		return new StdioStream(handle);  	return 0;  } + +#endif diff --git a/backends/fs/symbian/symbian-fs.cpp b/backends/fs/symbian/symbian-fs.cpp index fd74c8ca46..9f70e7a7c9 100644 --- a/backends/fs/symbian/symbian-fs.cpp +++ b/backends/fs/symbian/symbian-fs.cpp @@ -231,5 +231,3 @@ Common::WriteStream *SymbianFilesystemNode::createWriteStream() {  	return SymbianStdioStream::makeFromPath(getPath(), true);  }  #endif //#if defined (__SYMBIAN32__) - - diff --git a/backends/fs/symbian/symbianstream.cpp b/backends/fs/symbian/symbianstream.cpp index 352595e25a..39249578f7 100644 --- a/backends/fs/symbian/symbianstream.cpp +++ b/backends/fs/symbian/symbianstream.cpp @@ -268,4 +268,3 @@ SymbianStdioStream *SymbianStdioStream::makeFromPath(const Common::String &path,  		return new SymbianStdioStream(handle);  	return 0;  } - diff --git a/backends/fs/wii/wii-fs-factory.cpp b/backends/fs/wii/wii-fs-factory.cpp index fbc9ef1da8..760e5316e7 100644 --- a/backends/fs/wii/wii-fs-factory.cpp +++ b/backends/fs/wii/wii-fs-factory.cpp @@ -218,4 +218,3 @@ void WiiFilesystemFactory::umountUnused(const String &path) {  }  #endif - diff --git a/backends/fs/wii/wii-fs-factory.h b/backends/fs/wii/wii-fs-factory.h index 42795ebf33..913c0a3b64 100644 --- a/backends/fs/wii/wii-fs-factory.h +++ b/backends/fs/wii/wii-fs-factory.h @@ -85,4 +85,3 @@ private:  };  #endif /*Wii_FILESYSTEM_FACTORY_H*/ - diff --git a/backends/fs/wii/wii-fs.cpp b/backends/fs/wii/wii-fs.cpp index eb631df1bf..4a19e18240 100644 --- a/backends/fs/wii/wii-fs.cpp +++ b/backends/fs/wii/wii-fs.cpp @@ -202,4 +202,3 @@ Common::WriteStream *WiiFilesystemNode::createWriteStream() {  }  #endif //#if defined(__WII__) - diff --git a/backends/graphics/dinguxsdl/dinguxsdl-graphics.cpp b/backends/graphics/dinguxsdl/dinguxsdl-graphics.cpp index 8075d0d45b..17a95688f3 100644 --- a/backends/graphics/dinguxsdl/dinguxsdl-graphics.cpp +++ b/backends/graphics/dinguxsdl/dinguxsdl-graphics.cpp @@ -122,7 +122,7 @@ void DINGUXSdlGraphicsManager::initSize(uint w, uint h) {  	if (w > 320 || h > 240) {  		setGraphicsMode(GFX_HALF);  		setGraphicsModeIntern(); -		_sdlEventSource->toggleMouseGrab(); +		_eventSource->toggleMouseGrab();  	}  	_transactionDetails.sizeChanged = true; @@ -427,6 +427,7 @@ void DINGUXSdlGraphicsManager::hideOverlay() {  }  bool DINGUXSdlGraphicsManager::loadGFXMode() { +	debug("Game ScreenMode = %d*%d", _videoMode.screenWidth, _videoMode.screenHeight);  	// Forcefully disable aspect ratio correction for games  	// which starts with a native 240px height resolution. @@ -435,7 +436,6 @@ bool DINGUXSdlGraphicsManager::loadGFXMode() {  		_videoMode.aspectRatioCorrection = false;  	} -	debug("Game ScreenMode = %d*%d", _videoMode.screenWidth, _videoMode.screenHeight);  	if (_videoMode.screenWidth > 320 || _videoMode.screenHeight > 240) {  		_videoMode.aspectRatioCorrection = false;  		setGraphicsMode(GFX_HALF); @@ -473,9 +473,13 @@ bool DINGUXSdlGraphicsManager::hasFeature(OSystem::Feature f) {  void DINGUXSdlGraphicsManager::setFeatureState(OSystem::Feature f, bool enable) {  	switch (f) { -		case OSystem::kFeatureAspectRatioCorrection: +	case OSystem::kFeatureAspectRatioCorrection:  		setAspectRatioCorrection(enable);  		break; +	case OSystem::kFeatureCursorPalette: +		_cursorPaletteDisabled = !enable; +		blitCursor(); +		break;	  	default:  		break;  	} @@ -485,8 +489,10 @@ bool DINGUXSdlGraphicsManager::getFeatureState(OSystem::Feature f) {  	assert(_transactionMode == kTransactionNone);  	switch (f) { -		case OSystem::kFeatureAspectRatioCorrection: -		return _videoMode.aspectRatioCorrection; +	case OSystem::kFeatureAspectRatioCorrection: +			return _videoMode.aspectRatioCorrection; +	case OSystem::kFeatureCursorPalette: +		return !_cursorPaletteDisabled;  	default:  		return false;  	} @@ -510,21 +516,16 @@ 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; -		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); +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 84a784b771..ecdd01d166 100644 --- a/backends/graphics/dinguxsdl/dinguxsdl-graphics.h +++ b/backends/graphics/dinguxsdl/dinguxsdl-graphics.h @@ -57,7 +57,7 @@ public:  	SurfaceSdlGraphicsManager::MousePos *getMouseCurState();  	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 82a32203fb..96b0619a6a 100644 --- a/backends/graphics/gph/gph-graphics.cpp +++ b/backends/graphics/gph/gph-graphics.cpp @@ -141,7 +141,7 @@ void GPHGraphicsManager::initSize(uint w, uint h, const Graphics::PixelFormat *f  	if (w > 320 || h > 240){  		setGraphicsMode(GFX_HALF);  		setGraphicsModeIntern(); -		_sdlEventSource->toggleMouseGrab(); +		_eventSource->toggleMouseGrab();  	}  	_videoMode.overlayWidth = 320; @@ -579,21 +579,16 @@ 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; -		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); +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 45b8618569..0118fc7ecd 100644 --- a/backends/graphics/gph/gph-graphics.h +++ b/backends/graphics/gph/gph-graphics.h @@ -56,7 +56,7 @@ public:  	SurfaceSdlGraphicsManager::MousePos *getMouseCurState();  	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/graphics.h b/backends/graphics/graphics.h index 20924ed581..3f282df587 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 diff --git a/backends/graphics/linuxmotosdl/linuxmotosdl-graphics.cpp b/backends/graphics/linuxmotosdl/linuxmotosdl-graphics.cpp index 732074b7e2..de9838a0d7 100644 --- a/backends/graphics/linuxmotosdl/linuxmotosdl-graphics.cpp +++ b/backends/graphics/linuxmotosdl/linuxmotosdl-graphics.cpp @@ -134,7 +134,7 @@ void LinuxmotoSdlGraphicsManager::initSize(uint w, uint h) {  	if	(w > 320 || h > 240) {  		setGraphicsMode(GFX_HALF);  		setGraphicsModeIntern(); -		_sdlEventSource->toggleMouseGrab(); +		_eventSource->toggleMouseGrab();  	}  	_transactionDetails.sizeChanged = true; @@ -478,21 +478,16 @@ 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; -		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); +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 938512f323..ee2a566d71 100644 --- a/backends/graphics/linuxmotosdl/linuxmotosdl-graphics.h +++ b/backends/graphics/linuxmotosdl/linuxmotosdl-graphics.h @@ -42,8 +42,7 @@ public:  	virtual void hideOverlay();  	virtual void warpMouse(int x, int y); -protected: -	virtual void adjustMouseEvent(const Common::Event &event); +	virtual void transformMouseCoordinates(Common::Point &point);  };  #endif diff --git a/backends/graphics/opengl/gltexture.h b/backends/graphics/opengl/gltexture.h index f0cd7aed56..71f1eeb78f 100644 --- a/backends/graphics/opengl/gltexture.h +++ b/backends/graphics/opengl/gltexture.h @@ -20,6 +20,9 @@   *   */ +#ifndef BACKENDS_GRAPHICS_OPENGL_GLTEXTURE_H +#define BACKENDS_GRAPHICS_OPENGL_GLTEXTURE_H +  #include "common/scummsys.h"  #ifdef WIN32 @@ -31,7 +34,20 @@  #undef ARRAYSIZE  #endif -#if defined(USE_GLES) +// HACK: At this point in Windows platforms, common/util.h has been included +// via common/rect.h (from backends/graphics/sdl/sdl-graphics.h), via +// backends/graphics/openglsdl/openglsdl-graphics.h. Thus, we end up with +// COMMON_UTIL_H defined, and ARRAYSIZE undefined (bad!). Therefore, +// ARRAYSIZE is undefined in openglsdl-graphics.cpp. This is a temporary +// hackish solution fo fix compilation under Windows. +#if !defined(ARRAYSIZE) && defined(COMMON_UTIL_H) +#define ARRAYSIZE(x) ((int)(sizeof(x) / sizeof(x[0]))) +#endif + +#if defined(BADA) +#include <FGraphicsOpengl.h> +using namespace Osp::Graphics::Opengl; +#elif defined(USE_GLES)  #include <GLES/gl.h>  #elif defined(SDL_BACKEND)  #include <SDL_opengl.h> @@ -106,3 +122,5 @@ protected:  	GLint _filter;  	bool _refresh;  }; + +#endif diff --git a/backends/graphics/opengl/opengl-graphics.cpp b/backends/graphics/opengl/opengl-graphics.cpp index 046be4c669..8e01e76f16 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  // @@ -1254,12 +1245,16 @@ void OpenGLGraphicsManager::toggleAntialiasing() {  	_transactionDetails.filterChanged = true;  } -uint OpenGLGraphicsManager::getAspectRatio() { +uint OpenGLGraphicsManager::getAspectRatio() const {  	// In case we enable aspect ratio correction we force a 4/3 ratio. +	// But just for 320x200 and 640x400 games, since other games do not need +	// this.  	// TODO: This makes OpenGL Normal behave like OpenGL Conserve, when aspect  	// ratio correction is enabled, but it's better than the previous 4/3 mode  	// mess at least... -	if (_videoMode.aspectRatioCorrection) +	if (_videoMode.aspectRatioCorrection +	    && ((_videoMode.screenWidth == 320 && _videoMode.screenHeight == 200) +	    || (_videoMode.screenWidth == 640 && _videoMode.screenHeight == 400)))  		return 13333;  	else if (_videoMode.mode == OpenGL::GFX_NORMAL)  		return _videoMode.hardwareWidth * 10000 / _videoMode.hardwareHeight; @@ -1282,36 +1277,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; @@ -1383,9 +1348,13 @@ const char *OpenGLGraphicsManager::getCurrentModeName() {  }  #ifdef USE_OSD +const Graphics::Font *OpenGLGraphicsManager::getFontOSD() { +  return FontMan.getFontByUsage(Graphics::FontManager::kLocalizedFont); +} +  void OpenGLGraphicsManager::updateOSD() {  	// The font we are going to use: -	const Graphics::Font *font = FontMan.getFontByUsage(Graphics::FontManager::kLocalizedFont); +	const Graphics::Font *font = getFontOSD();  	if (_osdSurface.w != _osdTexture->getWidth() || _osdSurface.h != _osdTexture->getHeight())  		_osdSurface.create(_osdTexture->getWidth(), _osdTexture->getHeight(), _overlayFormat); diff --git a/backends/graphics/opengl/opengl-graphics.h b/backends/graphics/opengl/opengl-graphics.h index 56f7d92a12..6ded680eae 100644 --- a/backends/graphics/opengl/opengl-graphics.h +++ b/backends/graphics/opengl/opengl-graphics.h @@ -26,7 +26,8 @@  #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/font.h"  #include "graphics/pixelformat.h"  // Uncomment this to enable the 'on screen display' code. @@ -50,13 +51,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 +108,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 @@ -220,10 +215,7 @@ protected:  	virtual void calculateDisplaySize(int &width, int &height);  	virtual void refreshDisplaySize(); -	/** -	 * Returns the current target aspect ratio x 10000 -	 */ -	virtual uint getAspectRatio(); +	uint getAspectRatio() const;  	bool _formatBGR; @@ -324,6 +316,11 @@ protected:  	 */  	Common::Array<Common::String> _osdLines; +  /** +   * Returns the font used for on screen display +   */ +  virtual const Graphics::Font *getFontOSD(); +  	/**  	 * Update the OSD texture / surface.  	 */ diff --git a/backends/graphics/openglsdl/openglsdl-graphics.cpp b/backends/graphics/openglsdl/openglsdl-graphics.cpp index bd7dd32e3b..84515732fe 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), @@ -71,6 +72,14 @@ OpenGLSdlGraphicsManager::OpenGLSdlGraphicsManager()  }  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) { @@ -304,14 +313,17 @@ bool OpenGLSdlGraphicsManager::loadGFXMode() {  		_videoMode.overlayWidth = _videoMode.hardwareWidth = _videoMode.screenWidth * scaleFactor;  		_videoMode.overlayHeight = _videoMode.hardwareHeight = _videoMode.screenHeight * scaleFactor; -		int screenAspectRatio = _videoMode.screenWidth * 10000 / _videoMode.screenHeight; -		int desiredAspectRatio = getAspectRatio(); - -		// Do not downscale dimensions, only enlarge them if needed -		if (screenAspectRatio > desiredAspectRatio) -			_videoMode.hardwareHeight = (_videoMode.overlayWidth * 10000  + 5000) / desiredAspectRatio; -		else if (screenAspectRatio < desiredAspectRatio) -			_videoMode.hardwareWidth = (_videoMode.overlayHeight * desiredAspectRatio + 5000) / 10000; +		// The only modes where we need to adapt the aspect ratio are 320x200 +		// and 640x400. That is since our aspect ratio correction in fact is +		// only used to ensure that the original pixel size aspect for these +		// modes is used. +		// (Non-square pixels on old monitors vs square pixel on new ones). +		if (_videoMode.aspectRatioCorrection +		    && ((_videoMode.screenWidth == 320 && _videoMode.screenHeight == 200) +		    || (_videoMode.screenWidth == 640 && _videoMode.screenHeight == 400))) +			_videoMode.overlayHeight = _videoMode.hardwareHeight = 240 * scaleFactor; +		else +			_videoMode.overlayHeight = _videoMode.hardwareHeight = _videoMode.screenHeight * scaleFactor;  	}  	_screenResized = false; @@ -609,50 +621,54 @@ 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); +	default: +		break; +	} -				if (getScale() != scale) { -					scaleChanged = true; -					setScale(MAX(MIN(scale, 3), 1)); -				} +	return false; +} -				if (_videoMode.mode == OpenGL::GFX_ORIGINAL) { -					calculateDisplaySize(_videoMode.hardwareWidth, _videoMode.hardwareHeight); -				} +void OpenGLSdlGraphicsManager::notifyVideoExpose() { +} -				_transactionDetails.sizeChanged = true; -			endGFXTransaction(); +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; + +			_screenResized = true; + +			int scale = MIN(_videoMode.hardwareWidth / _videoMode.screenWidth, +			                _videoMode.hardwareHeight / _videoMode.screenHeight); + +			if (getScale() != scale) { +				scaleChanged = true; +				setScale(MAX(MIN(scale, 3), 1)); +			} + +			_transactionDetails.sizeChanged = true; +		endGFXTransaction();  #ifdef USE_OSD -			if (scaleChanged) -				displayScaleChangedMsg(); +		if (scaleChanged) +			displayScaleChangedMsg();  #endif -		} -		return true; - -	default: -		break;  	} +} -	return OpenGLGraphicsManager::notifyEvent(event); +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 ba9f94db2d..1587183328 100644 --- a/backends/graphics/openglsdl/openglsdl-graphics.h +++ b/backends/graphics/openglsdl/openglsdl-graphics.h @@ -27,15 +27,17 @@  #if defined(ARRAYSIZE) && !defined(_WINDOWS_)  #undef ARRAYSIZE  #endif - +#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 { +class OpenGLSdlGraphicsManager : public OpenGLGraphicsManager, public SdlGraphicsManager, public Common::EventObserver {  public: -	OpenGLSdlGraphicsManager(); +	OpenGLSdlGraphicsManager(SdlEventSource *eventSource);  	virtual ~OpenGLSdlGraphicsManager();  	virtual bool hasFeature(OSystem::Feature f); @@ -45,10 +47,17 @@ public:  	virtual Common::List<Graphics::PixelFormat> getSupportedFormats() const;  #endif +	virtual void initEventObserver();  	virtual bool notifyEvent(const Common::Event &event);  	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/sdl/sdl-graphics.cpp b/backends/graphics/sdl/sdl-graphics.cpp new file mode 100644 index 0000000000..2eca4b8aab --- /dev/null +++ b/backends/graphics/sdl/sdl-graphics.cpp @@ -0,0 +1,35 @@ +/* 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) { +	_eventSource->setGraphicsManager(this); +} + +SdlGraphicsManager::~SdlGraphicsManager() { +	_eventSource->setGraphicsManager(0); +} + diff --git a/backends/graphics/sdl/sdl-graphics.h b/backends/graphics/sdl/sdl-graphics.h new file mode 100644 index 0000000000..ea9149fccb --- /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 diamond 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/graphics/surfacesdl/surfacesdl-graphics.cpp b/backends/graphics/surfacesdl/surfacesdl-graphics.cpp index 2d41ecead4..146200148a 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),  #ifdef USE_OSD  	_osdSurface(0), _osdAlpha(SDL_ALPHA_TRANSPARENT), _osdFadeStartTime(0),  #endif @@ -249,7 +249,10 @@ void SurfaceSdlGraphicsManager::setFeatureState(OSystem::Feature f, bool enable)  }  bool SurfaceSdlGraphicsManager::getFeatureState(OSystem::Feature f) { -	assert(_transactionMode == kTransactionNone); +	// We need to allow this to be called from within a transaction, since we +	// currently use it to retreive the graphics state, when switching from +	// SDL->OpenGL mode for example. +	//assert(_transactionMode == kTransactionNone);  	switch (f) {  	case OSystem::kFeatureFullscreenMode: @@ -846,7 +849,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); @@ -2235,20 +2238,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 +2286,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;  	} @@ -2324,4 +2297,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 cd8710d443..f71096d43e 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,9 +141,12 @@ public:  	// Override from Common::EventObserver  	bool notifyEvent(const Common::Event &event); -protected: -	SdlEventSource *_sdlEventSource; +	// SdlGraphicsManager interface +	virtual void notifyVideoExpose(); +	virtual void transformMouseCoordinates(Common::Point &point); +	virtual void notifyMousePos(Common::Point mouse); +protected:  #ifdef USE_OSD  	/** Surface containing the OSD message */  	SDL_Surface *_osdSurface; @@ -329,7 +333,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/symbiansdl/symbiansdl-graphics.cpp b/backends/graphics/symbiansdl/symbiansdl-graphics.cpp index 4a9a219641..5fe8b19887 100644 --- a/backends/graphics/symbiansdl/symbiansdl-graphics.cpp +++ b/backends/graphics/symbiansdl/symbiansdl-graphics.cpp @@ -77,4 +77,3 @@ void SymbianSdlGraphicsManager::setFeatureState(OSystem::Feature f, bool enable)  }  #endif - diff --git a/backends/graphics/symbiansdl/symbiansdl-graphics.h b/backends/graphics/symbiansdl/symbiansdl-graphics.h index 404ca87a0a..73e810a629 100644 --- a/backends/graphics/symbiansdl/symbiansdl-graphics.h +++ b/backends/graphics/symbiansdl/symbiansdl-graphics.h @@ -39,4 +39,3 @@ public:  };  #endif - diff --git a/backends/graphics/wincesdl/wincesdl-graphics.cpp b/backends/graphics/wincesdl/wincesdl-graphics.cpp index 2ca78cedde..58b735ef8b 100644 --- a/backends/graphics/wincesdl/wincesdl-graphics.cpp +++ b/backends/graphics/wincesdl/wincesdl-graphics.cpp @@ -934,7 +934,7 @@ bool WINCESdlGraphicsManager::loadGFXMode() {  		_toolbarHigh = NULL;  	// keyboard cursor control, some other better place for it? -	_sdlEventSource->resetKeyboadEmulation(_videoMode.screenWidth * _scaleFactorXm / _scaleFactorXd - 1, _videoMode.screenHeight * _scaleFactorXm / _scaleFactorXd - 1); +	_eventSource->resetKeyboadEmulation(_videoMode.screenWidth * _scaleFactorXm / _scaleFactorXd - 1, _videoMode.screenHeight * _scaleFactorXm / _scaleFactorXd - 1);  	return true;  } @@ -1158,22 +1158,17 @@ 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; -		/* -		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); -		} -		*/ -		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) { @@ -1657,4 +1652,3 @@ WINCESdlGraphicsManager::zoneDesc WINCESdlGraphicsManager::_zones[TOTAL_ZONES] =  };  #endif /* _WIN32_WCE */ - diff --git a/backends/graphics/wincesdl/wincesdl-graphics.h b/backends/graphics/wincesdl/wincesdl-graphics.h index 92894e0dcd..2e8c3313b3 100644 --- a/backends/graphics/wincesdl/wincesdl-graphics.h +++ b/backends/graphics/wincesdl/wincesdl-graphics.h @@ -158,8 +158,7 @@ public:  	static zoneDesc _zones[TOTAL_ZONES]; -protected: -	virtual void adjustMouseEvent(const Common::Event &event); +	virtual void transformMouseCoordinates(Common::Point &point);  private:  	bool update_scalers(); @@ -206,4 +205,3 @@ private:  };  #endif /* BACKENDS_GRAPHICS_WINCE_SDL_H */ - diff --git a/backends/log/log.cpp b/backends/log/log.cpp index c02643b48b..693399bae5 100644 --- a/backends/log/log.cpp +++ b/backends/log/log.cpp @@ -102,4 +102,3 @@ void Log::printTimeStamp() {  } // End of namespace Log  } // End of namespace Backends - diff --git a/backends/log/log.h b/backends/log/log.h index 8c95bfc435..524f70405f 100644 --- a/backends/log/log.h +++ b/backends/log/log.h @@ -126,4 +126,3 @@ private:  } // End of namespace Backends  #endif - diff --git a/backends/mixer/symbiansdl/symbiansdl-mixer.cpp b/backends/mixer/symbiansdl/symbiansdl-mixer.cpp index c911a99b61..d4637fdd88 100644 --- a/backends/mixer/symbiansdl/symbiansdl-mixer.cpp +++ b/backends/mixer/symbiansdl/symbiansdl-mixer.cpp @@ -72,4 +72,3 @@ void SymbianSdlMixerManager::callbackHandler(byte *samples, int len) {  }  #endif - diff --git a/backends/mixer/symbiansdl/symbiansdl-mixer.h b/backends/mixer/symbiansdl/symbiansdl-mixer.h index e3104e45eb..d59c98753b 100644 --- a/backends/mixer/symbiansdl/symbiansdl-mixer.h +++ b/backends/mixer/symbiansdl/symbiansdl-mixer.h @@ -41,4 +41,3 @@ protected:  };  #endif - diff --git a/backends/mixer/wincesdl/wincesdl-mixer.cpp b/backends/mixer/wincesdl/wincesdl-mixer.cpp index c7659cb0f5..db5ab59446 100644 --- a/backends/mixer/wincesdl/wincesdl-mixer.cpp +++ b/backends/mixer/wincesdl/wincesdl-mixer.cpp @@ -187,4 +187,3 @@ bool WINCESdlMixerManager::checkOggHighSampleRate() {  #endif  #endif - diff --git a/backends/mixer/wincesdl/wincesdl-mixer.h b/backends/mixer/wincesdl/wincesdl-mixer.h index 8274d39d1c..fb51f6ac64 100644 --- a/backends/mixer/wincesdl/wincesdl-mixer.h +++ b/backends/mixer/wincesdl/wincesdl-mixer.h @@ -47,4 +47,3 @@ private:  };  #endif - diff --git a/backends/module.mk b/backends/module.mk index 63774cc4d0..e38b039aa2 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 \ @@ -87,7 +88,8 @@ endif  ifdef MACOSX  MODULE_OBJS += \  	midi/coreaudio.o \ -	midi/coremidi.o +	midi/coremidi.o \ +	updates/macosx/macosx-updates.o  endif  ifdef WIN32 @@ -115,6 +117,11 @@ MODULE_OBJS += \  	mixer/sdl13/sdl13-mixer.o  endif +ifeq ($(BACKEND),bada) +MODULE_OBJS += \ +	timer/bada/timer.o +endif +  ifeq ($(BACKEND),ds)  MODULE_OBJS += \  	fs/ds/ds-fs.o \ diff --git a/backends/platform/android/android.cpp b/backends/platform/android/android.cpp index 17c7d4f9cb..a935bf145d 100644 --- a/backends/platform/android/android.cpp +++ b/backends/platform/android/android.cpp @@ -602,4 +602,3 @@ void AndroidPluginProvider::addCustomDirectories(Common::FSList &dirs) const {  #endif  #endif - diff --git a/backends/platform/android/android.h b/backends/platform/android/android.h index c2ada2ab77..f39a8f1144 100644 --- a/backends/platform/android/android.h +++ b/backends/platform/android/android.h @@ -296,4 +296,3 @@ public:  #endif  #endif - diff --git a/backends/platform/android/android.mk b/backends/platform/android/android.mk index 77fdb139d8..63d194fdc1 100644 --- a/backends/platform/android/android.mk +++ b/backends/platform/android/android.mk @@ -189,4 +189,3 @@ androiddistdebug: all  	done  .PHONY: androidrelease androidtest - diff --git a/backends/platform/android/asset-archive.h b/backends/platform/android/asset-archive.h index 016e3e31a5..9216412e0a 100644 --- a/backends/platform/android/asset-archive.h +++ b/backends/platform/android/asset-archive.h @@ -52,4 +52,3 @@ private:  #endif  #endif - diff --git a/backends/platform/android/events.cpp b/backends/platform/android/events.cpp index cf1d4b173c..2a16e69411 100644 --- a/backends/platform/android/events.cpp +++ b/backends/platform/android/events.cpp @@ -820,4 +820,3 @@ bool OSystem_Android::pollEvent(Common::Event &event) {  }  #endif - diff --git a/backends/platform/android/gfx.cpp b/backends/platform/android/gfx.cpp index b8a9e74437..8bc914f567 100644 --- a/backends/platform/android/gfx.cpp +++ b/backends/platform/android/gfx.cpp @@ -826,4 +826,3 @@ void OSystem_Android::disableCursorPalette() {  }  #endif - diff --git a/backends/platform/android/jni.cpp b/backends/platform/android/jni.cpp index e3b4ef7401..b44a585528 100644 --- a/backends/platform/android/jni.cpp +++ b/backends/platform/android/jni.cpp @@ -619,4 +619,3 @@ void JNI::setPause(JNIEnv *env, jobject self, jboolean value) {  }  #endif - diff --git a/backends/platform/android/jni.h b/backends/platform/android/jni.h index 1abecf0a37..52698e0f35 100644 --- a/backends/platform/android/jni.h +++ b/backends/platform/android/jni.h @@ -145,4 +145,3 @@ inline int JNI::writeAudio(JNIEnv *env, jbyteArray &data, int offset, int size)  #endif  #endif - diff --git a/backends/platform/android/module.mk b/backends/platform/android/module.mk index 2fe4b40585..de5fe98a53 100644 --- a/backends/platform/android/module.mk +++ b/backends/platform/android/module.mk @@ -12,4 +12,3 @@ MODULE_OBJS := \  MODULE_OBJS := $(addprefix $(MODULE)/, $(MODULE_OBJS))  OBJS := $(MODULE_OBJS) $(OBJS)  MODULE_DIRS += $(sort $(dir $(MODULE_OBJS))) - diff --git a/backends/platform/android/org/inodes/gus/scummvm/EditableSurfaceView.java b/backends/platform/android/org/inodes/gus/scummvm/EditableSurfaceView.java index cede7eedd4..3aef14b851 100644 --- a/backends/platform/android/org/inodes/gus/scummvm/EditableSurfaceView.java +++ b/backends/platform/android/org/inodes/gus/scummvm/EditableSurfaceView.java @@ -59,4 +59,3 @@ public class EditableSurfaceView extends SurfaceView {  		return new MyInputConnection();  	}  } - diff --git a/backends/platform/android/org/inodes/gus/scummvm/PluginProvider.java b/backends/platform/android/org/inodes/gus/scummvm/PluginProvider.java index 3c91d9f5dc..d90b7b2c68 100644 --- a/backends/platform/android/org/inodes/gus/scummvm/PluginProvider.java +++ b/backends/platform/android/org/inodes/gus/scummvm/PluginProvider.java @@ -51,4 +51,3 @@ public class PluginProvider extends BroadcastReceiver {  		setResultExtras(extras);  	}  } - diff --git a/backends/platform/android/org/inodes/gus/scummvm/ScummVM.java b/backends/platform/android/org/inodes/gus/scummvm/ScummVM.java index ef9f4cc1e0..246a02c9be 100644 --- a/backends/platform/android/org/inodes/gus/scummvm/ScummVM.java +++ b/backends/platform/android/org/inodes/gus/scummvm/ScummVM.java @@ -449,4 +449,3 @@ public abstract class ScummVM implements SurfaceHolder.Callback, Runnable {  		System.load(libpath.getPath());  	}  } - diff --git a/backends/platform/android/org/inodes/gus/scummvm/ScummVMActivity.java b/backends/platform/android/org/inodes/gus/scummvm/ScummVMActivity.java index 1978b690d0..ce4e016322 100644 --- a/backends/platform/android/org/inodes/gus/scummvm/ScummVMActivity.java +++ b/backends/platform/android/org/inodes/gus/scummvm/ScummVMActivity.java @@ -222,4 +222,3 @@ public class ScummVMActivity extends Activity {  										InputMethodManager.HIDE_IMPLICIT_ONLY);  	}  } - diff --git a/backends/platform/android/org/inodes/gus/scummvm/ScummVMApplication.java b/backends/platform/android/org/inodes/gus/scummvm/ScummVMApplication.java index f9eec72eac..8ab7d1a084 100644 --- a/backends/platform/android/org/inodes/gus/scummvm/ScummVMApplication.java +++ b/backends/platform/android/org/inodes/gus/scummvm/ScummVMApplication.java @@ -28,4 +28,3 @@ public class ScummVMApplication extends Application {  		return _cache_dir;  	}  } - diff --git a/backends/platform/android/org/inodes/gus/scummvm/ScummVMEvents.java b/backends/platform/android/org/inodes/gus/scummvm/ScummVMEvents.java index 2d5c100a1c..175ff0b677 100644 --- a/backends/platform/android/org/inodes/gus/scummvm/ScummVMEvents.java +++ b/backends/platform/android/org/inodes/gus/scummvm/ScummVMEvents.java @@ -229,4 +229,3 @@ public class ScummVMEvents implements  		return true;  	}  } - diff --git a/backends/platform/android/org/inodes/gus/scummvm/Unpacker.java b/backends/platform/android/org/inodes/gus/scummvm/Unpacker.java index c4b2ad7f5d..8811b1f3ae 100644 --- a/backends/platform/android/org/inodes/gus/scummvm/Unpacker.java +++ b/backends/platform/android/org/inodes/gus/scummvm/Unpacker.java @@ -370,4 +370,3 @@ public class Unpacker extends Activity {  		}  	}  } - diff --git a/backends/platform/android/texture.cpp b/backends/platform/android/texture.cpp index e993ed6794..53b4d1cc59 100644 --- a/backends/platform/android/texture.cpp +++ b/backends/platform/android/texture.cpp @@ -488,4 +488,3 @@ GLESFakePalette5551Texture::~GLESFakePalette5551Texture() {  }  #endif - diff --git a/backends/platform/android/texture.h b/backends/platform/android/texture.h index dd34ba9d88..4307b5a1bc 100644 --- a/backends/platform/android/texture.h +++ b/backends/platform/android/texture.h @@ -271,4 +271,3 @@ public:  #endif  #endif - diff --git a/backends/platform/bada/README.TXT b/backends/platform/bada/README.TXT new file mode 100644 index 0000000000..ca6f8f245a --- /dev/null +++ b/backends/platform/bada/README.TXT @@ -0,0 +1,85 @@ +Build instructions: + +1. Install BADA SDK (requires free registration): + + http://developer.bada.com/apis/index.do + +2. Install Cygwin: + + http://www.cygwin.com/ + + Add the following to your cygwin .bash_profile: + + alias mmake=/cygdrive/c/MinGW/bin/mingw32-make.exe + export BADA_SDK=/cygdrive/c/bada/1.2.1 + export ARM_BIN=c:/bada/1.2.1/Tools/Toolchains/ARM/bin + export CPPFLAGS="-fpic -fshort-wchar -mcpu=cortex-a8 -mfpu=vfpv3 \ +                  -mfloat-abi=hard -mlittle-endian -mthumb-interwork -Wno-psabi \ +                  -fno-strict-aliasing -fno-short-enums" + export LDFLAGS="-nostdlib -lc-newlib -lm-newlib -LC:/bada/1.2.1/Model/Wave_LP1/Target" + #export PATH=${BADA_SDK}/Tools/Toolchains/Win32/bin:${PATH} + export PATH=${BADA_SDK}/Tools/Toolchains/ARM/bin:~/utils:${PATH} + alias gcc=${ARM_BIN}/arm-samsung-nucleuseabi-gcc.exe + alias ar=${ARM_BIN}/arm-samsung-nucleuseabi-ar.exe + + The following were added to ~/utils for zlib: + + ar: + #!/bin/sh + ${ARM_BIN}/arm-samsung-nucleuseabi-ar.exe $* + + gcc: + #!/bin/sh + ${ARM_BIN}/arm-samsung-nucleuseabi-gcc.exe $* + +3. Build dependencies + + zlib, libogg, libvorbis, libmad, FLAC + + see: "Building the libraries" under: + http://wiki.scummvm.org/index.php/Compiling_ScummVM/MinGW#Building_the_libraries + for instructions on how to obtain these modules + + 3.1 For Target-Release configure ogg and mad with: + +     ./configure --host=arm-samsung-nucleuseabi --disable-shared + +     when building vorbis and flac: + +     ./configure --host=arm-samsung-nucleuseabi --disable-shared --with-ogg=c:/cygwin/usr/local + + 3.2 for each module, after a successful configure, add the following +     to the generated config.h (gzguts.h for zlib) + +     #undef __MINGW32__ +     #undef _WIN32 +     #include "c:/src/scummvm/backends/platform/bada/portdefs.h" + + 3.3 Additional post configure edits: + +   - removed -fforce-mem from the libMAD Makefile +   - in libvorbis/lib/Makefile comment lines with vorbis_selftests +   - edit libFLAC/Makefile ... CFLAGS = $(OGG_CFLAGS) + + Note: you can ignore the ranlib errors when doing make install. + +4. Build the ScummVM base library: + +  ./configure --host=bada --enable-release + +  To target the Win32 simulator: + + ./configure --host=bada --enable-debug + +5. Build the front end application using BADA-Ide: + + Copy the scummvm/dists/bada folder into a clean directory + outside of the scummvm package. Start the BADA IDE then + choose this folder as the eclipse workspace. Click + Project / Build. + +Links: + +A short turorial on implementing OpenGL ES 1.1 in BADA: +  http://forums.badadev.com/viewtopic.php?f=7&t=208 + diff --git a/backends/platform/bada/application.cpp b/backends/platform/bada/application.cpp new file mode 100644 index 0000000000..a287fa6352 --- /dev/null +++ b/backends/platform/bada/application.cpp @@ -0,0 +1,109 @@ +/* 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 "engines/engine.h" + +#include "backends/platform/bada/form.h" +#include "backends/platform/bada/system.h" +#include "backends/platform/bada/application.h" + +using namespace Osp::System; +using namespace Osp::Ui::Controls; + +Application *BadaScummVM::createInstance() { +	return new BadaScummVM(); +} + +BadaScummVM::BadaScummVM() : _appForm(0) { +} + +BadaScummVM::~BadaScummVM() { +	logEntered(); +	if (g_system) { +		BadaSystem *system = (BadaSystem *)g_system; +		system->destroyBackend(); +		delete system; +		g_system = 0; +	} +} + +bool BadaScummVM::OnAppInitializing(AppRegistry &appRegistry) { +	_appForm = systemStart(this); +	return (_appForm != NULL); +} + +bool BadaScummVM::OnAppTerminating(AppRegistry &appRegistry, +																	 bool forcedTermination) { +	logEntered(); +	return true; +} + +void BadaScummVM::OnUserEventReceivedN(RequestId requestId, +																			 Osp::Base::Collection::IList *args) { +	logEntered(); + +	if (requestId == USER_MESSAGE_EXIT) { +		// normal program termination +		Terminate(); +	} else if (requestId == USER_MESSAGE_EXIT_ERR) { +		// assertion failure termination +		String *message = NULL; +		if (args) { +			message = (String*)args->GetAt(0); +		} +		if (!message) { +			message = new String("Unknown error"); +		} + +		MessageBox messageBox; +		messageBox.Construct(L"Oops...", *message, MSGBOX_STYLE_OK); +		int modalResult; +		messageBox.ShowAndWait(modalResult); +		Terminate(); +	} +} + +void BadaScummVM::OnForeground(void) { +	logEntered(); +	pauseGame(false); +} + +void BadaScummVM::OnBackground(void) { +	logEntered(); +	pauseGame(true); +} + +void BadaScummVM::OnBatteryLevelChanged(BatteryLevel batteryLevel) { +} + +void BadaScummVM::OnLowMemory(void) { +} + +void BadaScummVM::pauseGame(bool pause) { +	if (pause && _appForm && g_engine && !g_engine->isPaused()) { +		_appForm->pushKey(Common::KEYCODE_SPACE); +	} + +	if (g_system) { +		((BadaSystem *)g_system)->setMute(pause); +	} +} diff --git a/backends/platform/bada/application.h b/backends/platform/bada/application.h new file mode 100644 index 0000000000..2b0d37f1ef --- /dev/null +++ b/backends/platform/bada/application.h @@ -0,0 +1,54 @@ +/* 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_APPLICATION_H +#define BADA_APPLICATION_H + +#include <FBase.h> +#include <FApp.h> +#include <FGraphics.h> +#include <FUi.h> +#include <FSystem.h> + +#include "backends/platform/bada/system.h" + +class BadaScummVM : public Osp::App::Application { +public: +	BadaScummVM(); +	~BadaScummVM(); + +	static Osp::App::Application *createInstance(void); + +	bool OnAppInitializing(Osp::App::AppRegistry &appRegistry); +	bool OnAppTerminating(Osp::App::AppRegistry &appRegistry, bool forcedTermination = false); +	void OnForeground(void); +	void OnBackground(void); +	void OnLowMemory(void); +	void OnBatteryLevelChanged(Osp::System::BatteryLevel batteryLevel); +	void OnUserEventReceivedN(RequestId requestId, Osp::Base::Collection::IList *pArgs); + +private: +	void pauseGame(bool pause); +	BadaAppForm *_appForm; +}; + +#endif diff --git a/backends/platform/bada/audio.cpp b/backends/platform/bada/audio.cpp new file mode 100644 index 0000000000..cfa6418e08 --- /dev/null +++ b/backends/platform/bada/audio.cpp @@ -0,0 +1,260 @@ +/* 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 <FSysSettingInfo.h> +#include <FAppAppRegistry.h> + +#include "backends/platform/bada/audio.h" +#include "backends/platform/bada/system.h" + +#define TIMER_INCREMENT		 10 +#define TIMER_INTERVAL		 40 +#define MIN_TIMER_INTERVAL 10 +#define MAX_TIMER_INTERVAL 160 +#define INIT_LEVEL				 3 +#define CONFIG_KEY				 L"audiovol" + +// sound level pre-sets +const int levels[] = {0, 1, 10, 45, 70, 99}; + +AudioThread::AudioThread() : +	_mixer(0), +	_timer(0), +	_audioOut(0), +	_head(0), +	_tail(0), +	_ready(0), +	_interval(TIMER_INTERVAL), +	_playing(-1), +	_muted(true) { +} + +Audio::MixerImpl *AudioThread::Construct(OSystem *system) { +	logEntered(); + +	if (IsFailed(Thread::Construct(THREAD_TYPE_EVENT_DRIVEN, +																 DEFAULT_STACK_SIZE, +																 THREAD_PRIORITY_HIGH))) { +		AppLog("Failed to create AudioThread"); +		return NULL; +	} + +	_mixer = new Audio::MixerImpl(system, 44100); +	return _mixer; +} + +AudioThread::~AudioThread() { +	logEntered(); +} + +bool AudioThread::isSilentMode() { +	bool silentMode; +	String key(L"SilentMode"); +	Osp::System::SettingInfo::GetValue(key, silentMode); +	return silentMode; +} + +void AudioThread::setMute(bool on) { +	if (_audioOut && !isSilentMode()) { +		_muted = on; +		if (on) { +			_timer->Cancel(); +		} else { +			_timer->Start(_interval); +		} +	} +} + +int AudioThread::setVolume(bool up, bool minMax) { +	int level = -1; +	int numLevels = sizeof(levels) / sizeof(levels[0]); + +	if (_audioOut && !isSilentMode()) { +		int volume = _audioOut->GetVolume(); +		if (minMax) { +			level = up ? numLevels - 1 : 0; +			volume = levels[level]; +		} else { +			// adjust volume to be one of the preset values +			for (int i = 0; i < numLevels && level == -1; i++) { +				if (volume == levels[i]) { +					level = i; +					if (up) { +						if (i + 1 < numLevels) { +							level = i + 1; +						} +					} else if (i > 0) { +						level = i - 1; +					} +				} +			} + +			// default to INIT_LEVEL when current not preset value +			if (level == -1) { +				level = INIT_LEVEL; +			} +			volume = levels[level]; +		} + +		_audioOut->SetVolume(volume); + +		// remember the chosen setting +		AppRegistry *registry = Application::GetInstance()->GetAppRegistry(); +		if (registry) { +			registry->Set(CONFIG_KEY, volume); +		} +	} +	return level; +} + +bool AudioThread::OnStart(void) { +	logEntered(); + +	_audioOut = new Osp::Media::AudioOut(); +	if (!_audioOut || +			IsFailed(_audioOut->Construct(*this))) { +		AppLog("Failed to create AudioOut"); +		return false; +	} + +	int sampleRate = _mixer->getOutputRate(); + +	// ideally we would update _mixer with GetOptimizedSampleRate here +	if (_audioOut->GetOptimizedSampleRate() != sampleRate) { +		AppLog("Non optimal sample rate %d", _audioOut->GetOptimizedSampleRate()); +	} + +	if (IsFailed(_audioOut->Prepare(AUDIO_TYPE_PCM_S16_LE, +																 AUDIO_CHANNEL_TYPE_STEREO, +																 sampleRate))) { +		AppLog("Failed to prepare AudioOut %d", sampleRate); +		return false; +	} + +	int bufferSize = _audioOut->GetMinBufferSize(); +	for (int i = 0; i < NUM_AUDIO_BUFFERS; i++) { +		if (IsFailed(_audioBuffer[i].Construct(bufferSize))) { +			AppLog("Failed to create audio buffer"); +			return false; +		} +	} + +	_timer = new Timer(); +	if (!_timer || IsFailed(_timer->Construct(*this))) { +		AppLog("Failed to create audio timer"); +		return false; +	} + +	if (IsFailed(_timer->Start(_interval))) { +		AppLog("failed to start audio timer"); +		return false; +	} + +	// get the volume from the app-registry +	int volume = levels[INIT_LEVEL]; +	AppRegistry *registry = Application::GetInstance()->GetAppRegistry(); +	if (registry) { +		if (E_KEY_NOT_FOUND == registry->Get(CONFIG_KEY, volume)) { +			registry->Add(CONFIG_KEY, volume); +			volume = levels[INIT_LEVEL]; +		} else { +			AppLog("Setting volume: %d", volume); +		} +	} + +	_muted = false; +	_mixer->setReady(true); +	_audioOut->SetVolume(isSilentMode() ? 0 : volume); +	_audioOut->Start(); +	return true; +} + +void AudioThread::OnStop(void) { +	logEntered(); + +	_mixer->setReady(false); + +	if (_timer) { +		if (!_muted) { +			_timer->Cancel(); +		} +		delete _timer; +	} + +	if (_audioOut) { +		_audioOut->Reset(); +		delete _audioOut; +	} +} + +void AudioThread::OnAudioOutErrorOccurred(Osp::Media::AudioOut &src, result r) { +	logEntered(); +} + +void AudioThread::OnAudioOutInterrupted(Osp::Media::AudioOut &src) { +	logEntered(); +} + +void AudioThread::OnAudioOutReleased(Osp::Media::AudioOut &src) { +	logEntered(); +	_audioOut->Start(); +} + +void AudioThread::OnAudioOutBufferEndReached(Osp::Media::AudioOut &src) { +	if (_ready > 0) { +		_playing = _tail; +		_audioOut->WriteBuffer(_audioBuffer[_tail]); +		_tail = (_tail + 1) % NUM_AUDIO_BUFFERS; +		_ready--; +	} else { +		// audio buffer empty: decrease timer inverval +		_playing = -1; +		_interval -= TIMER_INCREMENT; +		if (_interval < MIN_TIMER_INTERVAL) { +			_interval = MIN_TIMER_INTERVAL; +		} +	} +} + +void AudioThread::OnTimerExpired(Timer &timer) { +	if (_ready < NUM_AUDIO_BUFFERS) { +		uint len = _audioBuffer[_head].GetCapacity(); +		int samples = _mixer->mixCallback((byte*)_audioBuffer[_head].GetPointer(), len); +		if (samples) { +			_head = (_head + 1) % NUM_AUDIO_BUFFERS; +			_ready++; +		} +	} else { +		// audio buffer full: increase timer inverval +		_interval += TIMER_INCREMENT; +		if (_interval > MAX_TIMER_INTERVAL) { +			_interval = MAX_TIMER_INTERVAL; +		} +	} + +	if (_ready && _playing == -1) { +		OnAudioOutBufferEndReached(*_audioOut); +	} + +	_timer->Start(_interval); +} + diff --git a/backends/platform/bada/audio.h b/backends/platform/bada/audio.h new file mode 100644 index 0000000000..72c537a942 --- /dev/null +++ b/backends/platform/bada/audio.h @@ -0,0 +1,73 @@ +/* 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_AUDIO_H +#define BADA_AUDIO_H + +#include <FBase.h> +#include <FMedia.h> +#include <FIo.h> +#include <FBaseByteBuffer.h> + +#include "config.h" +#include "common/scummsys.h" +#include "common/system.h" +#include "audio/mixer_intern.h" + +using namespace Osp::Base; +using namespace Osp::Base::Collection; +using namespace Osp::Base::Runtime; +using namespace Osp::Media; +using namespace Osp::Io; + +#define NUM_AUDIO_BUFFERS 2 + +class AudioThread: public Osp::Media::IAudioOutEventListener, +									 public Osp::Base::Runtime::ITimerEventListener, +									 public Osp::Base::Runtime::Thread { +public: +	AudioThread(void); +	~AudioThread(void); + +	Audio::MixerImpl *Construct(OSystem *system); +	bool isSilentMode(); +	void setMute(bool on); +	int setVolume(bool up, bool minMax); + +	bool OnStart(void); +	void OnStop(void); +	void OnAudioOutErrorOccurred(Osp::Media::AudioOut &src, result r); +	void OnAudioOutInterrupted(Osp::Media::AudioOut &src); +	void OnAudioOutReleased(Osp::Media::AudioOut &src); +	void OnAudioOutBufferEndReached(Osp::Media::AudioOut &src); +	void OnTimerExpired(Timer &timer); + +private: +	Audio::MixerImpl *_mixer; +	Osp::Base::Runtime::Timer *_timer; +	Osp::Media::AudioOut *_audioOut; +	Osp::Base::ByteBuffer _audioBuffer[NUM_AUDIO_BUFFERS]; +	int _head, _tail, _ready, _interval, _playing; +	bool _muted; +}; + +#endif diff --git a/backends/platform/bada/bada.mk b/backends/platform/bada/bada.mk new file mode 100644 index 0000000000..7c72d7752b --- /dev/null +++ b/backends/platform/bada/bada.mk @@ -0,0 +1,5 @@ +# Bada specific modules are built under eclipse + +$(EXECUTABLE): $(OBJS) +	rm -f $@ +	ar Tru $@ $(OBJS) diff --git a/backends/platform/bada/form.cpp b/backends/platform/bada/form.cpp new file mode 100644 index 0000000000..6163053c96 --- /dev/null +++ b/backends/platform/bada/form.cpp @@ -0,0 +1,464 @@ +/* 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 <FAppApplication.h> + +#include "common/translation.h" +#include "base/main.h" + +#include "backends/platform/bada/form.h" +#include "backends/platform/bada/system.h" + +using namespace Osp::Base::Runtime; +using namespace Osp::Ui; +using namespace Osp::Ui::Controls; + +// number of volume levels +#define LEVEL_RANGE 5 + +// round down small Y touch values to 1 to allow the +// cursor to be positioned at the top of the screen +#define MIN_TOUCH_Y 10 + +// block for up to 2.5 seconds during shutdown to +// allow the game thread to exit gracefully. +#define EXIT_SLEEP_STEP 10 +#define EXIT_SLEEP 250 + +// +// BadaAppForm +// +BadaAppForm::BadaAppForm() : +	_gameThread(0), +	_state(InitState), +	_buttonState(LeftButton), +	_shortcut(SetVolume) { +	_eventQueueLock = new Mutex(); +	_eventQueueLock->Create(); +} + +result BadaAppForm::Construct() { +	result r = Form::Construct(Controls::FORM_STYLE_NORMAL); +	if (IsFailed(r)) { +		return r; +	} + +	BadaSystem *badaSystem = NULL; +	_gameThread = NULL; + +	badaSystem = new BadaSystem(this); +	r = badaSystem != NULL ? E_SUCCESS : E_OUT_OF_MEMORY; + +	if (!IsFailed(r)) { +		r = badaSystem->Construct(); +	} + +	if (!IsFailed(r)) { +		_gameThread = new Thread(); +		r = _gameThread != NULL ? E_SUCCESS : E_OUT_OF_MEMORY; +	} + +	if (!IsFailed(r)) { +		r = _gameThread->Construct(*this); +	} + +	if (IsFailed(r)) { +		if (badaSystem != NULL) { +			delete badaSystem; +		} +		if (_gameThread != NULL) { +			delete _gameThread; +			_gameThread = NULL; +		} +	} else { +		g_system = badaSystem; +	} + +	return r; +} + +BadaAppForm::~BadaAppForm() { +	logEntered(); + +	if (_gameThread && _state != ErrorState) { +		terminate(); + +		_gameThread->Stop(); +		if (_state != ErrorState) { +			_gameThread->Join(); +		} + +		delete _gameThread; +		_gameThread = NULL; +	} + +	if (_eventQueueLock) { +		delete _eventQueueLock; +		_eventQueueLock = NULL; +	} + +	logLeaving(); +} + +// +// abort the game thread +// +void BadaAppForm::terminate() { +	if (_state == ActiveState) { +		((BadaSystem *)g_system)->setMute(true); + +		_eventQueueLock->Acquire(); + +		Common::Event e; +		e.type = Common::EVENT_QUIT; +		_eventQueue.push(e); +		_state = ClosingState; + +		_eventQueueLock->Release(); + +		// block while thread ends +		AppLog("waiting for shutdown"); +		for (int i = 0; i < EXIT_SLEEP_STEP && _state == ClosingState; i++) { +			Thread::Sleep(EXIT_SLEEP); +		} + +		if (_state == ClosingState) { +			// failed to terminate - Join() will freeze +			_state = ErrorState; +		} +	} +} + +void BadaAppForm::exitSystem() { +	_state = ErrorState; + +	if (_gameThread) { +		_gameThread->Stop(); +		delete _gameThread; +		_gameThread = NULL; +	} +} + +result BadaAppForm::OnInitializing(void) { +	logEntered(); + +	SetOrientation(ORIENTATION_LANDSCAPE); +	AddOrientationEventListener(*this); +	AddTouchEventListener(*this); +	AddKeyEventListener(*this); + +	// set focus to enable receiving key events +	SetFocusable(true); +	SetFocus(); + +	return E_SUCCESS; +} + +result BadaAppForm::OnDraw(void) { +	logEntered(); + +	if (g_system) { +		BadaSystem *system = (BadaSystem *)g_system; +		BadaGraphicsManager *graphics = system->getGraphics(); +		if (graphics && graphics->isReady()) { +			g_system->updateScreen(); +		} +	} + +	return E_SUCCESS; +} + +bool BadaAppForm::pollEvent(Common::Event &event) { +	bool result = false; + +	_eventQueueLock->Acquire(); +	if (!_eventQueue.empty()) { +		event = _eventQueue.pop(); +		result = true; +	} +	_eventQueueLock->Release(); + +	return result; +} + +void BadaAppForm::pushEvent(Common::EventType type, +														const Point ¤tPosition) { +	BadaSystem *system = (BadaSystem *)g_system; +	BadaGraphicsManager *graphics = system->getGraphics(); +	if (graphics) { +		// graphics could be NULL at startup or when +		// displaying the system error screen +		Common::Event e; +		e.type = type; +		e.mouse.x = currentPosition.x; +		e.mouse.y = currentPosition.y > MIN_TOUCH_Y ? currentPosition.y : 1; + +		bool moved = graphics->moveMouse(e.mouse.x, e.mouse.y); + +		_eventQueueLock->Acquire(); + +		if (moved && type != Common::EVENT_MOUSEMOVE) { +			Common::Event moveEvent; +			moveEvent.type = Common::EVENT_MOUSEMOVE; +			moveEvent.mouse = e.mouse; +			_eventQueue.push(moveEvent); +		} + +		_eventQueue.push(e); +		_eventQueueLock->Release(); +	} +} + +void BadaAppForm::pushKey(Common::KeyCode keycode) { +	Common::Event e; +	e.synthetic = false; +	e.kbd.keycode = keycode; +	e.kbd.ascii = keycode; +	e.kbd.flags = 0; + +	_eventQueueLock->Acquire(); + +	e.type = Common::EVENT_KEYDOWN; +	_eventQueue.push(e); +	e.type = Common::EVENT_KEYUP; +	_eventQueue.push(e); + +	_eventQueueLock->Release(); +} + +void BadaAppForm::OnOrientationChanged(const Control &source, +																			 OrientationStatus orientationStatus) { +	logEntered(); +	if (_state == InitState) { +		_state = ActiveState; +		_gameThread->Start(); +	} +} + +Object *BadaAppForm::Run(void) { +	scummvm_main(0, 0); + +	if (_state == ActiveState) { +		Application::GetInstance()->SendUserEvent(USER_MESSAGE_EXIT, NULL); +	} +	_state = DoneState; +	return NULL; +} + +void BadaAppForm::setButtonShortcut() { +	switch (_buttonState) { +	case LeftButton: +		g_system->displayMessageOnOSD(_("Right Click Once")); +		_buttonState = RightButtonOnce; +		break; +	case RightButtonOnce: +		g_system->displayMessageOnOSD(_("Right Click")); +		_buttonState = RightButton; +		break; +	case RightButton: +		g_system->displayMessageOnOSD(_("Move Only")); +		_buttonState = MoveOnly; +		break; +	case MoveOnly: +		g_system->displayMessageOnOSD(_("Left Click")); +		_buttonState = LeftButton; +		break; +	} +} + +void BadaAppForm::setShortcut() { +	// cycle to the next shortcut +	switch (_shortcut) { +	case ControlMouse: +		g_system->displayMessageOnOSD(_("Escape Key")); +		_shortcut = EscapeKey; +		break; + +	case EscapeKey: +		g_system->displayMessageOnOSD(_("Game Menu")); +		_shortcut = GameMenu; +		break; + +	case GameMenu: +		g_system->displayMessageOnOSD(_("Show Keypad")); +		_shortcut = ShowKeypad; +		break; + +	case SetVolume: +		// fallthru + +	case ShowKeypad: +		g_system->displayMessageOnOSD(_("Control Mouse")); +		_shortcut = ControlMouse; +		break; +	} +} + +void BadaAppForm::setVolume(bool up, bool minMax) { +	int level = ((BadaSystem *)g_system)->setVolume(up, minMax); +	if (level != -1) { +		char message[32]; +		char ind[LEVEL_RANGE]; // 1..5 (0=off) +		int j = LEVEL_RANGE - 1; // 0..4 +		for (int i = 1; i <= LEVEL_RANGE; i++) { +			ind[j--] = level >= i ? '|' : ' '; +		} +		snprintf(message, sizeof(message), "Volume: [ %c%c%c%c%c ]", +						 ind[0], ind[1], ind[2], ind[3], ind[4]); +		g_system->displayMessageOnOSD(message); +	} +} + +void BadaAppForm::showKeypad() { +	// display the soft keyboard +	_buttonState = LeftButton; +	pushKey(Common::KEYCODE_F7); +} + +void BadaAppForm::OnTouchDoublePressed(const Control &source, +																			 const Point ¤tPosition, +																			 const TouchEventInfo &touchInfo) { +	if (_buttonState != MoveOnly) { +		pushEvent(_buttonState == LeftButton ? Common::EVENT_LBUTTONDOWN : Common::EVENT_RBUTTONDOWN, +							currentPosition); +		pushEvent(_buttonState == LeftButton ? Common::EVENT_LBUTTONDOWN : Common::EVENT_RBUTTONDOWN, +							currentPosition); +	} +} + +void BadaAppForm::OnTouchFocusIn(const Control &source, +																 const Point ¤tPosition, +																 const TouchEventInfo &touchInfo) { +} + +void BadaAppForm::OnTouchFocusOut(const Control &source, +																	const Point ¤tPosition, +																	const TouchEventInfo &touchInfo) { +} + +void BadaAppForm::OnTouchLongPressed(const Control &source, +																		 const Point ¤tPosition, +																		 const TouchEventInfo &touchInfo) { +	if (_buttonState != LeftButton) { +		pushKey(Common::KEYCODE_RETURN); +	} +} + +void BadaAppForm::OnTouchMoved(const Control &source, +															 const Point ¤tPosition, +															 const TouchEventInfo &touchInfo) { +	pushEvent(Common::EVENT_MOUSEMOVE, currentPosition); +} + +void BadaAppForm::OnTouchPressed(const Control &source, +																 const Point ¤tPosition, +																 const TouchEventInfo &touchInfo) { +	if (_buttonState != MoveOnly) { +		pushEvent(_buttonState == LeftButton ? Common::EVENT_LBUTTONDOWN : Common::EVENT_RBUTTONDOWN, +							currentPosition); +	} +} + +void BadaAppForm::OnTouchReleased(const Control &source, +																	const Point ¤tPosition, +																	const TouchEventInfo &touchInfo) { +	if (_buttonState != MoveOnly) { +		pushEvent(_buttonState == LeftButton ? Common::EVENT_LBUTTONUP : Common::EVENT_RBUTTONUP, +							currentPosition); +		if (_buttonState == RightButtonOnce) { +			_buttonState = LeftButton; +		} +		// flick to skip dialog +		if (touchInfo.IsFlicked()) { +			pushKey(Common::KEYCODE_PERIOD); +		} +	} +} + +void BadaAppForm::OnKeyLongPressed(const Control &source, KeyCode keyCode) { +	logEntered(); +	switch (keyCode) { +	case KEY_SIDE_UP: +		_shortcut = SetVolume; +		setVolume(true, true); +		return; + +	case KEY_SIDE_DOWN: +		_shortcut = SetVolume; +		setVolume(false, true); +		return; + +	case KEY_CAMERA: +		_shortcut = ShowKeypad; +		showKeypad(); +		return; + +	default: +		break; +	} +} + +void BadaAppForm::OnKeyPressed(const Control &source, KeyCode keyCode) { +	switch (keyCode) { +	case KEY_SIDE_UP: +		if (_shortcut != SetVolume) { +			_shortcut = SetVolume; +		} else { +			setVolume(true, false); +		} +		return; + +	case KEY_SIDE_DOWN: +		switch (_shortcut) { +		case ControlMouse: +			setButtonShortcut(); +			break; + +		case EscapeKey: +			pushKey(Common::KEYCODE_ESCAPE); +			break; + +		case GameMenu: +			pushKey(Common::KEYCODE_F5); +			break; + +		case ShowKeypad: +			showKeypad(); +			break; + +		default: +			setVolume(false, false); +			break; +		} +		break; + +	case KEY_CAMERA: +		setShortcut(); +		break; + +	default: +		break; +	} +} + +void BadaAppForm::OnKeyReleased(const Control &source, KeyCode keyCode) { +} diff --git a/backends/platform/bada/form.h b/backends/platform/bada/form.h new file mode 100644 index 0000000000..09ce941a7b --- /dev/null +++ b/backends/platform/bada/form.h @@ -0,0 +1,108 @@ +/* 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_FORM_H +#define BADA_FORM_H + +#include <FApp.h> +#include <FUi.h> +#include <FSystem.h> +#include <FBase.h> +#include <FUiITouchEventListener.h> +#include <FUiITextEventListener.h> + +#include "config.h" +#include "common/scummsys.h" +#include "common/events.h" +#include "common/queue.h" +#include "common/mutex.h" + +// +// BadaAppForm +// +class BadaAppForm : public Osp::Ui::Controls::Form, +										public Osp::Ui::IOrientationEventListener, +										public Osp::Ui::ITouchEventListener, +										public Osp::Ui::IKeyEventListener, +										public Osp::Base::Runtime::IRunnable { +public: +	BadaAppForm(); +	~BadaAppForm(); + +	result Construct(); +	bool pollEvent(Common::Event &event); +	bool isClosing() { return _state == ClosingState; } +	void pushKey(Common::KeyCode keycode); +	void exitSystem(); + +private: +	Object *Run(); +	result OnInitializing(void); +	result OnDraw(void); +	void OnOrientationChanged(const Osp::Ui::Control &source, +														Osp::Ui::OrientationStatus orientationStatus); +	void OnTouchDoublePressed(const Osp::Ui::Control &source, +														const Osp::Graphics::Point ¤tPosition, +														const Osp::Ui::TouchEventInfo &touchInfo); +	void OnTouchFocusIn(const Osp::Ui::Control &source, +											const Osp::Graphics::Point ¤tPosition, +											const Osp::Ui::TouchEventInfo &touchInfo); +	void OnTouchFocusOut(const Osp::Ui::Control &source, +											 const Osp::Graphics::Point ¤tPosition, +											 const Osp::Ui::TouchEventInfo &touchInfo); +	void OnTouchLongPressed(const Osp::Ui::Control &source, +													const Osp::Graphics::Point ¤tPosition, +													const Osp::Ui::TouchEventInfo &touchInfo); +	void OnTouchMoved(const Osp::Ui::Control &source, +										const Osp::Graphics::Point ¤tPosition, +										const Osp::Ui::TouchEventInfo &touchInfo); +	void OnTouchPressed(const Osp::Ui::Control &source, +											const Osp::Graphics::Point ¤tPosition, +											const Osp::Ui::TouchEventInfo &touchInfo); +	void OnTouchReleased(const Osp::Ui::Control &source, +											 const Osp::Graphics::Point ¤tPosition, +											 const Osp::Ui::TouchEventInfo &touchInfo); +	void OnKeyLongPressed(const Osp::Ui::Control &source, +												Osp::Ui::KeyCode keyCode); +	void OnKeyPressed(const Osp::Ui::Control &source, +										Osp::Ui::KeyCode keyCode); +	void OnKeyReleased(const Osp::Ui::Control &source, +										 Osp::Ui::KeyCode keyCode); + +	void pushEvent(Common::EventType type, +								 const Osp::Graphics::Point ¤tPosition); +	void terminate(); +	void setButtonShortcut(); +	void setShortcut(); +	void setVolume(bool up, bool minMax); +	void showKeypad(); + +	// event handling +	Osp::Base::Runtime::Thread *_gameThread; +	Osp::Base::Runtime::Mutex *_eventQueueLock; +	Common::Queue<Common::Event> _eventQueue; +	enum {InitState, ActiveState, ClosingState, DoneState, ErrorState} _state; +	enum {LeftButton, RightButtonOnce, RightButton, MoveOnly} _buttonState; +	enum {ControlMouse, EscapeKey, GameMenu, ShowKeypad, SetVolume} _shortcut; +}; + +#endif diff --git a/backends/platform/bada/fs.cpp b/backends/platform/bada/fs.cpp new file mode 100644 index 0000000000..8e3c4f0f7c --- /dev/null +++ b/backends/platform/bada/fs.cpp @@ -0,0 +1,436 @@ +/* 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 "config.h" +#include "backends/platform/bada/system.h" +#include "backends/platform/bada/fs.h" + +#define BUFFER_SIZE 1024 + +// internal BADA paths +#define PATH_ROOT        "/" +#define PATH_HOME        "/Home" +#define PATH_HOME_SHARE  "/Home/Share" +#define PATH_HOME_SHARE2 "/Home/Share2" +#define PATH_HOME_X      "/Home/" +#define PATH_HOME_EXT    "/HomeExt" +#define PATH_MEDIA       "/Media" +#define PATH_CARD        "/Storagecard" +#define PATH_CARD_MEDIA  "/Storagecard/Media" + +// +// BadaFileStream +// +class BadaFileStream : public Common::SeekableReadStream, +											 public Common::WriteStream, +											 public Common::NonCopyable { +public: +	static BadaFileStream *makeFromPath(const String &path, bool writeMode); + +	BadaFileStream(File *file, bool writeMode); +	~BadaFileStream(); + +	bool err() const; +	void clearErr(); +	bool eos() const; + +	uint32 write(const void *dataPtr, uint32 dataSize); +	bool flush(); + +	int32 pos() const; +	int32 size() const; +	bool seek(int32 offs, int whence = SEEK_SET); +	uint32 read(void *dataPtr, uint32 dataSize); + +private: +	byte buffer[BUFFER_SIZE]; +	uint32 bufferIndex; +	uint32 bufferLength; +	bool writeMode; +	File *file; +}; + +BadaFileStream::BadaFileStream(File *ioFile, bool writeMode) : +	bufferIndex(0), +	bufferLength(0), +	writeMode(writeMode), +	file(ioFile) { +	AppAssert(ioFile != 0); +} + +BadaFileStream::~BadaFileStream() { +	if (file) { +		if (writeMode) { +			flush(); +		} +		delete file; +	} +} + +bool BadaFileStream::err() const { +	result r = GetLastResult(); +	return (r != E_SUCCESS && r != E_END_OF_FILE); +} + +void BadaFileStream::clearErr() { +	SetLastResult(E_SUCCESS); +} + +bool BadaFileStream::eos() const { +	return (bufferLength - bufferIndex == 0) && (GetLastResult() == E_END_OF_FILE); +} + +int32 BadaFileStream::pos() const { +	return file->Tell() - (bufferLength - bufferIndex); +} + +int32 BadaFileStream::size() const { +	int32 oldPos = file->Tell(); +	file->Seek(FILESEEKPOSITION_END, 0); + +	int32 length = file->Tell(); +	SetLastResult(file->Seek(FILESEEKPOSITION_BEGIN, oldPos)); + +	return length; +} + +bool BadaFileStream::seek(int32 offs, int whence) { +	bool result = false; +	switch (whence) { +	case SEEK_SET: +		// set from start of file +		SetLastResult(file->Seek(FILESEEKPOSITION_BEGIN, offs)); +		result = (E_SUCCESS == GetLastResult()); +		break; + +	case SEEK_CUR: +		// set relative to offs +		if (bufferIndex < bufferLength && bufferIndex > (uint32)-offs) { +			// re-position within the buffer +			SetLastResult(E_SUCCESS); +			bufferIndex += offs; +			return true; +		} else { +			offs -= (bufferLength - bufferIndex); +			if (offs < 0 && file->Tell() + offs < 0) { +				// avoid negative positioning +				offs = 0; +			} +			if (offs != 0) { +				SetLastResult(file->Seek(FILESEEKPOSITION_CURRENT, offs)); +				result = (E_SUCCESS == GetLastResult()); +			} else { +				result = true; +			} +		} +		break; + +	case SEEK_END: +		// set relative to end - positive will increase the file size +		SetLastResult(file->Seek(FILESEEKPOSITION_END, offs)); +		result = (E_SUCCESS == GetLastResult()); +		break; + +	default: +		AppLog("Invalid whence %d", whence); +		return false; +	} + +	if (!result) { +		AppLog("seek failed"); +	} + +	bufferIndex = bufferLength = 0; +	return result; +} + +uint32 BadaFileStream::read(void *ptr, uint32 len) { +	uint32 result = 0; +	if (!eos()) { +		if (bufferIndex < bufferLength) { +			// use existing buffer +			uint32 available = bufferLength - bufferIndex; +			if (len <= available) { +				// use allocation +				memcpy((byte*)ptr, &buffer[bufferIndex], len); +				bufferIndex += len; +				result = len; +			} else { +				// use remaining allocation +				memcpy((byte*)ptr, &buffer[bufferIndex], available); +				uint32 remaining = len - available; +				result = available; + +				if (remaining) { +					result += file->Read(((byte*)ptr) + available, remaining); +				} +				bufferIndex = bufferLength = 0; +			} +		} else if (len < BUFFER_SIZE) { +			// allocate and use buffer +			bufferIndex = 0; +			bufferLength = file->Read(buffer, BUFFER_SIZE); +			if (bufferLength) { +				if (bufferLength < len) { +					len = bufferLength; +				} +				memcpy((byte*)ptr, buffer, len); +				result = bufferIndex = len; +			} +		} else { +			result = file->Read((byte*)ptr, len); +			bufferIndex = bufferLength = 0; +		} +	} else { +		AppLog("Attempted to read past EOS"); +	} +	return result; +} + +uint32 BadaFileStream::write(const void *ptr, uint32 len) { +	result r = file->Write(ptr, len); +	SetLastResult(r); +	return (r == E_SUCCESS ? len : 0); +} + +bool BadaFileStream::flush() { +	logEntered(); +	SetLastResult(file->Flush()); +	return (E_SUCCESS == GetLastResult()); +} + +BadaFileStream *BadaFileStream::makeFromPath(const String &path, bool writeMode) { +	File *ioFile = new File(); + +	String filePath = path; +	if (writeMode && (path[0] != '.' && path[0] != '/')) { +		filePath.Insert(PATH_HOME_X, 0); +	} + +	AppLog("Open file %S", filePath.GetPointer()); + +	result r = ioFile->Construct(filePath, writeMode ? L"w" : L"r", writeMode); +	if (r == E_SUCCESS) { +		return new BadaFileStream(ioFile, writeMode); +	} + +	AppLog("Failed to open file"); +	delete ioFile; +	return 0; +} + +// +// converts a bada (wchar) String into a scummVM (char) string +// +Common::String fromString(const Osp::Base::String &in) { +	ByteBuffer *buf = StringUtil::StringToUtf8N(in); +	Common::String result((const char*)buf->GetPointer()); +	delete buf; + +	return result; +} + +// +// BadaFilesystemNode +// +BadaFilesystemNode::BadaFilesystemNode(const Common::String &nodePath) { +	AppAssert(nodePath.size() > 0); +	init(nodePath); +} + +BadaFilesystemNode::BadaFilesystemNode(const Common::String &root, +																			 const Common::String &nodePath) { +	// Make sure the string contains no slashes +	AppAssert(!nodePath.contains('/')); + +	// We assume here that path is already normalized (hence don't bother to +	// call Common::normalizePath on the final path). +	Common::String newPath(root); +	if (root.lastChar() != '/') { +		newPath += '/'; +	} +	newPath += nodePath; + +	init(newPath); +} + +void BadaFilesystemNode::init(const Common::String &nodePath) { +	// Normalize the path (that is, remove unneeded slashes etc.) +	_path = Common::normalizePath(nodePath, '/'); +	_displayName = Common::lastPathComponent(_path, '/'); + +	StringUtil::Utf8ToString(_path.c_str(), _unicodePath); +	_isVirtualDir = (_path == PATH_ROOT || +									 _path == PATH_HOME || +									 _path == PATH_HOME_SHARE || +									 _path == PATH_HOME_SHARE2 || +									 _path == PATH_CARD); +	_isValid = _isVirtualDir || !IsFailed(File::GetAttributes(_unicodePath, _attr)); +} + +bool BadaFilesystemNode::exists() const { +	return _isValid; +} + +bool BadaFilesystemNode::isReadable() const { +	return _isVirtualDir || _isValid; +} + +bool BadaFilesystemNode::isDirectory() const { +	return _isVirtualDir || (_isValid && _attr.IsDirectory()); +} + +bool BadaFilesystemNode::isWritable() const { +	bool result = (_isValid && !_isVirtualDir && !_attr.IsDirectory() && !_attr.IsReadOnly()); +	if (_path == PATH_HOME || +			_path == PATH_HOME_EXT || +			_path == PATH_HOME_SHARE || +			_path == PATH_HOME_SHARE2) { +		result = true; +	} +	return result; +} + +AbstractFSNode *BadaFilesystemNode::getChild(const Common::String &n) const { +	AppAssert(!_path.empty()); +	AppAssert(isDirectory()); +	return new BadaFilesystemNode(_path, n); +} + +bool BadaFilesystemNode::getChildren(AbstractFSList &myList, +																		 ListMode mode, bool hidden) const { +	AppAssert(isDirectory()); + +	bool result = false; + +	if (_isVirtualDir && mode != Common::FSNode::kListFilesOnly) { +		// present well known BADA file system areas +		if (_path == PATH_ROOT) { +			myList.push_back(new BadaFilesystemNode(PATH_HOME)); +			myList.push_back(new BadaFilesystemNode(PATH_HOME_EXT)); +			myList.push_back(new BadaFilesystemNode(PATH_MEDIA)); +			myList.push_back(new BadaFilesystemNode(PATH_CARD)); +			result = true; // no more entries +		} else if (_path == PATH_CARD) { +			myList.push_back(new BadaFilesystemNode(PATH_CARD_MEDIA)); +			result = true; // no more entries +		} else if (_path == PATH_HOME) { +			// ensure share path is always included +			myList.push_back(new BadaFilesystemNode(PATH_HOME_SHARE)); +			myList.push_back(new BadaFilesystemNode(PATH_HOME_SHARE2)); +		} +	} + +	if (!result) { +		DirEnumerator *pDirEnum = 0; +		Directory *pDir = new Directory(); + +		// open directory +		if (IsFailed(pDir->Construct(_unicodePath))) { +			AppLog("Failed to open directory"); +		} else { +			// read all directory entries +			pDirEnum = pDir->ReadN(); +			if (pDirEnum) { +				result = true; +			} + +			// loop through all directory entries +			while (pDirEnum && pDirEnum->MoveNext() == E_SUCCESS) { +				DirEntry dirEntry = pDirEnum->GetCurrentDirEntry(); + +				// skip 'invisible' files if necessary +				Osp::Base::String fileName = dirEntry.GetName(); + +				if (fileName[0] == '.' && !hidden) { +					continue; +				} + +				// skip '.' and '..' to avoid cycles +				if ((fileName[0] == '.' && fileName[1] == 0) || +						(fileName[0] == '.' && fileName[1] == '.')) { +					continue; +				} + +				// Honor the chosen mode +				if ((mode == Common::FSNode::kListFilesOnly && dirEntry.IsDirectory()) || +						(mode == Common::FSNode::kListDirectoriesOnly && !dirEntry.IsDirectory())) { +					continue; +				} +				myList.push_back(new BadaFilesystemNode(_path, fromString(fileName))); +			} +		} + +		// cleanup +		if (pDirEnum) { +			delete pDirEnum; +		} + +		// close the opened directory +		if (pDir) { +			delete pDir; +		} +	} + +	return result; +} + +AbstractFSNode *BadaFilesystemNode::getParent() const { +	logEntered(); +	if (_path == PATH_ROOT) { +		return 0; // The filesystem root has no parent +	} + +	const char *start = _path.c_str(); +	const char *end = start + _path.size(); + +	// Strip of the last component. We make use of the fact that at this +	// point, path is guaranteed to be normalized +	while (end > start && *(end-1) != '/') { +		end--; +	} + +	if (end == start) { +		// This only happens if we were called with a relative path, for which +		// there simply is no parent. +		// TODO: We could also resolve this by assuming that the parent is the +		//			 current working directory, and returning a node referring to that. +		return 0; +	} + +	return new BadaFilesystemNode(Common::String(start, end)); +} + +Common::SeekableReadStream *BadaFilesystemNode::createReadStream() { +	Common::SeekableReadStream *result = BadaFileStream::makeFromPath(_unicodePath, false); +	if (result != NULL) { +		_isValid = !IsFailed(File::GetAttributes(_unicodePath, _attr)); +	} +	return result; +} + +Common::WriteStream *BadaFilesystemNode::createWriteStream() { +	Common::WriteStream *result = BadaFileStream::makeFromPath(_unicodePath, true); +	if (result != NULL) { +		_isValid = !IsFailed(File::GetAttributes(_unicodePath, _attr)); +	} +	return result; +} diff --git a/backends/platform/bada/fs.h b/backends/platform/bada/fs.h new file mode 100644 index 0000000000..d7d368ac20 --- /dev/null +++ b/backends/platform/bada/fs.h @@ -0,0 +1,82 @@ +/* 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_FILESYSTEM_H +#define BADA_FILESYSTEM_H + +#include <FBaseString.h> +#include <FBaseUtilStringUtil.h> +#include <FIoDirectory.h> +#include <FIoFile.h> + +#include "config.h" +#include "common/scummsys.h" +#include "common/stream.h" +#include "backends/fs/abstract-fs.h" + +using namespace Osp::Io; +using namespace Osp::Base; +using namespace Osp::Base::Utility; + +/** + * Implementation of the ScummVM file system API based on BADA. + * + * Parts of this class are documented in the base interface class, AbstractFSNode. + */ +class BadaFilesystemNode : public AbstractFSNode { +public: +	/** +	 * Creates a BadaFilesystemNode for a given path. +	 * +	 * @param path the path the new node should point to. +	 */ +	BadaFilesystemNode(const Common::String &path); + +	Common::String getDisplayName() const { return _displayName; } +	Common::String getName() const { return _displayName; } +	Common::String getPath() const { return _path; } + +	bool exists() const; +	bool isDirectory() const; +	bool isReadable() const; +	bool isWritable() const; + +	AbstractFSNode *getChild(const Common::String &n) const; +	bool getChildren(AbstractFSList &list, ListMode mode, bool hidden) const; +	AbstractFSNode *getParent() const; + +	Common::SeekableReadStream *createReadStream(); +	Common::WriteStream *createWriteStream(); + +protected: +	BadaFilesystemNode(const Common::String &root, +										 const Common::String &p); +	void init(const Common::String &nodePath); + +	Common::String _displayName; +	Common::String _path; +	String _unicodePath; +	bool _isValid; +	bool _isVirtualDir; +	FileAttributes _attr; +}; + +#endif diff --git a/backends/platform/bada/graphics.cpp b/backends/platform/bada/graphics.cpp new file mode 100644 index 0000000000..4ab90a633f --- /dev/null +++ b/backends/platform/bada/graphics.cpp @@ -0,0 +1,315 @@ +/* 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 "graphics/fontman.h" + +#include "backends/platform/bada/form.h" +#include "backends/platform/bada/system.h" +#include "backends/platform/bada/graphics.h" + +// +// BadaGraphicsManager +// +BadaGraphicsManager::BadaGraphicsManager(BadaAppForm *appForm) : +	_appForm(appForm), +	_eglDisplay(EGL_DEFAULT_DISPLAY), +	_eglSurface(EGL_NO_SURFACE), +	_eglConfig(0), +	_eglContext(EGL_NO_CONTEXT), +	_initState(true) { +	assert(appForm != NULL); +	_videoMode.fullscreen = true; +	_videoMode.antialiasing = true; +} + +const Graphics::Font *BadaGraphicsManager::getFontOSD() { +	return FontMan.getFontByUsage(Graphics::FontManager::kBigGUIFont); +} + +bool BadaGraphicsManager::moveMouse(int16 &x, int16 &y) { +	int16 currentX = _cursorState.x; +	int16 currentY = _cursorState.y; + +	// save the current hardware coordinates +	_cursorState.x = x; +	_cursorState.y = y; + +	// return x/y as game coordinates +	adjustMousePosition(x, y); + +	// convert current x/y to game coordinates +	adjustMousePosition(currentX, currentY); + +	// return whether game coordinates have changed +	return (currentX != x || currentY != y); +} + +Common::List<Graphics::PixelFormat> BadaGraphicsManager::getSupportedFormats() const { +	logEntered(); + +	Common::List<Graphics::PixelFormat> res; +	res.push_back(Graphics::PixelFormat(2, 4, 4, 4, 4, 12, 8, 4, 0)); +	res.push_back(Graphics::PixelFormat(2, 5, 6, 5, 0, 11, 5, 0, 0)); +	res.push_back(Graphics::PixelFormat(2, 5, 5, 5, 1, 11, 6, 1, 0)); +	res.push_back(Graphics::PixelFormat::createFormatCLUT8()); +	return res; +} + +bool BadaGraphicsManager::hasFeature(OSystem::Feature f) { +	bool result = (f == OSystem::kFeatureFullscreenMode || +								 f == OSystem::kFeatureVirtualKeyboard || +								 OpenGLGraphicsManager::hasFeature(f)); +	return result; +} + +void BadaGraphicsManager::setFeatureState(OSystem::Feature f, bool enable) { +	OpenGLGraphicsManager::setFeatureState(f, enable); +} + +void BadaGraphicsManager::setReady() { +	_initState = false; +} + +void BadaGraphicsManager::updateScreen() { +	if (_transactionMode == kTransactionNone) { +		internUpdateScreen(); +	} +} + +bool BadaGraphicsManager::loadEgl() { +	logEntered(); + +	EGLint numConfigs = 1; +	EGLint eglConfigList[] = { +		EGL_RED_SIZE,		5, +		EGL_GREEN_SIZE, 6, +		EGL_BLUE_SIZE,	5, +		EGL_ALPHA_SIZE, 0, +		EGL_DEPTH_SIZE, 8, +		EGL_SURFACE_TYPE, EGL_WINDOW_BIT, +		EGL_RENDERABLE_TYPE, EGL_OPENGL_ES_BIT, +		EGL_NONE +	}; + +	EGLint eglContextList[] = { +		EGL_CONTEXT_CLIENT_VERSION, 1, +		EGL_NONE +	}; + +	eglBindAPI(EGL_OPENGL_ES_API); + +	if (_eglDisplay) { +		unloadGFXMode(); +	} + +	_eglDisplay = eglGetDisplay((EGLNativeDisplayType) EGL_DEFAULT_DISPLAY); +	if (EGL_NO_DISPLAY == _eglDisplay) { +		systemError("eglGetDisplay() failed"); +		return false; +	} + +	if (EGL_FALSE == eglInitialize(_eglDisplay, NULL, NULL) || +			EGL_SUCCESS != eglGetError()) { +		systemError("eglInitialize() failed"); +		return false; +	} + +	if (EGL_FALSE == eglChooseConfig(_eglDisplay, eglConfigList, +																	 &_eglConfig, 1, &numConfigs) || +			EGL_SUCCESS != eglGetError()) { +		systemError("eglChooseConfig() failed"); +		return false; +	} + +	if (!numConfigs) { +		systemError("eglChooseConfig() failed. Matching config does not exist \n"); +		return false; +	} + +	_eglSurface = eglCreateWindowSurface(_eglDisplay, _eglConfig, +																			(EGLNativeWindowType)_appForm, NULL); +	if (EGL_NO_SURFACE == _eglSurface || EGL_SUCCESS != eglGetError()) { +		systemError("eglCreateWindowSurface() failed. EGL_NO_SURFACE"); +		return false; +	} + +	_eglContext = eglCreateContext(_eglDisplay, _eglConfig, +																EGL_NO_CONTEXT, eglContextList); +	if (EGL_NO_CONTEXT == _eglContext || +			EGL_SUCCESS != eglGetError()) { +		systemError("eglCreateContext() failed"); +		return false; +	} + +	if (false == eglMakeCurrent(_eglDisplay, _eglSurface, _eglSurface, _eglContext) || +			EGL_SUCCESS != eglGetError()) { +		systemError("eglMakeCurrent() failed"); +		return false; +	} + +	logLeaving(); +	return true; +} + +bool BadaGraphicsManager::loadGFXMode() { +	logEntered(); + +	if (!loadEgl()) { +		unloadGFXMode(); +		return false; +	} + +	int x, y, width, height; +	_appForm->GetBounds(x, y, width, height); +	_videoMode.overlayWidth = _videoMode.hardwareWidth = width; +	_videoMode.overlayHeight = _videoMode.hardwareHeight = height; +	_videoMode.scaleFactor = 3; // for proportional sized cursor in the launcher + +	AppLog("screen size: %dx%d", _videoMode.hardwareWidth, _videoMode.hardwareHeight); +	return OpenGLGraphicsManager::loadGFXMode(); +} + +void BadaGraphicsManager::loadTextures() { +	logEntered(); + +	OpenGLGraphicsManager::loadTextures(); + +	// prevent image skew in some games, see: +	// http://www.opengl.org/resources/features/KilgardTechniques/oglpitfall +	// note: this did not solve the pixel border problem in refreshGameScreen() +	glPixelStorei(GL_UNPACK_ALIGNMENT, 1); +} + +void BadaGraphicsManager::internUpdateScreen() { +	if (!_initState) { +		OpenGLGraphicsManager::internUpdateScreen(); +		eglSwapBuffers(_eglDisplay, _eglSurface); +	} else { +		showSplash(); +	} +} + +void BadaGraphicsManager::unloadGFXMode() { +	logEntered(); + +	if (EGL_NO_DISPLAY != _eglDisplay) { +		eglMakeCurrent(_eglDisplay, NULL, NULL, NULL); + +		if (_eglContext != EGL_NO_CONTEXT) { +			eglDestroyContext(_eglDisplay, _eglContext); +			_eglContext = EGL_NO_CONTEXT; +		} + +		if (_eglSurface != EGL_NO_SURFACE) { +			eglDestroySurface(_eglDisplay, _eglSurface); +			_eglSurface = EGL_NO_SURFACE; +		} + +		eglTerminate(_eglDisplay); +		_eglDisplay = EGL_NO_DISPLAY; +	} + +	_eglConfig = NULL; + +	OpenGLGraphicsManager::unloadGFXMode(); +	logLeaving(); +} + +void BadaGraphicsManager::refreshGameScreen() { +	if (_screenNeedsRedraw) +		_screenDirtyRect = Common::Rect(0, 0, _screenData.w, _screenData.h); + +	int x = _screenDirtyRect.left; +	int y = _screenDirtyRect.top; +	int w = _screenDirtyRect.width(); +	int h = _screenDirtyRect.height(); + +	if (_screenData.format.bytesPerPixel == 1) { +		// Create a temporary RGB888 surface +		int sw = w; +		int sh = h; + +		if (_videoMode.screenWidth == w && _videoMode.screenHeight == h) { +			// The extra border prevents random pixels from appearing in the right and bottom +			// screen column/row. Not sure whether this should be applied to opengl-graphics.cpp +			sw = w + 1; +			sh = h + 1; +		} + +		byte *surface = new byte[sw * sh * 3]; + +		// Convert the paletted buffer to RGB888 +		const byte *src = (byte *)_screenData.pixels + y * _screenData.pitch; +		src += x * _screenData.format.bytesPerPixel; +		byte *dst = surface; +		for (int i = 0; i < h; i++) { +			for (int j = 0; j < w; j++) { +				dst[0] = _gamePalette[src[j] * 3]; +				dst[1] = _gamePalette[src[j] * 3 + 1]; +				dst[2] = _gamePalette[src[j] * 3 + 2]; +				dst += 3; +			} +			src += _screenData.pitch; +		} + +		// Update the texture +		_gameTexture->updateBuffer(surface, w * 3, x, y, sw, sh); + +		// Free the temp surface +		delete[] surface; +	} else { +		// Update the texture +		_gameTexture->updateBuffer((byte *)_screenData.pixels + y * _screenData.pitch + +			x * _screenData.format.bytesPerPixel, _screenData.pitch, x, y, w, h); +	} + +	_screenNeedsRedraw = false; +	_screenDirtyRect = Common::Rect(); +} + +// display a simple splash screen until launcher is ready +void BadaGraphicsManager::showSplash() { +	Canvas canvas; +	canvas.Construct(); +	canvas.SetBackgroundColor(Color::COLOR_BLACK); +	canvas.Clear(); + +	int x = _videoMode.hardwareWidth / 3; +	int y = _videoMode.hardwareHeight / 3; + +	Font *pFont = new Font(); +	pFont->Construct(FONT_STYLE_ITALIC | FONT_STYLE_BOLD, 55); +	canvas.SetFont(*pFont); +	canvas.SetForegroundColor(Color::COLOR_GREEN); +	canvas.DrawText(Point(x, y), L"ScummVM"); +	delete pFont; + +	pFont = new Font(); +	pFont->Construct(FONT_STYLE_ITALIC | FONT_STYLE_BOLD, 35); +	canvas.SetFont(*pFont); +	canvas.SetForegroundColor(Color::COLOR_WHITE); +	canvas.DrawText(Point(x + 70, y + 50), L"Loading ..."); +	delete pFont; + +	canvas.Show(); + +} diff --git a/backends/platform/bada/graphics.h b/backends/platform/bada/graphics.h new file mode 100644 index 0000000000..5e49419979 --- /dev/null +++ b/backends/platform/bada/graphics.h @@ -0,0 +1,73 @@ +/* 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_GRAPHICS_H +#define BADA_GRAPHICS_H + +#include <FBase.h> +#include <FGraphics.h> +#include <FApp.h> +#include <FGraphicsOpengl.h> +#include <FSystem.h> +#include <FUi.h> + +#include "config.h" +#include "backends/graphics/opengl/opengl-graphics.h" +#include "graphics/font.h" +#include "backends/platform/bada/form.h" + +using namespace Osp::Graphics; +using namespace Osp::Graphics::Opengl; +using namespace Osp::App; + +class BadaGraphicsManager : public OpenGLGraphicsManager { +public: +	BadaGraphicsManager(BadaAppForm *appForm); + +	Common::List<Graphics::PixelFormat> getSupportedFormats() const; +	bool hasFeature(OSystem::Feature f); +	void updateScreen(); +	void setFeatureState(OSystem::Feature f, bool enable); +	void setReady(); +	bool isReady() { return !_initState; } +	const Graphics::Font *getFontOSD(); +	bool moveMouse(int16 &x, int16 &y); + +private: +	void internUpdateScreen(); +	bool loadGFXMode(); +	void loadTextures(); +	void unloadGFXMode(); +	void refreshGameScreen(); +	void setInternalMousePosition(int x, int y) {} +	void showSplash(); + +	bool loadEgl(); +	BadaAppForm *_appForm; +	EGLDisplay _eglDisplay; +	EGLSurface _eglSurface; +	EGLConfig	 _eglConfig; +	EGLContext _eglContext; +	bool _initState; +}; + +#endif diff --git a/backends/platform/bada/main.cpp b/backends/platform/bada/main.cpp new file mode 100644 index 0000000000..8c40f24dd1 --- /dev/null +++ b/backends/platform/bada/main.cpp @@ -0,0 +1,67 @@ +/* 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 <FBase.h> +#include <FApp.h> +#include <FSystem.h> + +#include "backends/platform/bada/portdefs.h" +#include "backends/platform/bada/form.h" +#include "backends/platform/bada/system.h" +#include "backends/platform/bada/application.h" + +using namespace Osp::Base; +using namespace Osp::Base::Collection; + +C_LINKAGE_BEGIN + +_EXPORT_ int OspMain(int argc, char *pArgv[]); + +/** + * The entry function of bada application called by the operating system. + */ +int OspMain(int argc, char *pArgv[]) { +	result r = E_SUCCESS; + +	AppLog("Application started."); +	ArrayList *pArgs = new ArrayList(); +	pArgs->Construct(); + +	for (int i = 0; i < argc; i++) { +		pArgs->Add(*(new String(pArgv[i]))); +	} + +	r = Osp::App::Application::Execute(BadaScummVM::createInstance, pArgs); +	if (IsFailed(r)) { +		r &= 0x0000FFFF; +	} + +	pArgs->RemoveAll(true); +	delete pArgs; +	AppLog("Application finished."); + +	return static_cast<int>(r); +} + +C_LINKAGE_END + + diff --git a/backends/platform/bada/missing.cpp b/backends/platform/bada/missing.cpp new file mode 100644 index 0000000000..a5433ec61a --- /dev/null +++ b/backends/platform/bada/missing.cpp @@ -0,0 +1,113 @@ +/* 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 <FApp.h> +#include <FGraphics.h> +#include <FUi.h> +#include <FSystem.h> +#include <FBase.h> + +#include "backends/platform/bada/portdefs.h" + +#include <stdio.h> +#include <string.h> +#include <stdarg.h> +#include <ctype.h> + +#define BUF_SIZE 255 + +void systemError(const char *message); + +C_LINKAGE_BEGIN + +int __errno; // for overridden method in saves/default/default-saves.cpp + +void __assert_func(const char *file, int line, +									 const char *func, const char *err) { +	char buffer[BUF_SIZE]; +	snprintf(buffer, sizeof(buffer), "%s %d %s %s", file, line, func, err); +	systemError(buffer); +} + +void stderr_fprintf(void*, const char *format, ...) { +	va_list ap; +	char buffer[BUF_SIZE]; + +	va_start(ap, format); +	vsnprintf(buffer, sizeof(buffer), format, ap); +	va_end(ap); + +	AppLog(buffer); +} + +void stderr_vfprintf(void*, const char *format, va_list ap) { +	char buffer[BUF_SIZE]; +	vsnprintf(buffer, sizeof(buffer), format, ap); +	AppLog(buffer); +} + +int printf(const char *format, ...) { +	int result = 0; +	va_list ap; +	char buffer[BUF_SIZE]; + +	va_start(ap, format); +	result = vsnprintf(buffer, sizeof(buffer), format, ap); +	va_end(ap); + +	AppLog(buffer); + +	return result; +} + +int sprintf(char *str, const char *format, ...) { +	va_list ap; +	int result; +	char buffer[BUF_SIZE]; + +	va_start(ap, format); +	result = vsnprintf(buffer, sizeof(buffer), format, ap); +	va_end(ap); + +	strcpy(str, buffer); + +	return result; +} + +char *strdup(const char *strSource) { +	char *buffer; +	int len = strlen(strSource) + 1; +	buffer = (char*)malloc(len); +	if (buffer) { +		memcpy(buffer, strSource, len); +	} +	return buffer; +} + +int vsprintf(char *str, const char *format, va_list ap) { +	char buffer[BUF_SIZE]; +	int result = vsnprintf(buffer, sizeof(buffer), format, ap); +	strcpy(str, buffer); +	return result; +} + +C_LINKAGE_END diff --git a/backends/platform/bada/portdefs.h b/backends/platform/bada/portdefs.h new file mode 100644 index 0000000000..e85d578678 --- /dev/null +++ b/backends/platform/bada/portdefs.h @@ -0,0 +1,84 @@ +/* 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 PORT_DEFS_H +#define PORT_DEFS_H + +#include <assert.h> +#include <stdarg.h> +#include <string.h> +#include <stdlib.h> +#include <stdio.h> +#include <unistd.h> +#include <math.h> + +#define M_PI 3.14159265358979323846 + +#ifdef __cplusplus + #include <ctype.h> // causes a link error when building c programs + #define C_LINKAGE_BEGIN extern "C" { + #define C_LINKAGE_END } +#else + #define C_LINKAGE_BEGIN + #define C_LINKAGE_END +#endif + +C_LINKAGE_BEGIN + +// for libFLAC +#undef fseeko +#undef ftello +#define fseeko fseek +#define ftello ftell + +// overcome use of fprintf since bada/newlib (1.2) does not +// support stderr/stdout (undefined reference to `_impure_ptr'). + +void stderr_fprintf(void*, const char *format, ...); +void stderr_vfprintf(void*, const char *format, va_list ap); + +#undef fprintf +#undef vfprintf +#undef stderr +#undef stdout +#undef stdin +#undef fputs +#undef fflush + +#define stderr (void*)0 +#define stdout (void*)1 +#define stdin	 (void*)2 +#define fputs(str, file) +#define fflush(file) +#define sscanf simple_sscanf +#define fprintf stderr_fprintf +#define vfprintf stderr_vfprintf + +int printf(const char *format, ...); +int sprintf(char *str, const char *format, ...); +int simple_sscanf(const char *buffer, const char *format, ...); +char *strdup(const char *s1); +int vsprintf(char *str, const char *format, va_list ap); + +C_LINKAGE_END + +#endif diff --git a/backends/platform/bada/sscanf.cpp b/backends/platform/bada/sscanf.cpp new file mode 100644 index 0000000000..4ef964b47e --- /dev/null +++ b/backends/platform/bada/sscanf.cpp @@ -0,0 +1,182 @@ +/* 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 <stdlib.h> +#include <stdio.h> +#include <stdarg.h> +#include <string.h> +#include <ctype.h> + +// +// simple sscanf replacement to match scummvm usage patterns +// + +bool scanInt(const char **in, va_list *ap, int max) { +	while (**in && (**in == ' ' || **in == '0')) { +		(*in)++; +	} + +	int *arg = va_arg(*ap, int*); +	char *end; +	long n = strtol(*in, &end, 0); + +	bool err = false; +	if (end == *in || (max > 0 && (end - *in) > max)) { +		err = true; +	} else { +		*arg = (int)n; +		*in = end; +	} +	return err; +} + +bool scanHex(const char **in, va_list *ap) { +	unsigned *arg = va_arg(*ap, unsigned*); +	char *end; +	long n = strtol(*in, &end, 16); +	if (end == *in) { +		return true; +	} + +	*in = end; +	*arg = (unsigned) n; +	return false; +} + +bool scanString(const char **in, va_list *ap) { +	char *arg = va_arg(*ap, char*); +	while (**in && **in != ' ' && **in != '\n' && **in != '\t') { +		*arg = **in; +		arg++; +		(*in)++; +	} +	*arg = '\0'; +	(*in)++; +	return false; +} + +bool scanStringUntil(const char **in, va_list *ap, char c_end) { +	char *arg = va_arg(*ap, char*); +	while (**in && **in != c_end) { +		*arg = **in; +		*arg++; +		(*in)++; +	} +	*arg = 0; +	(*in)++; +	return false; +} + +bool scanChar(const char **in, va_list *ap) { +	char *arg = va_arg(*ap, char*); +	if (**in) { +		*arg = **in; +		(*in)++; +	} +	return false; +} + +extern "C" int simple_sscanf(const char *input, const char *format, ...) { +	va_list ap; +	int result = 0; +	const char *next = input; + +	va_start(ap, format); + +	while (*format) { +		if (*format == '%') { +			format++; +			int max = 0; +			while (isdigit(*format)) { +				max = (max * 10) + (*format - '0'); +				format++; +			} + +			bool err = false; +			switch (*format++) { +			case 'c': +				err = scanChar(&next, &ap); +				break; +			case 'd': +			case 'u': +				err = scanInt(&next, &ap, max); +				break; +			case 'x': +				err = scanHex(&next, &ap); +				break; +			case 's': +				err = scanString(&next, &ap); +				break; +			case '[': +				// assume %[^c] +				if ('^' != *format) { +					err = true; +				} else { +					format++; +					if (*format && *(format+1) == ']') { +						err = scanStringUntil(&next, &ap, *format); +						format += 2; +					} else { +						err = true; +					} +				} +				break; +			default: +				err = true; +				break; +			} + +			if (err) { +				break; +			} else { +				result++; +			} +		} else if (*format++ != *next++) { +			// match input +			break; +		} +	} + +	va_end(ap); +	return result; +} + +#if defined(TEST) +int main(int argc, char *pArgv[]) { +	int x,y,h; +	char buffer[100]; +	unsigned u; +	char c; +	strcpy(buffer, "hello"); +	char *b = buffer; + +	//	strcpy(buffer, "in the buffer something"); +	if (simple_sscanf("CAT 123x-10 0x100 FONT large 1 enough\n	 123456.AUD $", +										"CAT %dx%d %x FONT %[^\n] %06u.AUD %c", +										&x, &y, &h, b, &u, &c) != 6) { +		printf("Failed\n"); +	} else { +		printf("Success %d %d %d %s %d '%c'\n", x, y, h, buffer, u, c); +	} +	return 0; +} +#endif diff --git a/backends/platform/bada/system.cpp b/backends/platform/bada/system.cpp new file mode 100644 index 0000000000..37d7028687 --- /dev/null +++ b/backends/platform/bada/system.cpp @@ -0,0 +1,499 @@ +/* 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 <FUiCtrlMessageBox.h> + +#include "common/config-manager.h" +#include "common/file.h" +#include "engines/engine.h" +#include "graphics/font.h" +#include "graphics/fontman.h" +#include "graphics/fonts/bdf.h" +#include "backends/saves/default/default-saves.h" +#include "backends/events/default/default-events.h" +#include "backends/audiocd/default/default-audiocd.h" +#include "backends/mutex/mutex.h" +#include "backends/fs/fs-factory.h" +#include "backends/timer/bada/timer.h" + +#include "backends/platform/bada/form.h" +#include "backends/platform/bada/system.h" +#include "backends/platform/bada/graphics.h" +#include "backends/platform/bada/audio.h" + +using namespace Osp::Base; +using namespace Osp::Base::Runtime; +using namespace Osp::Ui::Controls; + +#define DEFAULT_CONFIG_FILE "/Home/scummvm.ini" +#define MUTEX_BUFFER_SIZE 5 + +// +// BadaFilesystemFactory +// +class BadaFilesystemFactory : public FilesystemFactory { +	AbstractFSNode *makeRootFileNode() const; +	AbstractFSNode *makeCurrentDirectoryFileNode() const; +	AbstractFSNode *makeFileNodePath(const Common::String &path) const; +}; + +AbstractFSNode *BadaFilesystemFactory::makeRootFileNode() const { +	return new BadaFilesystemNode("/"); +} + +AbstractFSNode *BadaFilesystemFactory::makeCurrentDirectoryFileNode() const { +	return new BadaFilesystemNode("/Home"); +} + +AbstractFSNode *BadaFilesystemFactory::makeFileNodePath(const Common::String &path) const { +	AppAssert(!path.empty()); +	return new BadaFilesystemNode(path); +} + +// +// BadaSaveFileManager +// +struct BadaSaveFileManager : public DefaultSaveFileManager { +	bool removeSavefile(const Common::String &filename); +}; + +bool BadaSaveFileManager::removeSavefile(const Common::String &filename) { +	Common::String savePathName = getSavePath(); + +	checkPath(Common::FSNode(savePathName)); +	if (getError().getCode() != Common::kNoError) { +		return false; +	} + +	// recreate FSNode since checkPath may have changed/created the directory +	Common::FSNode savePath(savePathName); +	Common::FSNode file = savePath.getChild(filename); + +	String unicodeFileName; +	StringUtil::Utf8ToString(file.getPath().c_str(), unicodeFileName); + +	switch (Osp::Io::File::Remove(unicodeFileName)) { +	case E_SUCCESS: +		return true; + +	case E_ILLEGAL_ACCESS: +		setError(Common::kWritePermissionDenied, "Search or write permission denied: " + +						 file.getName()); +		break; + +	default: +		setError(Common::kPathDoesNotExist, "removeSavefile: '" + file.getName() + +						 "' does not exist or path is invalid"); +		break; +	} + +	return false; +} + +// +// BadaMutexManager +// +struct BadaMutexManager : public MutexManager { +	BadaMutexManager(); +	~BadaMutexManager(); +	OSystem::MutexRef createMutex(); +	void lockMutex(OSystem::MutexRef mutex); +	void unlockMutex(OSystem::MutexRef mutex); +	void deleteMutex(OSystem::MutexRef mutex); +private: +	Mutex *buffer[MUTEX_BUFFER_SIZE]; +}; + +BadaMutexManager::BadaMutexManager() { +	for (int i = 0; i < MUTEX_BUFFER_SIZE; i++) { +		buffer[i] = NULL; +	} +} + +BadaMutexManager::~BadaMutexManager() { +	for (int i = 0; i < MUTEX_BUFFER_SIZE; i++) { +		if (buffer[i] != NULL) { +			delete buffer[i]; +		} +	} +} + +OSystem::MutexRef BadaMutexManager::createMutex() { +	Mutex *mutex = new Mutex(); +	mutex->Create(); + +	for (int i = 0; i < MUTEX_BUFFER_SIZE; i++) { +		if (buffer[i] == NULL) { +			buffer[i] = mutex; +			break; +		} +	} + +	return (OSystem::MutexRef) mutex; +} + +void BadaMutexManager::lockMutex(OSystem::MutexRef mutex) { +	Mutex *m = (Mutex*)mutex; +	m->Acquire(); +} + +void BadaMutexManager::unlockMutex(OSystem::MutexRef mutex) { +	Mutex *m = (Mutex*)mutex; +	m->Release(); +} + +void BadaMutexManager::deleteMutex(OSystem::MutexRef mutex) { +	Mutex *m = (Mutex*)mutex; + +	for (int i = 0; i < MUTEX_BUFFER_SIZE; i++) { +		if (buffer[i] == m) { +			buffer[i] = NULL; +		} +	} + +	delete m; +} + +// +// BadaEventManager +// +struct BadaEventManager : public DefaultEventManager { +	BadaEventManager(Common::EventSource *boss); +	void init(); +	int shouldQuit() const; +}; + +BadaEventManager::BadaEventManager(Common::EventSource *boss) : +	DefaultEventManager(boss) { +} + +void BadaEventManager::init() { +	DefaultEventManager::init(); + +	// theme and vkbd should have now loaded - clear the splash screen +	BadaSystem *system = (BadaSystem *)g_system; +	BadaGraphicsManager *graphics = system->getGraphics(); +	if (graphics) { +		graphics->setReady(); +		graphics->updateScreen(); +	} +} + +int BadaEventManager::shouldQuit() const { +	BadaSystem *system = (BadaSystem *)g_system; +	return DefaultEventManager::shouldQuit() || system->isClosing(); +} + +// +// BadaSystem +// +BadaSystem::BadaSystem(BadaAppForm *appForm) : +	_appForm(appForm), +	_audioThread(0), +	_epoch(0) { +} + +result BadaSystem::Construct(void) { +	logEntered(); + +	_fsFactory = new BadaFilesystemFactory(); +	if (!_fsFactory) { +		return E_OUT_OF_MEMORY; +	} + +	return E_SUCCESS; +} + +BadaSystem::~BadaSystem() { +	logEntered(); +} + +result BadaSystem::initModules() { +	logEntered(); + +	_mutexManager = new BadaMutexManager(); +	if (!_mutexManager) { +		return E_OUT_OF_MEMORY; +	} + +	_timerManager = new BadaTimerManager(); +	if (!_timerManager) { +		return E_OUT_OF_MEMORY; +	} + +	_savefileManager = new BadaSaveFileManager(); +	if (!_savefileManager) { +		return E_OUT_OF_MEMORY; +	} + +	_graphicsManager = (GraphicsManager*) new BadaGraphicsManager(_appForm); +	if (!_graphicsManager) { +		return E_OUT_OF_MEMORY; +	} + +	// depends on _graphicsManager when ENABLE_VKEYBD enabled +	_eventManager = new BadaEventManager(this); +	if (!_eventManager) { +		return E_OUT_OF_MEMORY; +	} + +	_audioThread = new AudioThread(); +	if (!_audioThread) { +		return E_OUT_OF_MEMORY; +	} + +	_mixer = _audioThread->Construct(this); +	if (!_mixer) { +		return E_OUT_OF_MEMORY; +	} + +	_audiocdManager = (AudioCDManager*) new DefaultAudioCDManager(); +	if (!_audiocdManager) { +		return E_OUT_OF_MEMORY; +	} + +	if (IsFailed(_audioThread->Start())) { +		AppLog("Failed to start audio thread"); +		return E_OUT_OF_MEMORY; +	} + +	logLeaving(); +	return E_SUCCESS; +} + +void BadaSystem::initBackend() { +	logEntered(); + +	// allow translations and game .DAT files to be found +	ConfMan.set("extrapath", "/Res"); + +	// use the mobile device theme +	ConfMan.set("gui_theme", "/Res/scummmobile"); + +	// allow bada virtual keypad pack to be found +	ConfMan.set("vkeybdpath", "/Res/vkeybd_bada"); +	ConfMan.set("vkeybd_pack_name", "vkeybd_bada"); + +	// set default save path to writable area +	if (!ConfMan.hasKey("savepath")) { +		ConfMan.set("savepath", "/Home/Share"); +	} + +	// default to no auto-save +	if (!ConfMan.hasKey("autosave_period")) { +		ConfMan.setInt("autosave_period", 0); +	} + +	ConfMan.registerDefault("fullscreen", true); +	ConfMan.registerDefault("aspect_ratio", true); +	ConfMan.setBool("confirm_exit", false); + +	Osp::System::SystemTime::GetTicks(_epoch); + +	if (E_SUCCESS != initModules()) { +		AppLog("initModules failed"); +	} else { +		OSystem::initBackend(); +	} + +	// replace kBigGUIFont using the large font from the scummmobile theme +	Common::File fontFile; +	Common::String fileName = "/Res/scummmobile/helvB14-ASCII.fcc"; +	BadaFilesystemNode file(fileName); +	if (file.exists()) { +		Common::SeekableReadStream *stream = file.createReadStream(); +		if (stream) { +			if (fontFile.open(stream, fileName)) { +				Graphics::BdfFont *font = Graphics::BdfFont::loadFromCache(fontFile); +				if (font) { +					// use this font for the vkbd and on-screen messages +					FontMan.setFont(Graphics::FontManager::kBigGUIFont, font); +				} +			} +		} +	} + +	logLeaving(); +} + +void BadaSystem::destroyBackend() { +	closeAudio(); + +	delete _graphicsManager; +	_graphicsManager = 0; + +	delete _savefileManager; +	_savefileManager = 0; + +	delete _fsFactory; +	_fsFactory = 0; + +	delete _mixer; +	_mixer = 0; + +	delete _audiocdManager; +	_audiocdManager = 0; + +	delete _timerManager; +	_timerManager = 0; + +	delete _eventManager; +	_eventManager = 0; + +	delete _mutexManager; +	_mutexManager = 0; +} + +bool BadaSystem::pollEvent(Common::Event &event) { +	return _appForm->pollEvent(event); +} + +uint32 BadaSystem::getMillis() { +	long long result, ticks = 0; +	Osp::System::SystemTime::GetTicks(ticks); +	result = ticks - _epoch; +	return result; +} + +void BadaSystem::delayMillis(uint msecs) { +	if (!_appForm->isClosing()) { +		Thread::Sleep(msecs); +	} +} + +void BadaSystem::updateScreen() { +	if (_graphicsManager != NULL) { +		_graphicsManager->updateScreen(); +	} +} + +void BadaSystem::getTimeAndDate(TimeDate &td) const { +	DateTime currentTime; + +	if (E_SUCCESS == Osp::System::SystemTime::GetCurrentTime(currentTime)) { +		td.tm_sec = currentTime.GetSecond(); +		td.tm_min = currentTime.GetMinute(); +		td.tm_hour = currentTime.GetHour(); +		td.tm_mday = currentTime.GetDay(); +		td.tm_mon = currentTime.GetMonth(); +		td.tm_year = currentTime.GetYear(); +	} +} + +void BadaSystem::fatalError() { +	systemError("ScummVM: Fatal internal error."); +} + +void BadaSystem::exitSystem() { +	if (_appForm) { +		closeAudio(); +		closeGraphics(); +		_appForm->exitSystem(); +	} +} + +void BadaSystem::logMessage(LogMessageType::Type type, const char *message) { +	if (type == LogMessageType::kError) { +		systemError(message); +	} else { +		AppLog(message); +	} +} + +Common::SeekableReadStream *BadaSystem::createConfigReadStream() { +	BadaFilesystemNode file(DEFAULT_CONFIG_FILE); +	return file.createReadStream(); +} + +Common::WriteStream *BadaSystem::createConfigWriteStream() { +	BadaFilesystemNode file(DEFAULT_CONFIG_FILE); +	return file.createWriteStream(); +} + +void BadaSystem::closeAudio() { +	if (_audioThread) { +		_audioThread->Stop(); +		_audioThread->Join(); +		delete _audioThread; +		_audioThread = 0; +	} +} + +void BadaSystem::closeGraphics() { +	if (_graphicsManager) { +		delete _graphicsManager; +		_graphicsManager = 0; +	} +} + +void BadaSystem::setMute(bool on) { +	if (_audioThread) { +		_audioThread->setMute(on); +	} +} + +int BadaSystem::setVolume(bool up, bool minMax) { +	int level = -1; +	if (_audioThread) { +		level = _audioThread->setVolume(up, minMax); +	} +	return level; +} + +// +// create the ScummVM system +// +BadaAppForm *systemStart(Osp::App::Application *app) { +	logEntered(); + +	BadaAppForm *appForm = new BadaAppForm(); +	if (!appForm) { +		AppLog("Failed to create appForm"); +		return NULL; +	} + +	if (E_SUCCESS != appForm->Construct() || +			E_SUCCESS != app->GetAppFrame()->GetFrame()->AddControl(*appForm)) { +		delete appForm; +		AppLog("Failed to construct appForm"); +		return NULL; +	} + +	return appForm; +} + +// +// display a fatal error notification +// +void systemError(const char *message) { +	AppLog("Fatal system error: %s", message); + +	ArrayList *args = new ArrayList(); +	args->Construct(); +	args->Add(*(new String(message))); +	Application::GetInstance()->SendUserEvent(USER_MESSAGE_EXIT_ERR, args); + +	if (g_system) { +		BadaSystem *system = (BadaSystem *)g_system; +		system->exitSystem(); +	} +} diff --git a/backends/platform/bada/system.h b/backends/platform/bada/system.h new file mode 100644 index 0000000000..a091f952e5 --- /dev/null +++ b/backends/platform/bada/system.h @@ -0,0 +1,101 @@ +/* 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_SYSTEM_H +#define BADA_SYSTEM_H + +#include <FApp.h> +#include <FGraphics.h> +#include <FUi.h> +#include <FSystem.h> +#include <FBase.h> +#include <FIoFile.h> + +#include "config.h" +#include "common/scummsys.h" +#include "backends/modular-backend.h" + +#include "backends/platform/bada/fs.h" +#include "backends/platform/bada/form.h" +#include "backends/platform/bada/audio.h" +#include "backends/platform/bada/graphics.h" + +#if defined(_DEBUG) +#define logEntered() AppLog("%s entered (%s %d)", \ +														 __FUNCTION__, __FILE__, __LINE__); +#define logLeaving() AppLog("%s leaving (%s %d)", \ +														 __FUNCTION__, __FILE__, __LINE__); +#else +#define logEntered() +#define logLeaving() +#endif + +BadaAppForm *systemStart(Osp::App::Application *app); +void systemError(const char *message); + +#define USER_MESSAGE_EXIT			1000 +#define USER_MESSAGE_EXIT_ERR 1001 + +// +// BadaSystem +// +class BadaSystem : public ModularBackend, +									 Common::EventSource { +public: +	BadaSystem(BadaAppForm *appForm); +	~BadaSystem(); + +	result Construct(); +	void closeAudio(); +	void closeGraphics(); +	void destroyBackend(); +	void setMute(bool on); +	int setVolume(bool up, bool minMax); +	void exitSystem(); +	bool isClosing() { return _appForm->isClosing(); } + +	BadaGraphicsManager *getGraphics() { +		return (BadaGraphicsManager*)_graphicsManager; +	} + +private: +	void initBackend(); +	result initModules(); + +	void updateScreen(); +	bool pollEvent(Common::Event &event); +	uint32 getMillis(); +	void delayMillis(uint msecs); +	void getTimeAndDate(TimeDate &t) const; +	void fatalError(); +	void logMessage(LogMessageType::Type type, const char *message); + +	Common::EventSource *getDefaultEventSource() {return this;} +	Common::SeekableReadStream *createConfigReadStream(); +	Common::WriteStream *createConfigWriteStream(); + +	BadaAppForm *_appForm; +	AudioThread *_audioThread; +	long long _epoch; +}; + +#endif diff --git a/backends/platform/dc/DCLauncherDialog.h b/backends/platform/dc/DCLauncherDialog.h index 72df3e15cc..519524222f 100644 --- a/backends/platform/dc/DCLauncherDialog.h +++ b/backends/platform/dc/DCLauncherDialog.h @@ -25,4 +25,3 @@ class DCLauncherDialog {    DCLauncherDialog() {}    int runModal();  }; - diff --git a/backends/platform/dc/README b/backends/platform/dc/README index e4ebda840e..e26df500e8 100644 --- a/backends/platform/dc/README +++ b/backends/platform/dc/README @@ -23,4 +23,3 @@ should get a scrambled binary SCUMMVM.BIN and some plugins *.PLG.  For serial/IP upload, remove the "DYNAMIC_MODULES" line and just run `make',  to get a static binary with the name `scummvm.elf'. - diff --git a/backends/platform/dc/audio.cpp b/backends/platform/dc/audio.cpp index 1fee970a90..35cb51f349 100644 --- a/backends/platform/dc/audio.cpp +++ b/backends/platform/dc/audio.cpp @@ -74,5 +74,3 @@ void OSystem_Dreamcast::checkSound()    if ((fillpos += n) >= curr_ring_buffer_samples)      fillpos = 0;  } - - diff --git a/backends/platform/dc/cache.S b/backends/platform/dc/cache.S index 1a1595a9a1..4beeedcea7 100644 --- a/backends/platform/dc/cache.S +++ b/backends/platform/dc/cache.S @@ -35,4 +35,3 @@ ccr_addr:  	.long	0xff00001c  ccr_data:  	.word	0x0905 - diff --git a/backends/platform/dc/dc-fs.cpp b/backends/platform/dc/dc-fs.cpp index c46f9df093..f30c9c56d1 100644 --- a/backends/platform/dc/dc-fs.cpp +++ b/backends/platform/dc/dc-fs.cpp @@ -165,4 +165,3 @@ AbstractFSNode *OSystem_Dreamcast::makeFileNodePath(const Common::String &path)  	AbstractFSNode *node = RoninCDFileNode::makeFileNodePath(path);  	return (node? node : new RoninCDNonexistingNode(path));  } - diff --git a/backends/platform/dc/dc.h b/backends/platform/dc/dc.h index bde50daa2d..2e32ff3eb4 100644 --- a/backends/platform/dc/dc.h +++ b/backends/platform/dc/dc.h @@ -259,4 +259,3 @@ extern int handleInput(struct mapledev *pad,  		       int &mouse_x, int &mouse_y,  		       byte &shiftFlags, Interactive *inter = NULL);  extern bool selectGame(char *&, char *&, Common::Language &, Common::Platform &, class Icon &); - diff --git a/backends/platform/dc/dcmain.cpp b/backends/platform/dc/dcmain.cpp index 06738a687d..3e3279f9c3 100644 --- a/backends/platform/dc/dcmain.cpp +++ b/backends/platform/dc/dcmain.cpp @@ -377,4 +377,3 @@ int DCLauncherDialog::runModal()    return 0;  } - diff --git a/backends/platform/dc/display.cpp b/backends/platform/dc/display.cpp index a11e329df3..76658c6590 100644 --- a/backends/platform/dc/display.cpp +++ b/backends/platform/dc/display.cpp @@ -732,4 +732,3 @@ int16 OSystem_Dreamcast::getOverlayWidth()  {    return OVL_W;  } - diff --git a/backends/platform/dc/input.cpp b/backends/platform/dc/input.cpp index 3759eec6df..7b21c76efa 100644 --- a/backends/platform/dc/input.cpp +++ b/backends/platform/dc/input.cpp @@ -249,4 +249,3 @@ bool OSystem_Dreamcast::pollEvent(Common::Event &event)      return false;    }  } - diff --git a/backends/platform/dc/label.cpp b/backends/platform/dc/label.cpp index 1094dd3fb4..5db031958f 100644 --- a/backends/platform/dc/label.cpp +++ b/backends/platform/dc/label.cpp @@ -134,4 +134,3 @@ void Label::draw(float x, float y, unsigned int argb, float scale)    myvertex.cmd |= TA_CMD_VERTEX_EOS;    ta_commit_list(&myvertex);  } - diff --git a/backends/platform/dc/plugin_head.S b/backends/platform/dc/plugin_head.S index 6cbe9eec85..a056f1c0f0 100644 --- a/backends/platform/dc/plugin_head.S +++ b/backends/platform/dc/plugin_head.S @@ -3,4 +3,3 @@  	.section        .dtors,"aw",@progbits  	.end -	 diff --git a/backends/platform/dingux/README.DINGUX b/backends/platform/dingux/README.DINGUX index d867e02f03..04f0d30844 100644 --- a/backends/platform/dingux/README.DINGUX +++ b/backends/platform/dingux/README.DINGUX @@ -65,4 +65,3 @@ I still raccomand the use of opendingux kernel + rootfs, but if you don't, this  image plus another kernel (eg. SiENcE's one) should be do the job.  Enjoy - diff --git a/backends/platform/dingux/scummvm.gpe b/backends/platform/dingux/scummvm.gpe index 84ab0c6b95..ce5d174a5c 100644 --- a/backends/platform/dingux/scummvm.gpe +++ b/backends/platform/dingux/scummvm.gpe @@ -2,4 +2,3 @@  HOME=`pwd`  $HOME/scummvm.elf - diff --git a/backends/platform/ds/arm7/source/libcartreset/cartreset.c b/backends/platform/ds/arm7/source/libcartreset/cartreset.c index db2f3cfddc..85be823b71 100644 --- a/backends/platform/ds/arm7/source/libcartreset/cartreset.c +++ b/backends/platform/ds/arm7/source/libcartreset/cartreset.c @@ -104,6 +104,3 @@ void cartExecute()  }  #endif - - - diff --git a/backends/platform/ds/arm7/source/libcartreset/cartreset_nolibfat.h b/backends/platform/ds/arm7/source/libcartreset/cartreset_nolibfat.h index f1faebea37..98808f79c5 100644 --- a/backends/platform/ds/arm7/source/libcartreset/cartreset_nolibfat.h +++ b/backends/platform/ds/arm7/source/libcartreset/cartreset_nolibfat.h @@ -54,4 +54,3 @@ void cartExecute();  #endif  #endif - diff --git a/backends/platform/ds/arm7/source/main.cpp b/backends/platform/ds/arm7/source/main.cpp index 6b5a0ec321..2e9cacc669 100644 --- a/backends/platform/ds/arm7/source/main.cpp +++ b/backends/platform/ds/arm7/source/main.cpp @@ -650,4 +650,3 @@ int main(int argc, char ** argv) {  ////////////////////////////////////////////////////////////////////// - diff --git a/backends/platform/ds/arm9/dist/readme_ds.txt b/backends/platform/ds/arm9/dist/readme_ds.txt index 24c85ad556..dc37fecce5 100644 --- a/backends/platform/ds/arm9/dist/readme_ds.txt +++ b/backends/platform/ds/arm9/dist/readme_ds.txt @@ -861,8 +861,3 @@ For other builds, substitute the letters b - g in the above line.  To build everything, type:    make allbuildssafe - - - - - diff --git a/backends/platform/ds/arm9/source/dsoptions.cpp b/backends/platform/ds/arm9/source/dsoptions.cpp index 263ca58705..7154d4ae3f 100644 --- a/backends/platform/ds/arm9/source/dsoptions.cpp +++ b/backends/platform/ds/arm9/source/dsoptions.cpp @@ -433,4 +433,3 @@ void setOptions() {  }  }	// End of namespace DS - diff --git a/backends/platform/ds/arm9/source/fat/disc_io.h b/backends/platform/ds/arm9/source/fat/disc_io.h index 0fc83a7493..cd930ba454 100644 --- a/backends/platform/ds/arm9/source/fat/disc_io.h +++ b/backends/platform/ds/arm9/source/fat/disc_io.h @@ -218,4 +218,3 @@ typedef struct {  #endif  #endif	// define DISC_IO_H - diff --git a/backends/platform/ds/arm9/source/fat/io_m3_common.c b/backends/platform/ds/arm9/source/fat/io_m3_common.c index 9c8280c808..e3232a4df6 100644 --- a/backends/platform/ds/arm9/source/fat/io_m3_common.c +++ b/backends/platform/ds/arm9/source/fat/io_m3_common.c @@ -57,4 +57,3 @@ void _M3_changeMode (u32 mode) {  		_M3_readHalfword (0x08000188);  	}  } - diff --git a/backends/platform/ds/arm9/source/fat/io_m3_common.h b/backends/platform/ds/arm9/source/fat/io_m3_common.h index 6d0c669783..6a0cc03c2e 100644 --- a/backends/platform/ds/arm9/source/fat/io_m3_common.h +++ b/backends/platform/ds/arm9/source/fat/io_m3_common.h @@ -45,4 +45,3 @@  extern void _M3_changeMode (u32 mode);  #endif // IO_M3_COMMON_H - diff --git a/backends/platform/ds/arm9/source/fat/io_m3sd_asm.s b/backends/platform/ds/arm9/source/fat/io_m3sd_asm.s index a6bb8dc187..f2bcce7da9 100644 --- a/backends/platform/ds/arm9/source/fat/io_m3sd_asm.s +++ b/backends/platform/ds/arm9/source/fat/io_m3sd_asm.s @@ -193,4 +193,3 @@ sd_data_write_busy2:  	ldmfd   r13!,{r4-r5,r15}  @-----------------end------------------- - diff --git a/backends/platform/ds/arm9/source/fat/io_njsd.c b/backends/platform/ds/arm9/source/fat/io_njsd.c index b9cb52aa00..12388da8e9 100644 --- a/backends/platform/ds/arm9/source/fat/io_njsd.c +++ b/backends/platform/ds/arm9/source/fat/io_njsd.c @@ -678,4 +678,4 @@ LPIO_INTERFACE NJSD_GetInterface(void) {  } ;  #endif // defined NDS -#endif
\ No newline at end of file +#endif diff --git a/backends/platform/ds/arm9/source/fat/io_scsd.c b/backends/platform/ds/arm9/source/fat/io_scsd.c index 0a6ab5a528..270691436d 100644 --- a/backends/platform/ds/arm9/source/fat/io_scsd.c +++ b/backends/platform/ds/arm9/source/fat/io_scsd.c @@ -103,4 +103,4 @@ LPIO_INTERFACE SCSD_GetInterface(void) {  	return &io_scsd ;  } ; -#endif
\ No newline at end of file +#endif diff --git a/backends/platform/ds/arm9/source/fat/io_scsd_asm.s b/backends/platform/ds/arm9/source/fat/io_scsd_asm.s index 390d36afeb..a33fa6af35 100644 --- a/backends/platform/ds/arm9/source/fat/io_scsd_asm.s +++ b/backends/platform/ds/arm9/source/fat/io_scsd_asm.s @@ -508,14 +508,3 @@ MemoryCard_IsInserted:  @----------------end MemoryCard_IsInserted---------------      .END - - - - - - - - - - - diff --git a/backends/platform/ds/arm9/source/fat/io_sd_common.c b/backends/platform/ds/arm9/source/fat/io_sd_common.c index ade9df0d80..e7ab472e1b 100644 --- a/backends/platform/ds/arm9/source/fat/io_sd_common.c +++ b/backends/platform/ds/arm9/source/fat/io_sd_common.c @@ -199,5 +199,3 @@ bool _SD_InitCard (_SD_FN_CMD_6BYTE_RESPONSE cmd_6byte_response,  	return true;  } - - diff --git a/backends/platform/ds/arm9/source/fat/m3sd.s b/backends/platform/ds/arm9/source/fat/m3sd.s index f6fab1a9e2..899cbc7927 100644 --- a/backends/platform/ds/arm9/source/fat/m3sd.s +++ b/backends/platform/ds/arm9/source/fat/m3sd.s @@ -197,4 +197,3 @@ DC_FlushRangeLoop:      bx      lr  @---------------------------------------  	.end - diff --git a/backends/platform/ds/arm9/source/keys.cpp b/backends/platform/ds/arm9/source/keys.cpp index 2f8497ab19..aec7d57bda 100644 --- a/backends/platform/ds/arm9/source/keys.cpp +++ b/backends/platform/ds/arm9/source/keys.cpp @@ -134,4 +134,3 @@ uint32 keysUp(void) {  }	// End of namespace DS - diff --git a/backends/platform/ds/arm9/source/osystem_ds.cpp b/backends/platform/ds/arm9/source/osystem_ds.cpp index b157a3a87a..fdd310ec17 100644 --- a/backends/platform/ds/arm9/source/osystem_ds.cpp +++ b/backends/platform/ds/arm9/source/osystem_ds.cpp @@ -901,5 +901,3 @@ void OSystem_DS::engineDone() {  #endif  } - - diff --git a/backends/platform/ds/arm9/source/scummhelp.cpp b/backends/platform/ds/arm9/source/scummhelp.cpp index 670b46a3b9..112ba49d76 100644 --- a/backends/platform/ds/arm9/source/scummhelp.cpp +++ b/backends/platform/ds/arm9/source/scummhelp.cpp @@ -98,4 +98,3 @@ void updateStrings(byte gameId, byte version, Common::Platform platform,  #undef ADD_BIND  #undef ADD_TEXT  #undef ADD_LINE - diff --git a/backends/platform/ds/ds.mk b/backends/platform/ds/ds.mk index 654475e1f3..78216cb9a2 100644 --- a/backends/platform/ds/ds.mk +++ b/backends/platform/ds/ds.mk @@ -236,4 +236,3 @@ $(ndsdir)/arm7/arm7.bin: $(ndsdir)/arm7/arm7.elf  #  # Fingolfin used  # CXX=arm-eabi-g++ CC=arm-eabi-gcc ./configure --host=arm-elf --enable-speed --enable-sso -enable-fpm=arm CFLAGS='-specs=ds_arm9.specs -mthumb-interwork' --disable-shared --disable-debugging LDFLAGS=$DEVKITPRO/libnds/lib/libnds9.a - diff --git a/backends/platform/gph/devices/gp2x/mmuhack/flush_uppermem_cache.h b/backends/platform/gph/devices/gp2x/mmuhack/flush_uppermem_cache.h index 520841ace7..d01548e474 100644 --- a/backends/platform/gph/devices/gp2x/mmuhack/flush_uppermem_cache.h +++ b/backends/platform/gph/devices/gp2x/mmuhack/flush_uppermem_cache.h @@ -8,4 +8,3 @@ void flush_uppermem_cache(void *start_address, void *end_address, int flags);  #ifdef __cplusplus  }  #endif - diff --git a/backends/platform/gph/devices/gp2x/mmuhack/flush_uppermem_cache.s b/backends/platform/gph/devices/gp2x/mmuhack/flush_uppermem_cache.s index 17628c156a..265908e1fd 100644 --- a/backends/platform/gph/devices/gp2x/mmuhack/flush_uppermem_cache.s +++ b/backends/platform/gph/devices/gp2x/mmuhack/flush_uppermem_cache.s @@ -3,4 +3,3 @@  flush_uppermem_cache:      swi #0x9f0002      bx lr - diff --git a/backends/platform/iphone/iphone_main.m b/backends/platform/iphone/iphone_main.m index 7bb5f0c317..c2ec328bf5 100644 --- a/backends/platform/iphone/iphone_main.m +++ b/backends/platform/iphone/iphone_main.m @@ -137,4 +137,3 @@ int main(int argc, char** argv) {  }  @end - diff --git a/backends/platform/iphone/iphone_video.m b/backends/platform/iphone/iphone_video.m index 04d25cebf8..eb16676428 100644 --- a/backends/platform/iphone/iphone_video.m +++ b/backends/platform/iphone/iphone_video.m @@ -754,4 +754,3 @@ bool getLocalMouseCoords(CGPoint *point) {  }  @end - diff --git a/backends/platform/n64/Makefile b/backends/platform/n64/Makefile index cffe277312..4f3744f7e8 100644 --- a/backends/platform/n64/Makefile +++ b/backends/platform/n64/Makefile @@ -90,4 +90,3 @@ spotless : distclean  send: $(TARGET).v64  	sudo ucon64 --xv64  $(TARGET).v64 - diff --git a/backends/platform/n64/README.N64 b/backends/platform/n64/README.N64 index b47b239658..42f78f4754 100644 --- a/backends/platform/n64/README.N64 +++ b/backends/platform/n64/README.N64 @@ -113,4 +113,3 @@ Notes  ==========  Write the rest of this README. - diff --git a/backends/platform/n64/framfs_save_manager.cpp b/backends/platform/n64/framfs_save_manager.cpp index 983b9aba8d..78f5333f2e 100644 --- a/backends/platform/n64/framfs_save_manager.cpp +++ b/backends/platform/n64/framfs_save_manager.cpp @@ -69,4 +69,3 @@ Common::StringArray FRAMSaveManager::listSavefiles(const Common::String &pattern  	return list;  } - diff --git a/backends/platform/n64/framfs_save_manager.h b/backends/platform/n64/framfs_save_manager.h index d50c17d85b..da553e423a 100644 --- a/backends/platform/n64/framfs_save_manager.h +++ b/backends/platform/n64/framfs_save_manager.h @@ -129,4 +129,3 @@ public:  #endif - diff --git a/backends/platform/n64/n64.mk b/backends/platform/n64/n64.mk index 2e383e670d..83ad405503 100644 --- a/backends/platform/n64/n64.mk +++ b/backends/platform/n64/n64.mk @@ -26,4 +26,3 @@ endif  	$(srcdir)/backends/platform/n64/pad_rom.sh scummvm.v64  	rm scummvm.bak  	mv scummvm.v64 $(bundle_name)/scummvm.v64 - diff --git a/backends/platform/n64/nintendo64.cpp b/backends/platform/n64/nintendo64.cpp index 3e811e73d2..bc416157e6 100644 --- a/backends/platform/n64/nintendo64.cpp +++ b/backends/platform/n64/nintendo64.cpp @@ -31,4 +31,3 @@ int main(void) {  	g_system->quit();       // TODO: Consider removing / replacing this!  	return res;  } - diff --git a/backends/platform/n64/osys_n64.h b/backends/platform/n64/osys_n64.h index 354f25a1cf..4788beb1ca 100644 --- a/backends/platform/n64/osys_n64.h +++ b/backends/platform/n64/osys_n64.h @@ -212,4 +212,3 @@ public:  };  #endif /* __OSYS_N64_H__ */ - diff --git a/backends/platform/n64/osys_n64_base.cpp b/backends/platform/n64/osys_n64_base.cpp index 4bc3780fe2..c3adb9691c 100644 --- a/backends/platform/n64/osys_n64_base.cpp +++ b/backends/platform/n64/osys_n64_base.cpp @@ -922,4 +922,3 @@ void OSystem_N64::detectControllers(void) {  inline uint16 colRGB888toBGR555(byte r, byte g, byte b) {  	return ((r >> 3) << 1) | ((g >> 3) << 6) | ((b >> 3) << 11);  } - diff --git a/backends/platform/n64/osys_n64_events.cpp b/backends/platform/n64/osys_n64_events.cpp index 62f11aef64..c83eb194ac 100644 --- a/backends/platform/n64/osys_n64_events.cpp +++ b/backends/platform/n64/osys_n64_events.cpp @@ -439,4 +439,3 @@ bool OSystem_N64::pollEvent(Common::Event &event) {  	return false;  } - diff --git a/backends/platform/n64/osys_n64_utilities.cpp b/backends/platform/n64/osys_n64_utilities.cpp index 0622e6423d..94d727e421 100644 --- a/backends/platform/n64/osys_n64_utilities.cpp +++ b/backends/platform/n64/osys_n64_utilities.cpp @@ -115,4 +115,3 @@ int timer_handler(int t) {  	tm->handler();  	return t;  } - diff --git a/backends/platform/n64/pad_rom.sh b/backends/platform/n64/pad_rom.sh index 085203306f..463eeb4e28 100755 --- a/backends/platform/n64/pad_rom.sh +++ b/backends/platform/n64/pad_rom.sh @@ -10,4 +10,3 @@ REMAINDER=`echo $BASESIZE - $REMAINDER  | bc`  CARTSIZE=`echo $CARTSIZE + $REMAINDER  | bc`  ucon64 -q --n64 --v64 --chk --padn=$CARTSIZE  $1 - diff --git a/backends/platform/n64/pakfs_save_manager.cpp b/backends/platform/n64/pakfs_save_manager.cpp index df9baa4d21..bf2fe8b1bc 100644 --- a/backends/platform/n64/pakfs_save_manager.cpp +++ b/backends/platform/n64/pakfs_save_manager.cpp @@ -70,4 +70,3 @@ Common::StringArray PAKSaveManager::listSavefiles(const Common::String &pattern)  	return list;  } - diff --git a/backends/platform/n64/pakfs_save_manager.h b/backends/platform/n64/pakfs_save_manager.h index 6987801294..e0fcbc1e2d 100644 --- a/backends/platform/n64/pakfs_save_manager.h +++ b/backends/platform/n64/pakfs_save_manager.h @@ -130,4 +130,3 @@ public:  #endif - diff --git a/backends/platform/n64/portdefs.h b/backends/platform/n64/portdefs.h index 35ef3c71db..677ad48477 100644 --- a/backends/platform/n64/portdefs.h +++ b/backends/platform/n64/portdefs.h @@ -49,4 +49,3 @@ typedef signed int int32;  #define SCUMMVM_DONT_DEFINE_TYPES  #endif - diff --git a/backends/platform/openpandora/build/PXML_schema.xsd b/backends/platform/openpandora/build/PXML_schema.xsd index 335efe5002..7c0d635016 100644 --- a/backends/platform/openpandora/build/PXML_schema.xsd +++ b/backends/platform/openpandora/build/PXML_schema.xsd @@ -338,4 +338,4 @@  			</xs:sequence>  		</xs:complexType>  	</xs:element> -</xs:schema>
\ No newline at end of file +</xs:schema> diff --git a/backends/platform/openpandora/build/runscummvm.sh b/backends/platform/openpandora/build/runscummvm.sh index c641235219..9c9d8362cb 100755 --- a/backends/platform/openpandora/build/runscummvm.sh +++ b/backends/platform/openpandora/build/runscummvm.sh @@ -12,4 +12,3 @@ mkdir runtime  cd runtime  ../bin/scummvm --fullscreen  --gfx-mode=2x --config=../scummvm.config  --themepath=../data - diff --git a/backends/platform/ps2/DmaPipe.h b/backends/platform/ps2/DmaPipe.h index fd8f55c154..c99da1c395 100644 --- a/backends/platform/ps2/DmaPipe.h +++ b/backends/platform/ps2/DmaPipe.h @@ -64,4 +64,3 @@ private:  };  #endif //__DMAPIPE_H__ - diff --git a/backends/platform/ps2/Gs2dScreen.cpp b/backends/platform/ps2/Gs2dScreen.cpp index 332b2a3c03..ddc1bdf668 100644 --- a/backends/platform/ps2/Gs2dScreen.cpp +++ b/backends/platform/ps2/Gs2dScreen.cpp @@ -816,5 +816,3 @@ const uint32 Gs2dScreen::_binaryClut[16] __attribute__((aligned(64))) = {  	GS_RGBA(0xFF, 0xFF, 0xFF, 0x80), GS_RGBA(0xFF, 0xFF, 0xFF, 0x80),  	GS_RGBA(0xFF, 0xFF, 0xFF, 0x80), GS_RGBA(0xFF, 0xFF, 0xFF, 0x80)  }; - - diff --git a/backends/platform/ps2/Makefile.gdb b/backends/platform/ps2/Makefile.gdb index 1e2510d3f4..8ca47cd9f1 100644 --- a/backends/platform/ps2/Makefile.gdb +++ b/backends/platform/ps2/Makefile.gdb @@ -102,4 +102,3 @@ all: $(TARGET)  $(TARGET): $(OBJS)  	$(LD) $^ $(LDFLAGS) -o $@ - diff --git a/backends/platform/ps2/Makefile.ps2 b/backends/platform/ps2/Makefile.ps2 index 77cc735c5f..d6ce08ae84 100644 --- a/backends/platform/ps2/Makefile.ps2 +++ b/backends/platform/ps2/Makefile.ps2 @@ -105,4 +105,3 @@ all: $(TARGET)  $(TARGET): $(OBJS)  	$(LD) $^ $(LDFLAGS) -o $@ - diff --git a/backends/platform/ps2/asyncfio.cpp b/backends/platform/ps2/asyncfio.cpp index d3d8eb65c7..3f20349107 100644 --- a/backends/platform/ps2/asyncfio.cpp +++ b/backends/platform/ps2/asyncfio.cpp @@ -237,4 +237,3 @@ bool AsyncFio::fioAvail(void) {  	}  	return retVal;  } - diff --git a/backends/platform/ps2/asyncfio.h b/backends/platform/ps2/asyncfio.h index 26ee3f63dd..31684d4349 100644 --- a/backends/platform/ps2/asyncfio.h +++ b/backends/platform/ps2/asyncfio.h @@ -50,4 +50,3 @@ private:  	volatile int * volatile _runningOp;  	volatile int _ioSlots[MAX_HANDLES];  }; - diff --git a/backends/platform/ps2/eecodyvdfs.c b/backends/platform/ps2/eecodyvdfs.c index e9d4bc6a5c..f410b0c8ec 100644 --- a/backends/platform/ps2/eecodyvdfs.c +++ b/backends/platform/ps2/eecodyvdfs.c @@ -63,5 +63,3 @@ int driveStandby(void) {  		driveStopped = 0;  	return *(int *)sbuff;  } - - diff --git a/backends/platform/ps2/eecodyvdfs.h b/backends/platform/ps2/eecodyvdfs.h index 4b383795c7..1d43fb662f 100644 --- a/backends/platform/ps2/eecodyvdfs.h +++ b/backends/platform/ps2/eecodyvdfs.h @@ -49,4 +49,3 @@ extern "C" {  #endif  #endif - diff --git a/backends/platform/ps2/iop/CoDyVDfs/iop/cdtypes.h b/backends/platform/ps2/iop/CoDyVDfs/iop/cdtypes.h index ebf57328dd..ad86631cfd 100644 --- a/backends/platform/ps2/iop/CoDyVDfs/iop/cdtypes.h +++ b/backends/platform/ps2/iop/CoDyVDfs/iop/cdtypes.h @@ -131,4 +131,3 @@ typedef struct {  } ISOPvd __attribute__ ((packed));	// 0x800  #endif // __CDTYPES_H__ - diff --git a/backends/platform/ps2/iop/CoDyVDfs/iop/codyvdfs.c b/backends/platform/ps2/iop/CoDyVDfs/iop/codyvdfs.c index 77a5b93720..e55e62853b 100644 --- a/backends/platform/ps2/iop/CoDyVDfs/iop/codyvdfs.c +++ b/backends/platform/ps2/iop/CoDyVDfs/iop/codyvdfs.c @@ -344,4 +344,3 @@ int strnicmp(const char *s1, const char *s2, int n) {  	}  	return 0;  } - diff --git a/backends/platform/ps2/iop/CoDyVDfs/iop/codyvdfs.h b/backends/platform/ps2/iop/CoDyVDfs/iop/codyvdfs.h index 902065f385..b9f1edc194 100644 --- a/backends/platform/ps2/iop/CoDyVDfs/iop/codyvdfs.h +++ b/backends/platform/ps2/iop/CoDyVDfs/iop/codyvdfs.h @@ -81,4 +81,3 @@ int checkDiscReady(int retries);  int strnicmp(const char *s1, const char *s2, int n);  #endif // __MYCDVDFS_H__ - diff --git a/backends/platform/ps2/iop/CoDyVDfs/iop/fiofs.c b/backends/platform/ps2/iop/CoDyVDfs/iop/fiofs.c index 8aecece3d9..f0a06f927b 100644 --- a/backends/platform/ps2/iop/CoDyVDfs/iop/fiofs.c +++ b/backends/platform/ps2/iop/CoDyVDfs/iop/fiofs.c @@ -262,4 +262,3 @@ int cd_dclose(iop_file_t *handle) {  	hd->size = hd->lba = 0;  	return 0;  } - diff --git a/backends/platform/ps2/iop/CoDyVDfs/iop/fiofs.h b/backends/platform/ps2/iop/CoDyVDfs/iop/fiofs.h index d0aa9533f2..db942b0b7e 100644 --- a/backends/platform/ps2/iop/CoDyVDfs/iop/fiofs.h +++ b/backends/platform/ps2/iop/CoDyVDfs/iop/fiofs.h @@ -34,4 +34,3 @@ int cd_dread(iop_file_t *handle, fio_dirent_t *buf);  int cd_dclose(iop_file_t *handle);  #endif // __FIOFS_H__ - diff --git a/backends/platform/ps2/iop/CoDyVDfs/iop/imports.lst b/backends/platform/ps2/iop/CoDyVDfs/iop/imports.lst index eb85e04462..4950bf8ced 100644 --- a/backends/platform/ps2/iop/CoDyVDfs/iop/imports.lst +++ b/backends/platform/ps2/iop/CoDyVDfs/iop/imports.lst @@ -61,5 +61,3 @@ I_StartThread  I_GetThreadId  I_DelayThread  thbase_IMPORTS_end - - diff --git a/backends/platform/ps2/iop/CoDyVDfs/iop/rpcfs.c b/backends/platform/ps2/iop/CoDyVDfs/iop/rpcfs.c index 3e45a5ff3d..5b760faa06 100644 --- a/backends/platform/ps2/iop/CoDyVDfs/iop/rpcfs.c +++ b/backends/platform/ps2/iop/CoDyVDfs/iop/rpcfs.c @@ -111,5 +111,3 @@ void *rpcServer(int func, void *data, int size) {  	}  	return NULL;  } - - diff --git a/backends/platform/ps2/iop/rpckbd/src/imports.lst b/backends/platform/ps2/iop/rpckbd/src/imports.lst index 41e13e6e73..e9ba01e020 100644 --- a/backends/platform/ps2/iop/rpckbd/src/imports.lst +++ b/backends/platform/ps2/iop/rpckbd/src/imports.lst @@ -55,4 +55,3 @@ I_UsbSetDevicePrivateData  I_UsbTransfer  I_UsbRegisterDriver  usbd_IMPORTS_end - diff --git a/backends/platform/ps2/irxboot.cpp b/backends/platform/ps2/irxboot.cpp index 5072e8a52c..aa904d4f5b 100644 --- a/backends/platform/ps2/irxboot.cpp +++ b/backends/platform/ps2/irxboot.cpp @@ -210,4 +210,3 @@ int loadIrxModules(int device, const char *irxPath, IrxReference **modules) {  		sioprintf("%s\n", resModules[i].path);  	return curModule - resModules;  } - diff --git a/backends/platform/ps2/irxboot.h b/backends/platform/ps2/irxboot.h index ef1bfb1256..81b47a37c6 100644 --- a/backends/platform/ps2/irxboot.h +++ b/backends/platform/ps2/irxboot.h @@ -84,4 +84,3 @@ struct IrxReference {  int loadIrxModules(int device, const char *irxPath, IrxReference **modules);  #endif // __IRXBOOT_H__ - diff --git a/backends/platform/ps2/ps2debug.cpp b/backends/platform/ps2/ps2debug.cpp index 1fc3d50170..300e18316f 100644 --- a/backends/platform/ps2/ps2debug.cpp +++ b/backends/platform/ps2/ps2debug.cpp @@ -44,4 +44,3 @@ void sioprintf(const char *zFormat, ...) {  		pos++;  	}  } - diff --git a/backends/platform/ps2/ps2debug.h b/backends/platform/ps2/ps2debug.h index 127032ae80..02831e0623 100644 --- a/backends/platform/ps2/ps2debug.h +++ b/backends/platform/ps2/ps2debug.h @@ -28,4 +28,3 @@  void sioprintf(const char *zFormat, ...);  #endif // __PS2DEBUG_H__ - diff --git a/backends/platform/ps2/ps2input.cpp b/backends/platform/ps2/ps2input.cpp index 07104a6d97..6f36c5ff90 100644 --- a/backends/platform/ps2/ps2input.cpp +++ b/backends/platform/ps2/ps2input.cpp @@ -545,5 +545,3 @@ const Common::KeyCode Ps2Input::_padFlags[16] = {  	Common::KEYCODE_INVALID,			 //	Cross  	Common::KEYCODE_INVALID				 //	Square  }; - - diff --git a/backends/platform/ps2/ps2input.h b/backends/platform/ps2/ps2input.h index c5d2f5b840..b97daac042 100644 --- a/backends/platform/ps2/ps2input.h +++ b/backends/platform/ps2/ps2input.h @@ -61,4 +61,3 @@ private:  };  #endif // __PS2INPUT_H__ - diff --git a/backends/platform/ps2/ps2mutex.cpp b/backends/platform/ps2/ps2mutex.cpp index 75b3a15482..5b30fa7862 100644 --- a/backends/platform/ps2/ps2mutex.cpp +++ b/backends/platform/ps2/ps2mutex.cpp @@ -97,4 +97,3 @@ void OSystem_PS2::deleteMutex(MutexRef mutex) {  	sysMutex->sema = -1;  	SignalSema(_mutexSema);  } - diff --git a/backends/platform/ps2/ps2pad.cpp b/backends/platform/ps2/ps2pad.cpp index 00512c40c3..eeb9dfbd93 100644 --- a/backends/platform/ps2/ps2pad.cpp +++ b/backends/platform/ps2/ps2pad.cpp @@ -148,5 +148,3 @@ void Ps2Pad::readPad(uint16 *pbuttons, int16 *joyh, int16 *joyv) {  		*pbuttons = 0;  	}  } - - diff --git a/backends/platform/ps2/ps2pad.h b/backends/platform/ps2/ps2pad.h index 16c7c796d3..aebb3c6339 100644 --- a/backends/platform/ps2/ps2pad.h +++ b/backends/platform/ps2/ps2pad.h @@ -63,4 +63,3 @@ private:  };  #endif //__PS2PAD_H__ - diff --git a/backends/platform/ps2/rpckbd.c b/backends/platform/ps2/rpckbd.c index 0d37e4cfcb..0bb45208f5 100644 --- a/backends/platform/ps2/rpckbd.c +++ b/backends/platform/ps2/rpckbd.c @@ -175,4 +175,3 @@ int PS2KbdResetKeymap(void)  	} else  		return -1;  } - diff --git a/backends/platform/ps2/rpckbd.h b/backends/platform/ps2/rpckbd.h index bc94cddf1b..bffd8e5be5 100644 --- a/backends/platform/ps2/rpckbd.h +++ b/backends/platform/ps2/rpckbd.h @@ -47,4 +47,3 @@ extern "C" {  #endif  #endif - diff --git a/backends/platform/ps2/sdlkeys.h b/backends/platform/ps2/sdlkeys.h index b2f783cedd..791b1eb190 100644 --- a/backends/platform/ps2/sdlkeys.h +++ b/backends/platform/ps2/sdlkeys.h @@ -260,5 +260,3 @@ enum SdlKeyCodes {  };  #endif - - diff --git a/backends/platform/psp/Makefile b/backends/platform/psp/Makefile index 899bf37e80..7f4f20446e 100644 --- a/backends/platform/psp/Makefile +++ b/backends/platform/psp/Makefile @@ -201,4 +201,3 @@ SCEkxploit: $(TARGET).elf $(PSP_EBOOT_SFO)  	$(PACK_PBP) "%__SCE__$(TARGET)/$(PSP_EBOOT)" $(PSP_EBOOT_SFO) $(PSP_EBOOT_ICON)  \  		$(PSP_EBOOT_ICON1) $(PSP_EBOOT_PIC0) $(PSP_EBOOT_PIC1)  \  		$(PSP_EBOOT_SND0) NULL $(PSP_EBOOT_PSAR) - diff --git a/backends/platform/psp/README.PSP b/backends/platform/psp/README.PSP index dcfa30898c..a101481dca 100644 --- a/backends/platform/psp/README.PSP +++ b/backends/platform/psp/README.PSP @@ -169,4 +169,3 @@ Joost Peters   (joostp@scummvm.org)  Paolo Costabel (paoloc@pacbell.net)  Thomas Mayer   (tommybear@internode.on.net)  Yotam Barnoy   (yotambarnoy@gmail.com) - diff --git a/backends/platform/psp/README.PSP.in b/backends/platform/psp/README.PSP.in index 978f8a60bd..1ee99db84b 100644 --- a/backends/platform/psp/README.PSP.in +++ b/backends/platform/psp/README.PSP.in @@ -169,4 +169,3 @@ Joost Peters   (joostp@scummvm.org)  Paolo Costabel (paoloc@pacbell.net)  Thomas Mayer   (tommybear@internode.on.net)  Yotam Barnoy   (yotambarnoy@gmail.com) - diff --git a/backends/platform/psp/display_manager.cpp b/backends/platform/psp/display_manager.cpp index 422805714f..cdb130e2a0 100644 --- a/backends/platform/psp/display_manager.cpp +++ b/backends/platform/psp/display_manager.cpp @@ -479,4 +479,3 @@ Common::List<Graphics::PixelFormat> DisplayManager::getSupportedPixelFormats() c  	return list;  } - diff --git a/backends/platform/psp/dummy.cpp b/backends/platform/psp/dummy.cpp index 748ac8cbf3..998ecf1488 100644 --- a/backends/platform/psp/dummy.cpp +++ b/backends/platform/psp/dummy.cpp @@ -53,4 +53,4 @@  	getsockopt(0, 0, 0, NULL, NULL);  	return i; -}
\ No newline at end of file +} diff --git a/backends/platform/psp/image_viewer.cpp b/backends/platform/psp/image_viewer.cpp index 1ed7698bc8..98205ddee9 100644 --- a/backends/platform/psp/image_viewer.cpp +++ b/backends/platform/psp/image_viewer.cpp @@ -69,7 +69,7 @@ bool ImageViewer::load(int imageNum) {  	assert(_renderer);  	// Load a PNG into our buffer and palette. Size it by the actual size of the image -	PngLoader image(file, *_buffer, *_palette, Buffer::kSizeBySourceSize); +	PngLoader image(*file, *_buffer, *_palette, Buffer::kSizeBySourceSize);  	PngLoader::Status status = image.allocate();	// allocate the buffers for the file @@ -321,4 +321,4 @@ void ImageViewer::handleEvent(uint32 event) {  		PSP_ERROR("Unknown event %d\n", event);  		break;  	} -}
\ No newline at end of file +} diff --git a/backends/platform/psp/image_viewer.h b/backends/platform/psp/image_viewer.h index ad188536a3..91a70b85cc 100644 --- a/backends/platform/psp/image_viewer.h +++ b/backends/platform/psp/image_viewer.h @@ -99,4 +99,4 @@ public:  	void setDisplayManager(DisplayManager *displayManager) { _displayManager = displayManager; }  }; -#endif /* PSP_IMAGE_VIEWER_H */
\ No newline at end of file +#endif /* PSP_IMAGE_VIEWER_H */ diff --git a/backends/platform/psp/input.cpp b/backends/platform/psp/input.cpp index a9ad441b4d..5e20fb1e43 100644 --- a/backends/platform/psp/input.cpp +++ b/backends/platform/psp/input.cpp @@ -566,5 +566,3 @@ void InputHandler::setButtonsForImageViewer() {  	_nub.getPad().getButton(ButtonPad::BTN_RIGHT, UNSHIFTED).setPspEvent(PSP_EVENT_IMAGE_VIEWER, ImageViewer::EVENT_MOVE_RIGHT,  		PSP_EVENT_IMAGE_VIEWER, ImageViewer::EVENT_MOVE_STOP);  } - - diff --git a/backends/platform/psp/memory.h b/backends/platform/psp/memory.h index b5e29af634..5b728460fc 100644 --- a/backends/platform/psp/memory.h +++ b/backends/platform/psp/memory.h @@ -122,5 +122,3 @@ public:  };  #endif /* PSP_INCLUDE_SWAP */ - - diff --git a/backends/platform/psp/mp3.cpp b/backends/platform/psp/mp3.cpp index 266e31e445..3dbf31112a 100644 --- a/backends/platform/psp/mp3.cpp +++ b/backends/platform/psp/mp3.cpp @@ -179,8 +179,7 @@ bool Mp3PspStream::loadStartAudioModule(const char *modname, int partition){  // TODO: make parallel function for unloading the 1.50 modules  Mp3PspStream::Mp3PspStream(Common::SeekableReadStream *inStream, DisposeAfterUse::Flag dispose) : -	_inStream(inStream), -	_disposeAfterUse(dispose), +	_inStream(inStream, dispose),  	_pcmLength(0),  	_posInFrame(0),  	_state(MP3_STATE_INIT), @@ -274,9 +273,6 @@ Mp3PspStream::~Mp3PspStream() {  	deinitStream();  	releaseStreamME(); 	// free the memory used for this stream - -	if (_disposeAfterUse == DisposeAfterUse::YES) -		delete _inStream;  }  void Mp3PspStream::deinitStream() { diff --git a/backends/platform/psp/mp3.h b/backends/platform/psp/mp3.h index 8b01fe4872..f7bfdda254 100644 --- a/backends/platform/psp/mp3.h +++ b/backends/platform/psp/mp3.h @@ -23,6 +23,7 @@  #ifndef SOUND_MP3_PSP_H  #define SOUND_MP3_PSP_H +#include "common/ptr.h"  #include "common/types.h"  #include "common/scummsys.h" @@ -48,8 +49,7 @@ protected:  	byte _codecInBuffer[3072] __attribute__((aligned(64))); // the codec always needs alignment  	unsigned long _codecParams[65]__attribute__((aligned(64)));		// TODO: change to struct -	Common::SeekableReadStream *_inStream; -	DisposeAfterUse::Flag _disposeAfterUse; +	Common::DisposablePtr<Common::SeekableReadStream> _inStream;  	uint32 _pcmLength;		// how many pcm samples we have for this type of file (x2 this for stereo) diff --git a/backends/platform/psp/png_loader.cpp b/backends/platform/psp/png_loader.cpp index 16377539c8..4de13d1e73 100644 --- a/backends/platform/psp/png_loader.cpp +++ b/backends/platform/psp/png_loader.cpp @@ -78,7 +78,7 @@ PngLoader::Status PngLoader::allocate() {  bool PngLoader::load() {  	DEBUG_ENTER_FUNC();  	// Try to load the image -	_file->seek(0);	// Go back to start +	_file.seek(0);	// Go back to start  	if (!loadImageIntoBuffer()) {  		PSP_DEBUG_PRINT("failed to load image\n"); @@ -99,11 +99,9 @@ void PngLoader::warningFn(png_structp png_ptr, png_const_charp warning_msg) {  // Read function for png library to be able to read from our SeekableReadStream  //  void PngLoader::libReadFunc(png_structp pngPtr, png_bytep data, png_size_t length) { -	Common::SeekableReadStream *file; +	Common::SeekableReadStream &file = *(Common::SeekableReadStream *)pngPtr->io_ptr; -	file = (Common::SeekableReadStream *)pngPtr->io_ptr; - -	file->read(data, length); +	file.read(data, length);  }  bool PngLoader::basicImageLoad() { @@ -120,7 +118,7 @@ bool PngLoader::basicImageLoad() {  		return false;  	}  	// Set the png lib to use our read function -	png_set_read_fn(_pngPtr, (void *)_file, libReadFunc); +	png_set_read_fn(_pngPtr, &_file, libReadFunc);  	unsigned int sig_read = 0; diff --git a/backends/platform/psp/png_loader.h b/backends/platform/psp/png_loader.h index 0ff9d8a65d..48a3220d78 100644 --- a/backends/platform/psp/png_loader.h +++ b/backends/platform/psp/png_loader.h @@ -34,7 +34,7 @@ private:  	static void warningFn(png_structp png_ptr, png_const_charp warning_msg);  	static void libReadFunc(png_structp pngPtr, png_bytep data, png_size_t length); -	Common::SeekableReadStream *_file; +	Common::SeekableReadStream &_file;  	Buffer *_buffer;  	Palette *_palette; @@ -57,7 +57,7 @@ public:  		BAD_FILE  	}; -	PngLoader(Common::SeekableReadStream *file, Buffer &buffer, Palette &palette, +	PngLoader(Common::SeekableReadStream &file, Buffer &buffer, Palette &palette,  		Buffer::HowToSize sizeBy = Buffer::kSizeByTextureSize) :  			_file(file), _buffer(&buffer), _palette(&palette),  			_width(0), _height(0), _paletteSize(0), diff --git a/backends/platform/psp/portdefs.h b/backends/platform/psp/portdefs.h index feb0c944ee..e8a28b31e2 100644 --- a/backends/platform/psp/portdefs.h +++ b/backends/platform/psp/portdefs.h @@ -53,5 +53,3 @@  //#define printf  pspDebugScreenPrintf  #endif /* PORTDEFS_H */ - - diff --git a/backends/platform/psp/pspkeyboard.cpp b/backends/platform/psp/pspkeyboard.cpp index 43c4cada15..66efe9145d 100644 --- a/backends/platform/psp/pspkeyboard.cpp +++ b/backends/platform/psp/pspkeyboard.cpp @@ -298,7 +298,7 @@ bool PSPKeyboard::load() {  			goto ERROR;  		} -		PngLoader image(file, _buffers[i], _palettes[i]); +		PngLoader image(*file, _buffers[i], _palettes[i]);  		if (image.allocate() != PngLoader::OK) {  			PSP_ERROR("Failed to allocate memory for keyboard image %s\n", _guiStrings[i]); diff --git a/backends/platform/psp/rtc.cpp b/backends/platform/psp/rtc.cpp index 6c8e919986..cbbb7d3f80 100644 --- a/backends/platform/psp/rtc.cpp +++ b/backends/platform/psp/rtc.cpp @@ -83,4 +83,3 @@ uint32 PspRtc::getMicros() {  	return ticks[0];  } - diff --git a/backends/platform/psp/thread.cpp b/backends/platform/psp/thread.cpp index 5f38a54ab7..57370f7685 100644 --- a/backends/platform/psp/thread.cpp +++ b/backends/platform/psp/thread.cpp @@ -228,4 +228,3 @@ void PspCondition::wait(PspMutex &externalMutex) {          externalMutex.lock();		// must lock external mutex here for continuation  } - diff --git a/backends/platform/psp/thread.h b/backends/platform/psp/thread.h index a2f3b5eda2..ca94b8c82c 100644 --- a/backends/platform/psp/thread.h +++ b/backends/platform/psp/thread.h @@ -105,5 +105,3 @@ enum StackSizes {  };  #endif /* PSP_THREADS_H */ - - diff --git a/backends/platform/psp/trace.cpp b/backends/platform/psp/trace.cpp index b799b4e870..008b508b7e 100644 --- a/backends/platform/psp/trace.cpp +++ b/backends/platform/psp/trace.cpp @@ -148,4 +148,3 @@ void mipsBacktrace(uint32 levels, void **addresses) {  		}  	}  } - diff --git a/backends/platform/sdl/macosx/macosx.cpp b/backends/platform/sdl/macosx/macosx.cpp index ddfc99570a..d9de4e5e33 100644 --- a/backends/platform/sdl/macosx/macosx.cpp +++ b/backends/platform/sdl/macosx/macosx.cpp @@ -30,6 +30,7 @@  #include "backends/platform/sdl/macosx/macosx.h"  #include "backends/mixer/doublebuffersdl/doublebuffersdl-mixer.h"  #include "backends/platform/sdl/macosx/appmenu_osx.h" +#include "backends/updates/macosx/macosx-updates.h"  #include "common/archive.h"  #include "common/config-manager.h" @@ -63,6 +64,11 @@ void OSystem_MacOSX::initBackend() {  	// Replace the SDL generated menu items with our own translated ones on Mac OS X  	replaceApplicationMenuItems(); +#ifdef USE_SPARKLE +	// Initialize updates manager +	_updateManager = new MacOSXUpdateManager(); +#endif +  	// Invoke parent implementation of this method  	OSystem_POSIX::initBackend();  } diff --git a/backends/platform/sdl/sdl.cpp b/backends/platform/sdl/sdl.cpp index d05cca4d1f..8dff5cec05 100644 --- a/backends/platform/sdl/sdl.cpp +++ b/backends/platform/sdl/sdl.cpp @@ -49,6 +49,7 @@  #include "backends/graphics/surfacesdl/surfacesdl-graphics.h"  #ifdef USE_OPENGL  #include "backends/graphics/openglsdl/openglsdl-graphics.h" +#include "graphics/cursorman.h"  #endif  #include "icons/scummvm.xpm" @@ -174,7 +175,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;  			}  		} @@ -472,7 +473,8 @@ uint32 OSystem_SDL::getMillis() {  }  void OSystem_SDL::delayMillis(uint msecs) { -	SDL_Delay(msecs); +	if (!g_eventRec.processDelayMillis(msecs)) +		SDL_Delay(msecs);  }  void OSystem_SDL::getTimeAndDate(TimeDate &td) const { @@ -523,6 +525,22 @@ bool OSystem_SDL::setGraphicsMode(int mode) {  		i = _sdlModesCount;  	} +	// Very hacky way to set up the old graphics manager state, in case we +	// switch from SDL->OpenGL or OpenGL->SDL. +	// +	// This is a probably temporary workaround to fix bugs like #3368143 +	// "SDL/OpenGL: Crash when switching renderer backend". +	const int screenWidth = _graphicsManager->getWidth(); +	const int screenHeight = _graphicsManager->getHeight(); +	const bool arState = _graphicsManager->getFeatureState(kFeatureAspectRatioCorrection); +	const bool fullscreen = _graphicsManager->getFeatureState(kFeatureFullscreenMode); +	const bool cursorPalette = _graphicsManager->getFeatureState(kFeatureCursorPalette); +#ifdef USE_RGB_COLOR +	const Graphics::PixelFormat pixelFormat = _graphicsManager->getScreenFormat(); +#endif + +	bool switchedManager = false; +  	// Loop through modes  	while (srcMode->name) {  		if (i == mode) { @@ -534,16 +552,55 @@ bool OSystem_SDL::setGraphicsMode(int mode) {  				_graphicsManager = new SurfaceSdlGraphicsManager(_eventSource);  				((SurfaceSdlGraphicsManager *)_graphicsManager)->initEventObserver();  				_graphicsManager->beginGFXTransaction(); + +				switchedManager = true;  			} 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(); + +				switchedManager = true;  			}  			_graphicsMode = mode; -			return _graphicsManager->setGraphicsMode(srcMode->id); + +			if (switchedManager) { +#ifdef USE_RGB_COLOR +				_graphicsManager->initSize(screenWidth, screenHeight, &pixelFormat); +#else +				_graphicsManager->initSize(screenWidth, screenHeight, 0); +#endif +				_graphicsManager->setFeatureState(kFeatureAspectRatioCorrection, arState); +				_graphicsManager->setFeatureState(kFeatureFullscreenMode, fullscreen); +				_graphicsManager->setFeatureState(kFeatureCursorPalette, cursorPalette); + +				// Worst part about this right now, tell the cursor manager to +				// resetup the cursor + cursor palette if necessarily + +				// First we need to try to setup the old state on the new manager... +				if (_graphicsManager->endGFXTransaction() != kTransactionSuccess) { +					// Oh my god if this failed the client code might just explode. +					return false; +				} + +				// Next setup the cursor again +				CursorMan.pushCursor(0, 0, 0, 0, 0, 0); +				CursorMan.popCursor(); + +				// Next setup cursor palette if needed +				if (cursorPalette) { +					CursorMan.pushCursorPalette(0, 0, 0); +					CursorMan.popCursorPalette(); +				} + +				_graphicsManager->beginGFXTransaction(); +				// Oh my god if this failed the client code might just explode. +				return _graphicsManager->setGraphicsMode(srcMode->id); +			} else { +				return _graphicsManager->setGraphicsMode(srcMode->id); +			}  		}  		i++; diff --git a/backends/platform/sdl/sdl.h b/backends/platform/sdl/sdl.h index 395b2b3aac..22d79dbfe7 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; diff --git a/backends/platform/symbian/.placeholder b/backends/platform/symbian/.placeholder index dcf4d34a62..4af1e27cc7 100644 --- a/backends/platform/symbian/.placeholder +++ b/backends/platform/symbian/.placeholder @@ -1 +1 @@ ->> SumthinWicked *grins* <<
\ No newline at end of file +>> SumthinWicked *grins* << diff --git a/backends/platform/symbian/BuildPackageUpload_AllVersions.pl b/backends/platform/symbian/BuildPackageUpload_AllVersions.pl index 3bdcede76a..3062068852 100644 --- a/backends/platform/symbian/BuildPackageUpload_AllVersions.pl +++ b/backends/platform/symbian/BuildPackageUpload_AllVersions.pl @@ -798,5 +798,3 @@ sub PrintMessage()  }  ################################################################################################################## - - diff --git a/backends/platform/symbian/README b/backends/platform/symbian/README index 1f49c52f02..3e3be592e7 100644 --- a/backends/platform/symbian/README +++ b/backends/platform/symbian/README @@ -177,4 +177,3 @@ Greetz & such  	greetz,  	SumthinWicked & Anotherguest - diff --git a/backends/platform/symbian/S60/scummvm-CVS-SymbianS60v2.pkg b/backends/platform/symbian/S60/scummvm-CVS-SymbianS60v2.pkg index 469c815afb..0d22c9d016 100644 --- a/backends/platform/symbian/S60/scummvm-CVS-SymbianS60v2.pkg +++ b/backends/platform/symbian/S60/scummvm-CVS-SymbianS60v2.pkg @@ -61,4 +61,4 @@  ""-"!:\system\apps\ScummVM\sdl.ini",FILENULL  ; This install layout will let you upgrade to newer versions wihout loss of scummvm.ini. -; It will remove the config file, std***.txt files & dirs on uninstall.
\ No newline at end of file +; It will remove the config file, std***.txt files & dirs on uninstall. diff --git a/backends/platform/symbian/S60v3/ScummVM_Loc.rss b/backends/platform/symbian/S60v3/ScummVM_Loc.rss index d98ef5ae71..7247ce1207 100644 --- a/backends/platform/symbian/S60v3/ScummVM_Loc.rss +++ b/backends/platform/symbian/S60v3/ScummVM_Loc.rss @@ -19,4 +19,3 @@ RESOURCE LOCALISABLE_APP_INFO  			}  		};  	} - diff --git a/backends/platform/symbian/S60v3/scummvm_A0000658_loc.rss b/backends/platform/symbian/S60v3/scummvm_A0000658_loc.rss index 9273312f42..849e0b017f 100644 --- a/backends/platform/symbian/S60v3/scummvm_A0000658_loc.rss +++ b/backends/platform/symbian/S60v3/scummvm_A0000658_loc.rss @@ -19,4 +19,3 @@ RESOURCE LOCALISABLE_APP_INFO  			}  		};  	} - diff --git a/backends/platform/symbian/S60v3/scummvm_A0000658_reg.rss b/backends/platform/symbian/S60v3/scummvm_A0000658_reg.rss index 1b1cc9e64f..031be012cd 100644 --- a/backends/platform/symbian/S60v3/scummvm_A0000658_reg.rss +++ b/backends/platform/symbian/S60v3/scummvm_A0000658_reg.rss @@ -15,4 +15,3 @@ RESOURCE APP_REGISTRATION_INFO  	// Specify the location of the localisable icon/caption definition file  	localisable_resource_file = "\\Resource\\Apps\\ScummVM_A0000658_loc";  	} - diff --git a/backends/platform/symbian/S60v3/scummvm_reg.rss b/backends/platform/symbian/S60v3/scummvm_reg.rss index 1156694bd7..b5617913d6 100644 --- a/backends/platform/symbian/S60v3/scummvm_reg.rss +++ b/backends/platform/symbian/S60v3/scummvm_reg.rss @@ -15,4 +15,3 @@ RESOURCE APP_REGISTRATION_INFO  	// Specify the location of the localisable icon/caption definition file  	localisable_resource_file = "\\Resource\\Apps\\ScummVM_loc";  	} - diff --git a/backends/platform/symbian/S80/ScummVM_S80.mmp.in b/backends/platform/symbian/S80/ScummVM_S80.mmp.in index efd0d0ee32..5e4b6d447e 100644 --- a/backends/platform/symbian/S80/ScummVM_S80.mmp.in +++ b/backends/platform/symbian/S80/ScummVM_S80.mmp.in @@ -107,4 +107,3 @@ LIBRARY euser.lib apparc.lib fbscli.lib  LIBRARY estlib.lib apgrfx.lib  LIBRARY gdi.lib hal.lib bitgdi.lib  LIBRARY mediaclientaudiostream.lib efsrv.lib ws32.lib bafl.lib - diff --git a/backends/platform/symbian/S90/Scummvm_S90.mmp.in b/backends/platform/symbian/S90/Scummvm_S90.mmp.in index 4afdb5c62e..06d65f1641 100644 --- a/backends/platform/symbian/S90/Scummvm_S90.mmp.in +++ b/backends/platform/symbian/S90/Scummvm_S90.mmp.in @@ -107,4 +107,3 @@ LIBRARY euser.lib apparc.lib fbscli.lib  LIBRARY estlib.lib apgrfx.lib  LIBRARY gdi.lib hal.lib bitgdi.lib bafl.lib  LIBRARY mediaclientaudiostream.lib efsrv.lib ws32.lib - diff --git a/backends/platform/symbian/UIQ2/ScummVM.rss b/backends/platform/symbian/UIQ2/ScummVM.rss index 3550d82f7d..374bd50680 100644 --- a/backends/platform/symbian/UIQ2/ScummVM.rss +++ b/backends/platform/symbian/UIQ2/ScummVM.rss @@ -41,4 +41,3 @@ RESOURCE TBUF16 { buf=""; }  RESOURCE EIK_APP_INFO  	{  	} - diff --git a/backends/platform/symbian/UIQ2/ScummVM_UIQ2.mmp.in b/backends/platform/symbian/UIQ2/ScummVM_UIQ2.mmp.in index 4000b1653d..80ba37d694 100644 --- a/backends/platform/symbian/UIQ2/ScummVM_UIQ2.mmp.in +++ b/backends/platform/symbian/UIQ2/ScummVM_UIQ2.mmp.in @@ -106,4 +106,3 @@ LIBRARY qikctl.lib bafl.lib  START WINS  WIN32_LIBRARY	lldiv.obj llmul.obj llshl.obj  END - diff --git a/backends/platform/symbian/UIQ2/scummvm-CVS-SymbianUIQ2_SE.pkg b/backends/platform/symbian/UIQ2/scummvm-CVS-SymbianUIQ2_SE.pkg index ad3a31cb30..8284f64611 100644 --- a/backends/platform/symbian/UIQ2/scummvm-CVS-SymbianUIQ2_SE.pkg +++ b/backends/platform/symbian/UIQ2/scummvm-CVS-SymbianUIQ2_SE.pkg @@ -54,4 +54,4 @@  ; add extra Vibration lib for P800, will be ignored during all other installs  IF MachineUID = 0x101F408B  @"Vibration.sis", (0x101F94A3) -ENDIF
\ No newline at end of file +ENDIF diff --git a/backends/platform/symbian/UIQ3/ScummVM.rss b/backends/platform/symbian/UIQ3/ScummVM.rss index cb47568288..2021b0506e 100644 --- a/backends/platform/symbian/UIQ3/ScummVM.rss +++ b/backends/platform/symbian/UIQ3/ScummVM.rss @@ -48,4 +48,3 @@ RESOURCE EIK_APP_INFO  	}  #include <sdl.ra> - diff --git a/backends/platform/symbian/UIQ3/ScummVM_A0000658.rss b/backends/platform/symbian/UIQ3/ScummVM_A0000658.rss index cb47568288..2021b0506e 100644 --- a/backends/platform/symbian/UIQ3/ScummVM_A0000658.rss +++ b/backends/platform/symbian/UIQ3/ScummVM_A0000658.rss @@ -48,4 +48,3 @@ RESOURCE EIK_APP_INFO  	}  #include <sdl.ra> - diff --git a/backends/platform/symbian/UIQ3/scummvm_A0000658_loc.rss b/backends/platform/symbian/UIQ3/scummvm_A0000658_loc.rss index a6ee70ab25..7f3b71ef84 100644 --- a/backends/platform/symbian/UIQ3/scummvm_A0000658_loc.rss +++ b/backends/platform/symbian/UIQ3/scummvm_A0000658_loc.rss @@ -82,4 +82,3 @@ RESOURCE LOCALISABLE_APP_INFO  		}  	   };  	} - diff --git a/backends/platform/symbian/UIQ3/scummvm_A0000658_reg.rss b/backends/platform/symbian/UIQ3/scummvm_A0000658_reg.rss index 2158406d0d..68d0d33abd 100644 --- a/backends/platform/symbian/UIQ3/scummvm_A0000658_reg.rss +++ b/backends/platform/symbian/UIQ3/scummvm_A0000658_reg.rss @@ -15,4 +15,3 @@ RESOURCE APP_REGISTRATION_INFO  	// Specify the location of the localisable icon/caption definition file  	localisable_resource_file = "\\Resource\\Apps\\ScummVM_A0000658_loc";  	} - diff --git a/backends/platform/symbian/UIQ3/scummvm_loc.rss b/backends/platform/symbian/UIQ3/scummvm_loc.rss index 201aacefa3..d00a67f3dc 100644 --- a/backends/platform/symbian/UIQ3/scummvm_loc.rss +++ b/backends/platform/symbian/UIQ3/scummvm_loc.rss @@ -56,4 +56,3 @@ RESOURCE LOCALISABLE_APP_INFO  		}  	   };  	} - diff --git a/backends/platform/symbian/UIQ3/scummvm_reg.rss b/backends/platform/symbian/UIQ3/scummvm_reg.rss index 1156694bd7..b5617913d6 100644 --- a/backends/platform/symbian/UIQ3/scummvm_reg.rss +++ b/backends/platform/symbian/UIQ3/scummvm_reg.rss @@ -15,4 +15,3 @@ RESOURCE APP_REGISTRATION_INFO  	// Specify the location of the localisable icon/caption definition file  	localisable_resource_file = "\\Resource\\Apps\\ScummVM_loc";  	} - diff --git a/backends/platform/symbian/mmp/scummvm_base.mmp.in b/backends/platform/symbian/mmp/scummvm_base.mmp.in index 9acef57cea..6a4bba8345 100644 --- a/backends/platform/symbian/mmp/scummvm_base.mmp.in +++ b/backends/platform/symbian/mmp/scummvm_base.mmp.in @@ -156,4 +156,4 @@ SOURCE     backends\vkeybd\virtual-keyboard.cpp  // Downscaler  SOURCE	   graphics\scaler\downscaler.cpp -MACRO SDL_BACKEND
\ No newline at end of file +MACRO SDL_BACKEND diff --git a/backends/platform/symbian/res/ScummVmAif.rss b/backends/platform/symbian/res/ScummVmAif.rss index 31bf7bd394..b2addc3f21 100644 --- a/backends/platform/symbian/res/ScummVmAif.rss +++ b/backends/platform/symbian/res/ScummVmAif.rss @@ -42,6 +42,3 @@ RESOURCE AIF_DATA  	//  	num_icons=2;  	} - - - diff --git a/backends/platform/symbian/src/ScummApp.cpp b/backends/platform/symbian/src/ScummApp.cpp index c4d9fc88d9..405fb5c3c2 100644 --- a/backends/platform/symbian/src/ScummApp.cpp +++ b/backends/platform/symbian/src/ScummApp.cpp @@ -116,5 +116,3 @@ void CScummApp::GetDataFolder(TDes& aDataFolder)  	aDataFolder = _L("ScummVM");  }  ///////////////////////////////////////////////////////////////////////////////////////////////// - - diff --git a/backends/platform/symbian/src/ScummApp.h b/backends/platform/symbian/src/ScummApp.h index 376964f0a1..0b9ebcdf53 100644 --- a/backends/platform/symbian/src/ScummApp.h +++ b/backends/platform/symbian/src/ScummApp.h @@ -48,5 +48,3 @@ public:  #endif  };  #endif - - diff --git a/backends/platform/wii/gdb.txt b/backends/platform/wii/gdb.txt index 4e6c7928c3..0bd2209745 100644 --- a/backends/platform/wii/gdb.txt +++ b/backends/platform/wii/gdb.txt @@ -1,4 +1,3 @@  target remote /dev/ttyUSB0  info threads  bt - diff --git a/backends/platform/wii/main.cpp b/backends/platform/wii/main.cpp index 3965f51b7f..affe053b6a 100644 --- a/backends/platform/wii/main.cpp +++ b/backends/platform/wii/main.cpp @@ -247,4 +247,3 @@ int main(int argc, char *argv[]) {  #ifdef __cplusplus  }  #endif - diff --git a/backends/platform/wii/module.mk b/backends/platform/wii/module.mk index 00eb0d7e49..88e75fba26 100644 --- a/backends/platform/wii/module.mk +++ b/backends/platform/wii/module.mk @@ -12,4 +12,3 @@ MODULE_OBJS := \  MODULE_OBJS := $(addprefix $(MODULE)/, $(MODULE_OBJS))  OBJS := $(MODULE_OBJS) $(OBJS)  MODULE_DIRS += $(sort $(dir $(MODULE_OBJS))) - diff --git a/backends/platform/wii/options.cpp b/backends/platform/wii/options.cpp index 8c12ad9b81..ede81343ca 100644 --- a/backends/platform/wii/options.cpp +++ b/backends/platform/wii/options.cpp @@ -315,4 +315,3 @@ void WiiOptionsDialog::save() {  	ConfMan.flushToDisk();  } - diff --git a/backends/platform/wii/options.h b/backends/platform/wii/options.h index 00d42bc2ef..9b500ef29f 100644 --- a/backends/platform/wii/options.h +++ b/backends/platform/wii/options.h @@ -77,4 +77,3 @@ private:  };  #endif - diff --git a/backends/platform/wii/osystem_events.cpp b/backends/platform/wii/osystem_events.cpp index 389d3823e7..3ba66aed89 100644 --- a/backends/platform/wii/osystem_events.cpp +++ b/backends/platform/wii/osystem_events.cpp @@ -451,4 +451,3 @@ bool OSystem_Wii::pollEvent(Common::Event &event) {  	return false;  } - diff --git a/backends/platform/wii/osystem_gfx.cpp b/backends/platform/wii/osystem_gfx.cpp index 443e738a4a..83607984cc 100644 --- a/backends/platform/wii/osystem_gfx.cpp +++ b/backends/platform/wii/osystem_gfx.cpp @@ -747,4 +747,3 @@ void OSystem_Wii::setMouseCursor(const byte *buf, uint w, uint h, int hotspotX,  	if ((_texMouse.palette) && (oldKeycolor != _mouseKeyColor))  		_cursorPaletteDirty = true;  } - diff --git a/backends/platform/wii/osystem_sfx.cpp b/backends/platform/wii/osystem_sfx.cpp index acab6df7e1..2e658e47aa 100644 --- a/backends/platform/wii/osystem_sfx.cpp +++ b/backends/platform/wii/osystem_sfx.cpp @@ -131,4 +131,3 @@ void OSystem_Wii::deinitSfx() {  			free(sound_buffer[i]);  	}  } - diff --git a/backends/platform/wii/wii.mk b/backends/platform/wii/wii.mk index aed30523b2..7d2db68b4e 100644 --- a/backends/platform/wii/wii.mk +++ b/backends/platform/wii/wii.mk @@ -49,4 +49,3 @@ wiiloaddist: wiidist  	$(DEVKITPPC)/bin/wiiload wiidist/scummvm.zip  .PHONY: wiiclean wiiload geckoupload wiigdb wiidebug wiidist wiiloaddist - diff --git a/backends/platform/wince/CEScaler.cpp b/backends/platform/wince/CEScaler.cpp index f07a7ec84b..66f7809a3a 100644 --- a/backends/platform/wince/CEScaler.cpp +++ b/backends/platform/wince/CEScaler.cpp @@ -86,4 +86,3 @@ void SmartphoneLandscape(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, ui  }  #endif - diff --git a/backends/platform/wince/CEgui/CEGUI.h b/backends/platform/wince/CEgui/CEGUI.h index 4e44115476..8b2e3528e3 100644 --- a/backends/platform/wince/CEgui/CEGUI.h +++ b/backends/platform/wince/CEgui/CEGUI.h @@ -24,4 +24,3 @@  #include "Panel.h"  #include "ItemSwitch.h"  #include "PanelKeyboard.h" - diff --git a/backends/platform/wince/CEgui/PanelKeyboard.cpp b/backends/platform/wince/CEgui/PanelKeyboard.cpp index 442d7fc68c..cab02150c5 100644 --- a/backends/platform/wince/CEgui/PanelKeyboard.cpp +++ b/backends/platform/wince/CEgui/PanelKeyboard.cpp @@ -96,4 +96,3 @@ bool PanelKeyboard::action(int x, int y, bool pushed) {  }  } // End of namespace CEGUI - diff --git a/backends/platform/wince/CEkeys/CEKeys.h b/backends/platform/wince/CEkeys/CEKeys.h index ac4907704d..cf71b982f3 100644 --- a/backends/platform/wince/CEkeys/CEKeys.h +++ b/backends/platform/wince/CEkeys/CEKeys.h @@ -21,4 +21,3 @@   */  #include "EventsBuffer.h" - diff --git a/backends/platform/wince/CEkeys/EventsBuffer.cpp b/backends/platform/wince/CEkeys/EventsBuffer.cpp index d5818c3731..c993798dc8 100644 --- a/backends/platform/wince/CEkeys/EventsBuffer.cpp +++ b/backends/platform/wince/CEkeys/EventsBuffer.cpp @@ -76,5 +76,3 @@ bool EventsBuffer::simulateMouseRightClick(int x, int y, bool pushed) {  	return (SDL_PushEvent(&ev) == 0);  }  } - - diff --git a/backends/platform/wince/missing/assert.h b/backends/platform/wince/missing/assert.h index 734b8f9482..e9c871da60 100644 --- a/backends/platform/wince/missing/assert.h +++ b/backends/platform/wince/missing/assert.h @@ -6,4 +6,3 @@ void CDECL _declspec(noreturn) error(const char *s, ...);  #define assert(e) ((e) ? 0 : (::error("Assertion failed %s (%s, %d)", #e, __FILE__, __LINE__)))  #define abort() ::error("Abort (%s, %d)", __FILE__, __LINE__) - diff --git a/backends/platform/wince/missing/io.h b/backends/platform/wince/missing/io.h index de492cac68..b2cb2abd8e 100644 --- a/backends/platform/wince/missing/io.h +++ b/backends/platform/wince/missing/io.h @@ -9,4 +9,3 @@ typedef void FILE;  #endif  FILE *wce_fopen(const char *fname, const char *fmode);  #define fopen wce_fopen - diff --git a/backends/plugins/ds/ds-provider.cpp b/backends/plugins/ds/ds-provider.cpp index ff4cbe5f96..21ec157e5f 100644 --- a/backends/plugins/ds/ds-provider.cpp +++ b/backends/plugins/ds/ds-provider.cpp @@ -43,4 +43,3 @@ Plugin *DSPluginProvider::createPlugin(const Common::FSNode &node) const {  }  #endif // defined(DYNAMIC_MODULES) && defined(__DS__) - diff --git a/backends/plugins/ds/ds-provider.h b/backends/plugins/ds/ds-provider.h index df8307a52d..1d806a03bd 100644 --- a/backends/plugins/ds/ds-provider.h +++ b/backends/plugins/ds/ds-provider.h @@ -35,4 +35,3 @@ public:  #endif // BACKENDS_PLUGINS_DS_PROVIDER_H  #endif // defined(DYNAMIC_MODULES) && defined(__DS__) - diff --git a/backends/plugins/elf/arm-loader.cpp b/backends/plugins/elf/arm-loader.cpp index 12204ef68f..f8deac9c88 100644 --- a/backends/plugins/elf/arm-loader.cpp +++ b/backends/plugins/elf/arm-loader.cpp @@ -127,4 +127,3 @@ bool ARMDLObject::relocateRels(Elf32_Ehdr *ehdr, Elf32_Shdr *shdr) {  }  #endif /* defined(DYNAMIC_MODULES) && defined(USE_ELF_LOADER) && defined(ARM_TARGET) */ - diff --git a/backends/plugins/elf/arm-loader.h b/backends/plugins/elf/arm-loader.h index 60bc4f8720..598517d2ef 100644 --- a/backends/plugins/elf/arm-loader.h +++ b/backends/plugins/elf/arm-loader.h @@ -38,4 +38,3 @@ protected:  #endif /* defined(DYNAMIC_MODULES) && defined(USE_ELF_LOADER) && defined(ARM_TARGET) */  #endif /* BACKENDS_PLUGINS_ARM_LOADER_H */ - diff --git a/backends/plugins/elf/elf-loader.cpp b/backends/plugins/elf/elf-loader.cpp index 4335ea6108..d75010196a 100644 --- a/backends/plugins/elf/elf-loader.cpp +++ b/backends/plugins/elf/elf-loader.cpp @@ -489,4 +489,3 @@ void *DLObject::symbol(const char *name) {  }  #endif /* defined(DYNAMIC_MODULES) && defined(USE_ELF_LOADER) */ - diff --git a/backends/plugins/elf/elf-loader.h b/backends/plugins/elf/elf-loader.h index a953507631..58cc7714cf 100644 --- a/backends/plugins/elf/elf-loader.h +++ b/backends/plugins/elf/elf-loader.h @@ -102,4 +102,3 @@ public:  #endif /* defined(DYNAMIC_MODULES) && defined(USE_ELF_LOADER) */  #endif /* BACKENDS_PLUGINS_ELF_LOADER_H */ - diff --git a/backends/plugins/elf/elf-provider.cpp b/backends/plugins/elf/elf-provider.cpp index 84054f44cb..f637596d8d 100644 --- a/backends/plugins/elf/elf-provider.cpp +++ b/backends/plugins/elf/elf-provider.cpp @@ -207,4 +207,3 @@ bool ELFPluginProvider::isPluginFilename(const Common::FSNode &node) const {  }  #endif // defined(DYNAMIC_MODULES) && defined(USE_ELF_LOADER) - diff --git a/backends/plugins/elf/elf-provider.h b/backends/plugins/elf/elf-provider.h index 62ea930829..a966f371f6 100644 --- a/backends/plugins/elf/elf-provider.h +++ b/backends/plugins/elf/elf-provider.h @@ -92,4 +92,3 @@ protected:  #endif // defined(DYNAMIC_MODULES) && defined(USE_ELF_LOADER)  #endif /* BACKENDS_PLUGINS_ELF_PROVIDER_H */ - diff --git a/backends/plugins/elf/elf32.h b/backends/plugins/elf/elf32.h index aecedf5a37..1ecc68a8f0 100644 --- a/backends/plugins/elf/elf32.h +++ b/backends/plugins/elf/elf32.h @@ -246,4 +246,3 @@ typedef struct {  #endif // defined(DYNAMIC_MODULES) && defined(USE_ELF_LOADER)  #endif /* BACKENDS_ELF_H */ - diff --git a/backends/plugins/elf/memory-manager.cpp b/backends/plugins/elf/memory-manager.cpp index 058d818dc4..47b77a3ec2 100644 --- a/backends/plugins/elf/memory-manager.cpp +++ b/backends/plugins/elf/memory-manager.cpp @@ -172,4 +172,3 @@ void ELFMemoryManager::deallocateFromHeap(void *ptr) {  }  #endif /* defined(DYNAMIC_MODULES) && defined(USE_ELF_LOADER) */ - diff --git a/backends/plugins/elf/mips-loader.cpp b/backends/plugins/elf/mips-loader.cpp index e043c9647f..6c0e688783 100644 --- a/backends/plugins/elf/mips-loader.cpp +++ b/backends/plugins/elf/mips-loader.cpp @@ -337,4 +337,3 @@ void MIPSDLObject::freeShortsSegment() {  }  #endif /* defined(DYNAMIC_MODULES) && defined(USE_ELF_LOADER) && defined(MIPS_TARGET) */ - diff --git a/backends/plugins/elf/mips-loader.h b/backends/plugins/elf/mips-loader.h index 3066589c9b..1103e939ce 100644 --- a/backends/plugins/elf/mips-loader.h +++ b/backends/plugins/elf/mips-loader.h @@ -58,4 +58,3 @@ public:  #endif /* defined(DYNAMIC_MODULES) && defined(USE_ELF_LOADER) && defined(MIPS_TARGET) */  #endif /* BACKENDS_PLUGINS_MIPS_LOADER_H */ - diff --git a/backends/plugins/elf/ppc-loader.cpp b/backends/plugins/elf/ppc-loader.cpp index 2f7042c682..4c9290ad5e 100644 --- a/backends/plugins/elf/ppc-loader.cpp +++ b/backends/plugins/elf/ppc-loader.cpp @@ -123,4 +123,3 @@ bool PPCDLObject::relocateRels(Elf32_Ehdr *ehdr, Elf32_Shdr *shdr) {  }  #endif /* defined(DYNAMIC_MODULES) && defined(USE_ELF_LOADER) && defined(PPC_TARGET) */ - diff --git a/backends/plugins/elf/ppc-loader.h b/backends/plugins/elf/ppc-loader.h index 9aa6c949f1..8614476a92 100644 --- a/backends/plugins/elf/ppc-loader.h +++ b/backends/plugins/elf/ppc-loader.h @@ -38,4 +38,3 @@ protected:  #endif /* defined(DYNAMIC_MODULES) && defined(USE_ELF_LOADER) && defined(PPC_TARGET) */  #endif /* BACKENDS_PLUGINS_PPC_LOADER_H */ - diff --git a/backends/plugins/elf/shorts-segment-manager.cpp b/backends/plugins/elf/shorts-segment-manager.cpp index caa328a4f2..993a538f6c 100644 --- a/backends/plugins/elf/shorts-segment-manager.cpp +++ b/backends/plugins/elf/shorts-segment-manager.cpp @@ -85,5 +85,3 @@ void ShortSegmentManager::deleteSegment(ShortSegmentManager::Segment *seg) {  }  #endif // defined(DYNAMIC_MODULES) && defined(USE_ELF_LOADER) && defined(MIPS_TARGET) - - diff --git a/backends/plugins/elf/shorts-segment-manager.h b/backends/plugins/elf/shorts-segment-manager.h index 8293d55c08..34e233a2f4 100644 --- a/backends/plugins/elf/shorts-segment-manager.h +++ b/backends/plugins/elf/shorts-segment-manager.h @@ -111,4 +111,3 @@ private:  #endif // defined(DYNAMIC_MODULES) && defined(USE_ELF_LOADER) && defined(MIPS_TARGET)  #endif /* SHORTS_SEGMENT_MANAGER_H */ - diff --git a/backends/plugins/elf/version.cpp b/backends/plugins/elf/version.cpp index 593a17fb2b..9f64870500 100644 --- a/backends/plugins/elf/version.cpp +++ b/backends/plugins/elf/version.cpp @@ -26,4 +26,3 @@  const char *gScummVMPluginBuildDate __attribute__((visibility("hidden"))) =  	__DATE__ " " __TIME__ ;  #endif - diff --git a/backends/plugins/elf/version.h b/backends/plugins/elf/version.h index 915132e8c4..1f6924028b 100644 --- a/backends/plugins/elf/version.h +++ b/backends/plugins/elf/version.h @@ -29,4 +29,3 @@ extern const char *gScummVMPluginBuildDate;  #endif  #endif - diff --git a/backends/plugins/ps2/ps2-provider.cpp b/backends/plugins/ps2/ps2-provider.cpp index 7c7409eaf9..50cddb05e0 100644 --- a/backends/plugins/ps2/ps2-provider.cpp +++ b/backends/plugins/ps2/ps2-provider.cpp @@ -41,4 +41,3 @@ Plugin *PS2PluginProvider::createPlugin(const Common::FSNode &node) const {  }  #endif // defined(DYNAMIC_MODULES) && defined(__PLAYSTATION2__) - diff --git a/backends/plugins/ps2/ps2-provider.h b/backends/plugins/ps2/ps2-provider.h index b9006b1716..f4498204b4 100644 --- a/backends/plugins/ps2/ps2-provider.h +++ b/backends/plugins/ps2/ps2-provider.h @@ -35,4 +35,3 @@ public:  #endif // BACKENDS_PLUGINS_PS2_PROVIDER_H  #endif // defined(DYNAMIC_MODULES) && defined(__PLAYSTATION2__) - diff --git a/backends/plugins/psp/psp-provider.cpp b/backends/plugins/psp/psp-provider.cpp index 0c41af24a1..1d8cad6b50 100644 --- a/backends/plugins/psp/psp-provider.cpp +++ b/backends/plugins/psp/psp-provider.cpp @@ -43,4 +43,3 @@ Plugin *PSPPluginProvider::createPlugin(const Common::FSNode &node) const {  }  #endif // defined(DYNAMIC_MODULES) && defined(__PSP__) - diff --git a/backends/plugins/psp/psp-provider.h b/backends/plugins/psp/psp-provider.h index 0cc0457740..4ace3e7f4b 100644 --- a/backends/plugins/psp/psp-provider.h +++ b/backends/plugins/psp/psp-provider.h @@ -35,4 +35,3 @@ public:  #endif // BACKENDS_PLUGINS_PSP_PROVIDER_H  #endif // defined(DYNAMIC_MODULES) && defined(__PSP__) - diff --git a/backends/plugins/wii/wii-provider.cpp b/backends/plugins/wii/wii-provider.cpp index fa85588348..f96254eabe 100644 --- a/backends/plugins/wii/wii-provider.cpp +++ b/backends/plugins/wii/wii-provider.cpp @@ -43,4 +43,3 @@ Plugin *WiiPluginProvider::createPlugin(const Common::FSNode &node) const {  }  #endif // defined(DYNAMIC_MODULES) && defined(__WII__) - diff --git a/backends/plugins/wii/wii-provider.h b/backends/plugins/wii/wii-provider.h index 573a8e7e59..fb847e1024 100644 --- a/backends/plugins/wii/wii-provider.h +++ b/backends/plugins/wii/wii-provider.h @@ -35,4 +35,3 @@ public:  #endif // BACKENDS_PLUGINS_WII_PROVIDER_H  #endif // defined(DYNAMIC_MODULES) && defined(__WII__) - diff --git a/backends/saves/psp/psp-saves.cpp b/backends/saves/psp/psp-saves.cpp index 006a4e815d..65003e9fb9 100644 --- a/backends/saves/psp/psp-saves.cpp +++ b/backends/saves/psp/psp-saves.cpp @@ -78,4 +78,3 @@ void PSPSaveFileManager::checkPath(const Common::FSNode &dir) {  	PowerMan.endCriticalSection();  }  #endif - diff --git a/backends/taskbar/unity/unity-taskbar.cpp b/backends/taskbar/unity/unity-taskbar.cpp index da053734d2..f36e2bf628 100644 --- a/backends/taskbar/unity/unity-taskbar.cpp +++ b/backends/taskbar/unity/unity-taskbar.cpp @@ -8,19 +8,16 @@   * modify it under the terms of the GNU General Public License   * as published by the Free Software Foundation; either version 2   * of the License, or (at your option) any later version. - + *   * This program is distributed in the hope that it will be useful,   * but WITHOUT ANY WARRANTY; without even the implied warranty of   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the   * GNU General Public License for more details. - + *   * You should have received a copy of the GNU General Public License   * along with this program; if not, write to the Free Software   * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.   * - * $URL$ - * $Id$ - *   */  #define FORBIDDEN_SYMBOL_EXCEPTION_unistd_h diff --git a/backends/taskbar/unity/unity-taskbar.h b/backends/taskbar/unity/unity-taskbar.h index 06ea0ca769..d1d9430bcd 100644 --- a/backends/taskbar/unity/unity-taskbar.h +++ b/backends/taskbar/unity/unity-taskbar.h @@ -8,19 +8,16 @@   * modify it under the terms of the GNU General Public License   * as published by the Free Software Foundation; either version 2   * of the License, or (at your option) any later version. - + *   * This program is distributed in the hope that it will be useful,   * but WITHOUT ANY WARRANTY; without even the implied warranty of   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the   * GNU General Public License for more details. - + *   * You should have received a copy of the GNU General Public License   * along with this program; if not, write to the Free Software   * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.   * - * $URL$ - * $Id$ - *   */  #ifndef BACKEND_UNITY_TASKBAR_H diff --git a/backends/taskbar/win32/mingw-compat.h b/backends/taskbar/win32/mingw-compat.h index 30ce818141..55105407c6 100644 --- a/backends/taskbar/win32/mingw-compat.h +++ b/backends/taskbar/win32/mingw-compat.h @@ -8,19 +8,16 @@   * modify it under the terms of the GNU General Public License   * as published by the Free Software Foundation; either version 2   * of the License, or (at your option) any later version. - + *   * This program is distributed in the hope that it will be useful,   * but WITHOUT ANY WARRANTY; without even the implied warranty of   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the   * GNU General Public License for more details. - + *   * You should have received a copy of the GNU General Public License   * along with this program; if not, write to the Free Software   * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.   * - * $URL$ - * $Id$ - *   */  // TODO: Remove header when the latest changes to the Windows SDK have been integrated into MingW diff --git a/backends/taskbar/win32/win32-taskbar.cpp b/backends/taskbar/win32/win32-taskbar.cpp index 04889f3dd7..046ddb1cd0 100644 --- a/backends/taskbar/win32/win32-taskbar.cpp +++ b/backends/taskbar/win32/win32-taskbar.cpp @@ -8,19 +8,16 @@   * modify it under the terms of the GNU General Public License   * as published by the Free Software Foundation; either version 2   * of the License, or (at your option) any later version. - + *   * This program is distributed in the hope that it will be useful,   * but WITHOUT ANY WARRANTY; without even the implied warranty of   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the   * GNU General Public License for more details. - + *   * You should have received a copy of the GNU General Public License   * along with this program; if not, write to the Free Software   * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.   * - * $URL$ - * $Id$ - *   */  // We cannot use common/scummsys.h directly as it will include @@ -320,6 +317,15 @@ void Win32TaskbarManager::addRecent(const Common::String &name, const Common::St  	}  } +void Win32TaskbarManager::notifyError() { +	setProgressState(Common::TaskbarManager::kTaskbarError); +	setProgressValue(1, 1); +} + +void Win32TaskbarManager::clearError() { +	setProgressState(kTaskbarNoProgress); +} +  Common::String Win32TaskbarManager::getIconPath(Common::String target) {  	// We first try to look for a iconspath configuration variable then  	// fallback to the extra path diff --git a/backends/taskbar/win32/win32-taskbar.h b/backends/taskbar/win32/win32-taskbar.h index c9d1761017..36415c1c57 100644 --- a/backends/taskbar/win32/win32-taskbar.h +++ b/backends/taskbar/win32/win32-taskbar.h @@ -8,19 +8,16 @@   * modify it under the terms of the GNU General Public License   * as published by the Free Software Foundation; either version 2   * of the License, or (at your option) any later version. - + *   * This program is distributed in the hope that it will be useful,   * but WITHOUT ANY WARRANTY; without even the implied warranty of   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the   * GNU General Public License for more details. - + *   * You should have received a copy of the GNU General Public License   * along with this program; if not, write to the Free Software   * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.   * - * $URL$ - * $Id$ - *   */  #ifndef BACKEND_WIN32_TASKBAR_H @@ -43,6 +40,8 @@ public:  	virtual void setProgressState(TaskbarProgressState state);  	virtual void setCount(int count);  	virtual void addRecent(const Common::String &name, const Common::String &description); +	virtual void notifyError(); +	virtual void clearError();  private:  	ITaskbarList3 *_taskbar; diff --git a/backends/timer/bada/timer.cpp b/backends/timer/bada/timer.cpp new file mode 100755 index 0000000000..8f5620401f --- /dev/null +++ b/backends/timer/bada/timer.cpp @@ -0,0 +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) {
 +		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 new file mode 100755 index 0000000000..04ca771c26 --- /dev/null +++ b/backends/timer/bada/timer.h @@ -0,0 +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
 diff --git a/backends/timer/default/default-timer.cpp b/backends/timer/default/default-timer.cpp index 8480fcc7ee..e1aadb62b8 100644 --- a/backends/timer/default/default-timer.cpp +++ b/backends/timer/default/default-timer.cpp @@ -24,10 +24,10 @@  #include "common/util.h"  #include "common/system.h" -  struct TimerSlot {  	Common::TimerManager::TimerProc callback;  	void *refCon; +	Common::String id;  	uint32 interval;	// in microseconds  	uint32 nextFireTime;	// in milliseconds @@ -109,13 +109,28 @@ void DefaultTimerManager::handler() {  	}  } -bool DefaultTimerManager::installTimerProc(TimerProc callback, int32 interval, void *refCon) { +bool DefaultTimerManager::installTimerProc(TimerProc callback, int32 interval, void *refCon, const Common::String &id) {  	assert(interval > 0);  	Common::StackLock lock(_mutex); +	if (_callbacks.contains(id)) { +		if (_callbacks[id] != callback) { +			error("Different callbacks are referred by same name (%s)", id.c_str()); +		} +	} +	TimerSlotMap::const_iterator i; + +	for (i = _callbacks.begin(); i != _callbacks.end(); ++i) { +		if (i->_value == callback) { +			error("Same callback is referred by different names (%s vs %s)", i->_key.c_str(), id.c_str()); +		} +	} +	_callbacks[id] = callback; +  	TimerSlot *slot = new TimerSlot;  	slot->callback = callback;  	slot->refCon = refCon; +	slot->id = id;  	slot->interval = interval;  	slot->nextFireTime = g_system->getMillis() + interval / 1000;  	slot->nextFireTimeMicro = interval % 1000; @@ -146,4 +161,21 @@ void DefaultTimerManager::removeTimerProc(TimerProc callback) {  			slot = slot->next;  		}  	} + +	// 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. +	// +	// Another issues occurs when one plays a game with ALSA as music driver, +	// does RTL and starts a different engine game with ALSA as music driver. +	// In this case the MPU401 code will add different timer procs with the +	// same name, resulting in two different callbacks added with the same +	// name and causing installTimerProc to error out. +	// A good test case is running a SCUMM with ALSA output and then a KYRA +	// game for example. +	for (TimerSlotMap::iterator i = _callbacks.begin(), end = _callbacks.end(); i != end; ++i) { +		if (i->_value == callback) +			_callbacks.erase(i); +	}  } diff --git a/backends/timer/default/default-timer.h b/backends/timer/default/default-timer.h index 66d2e3b091..e5a9dada79 100644 --- a/backends/timer/default/default-timer.h +++ b/backends/timer/default/default-timer.h @@ -22,6 +22,8 @@  #ifndef BACKENDS_TIMER_DEFAULT_H  #define BACKENDS_TIMER_DEFAULT_H +#include "common/str.h" +#include "common/hash-str.h"  #include "common/timer.h"  #include "common/mutex.h" @@ -29,14 +31,17 @@ struct TimerSlot;  class DefaultTimerManager : public Common::TimerManager {  private: +	typedef Common::HashMap<Common::String, TimerProc, Common::IgnoreCase_Hash, Common::IgnoreCase_EqualTo> TimerSlotMap; +  	Common::Mutex _mutex;  	void *_timerHandler;  	TimerSlot *_head; +	TimerSlotMap _callbacks;  public:  	DefaultTimerManager();  	virtual ~DefaultTimerManager(); -	virtual bool installTimerProc(TimerProc proc, int32 interval, void *refCon); +	virtual bool installTimerProc(TimerProc proc, int32 interval, void *refCon, const Common::String &id);  	virtual void removeTimerProc(TimerProc proc);  	/** diff --git a/backends/updates/macosx/macosx-updates.h b/backends/updates/macosx/macosx-updates.h new file mode 100644 index 0000000000..8c9ac1f743 --- /dev/null +++ b/backends/updates/macosx/macosx-updates.h @@ -0,0 +1,48 @@ +/* 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_UPDATES_MACOSX_H +#define BACKENDS_UPDATES_MACOSX_H + +#include "common/scummsys.h" + +#if defined(MACOSX) && defined(USE_SPARKLE) + +#include "common/updates.h" + +class MacOSXUpdateManager : public Common::UpdateManager { +public: +	MacOSXUpdateManager(); +	virtual ~MacOSXUpdateManager(); + +	virtual void checkForUpdates(); + +	virtual void setAutomaticallyChecksForUpdates(UpdateState state); +	virtual UpdateState getAutomaticallyChecksForUpdates(); + +	virtual void setUpdateCheckInterval(UpdateInterval interval); +	virtual UpdateInterval getUpdateCheckInterval(); +}; + +#endif + +#endif // BACKENDS_UPDATES_MACOSX_H diff --git a/backends/updates/macosx/macosx-updates.mm b/backends/updates/macosx/macosx-updates.mm new file mode 100644 index 0000000000..741e89891c --- /dev/null +++ b/backends/updates/macosx/macosx-updates.mm @@ -0,0 +1,127 @@ +/* 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. + * + */ + +// Disable symbol overrides so that we can use system headers. +#define FORBIDDEN_SYMBOL_ALLOW_ALL + +#include "backends/updates/macosx/macosx-updates.h" + +#ifdef USE_SPARKLE +#include "common/translation.h" + +#include <Cocoa/Cocoa.h> +#include <Sparkle/Sparkle.h> + +SUUpdater *sparkleUpdater; + +/** + * Sparkle is a software update framework for Mac OS X which uses appcasts for + * release information. Appcasts are RSS-like XML feeds which contain information + * about the most current version at the time. If a new version is available, the + * user is presented the release-notes/changes/fixes and is asked if he wants to + * update, and if yes the Sparkle framework downloads a signed update package + * from the server and automatically installs and restarts the software. + * More detailed information is available at the following address: + * http://sparkle.andymatuschak.org/ + * + */ +MacOSXUpdateManager::MacOSXUpdateManager() { +	NSMenuItem *menuItem = [[NSApp mainMenu] itemAtIndex:0]; +	NSMenu *applicationMenu = [menuItem submenu]; + +	// Init Sparkle +	sparkleUpdater = [SUUpdater sharedUpdater]; + +	NSBundle* mainBundle = [NSBundle mainBundle]; + +	NSString* feedbackURL = [mainBundle objectForInfoDictionaryKey:@"SUFeedURL"]; + +	// Set appcast URL +	[sparkleUpdater setFeedURL:[NSURL URLWithString:feedbackURL]]; + +	// Get current encoding +	NSStringEncoding stringEncoding = CFStringConvertEncodingToNSStringEncoding(CFStringConvertIANACharSetNameToEncoding((CFStringRef)[NSString stringWithCString:(TransMan.getCurrentCharset()).c_str() encoding:NSASCIIStringEncoding])); + +	// Add "Check for Updates..." menu item +	NSMenuItem *updateMenuItem = [applicationMenu insertItemWithTitle:[NSString stringWithCString:_("Check for Updates...") encoding:stringEncoding] action:@selector(checkForUpdates:) keyEquivalent:@"" atIndex:1]; + +	// Set the target of the new menu item +	[updateMenuItem setTarget:sparkleUpdater]; + +	// Finally give up our references to the objects +	[menuItem release]; + +	// Enable automatic update checking once a day (alternatively use +	// checkForUpdates() here to check for updates on every startup) +	// TODO: Should be removed when an update settings gui is implemented +	setAutomaticallyChecksForUpdates(kUpdateStateEnabled); +	setUpdateCheckInterval(kUpdateIntervalOneDay); +} + +MacOSXUpdateManager::~MacOSXUpdateManager() { +	[sparkleUpdater release]; +} + +void MacOSXUpdateManager::checkForUpdates() { +	[sparkleUpdater checkForUpdatesInBackground]; +} + +void MacOSXUpdateManager::setAutomaticallyChecksForUpdates(UpdateManager::UpdateState state) { +	if (state == kUpdateStateNotSupported) +		return; + +	[sparkleUpdater setAutomaticallyChecksForUpdates:(state == kUpdateStateEnabled ? YES : NO)]; +} + +Common::UpdateManager::UpdateState MacOSXUpdateManager::getAutomaticallyChecksForUpdates() { +	if ([sparkleUpdater automaticallyChecksForUpdates]) +		return kUpdateStateEnabled; +	else +		return kUpdateStateDisabled; +} + +void MacOSXUpdateManager::setUpdateCheckInterval(UpdateInterval interval) { +	if (interval == kUpdateIntervalNotSupported) +		return; + +	[sparkleUpdater setUpdateCheckInterval:(NSTimeInterval)interval]; +} + +Common::UpdateManager::UpdateInterval MacOSXUpdateManager::getUpdateCheckInterval() { +	// This is kind of a hack but necessary, as the value stored by Sparkle +	// might have been changed outside of ScummVM (in which case we return the +	// default interval of one day) + +	UpdateInterval updateInterval = (UpdateInterval)[sparkleUpdater updateCheckInterval]; +	switch (updateInterval) { +	case kUpdateIntervalOneDay: +	case kUpdateIntervalOneWeek: +	case kUpdateIntervalOneMonth: +		return updateInterval; + +	default: +		// Return the default value (one day) +		return kUpdateIntervalOneDay; +	} +} + +#endif diff --git a/backends/vkeybd/virtual-keyboard.cpp b/backends/vkeybd/virtual-keyboard.cpp index afdb800562..1dada06951 100644 --- a/backends/vkeybd/virtual-keyboard.cpp +++ b/backends/vkeybd/virtual-keyboard.cpp @@ -417,4 +417,3 @@ bool VirtualKeyboard::KeyPressQueue::hasStringChanged() {  } // End of namespace Common  #endif // #ifdef ENABLE_VKEYBD - | 
