diff options
Diffstat (limited to 'backends')
369 files changed, 8135 insertions, 2678 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..b4e106b790 100644 --- a/backends/events/gph/gph-events.cpp +++ b/backends/events/gph/gph-events.cpp @@ -42,167 +42,141 @@ #define JOY_YAXIS 1 /* Quick default button states for modifiers. */ -int BUTTON_STATE_L = false; +int BUTTON_STATE_L = false; #if defined(CAANOO) - /* Caanoo: Main Joystick Button Mappings */ - /* The Caanoo has an analogue stick so no digital DPAD */ - enum { - /* Joystick Buttons */ - BUTTON_A = 0, - BUTTON_X = 1, - BUTTON_B = 2, - BUTTON_Y = 3, - BUTTON_L = 4, - BUTTON_R = 5, - BUTTON_HOME = 6, // Home - BUTTON_HOLD = 7, // Hold (on Power) - BUTTON_HELP = 8, // Help I - BUTTON_HELP2 = 9, // Help II - BUTTON_CLICK = 10 // Stick Click - }; - - enum { - /* Unused Joystick Buttons on the Caanoo */ - BUTTON_VOLUP = 51, - BUTTON_VOLDOWN = 52, - BUTTON_UP = 53, - BUTTON_UPLEFT = 54, - BUTTON_LEFT = 55, - BUTTON_DOWNLEFT = 56, - BUTTON_DOWN = 57, - BUTTON_DOWNRIGHT = 58, - BUTTON_RIGHT = 59, - BUTTON_UPRIGHT = 60, - BUTTON_MENU = 61, - BUTTON_SELECT = 62 - }; +/* Caanoo: Main Joystick Button Mappings */ +/* The Caanoo has an analogue stick so no digital DPAD */ +enum { + /* Joystick Buttons */ + BUTTON_A = 0, + BUTTON_X = 1, + BUTTON_B = 2, + BUTTON_Y = 3, + BUTTON_L = 4, + BUTTON_R = 5, + BUTTON_HOME = 6, // Home + BUTTON_HOLD = 7, // Hold (on Power) + BUTTON_HELP = 8, // Help I + BUTTON_HELP2 = 9, // Help II + BUTTON_CLICK = 10 // Stick Click +}; -#endif +enum { + /* Unused Joystick Buttons on the Caanoo */ + BUTTON_VOLUP = 51, + BUTTON_VOLDOWN = 52, + BUTTON_UP = 53, + BUTTON_UPLEFT = 54, + BUTTON_LEFT = 55, + BUTTON_DOWNLEFT = 56, + BUTTON_DOWN = 57, + BUTTON_DOWNRIGHT = 58, + BUTTON_RIGHT = 59, + BUTTON_UPRIGHT = 60, + BUTTON_MENU = 61, + BUTTON_SELECT = 62 +}; -#if defined(GP2XWIZ) - - /* Wiz: Main Joystick Mappings */ - enum { - /* DPAD */ - BUTTON_UP = 0, - BUTTON_UPLEFT = 1, - BUTTON_LEFT = 2, - BUTTON_DOWNLEFT = 3, - BUTTON_DOWN = 4, - BUTTON_DOWNRIGHT = 5, - BUTTON_RIGHT = 6, - BUTTON_UPRIGHT = 7, - /* Joystick Buttons */ - BUTTON_MENU = 8, - BUTTON_SELECT = 9, - BUTTON_L = 10, - BUTTON_R = 11, - BUTTON_A = 12, - BUTTON_B = 13, - BUTTON_X = 14, - BUTTON_Y = 15, - BUTTON_VOLUP = 16, - BUTTON_VOLDOWN = 17 - }; - - enum { - /* Unused Joystick Buttons on the Wiz */ - BUTTON_HOME = 51, - BUTTON_HOLD = 52, - BUTTON_CLICK = 53, - BUTTON_HELP = 54, - BUTTON_HELP2 = 55 - }; +#elif defined(GP2XWIZ) -#endif +/* Wiz: Main Joystick Mappings */ +enum { + /* DPAD */ + BUTTON_UP = 0, + BUTTON_UPLEFT = 1, + BUTTON_LEFT = 2, + BUTTON_DOWNLEFT = 3, + BUTTON_DOWN = 4, + BUTTON_DOWNRIGHT = 5, + BUTTON_RIGHT = 6, + BUTTON_UPRIGHT = 7, + /* Joystick Buttons */ + BUTTON_MENU = 8, + BUTTON_SELECT = 9, + BUTTON_L = 10, + BUTTON_R = 11, + BUTTON_A = 12, + BUTTON_B = 13, + BUTTON_X = 14, + BUTTON_Y = 15, + BUTTON_VOLUP = 16, + BUTTON_VOLDOWN = 17 +}; -#if defined(GP2X) +enum { + /* Unused Joystick Buttons on the Wiz */ + BUTTON_HOME = 51, + BUTTON_HOLD = 52, + BUTTON_CLICK = 53, + BUTTON_HELP = 54, + BUTTON_HELP2 = 55 +}; + +#elif defined(GP2X) enum { /* DPAD/Stick */ - BUTTON_UP = 0, - BUTTON_UPLEFT = 1, - BUTTON_LEFT = 2, - BUTTON_DOWNLEFT = 3, - BUTTON_DOWN = 4, - BUTTON_DOWNRIGHT = 5, - BUTTON_RIGHT = 6, - BUTTON_UPRIGHT = 7, + BUTTON_UP = 0, + BUTTON_UPLEFT = 1, + BUTTON_LEFT = 2, + BUTTON_DOWNLEFT = 3, + BUTTON_DOWN = 4, + BUTTON_DOWNRIGHT = 5, + BUTTON_RIGHT = 6, + BUTTON_UPRIGHT = 7, /* Joystick Buttons */ - BUTTON_MENU = 8, // Start on F100 GP2X - BUTTON_SELECT = 9, - BUTTON_L = 10, - BUTTON_R = 11, - BUTTON_A = 12, - BUTTON_B = 13, - BUTTON_X = 14, - BUTTON_Y = 15, - BUTTON_VOLUP = 16, - BUTTON_VOLDOWN = 17, - BUTTON_CLICK = 18 + BUTTON_MENU = 8, // Start on F100 GP2X + BUTTON_SELECT = 9, + BUTTON_L = 10, + BUTTON_R = 11, + BUTTON_A = 12, + BUTTON_B = 13, + BUTTON_X = 14, + BUTTON_Y = 15, + BUTTON_VOLUP = 16, + BUTTON_VOLDOWN = 17, + BUTTON_CLICK = 18 }; enum { /* Unused Joystick Buttons on the GP2X */ - BUTTON_HOME = 51, - BUTTON_HOLD = 52, - BUTTON_HELP = 53, - BUTTON_HELP2 = 54 + BUTTON_HOME = 51, + BUTTON_HOLD = 52, + BUTTON_HELP = 53, + BUTTON_HELP2 = 54 }; #endif enum { /* Touchscreen TapMode */ - TAPMODE_LEFT = 0, - TAPMODE_RIGHT = 1, - TAPMODE_HOVER = 2 + TAPMODE_LEFT = 0, + TAPMODE_RIGHT = 1, + TAPMODE_HOVER = 2 }; GPHEventSource::GPHEventSource() - : _buttonStateL(false){ + : _buttonStateL(false) { } -//void GPHEventSource::fillMouseEvent(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; -// } else { -// event.mouse.x = x; -// event.mouse.y = y; -// } -// -// // Update the "keyboard mouse" coords -// _km.x = x; -// _km.y = y; -// -// // Adjust for the screen scaling -// if (!_overlayVisible) { -// event.mouse.x /= _videoMode.scaleFactor; -// event.mouse.y /= _videoMode.scaleFactor; -// if (_videoMode.aspectRatioCorrection) -// event.mouse.y = aspect2Real(event.mouse.y); -// } -//} - void GPHEventSource::moveStick() { bool stickBtn[32]; memcpy(stickBtn, _stickBtn, sizeof(stickBtn)); - if ((stickBtn[0])||(stickBtn[2])||(stickBtn[4])||(stickBtn[6])) + if ((stickBtn[0]) || (stickBtn[2]) || (stickBtn[4]) || (stickBtn[6])) stickBtn[1] = stickBtn[3] = stickBtn[5] = stickBtn[7] = 0; - if ((stickBtn[1])||(stickBtn[2])||(stickBtn[3])) { - if (_km.x_down_count!=2) { + if ((stickBtn[1]) || (stickBtn[2]) || (stickBtn[3])) { + if (_km.x_down_count != 2) { _km.x_vel = -1; _km.x_down_count = 1; } else _km.x_vel = -4; - } else if ((stickBtn[5])||(stickBtn[6])||(stickBtn[7])) { - if (_km.x_down_count!=2) { + } else if ((stickBtn[5]) || (stickBtn[6]) || (stickBtn[7])) { + if (_km.x_down_count != 2) { _km.x_vel = 1; _km.x_down_count = 1; } else @@ -212,14 +186,14 @@ void GPHEventSource::moveStick() { _km.x_down_count = 0; } - if ((stickBtn[0])||(stickBtn[1])||(stickBtn[7])) { - if (_km.y_down_count!=2) { + if ((stickBtn[0]) || (stickBtn[1]) || (stickBtn[7])) { + if (_km.y_down_count != 2) { _km.y_vel = -1; _km.y_down_count = 1; } else _km.y_vel = -4; - } else if ((stickBtn[3])||(stickBtn[4])||(stickBtn[5])) { - if (_km.y_down_count!=2) { + } else if ((stickBtn[3]) || (stickBtn[4]) || (stickBtn[5])) { + if (_km.y_down_count != 2) { _km.y_vel = 1; _km.y_down_count = 1; } else @@ -233,7 +207,7 @@ void GPHEventSource::moveStick() { /* Custom handleMouseButtonDown/handleMouseButtonUp to deal with 'Tap Mode' for the touchscreen */ bool GPHEventSource::handleMouseButtonDown(SDL_Event &ev, Common::Event &event) { - if (ev.button.button == SDL_BUTTON_LEFT){ + if (ev.button.button == SDL_BUTTON_LEFT) { if (BUTTON_STATE_L == true) /* BUTTON_STATE_L = Left Trigger Held, force Right Click */ event.type = Common::EVENT_RBUTTONDOWN; else if (GPH::tapmodeLevel == TAPMODE_LEFT) /* TAPMODE_LEFT = Left Click Tap Mode */ @@ -244,8 +218,7 @@ bool GPHEventSource::handleMouseButtonDown(SDL_Event &ev, Common::Event &event) event.type = Common::EVENT_MOUSEMOVE; else event.type = Common::EVENT_LBUTTONDOWN; /* For normal mice etc. */ - } - else if (ev.button.button == SDL_BUTTON_RIGHT) + } else if (ev.button.button == SDL_BUTTON_RIGHT) event.type = Common::EVENT_RBUTTONDOWN; #if defined(SDL_BUTTON_WHEELUP) && defined(SDL_BUTTON_WHEELDOWN) else if (ev.button.button == SDL_BUTTON_WHEELUP) @@ -260,13 +233,13 @@ 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; } bool GPHEventSource::handleMouseButtonUp(SDL_Event &ev, Common::Event &event) { - if (ev.button.button == SDL_BUTTON_LEFT){ + if (ev.button.button == SDL_BUTTON_LEFT) { if (BUTTON_STATE_L == true) /* BUTTON_STATE_L = Left Trigger Held, force Right Click */ event.type = Common::EVENT_RBUTTONUP; else if (GPH::tapmodeLevel == TAPMODE_LEFT) /* TAPMODE_LEFT = Left Click Tap Mode */ @@ -277,8 +250,7 @@ bool GPHEventSource::handleMouseButtonUp(SDL_Event &ev, Common::Event &event) { event.type = Common::EVENT_MOUSEMOVE; else event.type = Common::EVENT_LBUTTONUP; /* For normal mice etc. */ - } - else if (ev.button.button == SDL_BUTTON_RIGHT) + } else if (ev.button.button == SDL_BUTTON_RIGHT) event.type = Common::EVENT_RBUTTONUP; #if defined(SDL_BUTTON_MIDDLE) else if (ev.button.button == SDL_BUTTON_MIDDLE) @@ -287,7 +259,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 +282,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; @@ -354,8 +326,8 @@ bool GPHEventSource::handleJoyButtonDown(SDL_Event &ev, Common::Event &event) { if (BUTTON_STATE_L == true) { event.type = Common::EVENT_PREDICTIVE_DIALOG; } else { - event.kbd.keycode = Common::KEYCODE_PERIOD; - event.kbd.ascii = mapKey(SDLK_PERIOD, ev.key.keysym.mod, 0); + event.kbd.keycode = Common::KEYCODE_PERIOD; + event.kbd.ascii = mapKey(SDLK_PERIOD, ev.key.keysym.mod, 0); } break; case BUTTON_Y: @@ -433,16 +405,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; @@ -500,7 +472,7 @@ bool GPHEventSource::handleJoyButtonUp(SDL_Event &ev, Common::Event &event) { return true; } -bool GPHEventSource::remapKey(SDL_Event &ev,Common::Event &event) { +bool GPHEventSource::remapKey(SDL_Event &ev, Common::Event &event) { return 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/maemosdl/maemosdl-events.cpp b/backends/events/maemosdl/maemosdl-events.cpp new file mode 100644 index 0000000000..32d5cfb5ac --- /dev/null +++ b/backends/events/maemosdl/maemosdl-events.cpp @@ -0,0 +1,155 @@ +/* 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(MAEMO) + +#include "common/scummsys.h" + +#include "backends/events/maemosdl/maemosdl-events.h" +#include "common/translation.h" + +namespace Maemo { + +MaemoSdlEventSource::MaemoSdlEventSource() : SdlEventSource(), _clickEnabled(true) { + +} + +bool MaemoSdlEventSource::remapKey(SDL_Event &ev, Common::Event &event) { + + Model model = Model(((OSystem_SDL_Maemo *)g_system)->getModel()); + debug(10, "Model: %s %u %s %s", model.hwId, model.modelType, model.hwAlias, model.hwKeyboard ? "true" : "false"); + + // List of special N810 keys: + // SDLK_F4 -> menu + // SDLK_F5 -> home + // SDLK_F6 -> fullscreen + // SDLK_F7 -> zoom + + // SDLK_F8 -> zoom - + + switch (ev.type) { + case SDL_KEYDOWN:{ + if (ev.key.keysym.sym == SDLK_F4) { + event.type = Common::EVENT_MAINMENU; + debug(9, "remapping to main menu"); + return true; + } else if (ev.key.keysym.sym == SDLK_F6) { + if (!model.hwKeyboard) { + event.type = Common::EVENT_KEYDOWN; + event.kbd.keycode = Common::KEYCODE_F7; + event.kbd.ascii = Common::ASCII_F7; + event.kbd.flags = 0; + debug(9, "remapping to F7 down (virtual keyboard)"); + return true; + } else { + // handled in keyup + } + } else if (ev.key.keysym.sym == SDLK_F7) { + event.type = Common::EVENT_RBUTTONDOWN; + processMouseEvent(event, _km.x, _km.y); + debug(9, "remapping to right click down"); + return true; + } else if (ev.key.keysym.sym == SDLK_F8) { + if (ev.key.keysym.mod & KMOD_CTRL) { + event.type = Common::EVENT_KEYDOWN; + event.kbd.keycode = Common::KEYCODE_F7; + event.kbd.ascii = Common::ASCII_F7; + event.kbd.flags = 0; + debug(9, "remapping to F7 down (virtual keyboard)"); + return true; + } else { + // handled in keyup + return true; + } + } + break; + } + case SDL_KEYUP: { + if (ev.key.keysym.sym == SDLK_F4) { + event.type = Common::EVENT_MAINMENU; + return true; + } else if (ev.key.keysym.sym == SDLK_F6) { + if (!model.hwKeyboard) { + event.type = Common::EVENT_KEYUP; + event.kbd.keycode = Common::KEYCODE_F7; + event.kbd.ascii = Common::ASCII_F7; + event.kbd.flags = 0; + debug(9, "remapping to F7 down (virtual keyboard)"); + return true; + } else { + bool currentState = ((OSystem_SDL *)g_system)->getGraphicsManager()->getFeatureState(OSystem::kFeatureFullscreenMode); + g_system->beginGFXTransaction(); + ((OSystem_SDL *)g_system)->getGraphicsManager()->setFeatureState(OSystem::kFeatureFullscreenMode, !currentState); + g_system->endGFXTransaction(); + debug(9, "remapping to full screen toggle"); + return true; + } + } else if (ev.key.keysym.sym == SDLK_F7) { + event.type = Common::EVENT_RBUTTONUP; + processMouseEvent(event, _km.x, _km.y); + debug(9, "remapping to right click up"); + return true; + } else if (ev.key.keysym.sym == SDLK_F8) { + if (ev.key.keysym.mod & KMOD_CTRL) { + event.type = Common::EVENT_KEYUP; + event.kbd.keycode = Common::KEYCODE_F7; + event.kbd.ascii = Common::ASCII_F7; + event.kbd.flags = 0; + debug(9, "remapping to F7 up (virtual keyboard)"); + return true; + } else { + _clickEnabled = !_clickEnabled; + ((SurfaceSdlGraphicsManager*) _graphicsManager)->displayMessageOnOSD( + _clickEnabled ? _("Clicking Enabled") : _("Clicking Disabled")); + debug(9, "remapping to click toggle"); + return true; + } + } + break; + } + } + // Invoke parent implementation of this method + return SdlEventSource::remapKey(ev, event); +} + +bool MaemoSdlEventSource::handleMouseButtonDown(SDL_Event &ev, Common::Event &event) { + + if (ev.button.button == SDL_BUTTON_LEFT && !_clickEnabled) { + return false; + } + + // Invoke parent implementation of this method + return SdlEventSource::handleMouseButtonDown(ev, event); +} + +bool MaemoSdlEventSource::handleMouseButtonUp(SDL_Event &ev, Common::Event &event) { + + if (ev.button.button == SDL_BUTTON_LEFT && !_clickEnabled) { + return false; + } + + // Invoke parent implementation of this method + return SdlEventSource::handleMouseButtonUp(ev, event); +} + +} // namespace Maemo + +#endif // if defined(MAEMO) diff --git a/backends/events/maemosdl/maemosdl-events.h b/backends/events/maemosdl/maemosdl-events.h new file mode 100644 index 0000000000..5c06c4bc22 --- /dev/null +++ b/backends/events/maemosdl/maemosdl-events.h @@ -0,0 +1,52 @@ +/* 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(MAEMO) + +#if !defined(BACKEND_EVENTS_SDL_MAEMO_H) && !defined(DISABLE_DEFAULT_EVENTMANAGER) +#define BACKEND_EVENTS_SDL_MAEMO_H + +#include "backends/events/sdl/sdl-events.h" +#include "backends/platform/maemo/maemo.h" +#include "backends/graphics/surfacesdl/surfacesdl-graphics.h" + +namespace Maemo { + +/** + * SDL events manager for Maemo + */ +class MaemoSdlEventSource : public SdlEventSource { +public: + MaemoSdlEventSource(); +protected: + virtual bool remapKey(SDL_Event &ev, Common::Event &event); + virtual bool handleMouseButtonDown(SDL_Event &ev, Common::Event &event); + virtual bool handleMouseButtonUp(SDL_Event &ev, Common::Event &event); + + bool _clickEnabled; +}; + +} // namespace Maemo + +#endif // include guard + +#endif // if defined(MAEMO) diff --git a/backends/events/openpandora/op-events.cpp b/backends/events/openpandora/op-events.cpp index 72bc56c95d..c1d6362fcb 100644 --- a/backends/events/openpandora/op-events.cpp +++ b/backends/events/openpandora/op-events.cpp @@ -38,23 +38,23 @@ #include "common/events.h" /* Quick default button states for modifiers. */ -int BUTTON_STATE_L = false; +int BUTTON_STATE_L = false; enum { /* Touchscreen TapMode */ - TAPMODE_LEFT = 0, - TAPMODE_RIGHT = 1, - TAPMODE_HOVER = 2 + TAPMODE_LEFT = 0, + TAPMODE_RIGHT = 1, + TAPMODE_HOVER = 2 }; OPEventSource::OPEventSource() - : _buttonStateL(false){ + : _buttonStateL(false) { } /* Custom handleMouseButtonDown/handleMouseButtonUp to deal with 'Tap Mode' for the touchscreen */ bool OPEventSource::handleMouseButtonDown(SDL_Event &ev, Common::Event &event) { - if (ev.button.button == SDL_BUTTON_LEFT){ + if (ev.button.button == SDL_BUTTON_LEFT) { if (BUTTON_STATE_L == true) /* BUTTON_STATE_L = Left Trigger Held, force Right Click */ event.type = Common::EVENT_RBUTTONDOWN; else if (OP::tapmodeLevel == TAPMODE_LEFT) /* TAPMODE_LEFT = Left Click Tap Mode */ @@ -65,8 +65,7 @@ bool OPEventSource::handleMouseButtonDown(SDL_Event &ev, Common::Event &event) { event.type = Common::EVENT_MOUSEMOVE; else event.type = Common::EVENT_LBUTTONDOWN; /* For normal mice etc. */ - } - else if (ev.button.button == SDL_BUTTON_RIGHT) + } else if (ev.button.button == SDL_BUTTON_RIGHT) event.type = Common::EVENT_RBUTTONDOWN; #if defined(SDL_BUTTON_WHEELUP) && defined(SDL_BUTTON_WHEELDOWN) else if (ev.button.button == SDL_BUTTON_WHEELUP) @@ -81,13 +80,13 @@ 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; } bool OPEventSource::handleMouseButtonUp(SDL_Event &ev, Common::Event &event) { - if (ev.button.button == SDL_BUTTON_LEFT){ + if (ev.button.button == SDL_BUTTON_LEFT) { if (BUTTON_STATE_L == true) /* BUTTON_STATE_L = Left Trigger Held, force Right Click */ event.type = Common::EVENT_RBUTTONUP; else if (OP::tapmodeLevel == TAPMODE_LEFT) /* TAPMODE_LEFT = Left Click Tap Mode */ @@ -98,8 +97,7 @@ bool OPEventSource::handleMouseButtonUp(SDL_Event &ev, Common::Event &event) { event.type = Common::EVENT_MOUSEMOVE; else event.type = Common::EVENT_LBUTTONUP; /* For normal mice etc. */ - } - else if (ev.button.button == SDL_BUTTON_RIGHT) + } else if (ev.button.button == SDL_BUTTON_RIGHT) event.type = Common::EVENT_RBUTTONUP; #if defined(SDL_BUTTON_MIDDLE) else if (ev.button.button == SDL_BUTTON_MIDDLE) @@ -108,7 +106,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 +121,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 +157,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 new file mode 100644 index 0000000000..723942af11 --- /dev/null +++ b/backends/events/ps3sdl/ps3sdl-events.cpp @@ -0,0 +1,163 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "common/scummsys.h" + +#if defined(PLAYSTATION3) + +#include "backends/events/ps3sdl/ps3sdl-events.h" +#include "backends/platform/sdl/sdl.h" +#include "engines/engine.h" + +#include "common/util.h" +#include "common/events.h" + +enum { + BTN_LEFT = 0, + BTN_DOWN = 1, + BTN_RIGHT = 2, + BTN_UP = 3, + + BTN_START = 4, + BTN_R3 = 5, + BTN_L3 = 6, + BTN_SELECT = 7, + + BTN_SQUARE = 8, + BTN_CROSS = 9, + BTN_CIRCLE = 10, + BTN_TRIANGLE = 11, + + BTN_R1 = 12, + BTN_L1 = 13, + BTN_R2 = 14, + BTN_L2 = 15 +}; + +bool PS3SdlEventSource::handleJoyButtonDown(SDL_Event &ev, Common::Event &event) { + + event.kbd.flags = 0; + + switch (ev.jbutton.button) { + case BTN_CROSS: // Left mouse button + event.type = Common::EVENT_LBUTTONDOWN; + processMouseEvent(event, _km.x, _km.y); + break; + case BTN_CIRCLE: // Right mouse button + event.type = Common::EVENT_RBUTTONDOWN; + processMouseEvent(event, _km.x, _km.y); + break; + case BTN_TRIANGLE: // Game menu + event.type = Common::EVENT_KEYDOWN; + event.kbd.keycode = Common::KEYCODE_F5; + event.kbd.ascii = mapKey(SDLK_F5, (SDLMod) ev.key.keysym.mod, 0); + break; + case BTN_SELECT: // Virtual keyboard + event.type = Common::EVENT_KEYDOWN; + event.kbd.keycode = Common::KEYCODE_F7; + event.kbd.ascii = mapKey(SDLK_F7, (SDLMod) ev.key.keysym.mod, 0); + break; + case BTN_SQUARE: // Escape + event.type = Common::EVENT_KEYDOWN; + event.kbd.keycode = Common::KEYCODE_ESCAPE; + event.kbd.ascii = mapKey(SDLK_ESCAPE, (SDLMod) ev.key.keysym.mod, 0); + break; + case BTN_L1: // Predictive input dialog + event.type = Common::EVENT_PREDICTIVE_DIALOG; + break; + case BTN_START: // ScummVM in game menu + event.type = Common::EVENT_MAINMENU; + break; + } + return true; +} + +bool PS3SdlEventSource::handleJoyButtonUp(SDL_Event &ev, Common::Event &event) { + + event.kbd.flags = 0; + + switch (ev.jbutton.button) { + case BTN_CROSS: // Left mouse button + event.type = Common::EVENT_LBUTTONUP; + processMouseEvent(event, _km.x, _km.y); + break; + case BTN_CIRCLE: // Right mouse button + event.type = Common::EVENT_RBUTTONUP; + processMouseEvent(event, _km.x, _km.y); + break; + case BTN_TRIANGLE: // Game menu + event.type = Common::EVENT_KEYUP; + event.kbd.keycode = Common::KEYCODE_F5; + event.kbd.ascii = mapKey(SDLK_F5, (SDLMod) ev.key.keysym.mod, 0); + break; + case BTN_SELECT: // Virtual keyboard + event.type = Common::EVENT_KEYUP; + event.kbd.keycode = Common::KEYCODE_F7; + event.kbd.ascii = mapKey(SDLK_F7, (SDLMod) ev.key.keysym.mod, 0); + break; + case BTN_SQUARE: // Escape + event.type = Common::EVENT_KEYUP; + event.kbd.keycode = Common::KEYCODE_ESCAPE; + event.kbd.ascii = mapKey(SDLK_ESCAPE, (SDLMod) ev.key.keysym.mod, 0); + break; + } + return true; +} + +/** + * The XMB (PS3 in game menu) needs the screen buffers to be constantly flip while open. + * This pauses execution and keeps redrawing the screen until the XMB is closed. + */ +void PS3SdlEventSource::preprocessEvents(SDL_Event *event) { + if (event->type == SDL_ACTIVEEVENT) { + if (event->active.state == SDL_APPMOUSEFOCUS && !event->active.gain) { + // XMB opened + if (g_engine) + g_engine->pauseEngine(true); + + for (;;) { + if (!SDL_PollEvent(event)) { + // Locking the screen forces a full redraw + Graphics::Surface* screen = g_system->lockScreen(); + if (screen) { + g_system->unlockScreen(); + g_system->updateScreen(); + } + SDL_Delay(10); + continue; + } + if (event->type == SDL_QUIT) + return; + if (event->type != SDL_ACTIVEEVENT) + continue; + if (event->active.state == SDL_APPMOUSEFOCUS && event->active.gain) { + // XMB closed + if (g_engine) + g_engine->pauseEngine(false); + return; + } + } + } + } +} + +#endif diff --git a/backends/events/ps3sdl/ps3sdl-events.h b/backends/events/ps3sdl/ps3sdl-events.h new file mode 100644 index 0000000000..8cf2f43426 --- /dev/null +++ b/backends/events/ps3sdl/ps3sdl-events.h @@ -0,0 +1,38 @@ +/* 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(BACKEND_EVENTS_PS3_H) && !defined(DISABLE_DEFAULT_EVENTMANAGER) +#define BACKEND_EVENTS_PS3_H + +#include "backends/events/sdl/sdl-events.h" + +/** + * SDL Events manager for the PS3. + */ +class PS3SdlEventSource : public SdlEventSource { +protected: + void preprocessEvents(SDL_Event *event); + bool handleJoyButtonDown(SDL_Event &ev, Common::Event &event); + bool handleJoyButtonUp(SDL_Event &ev, Common::Event &event); +}; + +#endif /* BACKEND_EVENTS_PS3_H */ diff --git a/backends/events/sdl/sdl-events.cpp b/backends/events/sdl/sdl-events.cpp index 835d98e718..f94171646a 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(); @@ -206,7 +354,6 @@ bool SdlEventSource::pollEvent(Common::Event &event) { } SDL_Event ev; - ev.type = SDL_NOEVENT; while (SDL_PollEvent(&ev)) { preprocessEvents(&ev); if (dispatchSDLEvent(ev, event)) @@ -235,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; @@ -291,6 +436,14 @@ bool SdlEventSource::handleKeyDown(SDL_Event &ev, Common::Event &event) { event.type = Common::EVENT_QUIT; return true; } + + #ifdef WIN32 + // On Windows, also use the default Alt-F4 quit combination + if ((ev.key.keysym.mod & KMOD_ALT) && ev.key.keysym.sym == SDLK_F4) { + event.type = Common::EVENT_QUIT; + return true; + } + #endif #endif // Ctrl-u toggles mute @@ -303,8 +456,8 @@ 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.ascii = mapKey(ev.key.keysym.sym, ev.key.keysym.mod, ev.key.keysym.unicode); + 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; } @@ -347,8 +500,8 @@ 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.ascii = mapKey(ev.key.keysym.sym, ev.key.keysym.mod, ev.key.keysym.unicode); + 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 SDLModToOSystemKeyFlags(mod, event); @@ -362,7 +515,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; } @@ -385,7 +538,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; } @@ -401,7 +554,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; } @@ -409,28 +562,28 @@ 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) { case JOY_BUT_ESCAPE: event.kbd.keycode = Common::KEYCODE_ESCAPE; - event.kbd.ascii = mapKey(SDLK_ESCAPE, ev.key.keysym.mod, 0); + event.kbd.ascii = mapKey(SDLK_ESCAPE, (SDLMod)ev.key.keysym.mod, 0); break; case JOY_BUT_PERIOD: event.kbd.keycode = Common::KEYCODE_PERIOD; - event.kbd.ascii = mapKey(SDLK_PERIOD, ev.key.keysym.mod, 0); + event.kbd.ascii = mapKey(SDLK_PERIOD, (SDLMod)ev.key.keysym.mod, 0); break; case JOY_BUT_SPACE: event.kbd.keycode = Common::KEYCODE_SPACE; - event.kbd.ascii = mapKey(SDLK_SPACE, ev.key.keysym.mod, 0); + event.kbd.ascii = mapKey(SDLK_SPACE, (SDLMod)ev.key.keysym.mod, 0); break; case JOY_BUT_F5: event.kbd.keycode = Common::KEYCODE_F5; - event.kbd.ascii = mapKey(SDLK_F5, ev.key.keysym.mod, 0); + event.kbd.ascii = mapKey(SDLK_F5, (SDLMod)ev.key.keysym.mod, 0); break; } } @@ -440,28 +593,28 @@ 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) { case JOY_BUT_ESCAPE: event.kbd.keycode = Common::KEYCODE_ESCAPE; - event.kbd.ascii = mapKey(SDLK_ESCAPE, ev.key.keysym.mod, 0); + event.kbd.ascii = mapKey(SDLK_ESCAPE, (SDLMod)ev.key.keysym.mod, 0); break; case JOY_BUT_PERIOD: event.kbd.keycode = Common::KEYCODE_PERIOD; - event.kbd.ascii = mapKey(SDLK_PERIOD, ev.key.keysym.mod, 0); + event.kbd.ascii = mapKey(SDLK_PERIOD, (SDLMod)ev.key.keysym.mod, 0); break; case JOY_BUT_SPACE: event.kbd.keycode = Common::KEYCODE_SPACE; - event.kbd.ascii = mapKey(SDLK_SPACE, ev.key.keysym.mod, 0); + event.kbd.ascii = mapKey(SDLK_SPACE, (SDLMod)ev.key.keysym.mod, 0); break; case JOY_BUT_F5: event.kbd.keycode = Common::KEYCODE_F5; - event.kbd.ascii = mapKey(SDLK_F5, ev.key.keysym.mod, 0); + event.kbd.ascii = mapKey(SDLK_F5, (SDLMod)ev.key.keysym.mod, 0); break; } } @@ -511,7 +664,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..d01e51fafe 100644 --- a/backends/events/webossdl/webossdl-events.cpp +++ b/backends/events/webossdl/webossdl-events.cpp @@ -22,55 +22,17 @@ #ifdef WEBOS -// Allow use of stuff in <time.h> -#define FORBIDDEN_SYMBOL_EXCEPTION_time_h - #include "common/scummsys.h" #include "common/system.h" -#include "sys/time.h" -#include "time.h" +#include "common/str.h" +#include "common/translation.h" #include "backends/events/webossdl/webossdl-events.h" #include "gui/message.h" +#include "engines/engine.h" -// Inidicates if gesture area is pressed down or not. -static bool gestureDown = false; - -// The timestamp when screen was pressed down. -static int screenDownTime = 0; - -// The timestamp when a possible drag operation was triggered. -static int dragStartTime = 0; - -// The index of the motion pointer. -static int motionPtrIndex = -1; - -// The maximum horizontal motion during dragging (For tap recognition). -static int dragDiffX = 0; - -// The maximum vertical motion during dragging (For tap recognition). -static int dragDiffY = 0; - -// Indicates if we are in drag mode. -static bool dragging = false; - -// The current mouse position on the screen. -static int curX = 0, curY = 0; - -// The time (seconds after 1/1/1970) when program started. -static time_t programStartTime = time(0); - -/** - * Returns the number of passed milliseconds since program start. - * - * @return The number of passed milliseconds. - */ -static time_t getMillis() -{ - struct timeval tv; - gettimeofday(&tv, NULL); - return (time(0) - programStartTime) * 1000 + tv.tv_usec / 1000; -} +// PDL.h provided by the official Palm WebOS PDK. +#include <PDL.h> /** * WebOS devices only have a Shift key and a CTRL key. There is also an Alt @@ -91,7 +53,7 @@ void WebOSSdlEventSource::SDLModToOSystemKeyFlags(SDLMod mod, event.kbd.flags |= Common::KBD_CTRL; // Holding down the gesture area emulates the ALT key - if (gestureDown) + if (_gestureDown) event.kbd.flags |= Common::KBD_ALT; } @@ -106,7 +68,7 @@ void WebOSSdlEventSource::SDLModToOSystemKeyFlags(SDLMod mod, bool WebOSSdlEventSource::handleKeyDown(SDL_Event &ev, Common::Event &event) { // Handle gesture area tap. if (ev.key.keysym.sym == SDLK_WORLD_71) { - gestureDown = true; + _gestureDown = true; return true; } @@ -115,7 +77,18 @@ bool WebOSSdlEventSource::handleKeyDown(SDL_Event &ev, Common::Event &event) { // gesture tap AFTER the backward gesture event and not BEFORE (Like // WebOS 2). if (ev.key.keysym.sym == 27 || ev.key.keysym.sym == 229) { - gestureDown = false; + _gestureDown = false; + } + + // handle virtual keyboard dismiss key + if (ev.key.keysym.sym == 24) { + int gblPDKVersion = PDL_GetPDKVersion(); + // check for correct PDK Version, as this determines whether an + // OS-supplied virtual keyboard is available on this device. + if (gblPDKVersion >= 300) { + PDL_SetKeyboardState(PDL_FALSE); + return true; + } } // Call original SDL key handler. @@ -133,10 +106,21 @@ bool WebOSSdlEventSource::handleKeyDown(SDL_Event &ev, Common::Event &event) { bool WebOSSdlEventSource::handleKeyUp(SDL_Event &ev, Common::Event &event) { // Handle gesture area tap. if (ev.key.keysym.sym == SDLK_WORLD_71) { - gestureDown = false; + _gestureDown = false; return true; } + // handle virtual keyboard dismiss key + if (ev.key.keysym.sym == 24) { + int gblPDKVersion = PDL_GetPDKVersion(); + // check for correct PDK Version, as this determines whether an + // OS-supplied virtual keyboard is available on this device. + if (gblPDKVersion >= 300) { + PDL_SetKeyboardState(PDL_FALSE); + return true; + } + } + // Call original SDL key handler. return SdlEventSource::handleKeyUp(ev, event); } @@ -148,19 +132,45 @@ bool WebOSSdlEventSource::handleKeyUp(SDL_Event &ev, Common::Event &event) { * @param event The ScummVM event. * @return True if event was processed, false if not. */ -bool WebOSSdlEventSource::handleMouseButtonDown(SDL_Event &ev, Common::Event &event) { - if (motionPtrIndex == -1) { - motionPtrIndex = ev.button.which; - dragDiffX = 0; - dragDiffY = 0; - screenDownTime = getMillis(); - - // Start dragging when pressing the screen shortly after a tap. - if (getMillis() - dragStartTime < 250) { - dragging = true; +bool WebOSSdlEventSource::handleMouseButtonDown(SDL_Event &ev, + Common::Event &event) { + _dragDiffX[ev.button.which] = 0; + _dragDiffY[ev.button.which] = 0; + _fingerDown[ev.button.which] = true; + _screenDownTime[ev.button.which] = g_system->getMillis(); + + if (ev.button.which == 0) { + // Do a click when the finger lifts unless we leave the range + _doClick = true; + // Queue up dragging if auto-drag mode is on + if (_autoDragMode) + _queuedDragTime = g_system->getMillis() + QUEUED_DRAG_DELAY; + // Turn drag mode on instantly for a double-tap + else if (g_system->getMillis() - _dragStartTime < DOUBLETAP_LIMIT) { + _dragging = true; event.type = Common::EVENT_LBUTTONDOWN; - fillMouseEvent(event, curX, curY); + processMouseEvent(event, _curX, _curY); } + // If we're not in touchpad mode, move the cursor to the tap + if (!_touchpadMode) { + _curX = MIN(_screenX, MAX(0, 0 + ev.motion.x)); + _curY = MIN(_screenY, MAX(0, 0 + ev.motion.y)); + // If we're already clicking, hold it until after the move. + if (event.type == Common::EVENT_LBUTTONDOWN) { + processMouseEvent(event, _curX, _curY); + g_system->getEventManager()->pushEvent(event); + } + // Move the mouse + event.type = Common::EVENT_MOUSEMOVE; + processMouseEvent(event, _curX, _curY); + } + // Watch for a double-tap-triggered drag + _dragStartTime = g_system->getMillis(); + } else if (ev.button.which == 1) { + // Kill any queued drag event if a second finger goes down + if (_queuedDragTime > 0) + _queuedDragTime = 0; + _doClick = false; } return true; } @@ -172,54 +182,48 @@ bool WebOSSdlEventSource::handleMouseButtonDown(SDL_Event &ev, Common::Event &ev * @param event The ScummVM event. * @return True if event was processed, false if not. */ -bool WebOSSdlEventSource::handleMouseButtonUp(SDL_Event &ev, Common::Event &event) { - if (motionPtrIndex == ev.button.which) { - motionPtrIndex = -1; - - // When drag mode was active then simply send a mouse up event - if (dragging) - { +bool WebOSSdlEventSource::handleMouseButtonUp(SDL_Event &ev, + Common::Event &event) { + // Only react if the finger hasn't been virtually lifted already + if (_fingerDown[ev.button.which]) { + // No matter what, if it's the first finger that's lifted when + // we're dragging, just lift the mouse button. + if (ev.button.which == 0 && _dragging) { event.type = Common::EVENT_LBUTTONUP; - fillMouseEvent(event, curX, curY); - dragging = false; - return true; - } - - // When mouse was moved 5 pixels or less then emulate a mouse button - // click. - if (ABS(dragDiffX) < 6 && ABS(dragDiffY) < 6) - { - int duration = getMillis() - screenDownTime; - - // When screen was pressed for less than 500ms then emulate a - // left mouse click. - if (duration < 500) { + processMouseEvent(event, _curX, _curY); + _dragging = false; + } else { + // If it was the first finger and the click hasn't been + // canceled, it's a click. + if (ev.button.which == 0 && _doClick && + !_fingerDown[1] && !_fingerDown[2]) { 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(); - } - - // When screen was pressed for less than 1000ms then emulate a - // right mouse click. - else if (duration < 1000) { - event.type = Common::EVENT_RBUTTONUP; - fillMouseEvent(event, curX, curY); - g_system->getEventManager()->pushEvent(event); + if (_queuedDragTime > 0) + _queuedDragTime = 0; + } else if (ev.button.which == 1 && + _fingerDown[0] && _fingerDown[1] && !_fingerDown[2]) { + // If the first finger's down and the second taps, it's a + // right mouse click. event.type = Common::EVENT_RBUTTONDOWN; - } - - // When screen was pressed for more than 1000ms then emulate a - // middle mouse click. - else { + processMouseEvent(event, _curX, _curY); + _queuedRUpTime = g_system->getMillis() + QUEUED_RUP_DELAY; + } else if (ev.button.which == 2 && + _fingerDown[0] && _fingerDown[1]) { + // If two fingers are down and a third taps, it's a middle + // click -- but lift the second finger so it doesn't register + // as a right click. event.type = Common::EVENT_MBUTTONUP; - fillMouseEvent(event, curX, curY); + processMouseEvent(event, _curX, _curY); g_system->getEventManager()->pushEvent(event); event.type = Common::EVENT_MBUTTONDOWN; + _fingerDown[1] = false; } - } + // Officially lift the finger that was raised. + _fingerDown[ev.button.which] = false; } return true; } @@ -231,18 +235,200 @@ bool WebOSSdlEventSource::handleMouseButtonUp(SDL_Event &ev, Common::Event &even * @param event The ScummVM event. * @return True if event was processed, false if not. */ -bool WebOSSdlEventSource::handleMouseMotion(SDL_Event &ev, Common::Event &event) { - if (ev.motion.which == motionPtrIndex) { - int screenX = g_system->getWidth(); - int screenY = g_system->getHeight(); - curX = MIN(screenX, MAX(0, curX + ev.motion.xrel)); - curY = MIN(screenY, MAX(0, curY + ev.motion.yrel)); - dragDiffX += ev.motion.xrel; - dragDiffY += ev.motion.yrel; - event.type = Common::EVENT_MOUSEMOVE; - fillMouseEvent(event, curX, curY); +bool WebOSSdlEventSource::handleMouseMotion(SDL_Event &ev, + Common::Event &event) { + if (_fingerDown[ev.motion.which]) { + _dragDiffX[ev.motion.which] += ev.motion.xrel; + _dragDiffY[ev.motion.which] += ev.motion.yrel; + + switch (ev.motion.which) { + case 0: + // If our dragDiff goes too many pixels in either direction, + // kill the future click and any queued drag event. + if (_doClick && (ABS(_dragDiffX[0]) > MOUSE_DEADZONE_PIXELS || + ABS(_dragDiffY[0]) > MOUSE_DEADZONE_PIXELS)) { + _doClick = false; + if (_queuedDragTime > 0) + _queuedDragTime = 0; + } + // If only one finger is on the screen and moving, that's + // the mouse pointer. + if (!_fingerDown[1] && !_fingerDown[2]) { + if (_touchpadMode) { + _curX = MIN(_screenX, MAX(0, _curX + ev.motion.xrel)); + _curY = MIN(_screenY, MAX(0, _curY + ev.motion.yrel)); + } else { + _curX = MIN(_screenX, MAX(0, 0 + ev.motion.x)); + _curY = MIN(_screenY, MAX(0, 0 + ev.motion.y)); + } + event.type = Common::EVENT_MOUSEMOVE; + processMouseEvent(event, _curX, _curY); + } + break; + case 1: + // Check for a two-finger swipe + if (_fingerDown[0] && !_fingerDown[2]) { + // Check for a vertical swipe + if (ABS(_dragDiffY[0]) > _swipeDistY && + ABS(_dragDiffY[1]) > _swipeDistY) { + // Virtually lift fingers to prevent repeat triggers + _fingerDown[0] = _fingerDown[1] = false; + if (_dragDiffY[0] < 0 && _dragDiffY[1] < 0) { + // A swipe up triggers the keyboard, if it exists. We + // test for existance of a virtual OS keyboard by + // checking for the version of the linked PDK libs. + int gblPDKVersion = PDL_GetPDKVersion(); + if (gblPDKVersion >= 300) + PDL_SetKeyboardState(PDL_TRUE); + } else if (_dragDiffY[0] > 0 && _dragDiffY[1] > 0) { + // A swipe down triggers the menu + if (g_engine && !g_engine->isPaused()) + g_engine->openMainMenuDialog(); + } + return true; + } + // Check for a horizontal swipe + if (ABS(_dragDiffX[0]) > _swipeDistX && + ABS(_dragDiffX[1]) > _swipeDistX) { + // Virtually lift fingers to prevent repeat triggers + _fingerDown[0] = _fingerDown[1] = false; + if (_dragDiffX[0] < 0 && _dragDiffX[1] < 0) { + // A swipe left presses escape + event.type = Common::EVENT_KEYDOWN; + event.kbd.flags = 0; + event.kbd.keycode = Common::KEYCODE_ESCAPE; + event.kbd.ascii = Common::ASCII_ESCAPE; + _queuedEscapeUpTime = g_system->getMillis() + + QUEUED_KEY_DELAY; + } else if (_dragDiffX[0] > 0 && _dragDiffX[1] > 0) { + // A swipe right toggles touchpad mode + _touchpadMode = !_touchpadMode; + g_system->showMouse(_touchpadMode); + // I18N: Touchpad mode toggle status. + Common::String dialogMsg(_("Touchpad mode is now")); + dialogMsg += " "; + // I18N: Touchpad mode on or off. + dialogMsg += (_touchpadMode ? _("ON") : _("OFF")); + dialogMsg += ".\n"; + // I18N: Instructions to toggle Touchpad mode. + dialogMsg += + _("Swipe two fingers to the right to toggle."); + GUI::TimedMessageDialog dialog(dialogMsg, 1500); + dialog.runModal(); + } + return true; + } + } + break; + case 2: + // Check for a three-finger swipe + if (_fingerDown[0] && _fingerDown[1]) { + // Swipe to the right toggles Auto-drag + if (_dragDiffX[0] > _swipeDistX && + _dragDiffX[1] > _swipeDistX && + _dragDiffX[2] > _swipeDistX) { + // Virtually lift fingers to prevent repeat triggers + _fingerDown[0] = _fingerDown[1] = _fingerDown[2] = false; + // Toggle Auto-drag mode + _autoDragMode = !_autoDragMode; + // I18N: Auto-drag toggle status. + Common::String dialogMsg(_("Auto-drag mode is now")); + dialogMsg += " "; + // I18N: Auto-drag on or off. + dialogMsg += (_autoDragMode ? _("ON") : _("OFF")); + dialogMsg += ".\n"; + // I18N: Instructions to toggle auto-drag. + dialogMsg += _( + "Swipe three fingers to the right to toggle."); + GUI::TimedMessageDialog dialog(dialogMsg, 1500); + dialog.runModal(); + return true; + } else if (_dragDiffY[0] > _swipeDistY && + _dragDiffY[1] > _swipeDistY && + _dragDiffY[2] > _swipeDistY ) { + // Swipe down to emulate spacebar (pause) + // Virtually lift fingers to prevent repeat triggers + _fingerDown[0] = _fingerDown[1] = _fingerDown[2] = false; + // Press space + event.type = Common::EVENT_KEYDOWN; + event.kbd.flags = 0; + event.kbd.keycode = Common::KEYCODE_SPACE; + event.kbd.ascii = Common::ASCII_SPACE; + _queuedSpaceUpTime = g_system->getMillis() + + QUEUED_KEY_DELAY; + } + } + } } return true; } +/** + * Before calling the original SDL implementation, this method loads in + * queued events. + * + * @param event The ScummVM event + */ +bool WebOSSdlEventSource::pollEvent(Common::Event &event) { + uint32 curTime = g_system->getMillis(); + + // Event-dependent nitializations for when SDL runs its first poll. + if (_firstPoll) { + // Set the initial dimensions + calculateDimensions(); + + // Having a mouse pointer on screen when not in Touchpad mode is poor + // interface design, because the user won't know whether to tap buttons + // or drag the pointer to them. On the first poll, set the appropriate + // pointer visibility. + g_system->showMouse(_touchpadMode); + _firstPoll = false; + } + + // Run down the priority list for queued events. The built-in + // event queue runs events on the next poll, which causes many + // WebOS devices (and a few game engines) to ignore certain inputs. + // Allowing keys and clicks to stay "down" longer is enough to register + // the press. + if (_queuedEscapeUpTime != 0 && curTime >= _queuedEscapeUpTime) { + event.type = Common::EVENT_KEYUP; + event.kbd.flags = 0; + event.kbd.keycode = Common::KEYCODE_ESCAPE; + event.kbd.ascii = Common::ASCII_ESCAPE; + _queuedEscapeUpTime = 0; + return true; + } else if (_queuedSpaceUpTime != 0 && curTime >= _queuedSpaceUpTime) { + event.type = Common::EVENT_KEYUP; + event.kbd.flags = 0; + event.kbd.keycode = Common::KEYCODE_SPACE; + event.kbd.ascii = Common::ASCII_SPACE; + _queuedSpaceUpTime = 0; + return true; + } else if (_queuedRUpTime != 0 && curTime >= _queuedRUpTime) { + event.type = Common::EVENT_RBUTTONUP; + processMouseEvent(event, _curX, _curY); + _queuedRUpTime = 0; + return true; + } else if (_queuedDragTime != 0 && curTime >= _queuedDragTime) { + event.type = Common::EVENT_LBUTTONDOWN; + _dragging = true; + processMouseEvent(event, _curX, _curY); + _queuedDragTime = 0; + return true; + } + + return SdlEventSource::pollEvent(event); +} + +/** + * Sets the _screenX and _screenY variables to the effective screen dimensions, + * and alters _swipeDistX and _swipeDistY to the correct relative values. + */ +void WebOSSdlEventSource::calculateDimensions() { + _screenX = g_system->getOverlayWidth(); + _screenY = g_system->getOverlayHeight(); + _swipeDistX = _screenX * SWIPE_PERCENT_HORIZ / 100; + _swipeDistY = _screenY * SWIPE_PERCENT_VERT / 100; +} + #endif diff --git a/backends/events/webossdl/webossdl-events.h b/backends/events/webossdl/webossdl-events.h index c925132d92..a36ee535a3 100644 --- a/backends/events/webossdl/webossdl-events.h +++ b/backends/events/webossdl/webossdl-events.h @@ -29,13 +29,87 @@ * SDL events manager for WebOS */ class WebOSSdlEventSource : public SdlEventSource { +public: + enum { + DOUBLETAP_LIMIT = 400, + MAX_FINGERS = 3, + MOUSE_DEADZONE_PIXELS = 5, + QUEUED_DRAG_DELAY = 500, + QUEUED_KEY_DELAY = 250, + QUEUED_RUP_DELAY = 50, + SWIPE_PERCENT_HORIZ = 15, + SWIPE_PERCENT_VERT = 20 + }; + WebOSSdlEventSource() : + _gestureDown(false), + _dragStartTime(0), _dragging(false), + _curX(0), _curY(0), + _screenX(0), _screenY(0), + _touchpadMode(false), _autoDragMode(true), + _doClick(true), + _queuedDragTime(0), _queuedEscapeUpTime(0), _queuedSpaceUpTime(0), + _queuedRUpTime(0), + _firstPoll(true) { + for (int i = 0; i < MAX_FINGERS; i++) { + _fingerDown[i] = false; + _screenDownTime[i] = _dragDiffX[i] = _dragDiffY[i] = 0; + } + }; protected: + // Inidicates if gesture area is pressed down or not. + bool _gestureDown; + + // The timestamp when screen was pressed down for each finger. + uint32 _screenDownTime[MAX_FINGERS]; + + // The timestamp when a possible drag operation was triggered. + uint32 _dragStartTime; + + // The distance each finger traveled from touch to release. + int _dragDiffX[MAX_FINGERS], _dragDiffY[MAX_FINGERS]; + + // Indicates if we are in drag mode. + bool _dragging; + + // The current mouse position on the screen. + int _curX, _curY; + + // The current screen dimensions + int _screenX, _screenY; + + // The drag distance for linear gestures + int _swipeDistX, _swipeDistY; + + // Indicates if we're in touchpad mode or tap-to-move mode. + bool _touchpadMode; + + // Indicates if we're in automatic drag mode. + bool _autoDragMode; + + // Tracks which fingers are currently touching the screen. + bool _fingerDown[MAX_FINGERS]; + + // Indicates if a click should be executed when the first finger is lifted + bool _doClick; + + // Indicates whether the event poll has been run before + bool _firstPoll; + + // Event queues + uint32 _queuedDragTime, _queuedEscapeUpTime, _queuedSpaceUpTime, + _queuedRUpTime; + + // SDL overrides virtual void SDLModToOSystemKeyFlags(SDLMod mod, Common::Event &event); virtual bool handleKeyDown(SDL_Event &ev, Common::Event &event); virtual bool handleKeyUp(SDL_Event &ev, Common::Event &event); virtual bool handleMouseButtonDown(SDL_Event &ev, Common::Event &event); virtual bool handleMouseButtonUp(SDL_Event &ev, Common::Event &event); virtual bool handleMouseMotion(SDL_Event &ev, Common::Event &event); + virtual bool pollEvent(Common::Event &event); + + // Utility functions + void calculateDimensions(); }; #endif diff --git a/backends/events/wincesdl/wincesdl-events.cpp b/backends/events/wincesdl/wincesdl-events.cpp index 4fab47a58e..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) @@ -183,7 +183,8 @@ bool WINCESdlEventSource::pollEvent(Common::Event &event) { if (_tapTime) { // second tap if (_closeClick && (GetTickCount() - _tapTime < 1000)) { if (event.mouse.y <= 20 && - _graphicsMan->_panelInitialized) { + _graphicsMan->_panelInitialized && + !_graphicsMan->_noDoubleTapPT) { // top of screen (show panel) _graphicsMan->swap_panel_visibility(); } else if (!_graphicsMan->_noDoubleTapRMB) { @@ -240,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; @@ -260,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: @@ -278,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/ds/ds-fs-factory.cpp b/backends/fs/ds/ds-fs-factory.cpp index 3fd97d07eb..4e09c3446b 100644 --- a/backends/fs/ds/ds-fs-factory.cpp +++ b/backends/fs/ds/ds-fs-factory.cpp @@ -27,7 +27,9 @@ #include "backends/fs/ds/ds-fs.h" #include "dsmain.h" //for the isGBAMPAvailable() function +namespace Common { DECLARE_SINGLETON(DSFilesystemFactory); +} AbstractFSNode *DSFilesystemFactory::makeRootFileNode() const { if (DS::isGBAMPAvailable()) { 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/posix/posix-fs-factory.cpp b/backends/fs/posix/posix-fs-factory.cpp index 829355be84..776ea86155 100644 --- a/backends/fs/posix/posix-fs-factory.cpp +++ b/backends/fs/posix/posix-fs-factory.cpp @@ -19,7 +19,7 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -#if defined(POSIX) +#if defined(POSIX) || defined(PLAYSTATION3) // Re-enable some forbidden symbols to avoid clashes with stat.h and unistd.h. // Also with clock() in sys/time.h in some Mac OS X SDKs. diff --git a/backends/fs/posix/posix-fs-factory.h b/backends/fs/posix/posix-fs-factory.h index a7075db94c..c7cec6fab5 100644 --- a/backends/fs/posix/posix-fs-factory.h +++ b/backends/fs/posix/posix-fs-factory.h @@ -30,6 +30,7 @@ * Parts of this class are documented in the base interface class, FilesystemFactory. */ class POSIXFilesystemFactory : public FilesystemFactory { +protected: virtual AbstractFSNode *makeRootFileNode() const; virtual AbstractFSNode *makeCurrentDirectoryFileNode() const; virtual AbstractFSNode *makeFileNodePath(const Common::String &path) const; diff --git a/backends/fs/posix/posix-fs.cpp b/backends/fs/posix/posix-fs.cpp index 0b94c37b16..320c5a6f39 100644 --- a/backends/fs/posix/posix-fs.cpp +++ b/backends/fs/posix/posix-fs.cpp @@ -19,7 +19,7 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -#if defined(POSIX) +#if defined(POSIX) || defined(PLAYSTATION3) // Re-enable some forbidden symbols to avoid clashes with stat.h and unistd.h. // Also with clock() in sys/time.h in some Mac OS X SDKs. diff --git a/backends/fs/ps2/ps2-fs-factory.cpp b/backends/fs/ps2/ps2-fs-factory.cpp index cad92b5dec..ef7b2013a3 100644 --- a/backends/fs/ps2/ps2-fs-factory.cpp +++ b/backends/fs/ps2/ps2-fs-factory.cpp @@ -27,7 +27,9 @@ #include "backends/fs/ps2/ps2-fs-factory.h" #include "backends/fs/ps2/ps2-fs.h" +namespace Common { DECLARE_SINGLETON(Ps2FilesystemFactory); +} AbstractFSNode *Ps2FilesystemFactory::makeRootFileNode() const { return new Ps2FilesystemNode(); diff --git a/backends/fs/ps3/ps3-fs-factory.cpp b/backends/fs/ps3/ps3-fs-factory.cpp new file mode 100644 index 0000000000..3257246c50 --- /dev/null +++ b/backends/fs/ps3/ps3-fs-factory.cpp @@ -0,0 +1,26 @@ +/* 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/fs/ps3/ps3-fs-factory.h" + +AbstractFSNode *PS3FilesystemFactory::makeCurrentDirectoryFileNode() const { + return makeRootFileNode(); +} diff --git a/backends/fs/ps3/ps3-fs-factory.h b/backends/fs/ps3/ps3-fs-factory.h new file mode 100644 index 0000000000..6c1988b1c9 --- /dev/null +++ b/backends/fs/ps3/ps3-fs-factory.h @@ -0,0 +1,36 @@ +/* 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 PS3_FILESYSTEM_FACTORY_H +#define PS3_FILESYSTEM_FACTORY_H + +#include "backends/fs/posix/posix-fs-factory.h" + +/** + * Creates PS3FilesystemFactory objects. + * + * Parts of this class are documented in the base interface class, FilesystemFactory. + */ +class PS3FilesystemFactory : public POSIXFilesystemFactory { + virtual AbstractFSNode *makeCurrentDirectoryFileNode() const; +}; + +#endif /*PS3_FILESYSTEM_FACTORY_H*/ diff --git a/backends/fs/psp/psp-fs-factory.cpp b/backends/fs/psp/psp-fs-factory.cpp index ef1df246ba..bb3aca8ee6 100644 --- a/backends/fs/psp/psp-fs-factory.cpp +++ b/backends/fs/psp/psp-fs-factory.cpp @@ -43,7 +43,9 @@ #include <unistd.h> +namespace Common { DECLARE_SINGLETON(PSPFilesystemFactory); +} AbstractFSNode *PSPFilesystemFactory::makeRootFileNode() const { return new PSPFilesystemNode(); 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 34cde8ef46..760e5316e7 100644 --- a/backends/fs/wii/wii-fs-factory.cpp +++ b/backends/fs/wii/wii-fs-factory.cpp @@ -40,7 +40,9 @@ #include <smb.h> #endif +namespace Common { DECLARE_SINGLETON(WiiFilesystemFactory); +} WiiFilesystemFactory::WiiFilesystemFactory() : _dvdMounted(false), @@ -216,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/fs/windows/windows-fs.cpp b/backends/fs/windows/windows-fs.cpp index 9e864753c9..c32ad2da94 100644 --- a/backends/fs/windows/windows-fs.cpp +++ b/backends/fs/windows/windows-fs.cpp @@ -54,7 +54,7 @@ bool WindowsFilesystemNode::isWritable() const { return _access(_path.c_str(), W_OK) == 0; } -void WindowsFilesystemNode::addFile(AbstractFSList &list, ListMode mode, const char *base, WIN32_FIND_DATA* find_data) { +void WindowsFilesystemNode::addFile(AbstractFSList &list, ListMode mode, const char *base, bool hidden, WIN32_FIND_DATA* find_data) { WindowsFilesystemNode entry; char *asciiName = toAscii(find_data->cFileName); bool isDirectory; @@ -63,6 +63,10 @@ void WindowsFilesystemNode::addFile(AbstractFSList &list, ListMode mode, const c if (!strcmp(asciiName, ".") || !strcmp(asciiName, "..")) return; + // Skip hidden files if asked + if ((find_data->dwFileAttributes & FILE_ATTRIBUTE_HIDDEN) && !hidden) + return; + isDirectory = (find_data->dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY ? true : false); if ((!isDirectory && mode == Common::FSNode::kListDirectoriesOnly) || @@ -163,8 +167,6 @@ AbstractFSNode *WindowsFilesystemNode::getChild(const Common::String &n) const { bool WindowsFilesystemNode::getChildren(AbstractFSList &myList, ListMode mode, bool hidden) const { assert(_isDirectory); - //TODO: honor the hidden flag - if (_isPseudoRoot) { #ifndef _WIN32_WCE // Drives enumeration @@ -200,10 +202,10 @@ bool WindowsFilesystemNode::getChildren(AbstractFSList &myList, ListMode mode, b if (handle == INVALID_HANDLE_VALUE) return false; - addFile(myList, mode, _path.c_str(), &desc); + addFile(myList, mode, _path.c_str(), hidden, &desc); while (FindNextFile(handle, &desc)) - addFile(myList, mode, _path.c_str(), &desc); + addFile(myList, mode, _path.c_str(), hidden, &desc); FindClose(handle); } diff --git a/backends/fs/windows/windows-fs.h b/backends/fs/windows/windows-fs.h index 37d1e9099b..351307bef0 100644 --- a/backends/fs/windows/windows-fs.h +++ b/backends/fs/windows/windows-fs.h @@ -93,12 +93,13 @@ private: * Adds a single WindowsFilesystemNode to a given list. * This method is used by getChildren() to populate the directory entries list. * - * @param list List to put the file entry node in. - * @param mode Mode to use while adding the file entry to the list. - * @param base Common::String with the directory being listed. - * @param find_data Describes a file that the FindFirstFile, FindFirstFileEx, or FindNextFile functions find. + * @param list List to put the file entry node in. + * @param mode Mode to use while adding the file entry to the list. + * @param base Common::String with the directory being listed. + * @param hidden true if hidden files should be added, false otherwise + * @param find_data Describes a file that the FindFirstFile, FindFirstFileEx, or FindNextFile functions find. */ - static void addFile(AbstractFSList &list, ListMode mode, const char *base, WIN32_FIND_DATA* find_data); + static void addFile(AbstractFSList &list, ListMode mode, const char *base, bool hidden, WIN32_FIND_DATA* find_data); /** * Converts a Unicode string to Ascii format. 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..a0c1d9ad2b 100644 --- a/backends/graphics/gph/gph-graphics.cpp +++ b/backends/graphics/gph/gph-graphics.cpp @@ -36,7 +36,7 @@ static const OSystem::GraphicsMode s_supportedGraphicsModes[] = { }; GPHGraphicsManager::GPHGraphicsManager(SdlEventSource *sdlEventSource) - : SurfaceSdlGraphicsManager(sdlEventSource) { + : SurfaceSdlGraphicsManager(sdlEventSource) { } const OSystem::GraphicsMode *GPHGraphicsManager::getSupportedGraphicsModes() const { @@ -138,10 +138,10 @@ void GPHGraphicsManager::initSize(uint w, uint h, const Graphics::PixelFormat *f _videoMode.screenWidth = w; _videoMode.screenHeight = h; - if (w > 320 || h > 240){ + if (w > 320 || h > 240) { setGraphicsMode(GFX_HALF); setGraphicsModeIntern(); - _sdlEventSource->toggleMouseGrab(); + _eventSource->toggleMouseGrab(); } _videoMode.overlayWidth = 320; @@ -161,9 +161,9 @@ void GPHGraphicsManager::drawMouse() { int width, height; int hotX, hotY; - if (_videoMode.mode == GFX_HALF && !_overlayVisible){ - dst.x = _mouseCurState.x/2; - dst.y = _mouseCurState.y/2; + if (_videoMode.mode == GFX_HALF && !_overlayVisible) { + dst.x = _mouseCurState.x / 2; + dst.y = _mouseCurState.y / 2; } else { dst.x = _mouseCurState.x; dst.y = _mouseCurState.y; @@ -230,9 +230,9 @@ void GPHGraphicsManager::undrawMouse() { if (!_overlayVisible && (x >= _videoMode.screenWidth || y >= _videoMode.screenHeight)) return; - if (_mouseBackup.w != 0 && _mouseBackup.h != 0){ - if (_videoMode.mode == GFX_HALF && !_overlayVisible){ - addDirtyRect(x*2, y*2, _mouseBackup.w*2, _mouseBackup.h*2); + if (_mouseBackup.w != 0 && _mouseBackup.h != 0) { + if (_videoMode.mode == GFX_HALF && !_overlayVisible) { + addDirtyRect(x * 2, y * 2, _mouseBackup.w * 2, _mouseBackup.h * 2); } else { addDirtyRect(x, y, _mouseBackup.w, _mouseBackup.h); } @@ -252,8 +252,8 @@ void GPHGraphicsManager::internUpdateScreen() { // If the shake position changed, fill the dirty area with blackness if (_currentShakePos != _newShakePos || - (_mouseNeedsRedraw && _mouseBackup.y <= _currentShakePos)) { - SDL_Rect blackrect = {0, 0, _videoMode.screenWidth * _videoMode.scaleFactor, _newShakePos * _videoMode.scaleFactor}; + (_mouseNeedsRedraw && _mouseBackup.y <= _currentShakePos)) { + SDL_Rect blackrect = {0, 0, _videoMode.screenWidth *_videoMode.scaleFactor, _newShakePos *_videoMode.scaleFactor}; if (_videoMode.aspectRatioCorrection && !_overlayVisible) blackrect.h = real2Aspect(blackrect.h - 1) + 1; @@ -269,8 +269,8 @@ void GPHGraphicsManager::internUpdateScreen() { // screen surface accordingly. if (_screen && _paletteDirtyEnd != 0) { SDL_SetColors(_screen, _currentPalette + _paletteDirtyStart, - _paletteDirtyStart, - _paletteDirtyEnd - _paletteDirtyStart); + _paletteDirtyStart, + _paletteDirtyEnd - _paletteDirtyStart); _paletteDirtyEnd = 0; @@ -326,6 +326,9 @@ void GPHGraphicsManager::internUpdateScreen() { _dirtyRectList[0].y = 0; _dirtyRectList[0].w = width; _dirtyRectList[0].h = height; + + // HACK: Make sure the full hardware screen is wiped clean. + SDL_FillRect(_hwscreen, NULL, 0); } // Only draw anything if necessary @@ -337,8 +340,8 @@ void GPHGraphicsManager::internUpdateScreen() { for (r = _dirtyRectList; r != lastRect; ++r) { dst = *r; - dst.x++; // Shift rect by one since 2xSai needs to access the data around - dst.y++; // any pixel to scale it, and we want to avoid mem access crashes. + dst.x++; // Shift rect by one since 2xSai needs to access the data around + dst.y++; // any pixel to scale it, and we want to avoid mem access crashes. if (SDL_BlitSurface(origSurf, r, srcSurf, &dst) != 0) error("SDL_BlitSurface failed: %s", SDL_GetError()); @@ -374,11 +377,11 @@ void GPHGraphicsManager::internUpdateScreen() { assert(scalerProc != NULL); if ((_videoMode.mode == GFX_HALF) && (scalerProc == DownscaleAllByHalf)) { - if (dst_x%2==1){ + if (dst_x % 2 == 1) { dst_x--; dst_w++; } - if (dst_y%2==1){ + if (dst_y % 2 == 1) { dst_y--; dst_h++; } @@ -388,14 +391,14 @@ void GPHGraphicsManager::internUpdateScreen() { dst_y = dst_y / 2; scalerProc((byte *)srcSurf->pixels + (src_x * 2 + 2) + (src_y + 1) * srcPitch, srcPitch, - (byte *)_hwscreen->pixels + dst_x * 2 + dst_y * dstPitch, dstPitch, dst_w, dst_h); + (byte *)_hwscreen->pixels + dst_x * 2 + dst_y * dstPitch, dstPitch, dst_w, dst_h); } else { scalerProc((byte *)srcSurf->pixels + (r->x * 2 + 2) + (r->y + 1) * srcPitch, srcPitch, (byte *)_hwscreen->pixels + r->x * 2 + dst_y * dstPitch, dstPitch, r->w, dst_h); } } - if (_videoMode.mode == GFX_HALF && scalerProc == DownscaleAllByHalf){ + if (_videoMode.mode == GFX_HALF && scalerProc == DownscaleAllByHalf) { r->w = r->w / 2; r->h = dst_h / 2; } else { @@ -419,7 +422,7 @@ void GPHGraphicsManager::internUpdateScreen() { // This is necessary if shaking is active. if (_forceFull) { _dirtyRectList[0].y = 0; - _dirtyRectList[0].h = (_videoMode.mode == GFX_HALF) ? effectiveScreenHeight()/2 : effectiveScreenHeight(); + _dirtyRectList[0].h = (_videoMode.mode == GFX_HALF) ? effectiveScreenHeight() / 2 : effectiveScreenHeight(); } drawMouse(); @@ -439,7 +442,7 @@ void GPHGraphicsManager::internUpdateScreen() { } void GPHGraphicsManager::showOverlay() { - if (_videoMode.mode == GFX_HALF){ + if (_videoMode.mode == GFX_HALF) { _mouseCurState.x = _mouseCurState.x / 2; _mouseCurState.y = _mouseCurState.y / 2; } @@ -447,89 +450,41 @@ void GPHGraphicsManager::showOverlay() { } void GPHGraphicsManager::hideOverlay() { - if (_videoMode.mode == GFX_HALF){ + if (_videoMode.mode == GFX_HALF) { _mouseCurState.x = _mouseCurState.x * 2; _mouseCurState.y = _mouseCurState.y * 2; } SurfaceSdlGraphicsManager::hideOverlay(); } +bool GPHGraphicsManager::loadGFXMode() { -//bool GPHGraphicsManager::loadGFXMode() { - - -// _videoMode.overlayWidth = 320; -// _videoMode.overlayHeight = 240; -// _videoMode.fullscreen = true; -// -// /* Forcefully disable aspect ratio correction for games -// that start with a native 240px height resolution -// This corrects games with non-standard resolutions -// such as MM Nes (256x240). -// */ -// if(_videoMode.screenHeight == 240) { -// _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); -// debug("GraphicsMode set to HALF"); -// } else { -// setGraphicsMode(GFX_NORMAL); -// debug("GraphicsMode set to NORMAL"); -// } - - -// if ((_videoMode.mode == GFX_HALF) && !_overlayVisible) { -// //_videoMode.overlayWidth = _videoMode.screenWidth / 2; -// //_videoMode.overlayHeight = _videoMode.screenHeight / 2; -// _videoMode.overlayWidth = 320; -// _videoMode.overlayHeight = 240; -// _videoMode.fullscreen = true; -// } else { -// -// _videoMode.overlayWidth = _videoMode.screenWidth * _videoMode.scaleFactor; -// _videoMode.overlayHeight = _videoMode.screenHeight * _videoMode.scaleFactor; -// -// if (_videoMode.aspectRatioCorrection) -// _videoMode.overlayHeight = real2Aspect(_videoMode.overlayHeight); -// -// //_videoMode.hardwareWidth = _videoMode.screenWidth * _videoMode.scaleFactor; -// //_videoMode.hardwareHeight = effectiveScreenHeight(); -// _videoMode.hardwareWidth = 320; -// _videoMode.hardwareHeight = 240; -// -// } - -// return SurfaceSdlGraphicsManager::loadGFXMode(); -//} + // We don't offer anything other than fullscreen on GPH devices so let�s not even pretend. + _videoMode.fullscreen = true; + + // Set the hardware stats to match the LCD. + _videoMode.hardwareWidth = 320; + _videoMode.hardwareHeight = 240; + + if (_videoMode.screenHeight != 200) + _videoMode.aspectRatioCorrection = false; -bool GPHGraphicsManager::loadGFXMode() { if (_videoMode.screenWidth > 320 || _videoMode.screenHeight > 240) { _videoMode.aspectRatioCorrection = false; setGraphicsMode(GFX_HALF); -// printf("GFX_HALF\n"); } else { setGraphicsMode(GFX_NORMAL); -// printf("GFX_NORMAL\n"); } if ((_videoMode.mode == GFX_HALF) && !_overlayVisible) { _videoMode.overlayWidth = _videoMode.screenWidth / 2; _videoMode.overlayHeight = _videoMode.screenHeight / 2; - _videoMode.fullscreen = true; } else { - _videoMode.overlayWidth = _videoMode.screenWidth * _videoMode.scaleFactor; _videoMode.overlayHeight = _videoMode.screenHeight * _videoMode.scaleFactor; if (_videoMode.aspectRatioCorrection) _videoMode.overlayHeight = real2Aspect(_videoMode.overlayHeight); - - _videoMode.hardwareWidth = _videoMode.screenWidth * _videoMode.scaleFactor; - _videoMode.hardwareHeight = effectiveScreenHeight(); } return SurfaceSdlGraphicsManager::loadGFXMode(); } @@ -542,9 +497,13 @@ bool GPHGraphicsManager::hasFeature(OSystem::Feature f) { void GPHGraphicsManager::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; } @@ -554,8 +513,10 @@ bool GPHGraphicsManager::getFeatureState(OSystem::Feature f) { assert(_transactionMode == kTransactionNone); switch (f) { - case OSystem::kFeatureAspectRatioCorrection: + case OSystem::kFeatureAspectRatioCorrection: return _videoMode.aspectRatioCorrection; + case OSystem::kFeatureCursorPalette: + return !_cursorPaletteDisabled; default: return false; } @@ -571,7 +532,7 @@ SurfaceSdlGraphicsManager::VideoState *GPHGraphicsManager::getVideoMode() { void GPHGraphicsManager::warpMouse(int x, int y) { if (_mouseCurState.x != x || _mouseCurState.y != y) { - if (_videoMode.mode == GFX_HALF && !_overlayVisible){ + if (_videoMode.mode == GFX_HALF && !_overlayVisible) { x = x / 2; y = y / 2; } @@ -579,21 +540,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..f1f3d18b41 100644 --- a/backends/graphics/gph/gph-graphics.h +++ b/backends/graphics/gph/gph-graphics.h @@ -24,7 +24,7 @@ #define BACKENDS_GRAPHICS_GPH_H #include "backends/graphics/surfacesdl/surfacesdl-graphics.h" -#include "graphics/scaler/aspect.h" // for aspect2Real +#include "graphics/scaler/aspect.h" // for aspect2Real #include "graphics/scaler/downscaler.h" enum { @@ -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..cfc78cfcac 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; @@ -448,6 +460,10 @@ void OpenGLSdlGraphicsManager::toggleFullScreen(int loop) { _activeFullscreenMode = -2; setFullscreenMode(!isFullscreen); } + + // HACK: We need to force a refresh here, since we change the + // fullscreen mode. + _transactionDetails.needRefresh = true; endGFXTransaction(); // Ignore resize events for the next 10 frames @@ -609,50 +625,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() { +} + +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); - _transactionDetails.sizeChanged = true; - endGFXTransaction(); + 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/openpandora/op-graphics.h b/backends/graphics/openpandora/op-graphics.h index ed26df7475..0b3eeae8ec 100644 --- a/backends/graphics/openpandora/op-graphics.h +++ b/backends/graphics/openpandora/op-graphics.h @@ -24,7 +24,7 @@ #define BACKENDS_GRAPHICS_OP_H #include "backends/graphics/surfacesdl/surfacesdl-graphics.h" -#include "graphics/scaler/aspect.h" // for aspect2Real +#include "graphics/scaler/aspect.h" // for aspect2Real #include "graphics/scaler/downscaler.h" enum { 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 66207b6808..f3a1cad040 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: @@ -728,7 +731,8 @@ bool SurfaceSdlGraphicsManager::loadGFXMode() { _videoMode.hardwareWidth = _videoMode.screenWidth * _videoMode.scaleFactor; _videoMode.hardwareHeight = effectiveScreenHeight(); -#else +// On GPH devices ALL the _videoMode.hardware... are setup in GPHGraphicsManager::loadGFXMode() +#elif !defined(GPH_DEVICE) _videoMode.hardwareWidth = _videoMode.overlayWidth; _videoMode.hardwareHeight = _videoMode.overlayHeight; #endif @@ -752,6 +756,12 @@ bool SurfaceSdlGraphicsManager::loadGFXMode() { error("allocating _screen failed"); #endif + // SDL 1.2 palettes default to all black, + // SDL 1.3 palettes default to all white, + // Thus set our own default palette to all black. + // SDL_SetColors does nothing for non indexed surfaces. + SDL_SetColors(_screen, _currentPalette, 0, 256); + // // Create the surface that contains the scaled graphics in 16 bit mode // @@ -840,7 +850,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); @@ -2229,20 +2239,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); @@ -2291,26 +2287,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; } @@ -2318,4 +2298,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 f9f963dc70..58b735ef8b 100644 --- a/backends/graphics/wincesdl/wincesdl-graphics.cpp +++ b/backends/graphics/wincesdl/wincesdl-graphics.cpp @@ -44,7 +44,7 @@ WINCESdlGraphicsManager::WINCESdlGraphicsManager(SdlEventSource *sdlEventSource) : SurfaceSdlGraphicsManager(sdlEventSource), - _panelInitialized(false), _noDoubleTapRMB(false), + _panelInitialized(false), _noDoubleTapRMB(false), _noDoubleTapPT(false), _toolbarHighDrawn(false), _newOrientation(0), _orientationLandscape(0), _panelVisible(true), _saveActiveToolbar(NAME_MAIN_PANEL), _panelStateForced(false), _canBeAspectScaled(false), _scalersChanged(false), _saveToolbarState(false), @@ -478,6 +478,9 @@ void WINCESdlGraphicsManager::update_game_settings() { if (ConfMan.hasKey("no_doubletap_rightclick")) _noDoubleTapRMB = ConfMan.getBool("no_doubletap_rightclick"); + + if (ConfMan.hasKey("no_doubletap_paneltoggle")) + _noDoubleTapPT = ConfMan.getBool("no_doubletap_paneltoggle"); } void WINCESdlGraphicsManager::internUpdateScreen() { @@ -931,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; } @@ -1155,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) { @@ -1599,6 +1597,19 @@ void WINCESdlGraphicsManager::swap_mouse_visibility() { undrawMouse(); } +void WINCESdlGraphicsManager::init_panel() { + _panelVisible = true; + if (_panelInitialized) { + _toolbarHandler.setVisible(true); + _toolbarHandler.setActive(NAME_MAIN_PANEL); + } +} + +void WINCESdlGraphicsManager::reset_panel() { + _panelVisible = false; + _toolbarHandler.setVisible(false); +} + // Smartphone actions void WINCESdlGraphicsManager::initZones() { int i; @@ -1641,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 c620082b0c..2e8c3313b3 100644 --- a/backends/graphics/wincesdl/wincesdl-graphics.h +++ b/backends/graphics/wincesdl/wincesdl-graphics.h @@ -90,6 +90,8 @@ public: void swap_zoom_up(); void swap_zoom_down(); void swap_mouse_visibility(); + void init_panel(); + void reset_panel(); void swap_freeLook(); bool getFreeLookState(); @@ -115,6 +117,7 @@ public: bool _panelInitialized; // only initialize the toolbar once bool _noDoubleTapRMB; // disable double tap -> rmb click + bool _noDoubleTapPT; // disable double tap for toolbar toggling CEGUI::ToolbarHandler _toolbarHandler; @@ -155,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(); @@ -203,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/sdl13/sdl13-mixer.cpp b/backends/mixer/sdl13/sdl13-mixer.cpp new file mode 100644 index 0000000000..84777c8bab --- /dev/null +++ b/backends/mixer/sdl13/sdl13-mixer.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 "common/scummsys.h" + +#if defined(SDL_BACKEND) + +#include "backends/mixer/sdl13/sdl13-mixer.h" +#include "common/debug.h" +#include "common/system.h" +#include "common/config-manager.h" +#include "common/textconsole.h" + +#ifdef GP2X +#define SAMPLES_PER_SEC 11025 +#else +#define SAMPLES_PER_SEC 22050 +#endif +//#define SAMPLES_PER_SEC 44100 + +Sdl13MixerManager::Sdl13MixerManager() + : + SdlMixerManager(), + _device(0) { + +} + +Sdl13MixerManager::~Sdl13MixerManager() { + _mixer->setReady(false); + + SDL_CloseAudioDevice(_device); + + delete _mixer; +} + +void Sdl13MixerManager::init() { + // Start SDL Audio subsystem + if (SDL_InitSubSystem(SDL_INIT_AUDIO) == -1) { + error("Could not initialize SDL: %s", SDL_GetError()); + } + + // Get the desired audio specs + SDL_AudioSpec desired = getAudioSpec(SAMPLES_PER_SEC); + + // Start SDL audio with the desired specs + _device = SDL_OpenAudioDevice(NULL, 0, &desired, &_obtained, + SDL_AUDIO_ALLOW_FREQUENCY_CHANGE); + + if (_device <= 0) { + warning("Could not open audio device: %s", SDL_GetError()); + + _mixer = new Audio::MixerImpl(g_system, desired.freq); + assert(_mixer); + _mixer->setReady(false); + } else { + debug(1, "Output sample rate: %d Hz", _obtained.freq); + + _mixer = new Audio::MixerImpl(g_system, _obtained.freq); + assert(_mixer); + _mixer->setReady(true); + + startAudio(); + } +} + +void Sdl13MixerManager::startAudio() { + // Start the sound system + SDL_PauseAudioDevice(_device, 0); +} + +void Sdl13MixerManager::suspendAudio() { + SDL_CloseAudioDevice(_device); + _audioSuspended = true; +} + +int Sdl13MixerManager::resumeAudio() { + if (!_audioSuspended) + return -2; + + _device = SDL_OpenAudioDevice(NULL, 0, &_obtained, NULL, 0); + if (_device <= 0) { + return -1; + } + + SDL_PauseAudioDevice(_device, 0); + _audioSuspended = false; + return 0; +} + +#endif diff --git a/backends/mixer/sdl13/sdl13-mixer.h b/backends/mixer/sdl13/sdl13-mixer.h new file mode 100644 index 0000000000..9e07ea8673 --- /dev/null +++ b/backends/mixer/sdl13/sdl13-mixer.h @@ -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. + * + */ + +#ifndef BACKENDS_MIXER_SDL13_H +#define BACKENDS_MIXER_SDL13_H + +#include "backends/mixer/sdl/sdl-mixer.h" + +/** + * SDL mixer manager. It wraps the actual implementation + * of the Audio:Mixer used by the engine, and setups + * the SDL audio subsystem and the callback for the + * audio mixer implementation. + */ +class Sdl13MixerManager : public SdlMixerManager { +public: + Sdl13MixerManager(); + virtual ~Sdl13MixerManager(); + + /** + * Initialize and setups the mixer + */ + virtual void init(); + + /** + * Pauses the audio system + */ + virtual void suspendAudio(); + + /** + * Resumes the audio system + */ + virtual int resumeAudio(); + +protected: + + /** + * The opened SDL audio device + */ + SDL_AudioDeviceID _device; + + /** + * Starts SDL audio + */ + virtual void startAudio(); +}; + +#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 36ac310ad9..db5ab59446 100644 --- a/backends/mixer/wincesdl/wincesdl-mixer.cpp +++ b/backends/mixer/wincesdl/wincesdl-mixer.cpp @@ -131,15 +131,20 @@ uint32 WINCESdlMixerManager::compute_sample_rate() { ConfMan.setBool("FM_medium_quality", true); ConfMan.flushToDisk(); } + } else { + if (!ConfMan.hasKey("FM_high_quality") && !ConfMan.hasKey("FM_medium_quality")) { + ConfMan.setBool("FM_high_quality", true); + ConfMan.flushToDisk(); + } } // See if the output frequency is forced by the game if (gameid == "ft" || gameid == "dig" || gameid == "comi" || gameid == "queen" || gameid == "sword" || gameid == "agi") sampleRate = SAMPLES_PER_SEC_NEW; else { - if (ConfMan.hasKey("high_sample_rate") && ConfMan.getBool("high_sample_rate")) - sampleRate = SAMPLES_PER_SEC_NEW; - else + if (ConfMan.hasKey("high_sample_rate") && !ConfMan.getBool("high_sample_rate")) sampleRate = SAMPLES_PER_SEC_OLD; + else + sampleRate = SAMPLES_PER_SEC_NEW; } #ifdef USE_VORBIS @@ -182,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 e568002d40..89cde44536 100644 --- a/backends/module.mk +++ b/backends/module.mk @@ -60,14 +60,20 @@ endif # derive from the SDL backend, and they all need the following files. ifdef SDL_BACKEND MODULE_OBJS += \ - audiocd/sdl/sdl-audiocd.o \ 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 \ mutex/sdl/sdl-mutex.o \ plugins/sdl/sdl-provider.o \ timer/sdl/sdl-timer.o + +# SDL 1.3 removed audio CD support +ifndef USE_SDL13 +MODULE_OBJS += \ + audiocd/sdl/sdl-audiocd.o +endif endif ifdef POSIX @@ -82,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 @@ -101,6 +108,20 @@ MODULE_OBJS += \ midi/camd.o endif +ifdef PLAYSTATION3 +MODULE_OBJS += \ + fs/posix/posix-fs.o \ + fs/posix/posix-fs-factory.o \ + fs/ps3/ps3-fs-factory.o \ + events/ps3sdl/ps3sdl-events.o \ + 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 \ @@ -126,6 +147,11 @@ MODULE_OBJS += \ graphics/linuxmotosdl/linuxmotosdl-graphics.o endif +ifeq ($(BACKEND),maemo) +MODULE_OBJS += \ + events/maemosdl/maemosdl-events.o +endif + ifeq ($(BACKEND),n64) MODULE_OBJS += \ fs/n64/n64-fs.o \ diff --git a/backends/platform/android/android.cpp b/backends/platform/android/android.cpp index 17c7d4f9cb..aba31320ea 100644 --- a/backends/platform/android/android.cpp +++ b/backends/platform/android/android.cpp @@ -174,6 +174,8 @@ OSystem_Android::~OSystem_Android() { _mixer = 0; delete _fsFactory; _fsFactory = 0; + delete _timerManager; + _timerManager = 0; deleteMutex(_event_queue_lock); } @@ -602,4 +604,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 c4daf24e16..b44a585528 100644 --- a/backends/platform/android/jni.cpp +++ b/backends/platform/android/jni.cpp @@ -22,8 +22,9 @@ #if defined(__ANDROID__) -// Allow use of stuff in <time.h> +// Allow use of stuff in <time.h> and abort() #define FORBIDDEN_SYMBOL_EXCEPTION_time_h +#define FORBIDDEN_SYMBOL_EXCEPTION_abort // Disable printf override in common/forbidden.h to avoid // clashes with log.h from the Android SDK. @@ -618,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..6cc7f8eadb 100644 --- a/backends/platform/android/org/inodes/gus/scummvm/Unpacker.java +++ b/backends/platform/android/org/inodes/gus/scummvm/Unpacker.java @@ -44,6 +44,9 @@ public class Unpacker extends Activity { private AsyncTask<String, Integer, Void> mUnpacker; private final static int REQUEST_MARKET = 1; + // Android 3.1+ only + public static final int FLAG_INCLUDE_STOPPED_PACKAGES = 32; + private static class UnpackJob { public ZipFile zipfile; public Set<String> paths; @@ -273,6 +276,9 @@ public class Unpacker extends Activity { unpack_libs); Intent intent = new Intent(ScummVMApplication.ACTION_PLUGIN_QUERY); + // Android 3.1 defaults to FLAG_EXCLUDE_STOPPED_PACKAGES, and since + // none of our plugins will ever be running, that is not helpful + intent.setFlags(FLAG_INCLUDE_STOPPED_PACKAGES); sendOrderedBroadcast(intent, Manifest.permission.SCUMMVM_PLUGIN, new PluginBroadcastReciever(), null, RESULT_OK, null, extras); @@ -370,4 +376,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..c4a04d5450 --- /dev/null +++ b/backends/platform/bada/README.TXT @@ -0,0 +1,92 @@ +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 + +HelvB14 font files: + http://www.cl.cam.ac.uk/~mgk25/ucs-fonts.html + http://www.cl.cam.ac.uk/~mgk25/download/ucs-fonts-75dpi100dpi.tar.gz + + Then run the following command: + $ ./ucs2any.pl 100dpi/helvB14.bdf MAPPINGS/8859-1.TXT iso8859-1 \ + MAPPINGS/8859-2.TXT iso8859-2 MAPPINGS/8859-3.TXT iso8859-3 diff --git a/backends/platform/bada/application.cpp b/backends/platform/bada/application.cpp new file mode 100644 index 0000000000..bf585d2782 --- /dev/null +++ b/backends/platform/bada/application.cpp @@ -0,0 +1,111 @@ +/* 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 (_appForm) { + if (pause && g_engine && !g_engine->isPaused()) { + _appForm->pushKey(Common::KEYCODE_SPACE); + } + + if (g_system) { + ((BadaSystem *)g_system)->setMute(pause); + } + } +} diff --git a/backends/platform/bada/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..b868e91357 --- /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 && _timer) { + _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) { + 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..dfa72bce08 --- /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(kInitState), + _buttonState(kLeftButton), + _shortcut(kSetVolume) { + _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 != kErrorState) { + terminate(); + + _gameThread->Stop(); + if (_state != kErrorState) { + _gameThread->Join(); + } + + delete _gameThread; + _gameThread = NULL; + } + + if (_eventQueueLock) { + delete _eventQueueLock; + _eventQueueLock = NULL; + } + + logLeaving(); +} + +// +// abort the game thread +// +void BadaAppForm::terminate() { + if (_state == kActiveState) { + ((BadaSystem *)g_system)->setMute(true); + + _eventQueueLock->Acquire(); + + Common::Event e; + e.type = Common::EVENT_QUIT; + _eventQueue.push(e); + _state = kClosingState; + + _eventQueueLock->Release(); + + // block while thread ends + AppLog("waiting for shutdown"); + for (int i = 0; i < EXIT_SLEEP_STEP && _state == kClosingState; i++) { + Thread::Sleep(EXIT_SLEEP); + } + + if (_state == kClosingState) { + // failed to terminate - Join() will freeze + _state = kErrorState; + } + } +} + +void BadaAppForm::exitSystem() { + _state = kErrorState; + + 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 == kInitState) { + _state = kActiveState; + _gameThread->Start(); + } +} + +Object *BadaAppForm::Run(void) { + scummvm_main(0, 0); + + if (_state == kActiveState) { + Application::GetInstance()->SendUserEvent(USER_MESSAGE_EXIT, NULL); + } + _state = kDoneState; + return NULL; +} + +void BadaAppForm::setButtonShortcut() { + switch (_buttonState) { + case kLeftButton: + g_system->displayMessageOnOSD(_("Right Click Once")); + _buttonState = kRightButtonOnce; + break; + case kRightButtonOnce: + g_system->displayMessageOnOSD(_("Right Click")); + _buttonState = kRightButton; + break; + case kRightButton: + g_system->displayMessageOnOSD(_("Move Only")); + _buttonState = kMoveOnly; + break; + case kMoveOnly: + g_system->displayMessageOnOSD(_("Left Click")); + _buttonState = kLeftButton; + break; + } +} + +void BadaAppForm::setShortcut() { + // cycle to the next shortcut + switch (_shortcut) { + case kControlMouse: + g_system->displayMessageOnOSD(_("Escape Key")); + _shortcut = kEscapeKey; + break; + + case kEscapeKey: + g_system->displayMessageOnOSD(_("Game Menu")); + _shortcut = kGameMenu; + break; + + case kGameMenu: + g_system->displayMessageOnOSD(_("Show Keypad")); + _shortcut = kShowKeypad; + break; + + case kSetVolume: + // fallthru + + case kShowKeypad: + g_system->displayMessageOnOSD(_("Control Mouse")); + _shortcut = kControlMouse; + 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 = kLeftButton; + pushKey(Common::KEYCODE_F7); +} + +void BadaAppForm::OnTouchDoublePressed(const Control &source, + const Point ¤tPosition, + const TouchEventInfo &touchInfo) { + if (_buttonState != kMoveOnly) { + pushEvent(_buttonState == kLeftButton ? Common::EVENT_LBUTTONDOWN : Common::EVENT_RBUTTONDOWN, + currentPosition); + pushEvent(_buttonState == kLeftButton ? 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 != kLeftButton) { + 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 != kMoveOnly) { + pushEvent(_buttonState == kLeftButton ? Common::EVENT_LBUTTONDOWN : Common::EVENT_RBUTTONDOWN, + currentPosition); + } +} + +void BadaAppForm::OnTouchReleased(const Control &source, + const Point ¤tPosition, + const TouchEventInfo &touchInfo) { + if (_buttonState != kMoveOnly) { + pushEvent(_buttonState == kLeftButton ? Common::EVENT_LBUTTONUP : Common::EVENT_RBUTTONUP, + currentPosition); + if (_buttonState == kRightButtonOnce) { + _buttonState = kLeftButton; + } + // 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 = kSetVolume; + setVolume(true, true); + return; + + case KEY_SIDE_DOWN: + _shortcut = kSetVolume; + setVolume(false, true); + return; + + case KEY_CAMERA: + _shortcut = kShowKeypad; + showKeypad(); + return; + + default: + break; + } +} + +void BadaAppForm::OnKeyPressed(const Control &source, KeyCode keyCode) { + switch (keyCode) { + case KEY_SIDE_UP: + if (_shortcut != kSetVolume) { + _shortcut = kSetVolume; + } else { + setVolume(true, false); + } + return; + + case KEY_SIDE_DOWN: + switch (_shortcut) { + case kControlMouse: + setButtonShortcut(); + break; + + case kEscapeKey: + pushKey(Common::KEYCODE_ESCAPE); + break; + + case kGameMenu: + _buttonState = kLeftButton; + pushKey(Common::KEYCODE_F5); + break; + + case kShowKeypad: + 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..3340e2216b --- /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 == kClosingState; } + 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 { kInitState, kActiveState, kClosingState, kDoneState, kErrorState } _state; + enum { kLeftButton, kRightButtonOnce, kRightButton, kMoveOnly } _buttonState; + enum { kControlMouse, kEscapeKey, kGameMenu, kShowKeypad, kSetVolume } _shortcut; +}; + +#endif diff --git a/backends/platform/bada/fs.cpp b/backends/platform/bada/fs.cpp new file mode 100644 index 0000000000..0ae0cde43d --- /dev/null +++ b/backends/platform/bada/fs.cpp @@ -0,0 +1,435 @@ +/* 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: %S", _unicodePath.GetPointer()); + } 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 == L"." || fileName == L"..") { + 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..bd65c597c6 --- /dev/null +++ b/backends/platform/bada/graphics.cpp @@ -0,0 +1,261 @@ +/* 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; +} + +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 + 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(); +} + +// 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..b2aaca43bc --- /dev/null +++ b/backends/platform/bada/graphics.h @@ -0,0 +1,72 @@ +/* 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 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..b5e5b88cb5 --- /dev/null +++ b/backends/platform/bada/sscanf.cpp @@ -0,0 +1,213 @@ +/* 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) { + // skip leading space characters + while (**in && **in == ' ') { + (*in)++; + } + + // number optionally preceeded with a + or - sign. + bool negate = false; + if (**in == '-') { + (*in)++; + negate = true; + } + + if (**in == '+') { + (*in)++; + } + + int *arg = va_arg(*ap, int*); + char *end; + long n = strtol(*in, &end, 10); + if (negate) { + n = -n; + } + + 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,xx,yy,h; + char buffer[100]; + unsigned u; + char c; + strcpy(buffer, "hello"); + char *b = buffer; + + if (simple_sscanf("BBX 00009 -1 +10 000", + "BBX %d %d %d %d", + &x, &y, &xx, &yy) != 4) { + printf("Failed\n"); + } else { + printf("Success %d %d %d %d\n", x, y, xx, yy); + } + + if (simple_sscanf("CAT 123x-10 0x100h 123456.AUD $ ", + "CAT %dx%d %xh %06u.AUD %c", + &x, &y, &h, &u, &c) != 5) { + printf("Failed\n"); + } else { + printf("Success %d %d %d %d '%c' \n", x, y, h, u, c); + } + + if (simple_sscanf("COPYRIGHT \"Copyright (c) 1984, 1987 Foo Systems Incorporated", + "COPYRIGHT \"%[^\"]", + b) != 1) { + printf("Failed\n"); + } else { + printf("Success %s\n", buffer); + } + + return 0; +} +#endif diff --git a/backends/platform/bada/system.cpp b/backends/platform/bada/system.cpp new file mode 100644 index 0000000000..d284688068 --- /dev/null +++ b/backends/platform/bada/system.cpp @@ -0,0 +1,506 @@ +/* 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 RESOURCE_PATH "/Res" +#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(); + + // 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", false); + 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-iso-8859-1.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::addSysArchivesToSearchSet(Common::SearchSet &s, int priority) { + // allow translations.dat and game .DAT files to be found + s.addDirectory(RESOURCE_PATH, RESOURCE_PATH, priority); +} + +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) { + // only change mute after eventManager init() has completed + if (_audioThread) { + BadaGraphicsManager *graphics = getGraphics(); + if (graphics && graphics->isReady()) { + _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..c28686cb3d --- /dev/null +++ b/backends/platform/bada/system.h @@ -0,0 +1,102 @@ +/* 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); + void addSysArchivesToSearchSet(Common::SearchSet &s, int priority); + + 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 ac709f62b9..f30c9c56d1 100644 --- a/backends/platform/dc/dc-fs.cpp +++ b/backends/platform/dc/dc-fs.cpp @@ -124,7 +124,7 @@ bool RoninCDDirectoryNode::getChildren(AbstractFSList &myList, ListMode mode, bo if (mode == Common::FSNode::kListFilesOnly) continue; - myList.push_back(new RoninCDDirectoryNode(newPath+"/")); + myList.push_back(new RoninCDDirectoryNode(newPath)); } else { // Honor the chosen mode if (mode == Common::FSNode::kListDirectoriesOnly) @@ -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/dc/selector.cpp b/backends/platform/dc/selector.cpp index 859f2a40ed..339e5df62d 100644 --- a/backends/platform/dc/selector.cpp +++ b/backends/platform/dc/selector.cpp @@ -185,12 +185,24 @@ static void makeDefIcon(Icon &icon) icon.load(scummvm_icon, sizeof(scummvm_icon)); } +static bool sameOrSubdir(const char *dir1, const char *dir2) +{ + int l1 = strlen(dir1), l2 = strlen(dir2); + if (l1<=l2) + return !strcmp(dir1, dir2); + else + return !memcmp(dir1, dir2, l2); +} + static bool uniqueGame(const char *base, const char *dir, Common::Language lang, Common::Platform plf, Game *games, int cnt) { while (cnt--) - if (!strcmp(dir, games->dir) && + if (/*Don't detect the same game in a subdir, + this is a workaround for the detector bug in toon... */ + sameOrSubdir(dir, games->dir) && + /*!strcmp(dir, games->dir) &&*/ !stricmp(base, games->filename_base) && lang == games->language && plf == games->platform) @@ -237,19 +249,24 @@ static int findGames(Game *games, int max, bool use_ini) } while ((curr_game < max || use_ini) && curr_dir < num_dirs) { - strncpy(dirs[curr_dir].name, dirs[curr_dir].node.getPath().c_str(), 252); - dirs[curr_dir].name[251] = '\0'; + strncpy(dirs[curr_dir].name, dirs[curr_dir].node.getPath().c_str(), 251); + dirs[curr_dir].name[250] = '\0'; + if (!dirs[curr_dir].name[0] || + dirs[curr_dir].name[strlen(dirs[curr_dir].name)-1] != '/') + strcat(dirs[curr_dir].name, "/"); dirs[curr_dir].deficon[0] = '\0'; Common::FSList files, fslist; dirs[curr_dir++].node.getChildren(fslist, Common::FSNode::kListAll); for (Common::FSList::const_iterator entry = fslist.begin(); entry != fslist.end(); ++entry) { if (entry->isDirectory()) { - if (!use_ini && num_dirs < MAX_DIR && - strcasecmp(entry->getDisplayName().c_str(), "install")) { + if (!use_ini && num_dirs < MAX_DIR) { dirs[num_dirs].node = *entry; num_dirs++; } + /* Toonstruck detector needs directories to be present too */ + if(!use_ini) + files.push_back(*entry); } else if (isIcon(*entry)) strcpy(dirs[curr_dir-1].deficon, entry->getDisplayName().c_str()); 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/build/gp2xwiz-bundle.sh b/backends/platform/gph/build/gp2xwiz-bundle.sh index 579e2dc77b..2182f207c3 100644 --- a/backends/platform/gph/build/gp2xwiz-bundle.sh +++ b/backends/platform/gph/build/gp2xwiz-bundle.sh @@ -2,6 +2,16 @@ echo Quick script to make building a distribution of the GP2X Wiz backend more consistent. +# Set the paths up here to support the build. + +export PATH=/opt/open2x/gcc-4.1.1-glibc-2.3.6/arm-open2x-linux/bin:$PATH +export PATH=/opt/open2x/gcc-4.1.1-glibc-2.3.6/bin:$PATH +export CXX=arm-open2x-linux-g++ +export CC=arm-open2x-linux-gcc +export CXXFLAGS=-march=armv4t +export LDFLAGS=-static +export ASFLAGS=-mfloat-abi=soft + cd ../../../.. echo Building ScummVM for GP2X Wiz. diff --git a/backends/platform/gph/devices/gp2x/mmuhack/readme.txt b/backends/platform/gph/devices/gp2x/mmuhack/README index bea49d7d6d..6db7d81845 100644 --- a/backends/platform/gph/devices/gp2x/mmuhack/readme.txt +++ b/backends/platform/gph/devices/gp2x/mmuhack/README @@ -1,3 +1,10 @@ +PLEASE NOTE: + +The binary object 'mmuhack.o' is stored in the source tree as it is very awkward to +build it manually each time and would require the use of 2 toolchains to do so. + +Notes on how to rebuild from the included source can be found below. + About ----- @@ -107,4 +114,3 @@ Credits Original idea/implementation: Squidge (this whole thing is also known as squidgehack) Kernel module: NK Documentation: notaz - 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/gph/gph-backend.cpp b/backends/platform/gph/gph-backend.cpp index ae3466b836..49a1edf411 100644 --- a/backends/platform/gph/gph-backend.cpp +++ b/backends/platform/gph/gph-backend.cpp @@ -25,10 +25,9 @@ #include "backends/platform/sdl/sdl-sys.h" -// #include "backends/platform/gph/gph-options.h" #include "backends/mixer/doublebuffersdl/doublebuffersdl-mixer.h" #include "backends/platform/gph/gph-hw.h" -#include "backends/platform/gph/gph-sdl.h" +#include "backends/platform/gph/gph.h" #include "backends/plugins/posix/posix-provider.h" #include "backends/saves/default/default-saves.h" #include "backends/timer/default/default-timer.h" @@ -51,7 +50,7 @@ #include <limits.h> #include <errno.h> #include <sys/stat.h> -#include <time.h> // for getTimeAndDate() +#include <time.h> // for getTimeAndDate() /* Dump console info to files. */ #define DUMP_STDOUT @@ -104,49 +103,50 @@ void OSystem_GPH::initBackend() { _savefileManager = new DefaultSaveFileManager(savePath); - #ifdef DUMP_STDOUT - // The GP2X Wiz has a serial console on the breakout board but most users do not use this so we - // output all our STDOUT and STDERR to files for debug purposes. - char STDOUT_FILE[PATH_MAX+1]; - char STDERR_FILE[PATH_MAX+1]; - - strcpy(STDOUT_FILE, workDirName); - strcpy(STDERR_FILE, workDirName); - strcat(STDOUT_FILE, "/scummvm.stdout.txt"); - strcat(STDERR_FILE, "/scummvm.stderr.txt"); - - // Flush the output in case anything is queued - fclose(stdout); - fclose(stderr); - - // Redirect standard input and standard output - FILE *newfp = freopen(STDOUT_FILE, "w", stdout); - if (newfp == NULL) { - #if !defined(stdout) - stdout = fopen(STDOUT_FILE, "w"); - #else - newfp = fopen(STDOUT_FILE, "w"); - if (newfp) { - *stdout = *newfp; - } - #endif +#ifdef DUMP_STDOUT + // The GPH devices have a serial console on the breakout board + // but most users do not use this so we output all our STDOUT + // and STDERR to files for debug purposes. + char STDOUT_FILE[PATH_MAX+1]; + char STDERR_FILE[PATH_MAX+1]; + + strcpy(STDOUT_FILE, workDirName); + strcpy(STDERR_FILE, workDirName); + strcat(STDOUT_FILE, "/scummvm.stdout.txt"); + strcat(STDERR_FILE, "/scummvm.stderr.txt"); + + // Flush the output in case anything is queued + fclose(stdout); + fclose(stderr); + + // Redirect standard input and standard output + FILE *newfp = freopen(STDOUT_FILE, "w", stdout); + if (newfp == NULL) { +#if !defined(stdout) + stdout = fopen(STDOUT_FILE, "w"); +#else + newfp = fopen(STDOUT_FILE, "w"); + if (newfp) { + *stdout = *newfp; } +#endif + } - newfp = freopen(STDERR_FILE, "w", stderr); - if (newfp == NULL) { - #if !defined(stderr) - stderr = fopen(STDERR_FILE, "w"); - #else - newfp = fopen(STDERR_FILE, "w"); - if (newfp) { - *stderr = *newfp; - } - #endif + newfp = freopen(STDERR_FILE, "w", stderr); + if (newfp == NULL) { +#if !defined(stderr) + stderr = fopen(STDERR_FILE, "w"); +#else + newfp = fopen(STDERR_FILE, "w"); + if (newfp) { + *stderr = *newfp; } +#endif + } - setbuf(stderr, NULL); - printf("%s\n", "Debug: STDOUT and STDERR redirected to text files."); - #endif /* DUMP_STDOUT */ + setbuf(stderr, NULL); + printf("%s\n", "Debug: STDOUT and STDERR redirected to text files."); +#endif /* DUMP_STDOUT */ /* Initialize any GP2X Wiz specific stuff we may want (Batt Status, scaler etc.) */ WIZ_HW::deviceInit(); @@ -169,9 +169,6 @@ void OSystem_GPH::initBackend() { /* Make sure SDL knows that we have a joystick we want to use. */ ConfMan.setInt("joystick_num", 0); - /* Now setup any device specific user options (Left handed mode, that sort of thing). */ - // GPH::setOptions(); - /* Pass to POSIX method to do the heavy lifting */ OSystem_POSIX::initBackend(); @@ -217,11 +214,11 @@ void OSystem_GPH::quit() { WIZ_HW::deviceDeinit(); - #ifdef DUMP_STDOUT - printf("%s\n", "Debug: STDOUT and STDERR text files closed."); - fclose(stdout); - fclose(stderr); - #endif /* DUMP_STDOUT */ +#ifdef DUMP_STDOUT + printf("%s\n", "Debug: STDOUT and STDERR text files closed."); + fclose(stdout); + fclose(stderr); +#endif /* DUMP_STDOUT */ OSystem_POSIX::quit(); } diff --git a/backends/platform/gph/gph-hw.cpp b/backends/platform/gph/gph-hw.cpp index 2d70158001..cde50dc6b4 100644 --- a/backends/platform/gph/gph-hw.cpp +++ b/backends/platform/gph/gph-hw.cpp @@ -43,13 +43,13 @@ namespace WIZ_HW { enum { - VOLUME_NOCHG = 0, - VOLUME_DOWN = 1, - VOLUME_UP = 2, - VOLUME_CHANGE_RATE = 8, - VOLUME_MIN = 0, - VOLUME_INITIAL = 60, - VOLUME_MAX = 100 + VOLUME_NOCHG = 0, + VOLUME_DOWN = 1, + VOLUME_UP = 2, + VOLUME_CHANGE_RATE = 8, + VOLUME_MIN = 0, + VOLUME_INITIAL = 60, + VOLUME_MAX = 100 }; int volumeLevel = VOLUME_INITIAL; @@ -61,24 +61,24 @@ void deviceDeinit() { } void mixerMoveVolume(int direction) { - if (volumeLevel <= 10) { - if (direction == VOLUME_UP) volumeLevel += VOLUME_CHANGE_RATE/2; - if (direction == VOLUME_DOWN) volumeLevel -= VOLUME_CHANGE_RATE/2; - } else { - if (direction == VOLUME_UP) volumeLevel += VOLUME_CHANGE_RATE; - if (direction == VOLUME_DOWN) volumeLevel -= VOLUME_CHANGE_RATE; - } - - if (volumeLevel < VOLUME_MIN) volumeLevel = VOLUME_MIN; - if (volumeLevel > VOLUME_MAX) volumeLevel = VOLUME_MAX; - - unsigned long soundDev = open("/dev/mixer", O_RDWR); - - if (soundDev) { - int vol = ((volumeLevel << 8) | volumeLevel); - ioctl(soundDev, SOUND_MIXER_WRITE_PCM, &vol); - close(soundDev); - } + if (volumeLevel <= 10) { + if (direction == VOLUME_UP) volumeLevel += VOLUME_CHANGE_RATE / 2; + if (direction == VOLUME_DOWN) volumeLevel -= VOLUME_CHANGE_RATE / 2; + } else { + if (direction == VOLUME_UP) volumeLevel += VOLUME_CHANGE_RATE; + if (direction == VOLUME_DOWN) volumeLevel -= VOLUME_CHANGE_RATE; + } + + if (volumeLevel < VOLUME_MIN) volumeLevel = VOLUME_MIN; + if (volumeLevel > VOLUME_MAX) volumeLevel = VOLUME_MAX; + + unsigned long soundDev = open("/dev/mixer", O_RDWR); + + if (soundDev) { + int vol = ((volumeLevel << 8) | volumeLevel); + ioctl(soundDev, SOUND_MIXER_WRITE_PCM, &vol); + close(soundDev); + } } } /* namespace WIZ_HW */ @@ -87,9 +87,9 @@ namespace GPH { enum { /* Touchscreen TapMode */ - TAPMODE_LEFT = 0, - TAPMODE_RIGHT = 1, - TAPMODE_HOVER = 2 + TAPMODE_LEFT = 0, + TAPMODE_RIGHT = 1, + TAPMODE_HOVER = 2 }; int tapmodeLevel = TAPMODE_LEFT; @@ -103,7 +103,7 @@ void ToggleTapMode() { tapmodeLevel = TAPMODE_LEFT; } else { tapmodeLevel = TAPMODE_LEFT; - } + } } } /* namespace GPH */ diff --git a/backends/platform/gph/gph-hw.h b/backends/platform/gph/gph-hw.h index 0a1205156b..f9584ca37e 100644 --- a/backends/platform/gph/gph-hw.h +++ b/backends/platform/gph/gph-hw.h @@ -32,9 +32,9 @@ namespace WIZ_HW { extern int volumeLevel; -extern void deviceInit(); -extern void deviceDeinit(); -extern void mixerMoveVolume(int); +extern void deviceInit(); +extern void deviceDeinit(); +extern void mixerMoveVolume(int); } /* namespace WIZ_HW */ @@ -42,7 +42,7 @@ namespace GPH { extern int tapmodeLevel; -extern void ToggleTapMode(); +extern void ToggleTapMode(); } /* namespace GPH */ diff --git a/backends/platform/gph/gph-main.cpp b/backends/platform/gph/gph-main.cpp index 1a8c6686ca..2c43af151f 100644 --- a/backends/platform/gph/gph-main.cpp +++ b/backends/platform/gph/gph-main.cpp @@ -20,7 +20,7 @@ * */ -#include "backends/platform/gph/gph-sdl.h" +#include "backends/platform/gph/gph.h" #include "backends/plugins/posix/posix-provider.h" #include "base/main.h" @@ -43,7 +43,7 @@ int main(int argc, char *argv[]) { int res = scummvm_main(argc, argv); // Free OSystem - delete (OSystem_GPH *)g_system; + delete(OSystem_GPH *)g_system; return res; } diff --git a/backends/platform/gph/gph-sdl.h b/backends/platform/gph/gph.h index 8b943f98f3..80f43f0bab 100644 --- a/backends/platform/gph/gph-sdl.h +++ b/backends/platform/gph/gph.h @@ -34,7 +34,7 @@ #define __GP2XWIZ__ #ifndef PATH_MAX - #define PATH_MAX 255 +#define PATH_MAX 255 #endif class OSystem_GPH : public OSystem_POSIX { 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/maemo/debian/changelog b/backends/platform/maemo/debian/changelog new file mode 100644 index 0000000000..d3e0287186 --- /dev/null +++ b/backends/platform/maemo/debian/changelog @@ -0,0 +1,227 @@ +scummvm (1.4.0~git) unstable; urgency=low + + * development snapshot + + -- Tarek Soliman <tsoliman@scummvm.org> Wed, 05 Oct 2011 19:01:25 -0500 + +scummvm (1.2.1~pre) unstable; urgency=low + + * 1.2.1 testing release + + -- Frantisek Dufka <dufkaf@seznam.cz> Wed, 8 Dec 2010 21:43:29 +0100 +scummvm (1.2.0~pre) unstable; urgency=low + + * 1.2.0 testing release + + -- Frantisek Dufka <dufkaf@seznam.cz> Fri, 8 Oct 2010 21:38:12 +0200 +scummvm (1.1.0~pre) unstable; urgency=low + + * 1.1.0 testing release + * cleanup for N900 (new firmwares need less hacks) + * unified binary for all devices now have datafiles included (~2MB) + + -- Frantisek Dufka <dufkaf@seznam.cz> Wed, 24 Mar 2010 01:48:05 +0100 +scummvm (1.0.0-4) unstable; urgency=low + + * datadir optified (/usr/share/scummvm -> /opt/scummvm/share) + * added engine files to datadir + * Application Manager icon enlarged to 48x48 + + -- Frantisek Dufka <dufkaf@seznam.cz> Thu, 17 Dec 2009 13:54:51 +0100 +scummvm (1.0.0-3) unstable; urgency=low + + * disable taskmanager topleft button in fullscreen mode (N900) + * map shift+click to right button click + * mam ctrl+click to mouse move (no click) + * set fullscreen window as _HILDON_NON_COMPOSITED_WINDOW (N900) + + -- Frantisek Dufka <dufkaf@seznam.cz> Tue, 15 Dec 2009 23:12:51 +0100 +scummvm (1.0.0-2) unstable; urgency=low + + * grab N900 volume keys + * map Shift+Backspace to Escape key, shift+enter to Menu key (N900) + * optified = main binary moved to /opt/scummvm/bin/scummvm + + -- Frantisek Dufka <dufkaf@seznam.cz> Sat, 12 Dec 2009 23:39:04 +0100 +scummvm (1.0.0-1) unstable; urgency=low + + * -mcpu=arm1136j-s -mfpu=vfp -mfloat-abi=softfp breaks Gobliins, reverted + + -- Frantisek Dufka <dufkaf@seznam.cz> Wed, 2 Dec 2009 10:25:11 +0100 +scummvm (1.0.0) unstable; urgency=low + + * upstream 1.0 release + * Initial support for N900 + + -- Frantisek Dufka <dufkaf@seznam.cz> Fri, 6 Nov 2009 22:02:25 +0100 +scummvm (1.0.0~rc1-3) unstable; urgency=low + + * updated to 1.0 branch revision 43999 to fix bugs (Cruise pause, ..) + * Cruise for Corpse mapping added to zoom+ for N800/770 + + -- Frantisek Dufka <dufkaf@seznam.cz> Mon, 7 Sep 2009 09:03:13 +0200 +scummvm (1.0.0~rc1-2) unstable; urgency=low + + * Cruise for Corpse key bindings added + - menu key for menu, zoom-=right click, zoom+=context menu + + -- Frantisek Dufka <dufkaf@seznam.cz> Wed, 2 Sep 2009 23:03:59 +0200 +scummvm (1.0.0~rc1-1) unstable; urgency=low + + * Discworld key bindings added - menu key for menu, zoom-=right click, zoom+=Enter/y key + + -- Frantisek Dufka <dufkaf@seznam.cz> Wed, 2 Sep 2009 09:53:08 +0200 +scummvm (1.0.0~rc1) unstable; urgency=low + + * upstream 1.0.0rc1 release + + -- Frantisek Dufka <dufkaf@seznam.cz> Thu, 20 Aug 2009 23:33:59 +0200 +scummvm (0.13.1) unstable; urgency=low + + * upstream 0.13.1 release + + -- Frantisek Dufka <dufkaf@seznam.cz> Sat, 18 Apr 2009 22:40:42 +0200 +scummvm (0.13.0-2) unstable; urgency=low + + * dbus_service.patch is incomplete - needs also install line in debian/rules + + -- Frantisek Dufka <dufkaf@seznam.cz> Fri, 27 Feb 2009 20:37:29 +0100 +scummvm (0.13.0-1) unstable; urgency=low + + * fix crash in task switcher caption code when .scummvmrc had fullscreen value set + * enabled also dbus_service.patch for home key switching back (not needed in OS < 2008) + + -- Frantisek Dufka <dufkaf@seznam.cz> Fri, 27 Feb 2009 09:29:01 +0100 +scummvm (0.13.0) unstable; urgency=low + + * upstream 0.13.0 release + * Feeble Files mapping + * task switcher item name patch from mikkov + + -- Frantisek Dufka <dufkaf@seznam.cz> Wed, 18 Feb 2009 21:52:33 +0100 +scummvm (0.11.99-4) unstable; urgency=low + + * Maemo extras-devel test version + - maemo-taskswitcher.patch: title shown right from the beginning + and title not fixed to "ScummVM" only + - dbus_service.patch: modify scummvm.desktop, scummvm.wrapper and + scummvm.service to make switching application automatically back + via second home key long press to work + + -- Mikko Vartiainen <mvartiainen@gmail.com> Thu, 03 Jan 2009 01:59:52 +0200 +scummvm (0.11.99-3) unstable; urgency=low + + * Maemo extras-devel test version + - maemo-taskswitcher.patch + + -- Mikko Vartiainen <mvartiainen@gmail.com> Thu, 01 Jan 2009 13:13:13 +0200 +scummvm (0.11.99-2) unstable; urgency=low + + * Maemo extras-devel test version + - keeping version below 0.12.0 + - not in user/ category + + -- Mikko Vartiainen <mvartiainen@gmail.com> Thu, 01 Jan 2009 02:04:14 +0200 +scummvm (0.12.0) unstable; urgency=low + + * upstream 0.12.0 release + * update description + + -- Frantisek Dufka <dufkaf@seznam.cz> Mon, 25 Aug 2008 21:47:41 +0200 +scummvm (0.11.99) unstable; urgency=low + + * upstream 0.12.0 testing pre-release + * big icons added for OS2008 menu + + -- Frantisek Dufka <dufkaf@seznam.cz> Fri, 22 Aug 2008 08:20:48 +0200 +scummvm (0.11.1) unstable; urgency=low + + * upstream 0.11.1 release + * mapping for N810: zoom+ = menu for all games (except FW) + + -- Frantisek Dufka <dufkaf@seznam.cz> Sat, 23 Feb 2008 20:41:37 +0100 +scummvm (0.11.0-2) unstable; urgency=low + + * mapping for N800/770: zoom+ = y, zoom- = 1 (all games except FW) + this fixes save dialog in BS1 and also allows to exit some games via 'y' + * mapping for N810: zoom- = rightclick for all games + * updated to revision 30849 from 0.11 branch (some bugfixes for 0.11.1) + + -- Frantisek Dufka <dufkaf@seznam.cz> Mon, 11 Feb 2008 22:22:48 +0100 +scummvm (0.11.0-1) unstable; urgency=low + + * theme files added back + * SWORD2,SAGA - added zoom keys =1/2 for saved games + * different mapping for N810 rightclick=zoom-,menu=zoom+ (currently only in LURE) + * added NEWS README COPYRIGHT do doc dir as per scummvm project guidelines + + -- Frantisek Dufka <dufkaf@seznam.cz> Sun, 13 Jan 2008 22:58:41 +0100 +scummvm (0.11.0-0) unstable; urgency=low + + * upstream 0.11 release + + -- Frantisek Dufka <dufkaf@seznam.cz> Sat, 12 Jan 2008 22:26:34 +0100 +scummvm (0.10.0-5) unstable; urgency=low + + * fixed for chinook, menu selection postinst script added + + -- Frantisek Dufka <dufkaf@seznam.cz> Thu, 25 Oct 2007 09:56:32 +0200 +scummvm (0.10.0-4) unstable; urgency=low + + * AGI - added pred.dic to DATA_PATH (=/usr/share/scummvm) to enable + predictive input + + -- Frantisek Dufka <dufkaf@seznam.cz> Tue, 28 Aug 2007 09:58:29 +0200 +scummvm (0.10.0-3) unstable; urgency=low + + * SCUMM - added mapping also for key up events (may fix right button in FT?) + * SWORD2 - added right button press mapping (not tested) + + -- Frantisek Dufka <dufkaf@seznam.cz> Mon, 20 Aug 2007 22:39:07 +0200 +scummvm (0.10.0-2) unstable; urgency=low + + * Future Wars - add mapping for left/up/down/right,zoom +/- + * fix SDL backend to set mouse position on button down event + as we may not have mousemove events with touchscreen + + -- Frantisek Dufka <dufkaf@seznam.cz> Fri, 13 Jul 2007 09:56:37 +0200 +scummvm (0.10.0-1) unstable; urgency=low + + * mapped F10 in Future Wars to menu key + + -- Frantisek Dufka <dufkaf@seznam.cz> Wed, 11 Jul 2007 22:20:00 +0200 +scummvm (0.10.0) unstable; urgency=low + + * upstream 0.10 release, enabled FLAC too + + -- Frantisek Dufka <dufkaf@seznam.cz> Wed, 4 Jul 2007 12:48:48 +0200 +scummvm (0.9.1-1) unstable; urgency=low + + * 0.9.1 mapped right mouse button in sword1 + + -- Frantisek Dufka <dufkaf@seznam.cz> Mon, 18 Jun 2007 21:15:31 +0200 +scummvm (0.9.1) unstable; urgency=low + + * 0.9.1 upstream release + + -- Frantisek Dufka <dufkaf@seznam.cz> Wed, 1 Nov 2006 20:40:51 +0100 +scummvm (0.9.0-3) unstable; urgency=low + + * merged fixes in 0.9.0 upstream branch + + -- Frantisek Dufka <dufkaf@seznam.cz> Mon, 9 Oct 2006 15:40:59 +0200 +scummvm (0.9.0-2) unstable; urgency=low + + * merged fixes in 0.9.0 upstream branch + + -- Frantisek Dufka <dufkaf@seznam.cz> Sat, 12 Aug 2006 20:10:47 +0200 +scummvm (0.9.0-1) unstable; urgency=low + + * merged changes in 0.9.0 upstream release + + -- Frantisek Dufka <dufkaf@seznam.cz> Sun, 23 Jul 2006 22:29:51 +0200 +scummvm (0.9.0) unstable; urgency=low + + * 0.9.0 upstream release + + -- Frantisek Dufka <dufkaf@seznam.cz> Tue, 27 Jun 2006 20:30:54 +0200 diff --git a/backends/platform/maemo/debian/compat b/backends/platform/maemo/debian/compat new file mode 100644 index 0000000000..b8626c4cff --- /dev/null +++ b/backends/platform/maemo/debian/compat @@ -0,0 +1 @@ +4 diff --git a/backends/platform/maemo/debian/control b/backends/platform/maemo/debian/control new file mode 100644 index 0000000000..a1f0d95002 --- /dev/null +++ b/backends/platform/maemo/debian/control @@ -0,0 +1,51 @@ +Source: scummvm +Section: user/games +Priority: optional +Maintainer: Tarek Soliman <tsoliman@scummvm.org> +Build-Depends: debhelper (>> 4.0.0), libsdl1.2-dev, libmad0-dev, libasound2-dev, libvorbisidec-dev, libmpeg2-4-dev, libflac-dev (>= 1.1.2), libz-dev, quilt + +Standards-Version: 3.6.1.1 +Package: scummvm +Depends: ${shlibs:Depends} +Architecture: i386 armel +Section: user/games +Description: interpreter that will play graphic adventure games + written for LucasArts' SCUMM virtual machine, Sierra's AGI adventures, + Adventure Soft's Simon the Sorcerer 1, 2 and Feeble Files, + Revolution Software's Beneath a Steel Sky and Broken Sword 1 and 2, + Interactive Binary Illusions' Flight of the Amazon Queen, + Coktel Vision's Gobliiins, Wyrmkeep's Inherit the Earth, + Westwood's Legend of Kyrandia, and various others. + This package does not contain any actual games. +XBS-Maemo-Icon-26: + iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAMAAACelLz8AAAC/VBMVEUICwcH + CQUKDAgLDQoMDwsOEAwREAUPEQ0QEg8PFQoRExAUEwoVFAwPGAcTFBIRFg0W + FQ0XFg4RGgkTGA8XGQsTGwwUHA0aGRIWGxMXHQkVHQ8aGhMbGxQcHQocGxUZ + HwsYIgcfHxgeIRUbJQwhIBofJAweJwgfKQocKwwgKgshKw0gLggfLg8jLQ8n + LwwpLhEmMwcoMRQjNgotLCYmNwQlNwwqOBQtOQgsOQ8xNh4sPQswNyQqQAUw + PAsuOiAsQgcwOyIqRgIsSAQvRgs0PyY1Rg06RA0+PDAwSwg2RxUzTQE4TQsz + VAc/SSo6VAk4VwE6VRM2XAVAUC85XwlJVCNEXQo+YwJGXwxMWS1JXC5AagBI + awJUagRIcQBSbwpHeAJTaD9OdwNXcwJKewZNfABacRlOfQBPfgBQfwBMggBW + fgBNgwNSgQJOhAVecUJjdSZefwNUiABZhgBjeDZieDxhezFQjQBgghZkhQ5j + iQJUkAZcixJmgDZnhCtckQpblgBekw5clwBqgkthlQBdmAJriz90hz5omgBs + mAhxlgd0mAB5lgBpnA16khdzmAtxnABooQBtnwB4jUpzngBkpQR5nQF8j0Vr + pQduoRZ4nRR3k014oQBzpAt8oAh/ogBvqA5trACBmypwqRF1pw+GogCAow+D + pQB8phJ/nUNurxh0rRd4rwmHqQd6qDOArwCJqwyDsgCMrgB8ryiFtAB7uQN8 + sDKBuAWOsBWJqFR8ti2IsiOSswaBuRt6vxCOtgqXsgePrjR9wQCFuw2KuQyB + uSeSuACEux6JuR2OvACAxACEvCuSuhOHujSMwQGTtiqfuACRvwGOvRWHuz2T + wASPwwmYvwaLvTebuxiWvhmSwBqZwAmNu0aevgiKvkCVviaMvE6bwQycuTid + vhylvQyZwB2cwg+QywCawR6fwB+bwyGI0gaewCudxCOjwyOT1ACmwjiX0g+j + xTqmxzOd1gCV0i6kyyuoyTah1Sif2h6tzjukzF+pz1uq1Eeg2Uml3U1kaLAB + AAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAHrSURBVCjPY2BAAC5ubkFB + BkzAzggDfKgSUFEmKCmOIsPvktA0aVpbSYQ+FwsjkwpMBsi2m/X7z89v3759 + +ngg1UqIlZEVponJYcW/rw9unH/04u2bc0vbo+WZWGCahEv/fj+6Yc2SZfv3 + b5w6+eACHVYWmCazMz+unN44b3ZfV3dnx5yDiaKsUAOZGD2/fL58+PSGg3Gu + buEVWyZacLCzw6S8X324fOHqibMxWpKy5okBIjAZoNOt9r47e+HOnafbe/ND + DNWkOGAyDKwsCtXPTly4eufqm+fvHy4M1RRggsnJMLI6z9x99Oqtx7cuPP/2 + ele5LjtCGyObbcHcDfuevHn+5s319RuSpOByrEwcwsqhlcvXHbp38+LxiXP6 + DeBSTKzWvkrCun5Zq04dO7S6p67ZHibFziiRt6PYUk5YtfbUqSMTGnKyHaFS + rMDA3fHr7tqayKDWa0dWVmXHp5lCpRgZ2QI2HTl25NLt+1t3rppRFJ8SrwGX + 4g9rmbJo0cpVqxZNaK5OS0nzF4NLMWkHZ1TVN9bXlxXmAo2L0uNgZITaxcjI + axAYH5+RATQrPtZHk5udA+Z2cIpQN3Hy8vOwMVLmYGTidoenDSawLAsnJz8L + kMUiY4ySpviYoKmKRVAcIyXKyIiLyygi+ADqVqrAkApevwAAAABJRU5ErkJg + gg== diff --git a/backends/platform/maemo/debian/copyright b/backends/platform/maemo/debian/copyright new file mode 100644 index 0000000000..a90e5a21cc --- /dev/null +++ b/backends/platform/maemo/debian/copyright @@ -0,0 +1,22 @@ +ScummVM was debianized by Bastien Nocera <hadess@hadess.net> the 5th Apr 2002. +It was adopted by Tore Anderson <tore@linpro.no> the 4th Oct 2002. +Packaged for the Maemo platform by Tomas Junnoen <tomas@fs-security.com> Oct 2005 +From 0.8.2 to 1.2.1, packaging for Maemo was done by Frantisek Dufka <dufkaf@seznam.cz> +Since 1.4 packaging for Maemo is done by Tarek Soliman <tarek@bashasoliman.com> + +It was downloaded from <http://www.scummvm.org/>. + +Upstream Authors: see AUTHORS file of the ScummVM source distribution. + +Copyright: + + 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, or (at your option) any + later version. In addition, some parts are also licensed under LGPL and + BSD licenses. See COPYING.BSD and COPYING.LGPL. + + On Debian GNU/Linux systems, the complete text of the GNU General + Public License can be found in `/usr/share/common-licenses/GPL'. + +This copyright also applies to the Debian-related build scripts. diff --git a/backends/platform/maemo/debian/postinst b/backends/platform/maemo/debian/postinst new file mode 100644 index 0000000000..3925f6c275 --- /dev/null +++ b/backends/platform/maemo/debian/postinst @@ -0,0 +1,25 @@ +#! /bin/sh + +# This is a workaround for older maemo versions related to the icon. +# The /usr/share/icons/scummvm.xpm icon is needed for OS2006 (Nokia 770) +# but if present it overrides nicer icons for newer systems in /usr/share/icons/hicolor. +# This workaround removes it if the OS isn't old (2006/2007). + +if [ "$1" = "configure" ] ; then +OSVER=$OSSO_VERSION +[ -z "$OSVER" -a -f /etc/osso_software_version ] && OSVER=`cat /etc/osso_software_version` +OSVER=`echo $OSVER | cut -d _ -f 2` +case $OSVER in + 2006*|2007*) + #nothing to do + true + ;; + *) + #ugly trick, until this icon is removed big icon in menu does not show + [ -f /usr/share/icons/scummvm.xpm ] && rm /usr/share/icons/scummvm.xpm + ;; +esac + [ -x /usr/bin/gtk-update-icon-cache ] && /usr/bin/gtk-update-icon-cache /usr/share/icons/hicolor + [ -x /usr/bin/maemo-select-menu-location -a -z "$2" ] && /usr/bin/maemo-select-menu-location scummvm.desktop tana_fi_games +fi +exit 0 diff --git a/backends/platform/maemo/debian/rules b/backends/platform/maemo/debian/rules new file mode 100755 index 0000000000..7613df25b4 --- /dev/null +++ b/backends/platform/maemo/debian/rules @@ -0,0 +1,71 @@ +#!/usr/bin/make -f + +#include /usr/share/quilt/quilt.make + +build: scummvm + +scummvm: + dh_testdir + ./configure --host=maemo + $(MAKE) + +clean: + dh_testdir + dh_testroot + -$(MAKE) distclean + dh_clean + +install: build + dh_testdir + dh_testroot + dh_clean + dh_installdirs +# run as fake dbus-service to enable switching back to application from desktop via home key + install -m0755 dists/maemo/scummvm.servicewrapper debian/scummvm/usr/games/scummvm + install -m0644 dists/maemo/scummvm.servicedesktop debian/scummvm/usr/share/applications/hildon/scummvm.desktop + install -m0644 dists/maemo/scummvm.service debian/scummvm/usr/share/dbus-1/services +# the following commented out lines are the alternative for not running scummvm as a fake service +# install -m0755 dists/maemo/scummvm.wrapper debian/scummvm/usr/games/scummvm +# install -m0644 dists/maemo/scummvm.desktop debian/scummvm/usr/share/applications/hildon + install -m0644 dists/maemo/scummvm26.png debian/scummvm/usr/share/icons/hicolor/26x26/hildon/scummvm.png + install -m0644 dists/maemo/scummvm40.png debian/scummvm/usr/share/icons/hicolor/40x40/hildon/scummvm.png + install -m0644 dists/maemo/scummvm48.png debian/scummvm/usr/share/icons/hicolor/48x48/hildon/scummvm.png + install -m0644 dists/maemo/scummvm64.png debian/scummvm/usr/share/icons/hicolor/64x64/hildon/scummvm.png + install -m0644 icons/scummvm.xpm debian/scummvm/usr/share/icons +# install -m0644 -d debian/scummvm/usr/lib/scummvm +# install -m0644 plugins/lib*.so debian/scummvm/usr/lib/scummvm +##non-optified version +# install -m0755 scummvm debian/scummvm/usr/games/scummvm.bin +# install -m0644 -d debian/scummvm/usr/share/scummvm +# install -m0644 dists/pred.dic debian/scummvm/usr/share/scummvm +# install -m0644 gui/themes/scummclassic.zip gui/themes/scummmodern.zip debian/scummvm/usr/share/scummvm +# optified version (save rootfs space on N900), see also configure prefix and datadir paths above + install -m0644 -d debian/scummvm/opt/scummvm/bin + install -m0755 scummvm debian/scummvm/opt/scummvm/bin + install -m0644 -d debian/scummvm/opt/scummvm/share + install -m0644 dists/pred.dic debian/scummvm/opt/scummvm/share + install -m0644 gui/themes/scummclassic.zip gui/themes/scummmodern.zip debian/scummvm/opt/scummvm/share + install -m0644 backends/vkeybd/packs/vkeybd_default.zip debian/scummvm/opt/scummvm/share +# for optified version we can also add engine datafiles + install -m0644 dists/engine-data/drascula.dat dists/engine-data/hugo.dat dists/engine-data/kyra.dat dists/engine-data/lure.dat dists/engine-data/m4.dat dists/engine-data/mads.dat dists/engine-data/queen.tbl dists/engine-data/sky.cpt dists/engine-data/teenagent.dat dists/engine-data/toon.dat debian/scummvm/opt/scummvm/share + + install -m0644 -d debian/scummvm/usr/share/doc/scummvm + install -m0644 NEWS README COPYRIGHT debian/scummvm/usr/share/doc/scummvm +binary: binary-arch + +binary-arch: build install + dh_testdir + dh_testroot + dh_installchangelogs NEWS + dh_link + dh_strip + dh_fixperms + dh_installdeb + dh_shlibdeps + dh_gencontrol + dh_md5sums + dh_builddeb + +binary-indep: + +.PHONY: build clean binary install binary-arch binary-indep diff --git a/backends/platform/maemo/debian/scummvm.dirs b/backends/platform/maemo/debian/scummvm.dirs new file mode 100644 index 0000000000..1a452dfbfc --- /dev/null +++ b/backends/platform/maemo/debian/scummvm.dirs @@ -0,0 +1,8 @@ +usr/games +usr/share/icons +usr/share/icons/hicolor/26x26/hildon +usr/share/icons/hicolor/40x40/hildon +usr/share/icons/hicolor/48x48/hildon +usr/share/icons/hicolor/64x64/hildon +usr/share/applications/hildon +usr/share/dbus-1/services diff --git a/backends/platform/maemo/maemo-common.h b/backends/platform/maemo/maemo-common.h new file mode 100644 index 0000000000..f33aa24278 --- /dev/null +++ b/backends/platform/maemo/maemo-common.h @@ -0,0 +1,56 @@ +/* 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(MAEMO) + +#ifndef PLATFORM_SDL_MAEMO_COMMON_H +#define PLATFORM_SDL_MAEMO_COMMON_H + +namespace Maemo { + +enum ModelType { + kModelTypeN800 = 1, + kModelTypeN810 = 2, + kModelTypeN900 = 4, + kModelTypeInvalid = 0 +}; + +struct Model { + const char *hwId; + ModelType modelType; + const char *hwAlias; + bool hwKeyboard; +}; + +static const Model models[] = { + {"RX-34", kModelTypeN800, "N800", false}, + {"RX-44", kModelTypeN810, "N810", true}, + {"RX-48", kModelTypeN810, "N810W", true}, + {"RX-51", kModelTypeN900, "N900", true}, + {0, kModelTypeInvalid, 0, true} +}; + +} // namespace Maemo + +#endif // ifndef PLATFORM_SDL_MAEMO_COMMON_H + +#endif // if defined(MAEMO) diff --git a/backends/platform/maemo/maemo.cpp b/backends/platform/maemo/maemo.cpp new file mode 100644 index 0000000000..3571039e62 --- /dev/null +++ b/backends/platform/maemo/maemo.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. + * + */ + +#if defined(MAEMO) + +#define FORBIDDEN_SYMBOL_EXCEPTION_getenv + +#include "common/scummsys.h" +#include "common/config-manager.h" + +#include "backends/platform/maemo/maemo.h" +#include "backends/events/maemosdl/maemosdl-events.h" +#include "common/textconsole.h" + + +#include <SDL/SDL_syswm.h> +#include <X11/Xutil.h> + +namespace Maemo { + +OSystem_SDL_Maemo::OSystem_SDL_Maemo() + : + OSystem_POSIX() { +} + +void OSystem_SDL_Maemo::initBackend() { + // Create the events manager + if (_eventSource == 0) + _eventSource = new MaemoSdlEventSource(); + + ConfMan.set("vkeybdpath", DATA_PATH); + + _model = Model(detectModel()); + + // Call parent implementation of this method + OSystem_POSIX::initBackend(); +} + +void OSystem_SDL_Maemo::quit() { + delete this; +} + +void OSystem_SDL_Maemo::fatalError() { + delete this; +} + +void OSystem_SDL_Maemo::setXWindowName(const char *caption) { + SDL_SysWMinfo info; + SDL_VERSION(&info.version); + if (SDL_GetWMInfo(&info)) { + Display *dpy = info.info.x11.display; + Window win; + win = info.info.x11.fswindow; + if (win) XStoreName(dpy, win, caption); + win = info.info.x11.wmwindow; + if (win) XStoreName(dpy, win, caption); + } +} + +void OSystem_SDL_Maemo::setWindowCaption(const char *caption) { + Common::String cap; + byte c; + + // The string caption is supposed to be in LATIN-1 encoding. + // SDL expects UTF-8. So we perform the conversion here. + while ((c = *(const byte *)caption++)) { + if (c < 0x80) + cap += c; + else { + cap += 0xC0 | (c >> 6); + cap += 0x80 | (c & 0x3F); + } + } + + SDL_WM_SetCaption(cap.c_str(), cap.c_str()); + + Common::String cap2("ScummVM - "); // 2 lines in OS2008 task switcher, set first line + cap = cap2 + cap; + setXWindowName(cap.c_str()); +} + +const Maemo::Model OSystem_SDL_Maemo::detectModel() { + Common::String deviceHwId = Common::String(getenv("SCUMMVM_MAEMO_DEVICE")); + const Model *model; + for (model = models; model->hwId; model++) { + if (deviceHwId.equals(model->hwId)) + return *model; + } + return *model; +} + +} //namespace Maemo + +#endif diff --git a/backends/platform/maemo/maemo.h b/backends/platform/maemo/maemo.h new file mode 100644 index 0000000000..e42936ddf0 --- /dev/null +++ b/backends/platform/maemo/maemo.h @@ -0,0 +1,56 @@ +/* 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(MAEMO) + +#ifndef PLATFORM_SDL_MAEMO_H +#define PLATFORM_SDL_MAEMO_H + +#include "backends/platform/sdl/posix/posix.h" +#include "backends/platform/maemo/maemo-common.h" + +namespace Maemo { + +class OSystem_SDL_Maemo : public OSystem_POSIX { +public: + OSystem_SDL_Maemo(); + + virtual void initBackend(); + virtual void quit(); + virtual void fatalError(); + virtual void setWindowCaption(const char *caption); + + Model getModel() { return _model; } + +private: + virtual void setXWindowName(const char *caption); + + const Model detectModel(); + Model _model; + +}; + +} // namespace Maemo + +#endif // ifndef PLATFORM_SDL_MAEMO_H + +#endif // if defined(MAEMO) diff --git a/backends/platform/maemo/main.cpp b/backends/platform/maemo/main.cpp new file mode 100644 index 0000000000..7e8a316eb5 --- /dev/null +++ b/backends/platform/maemo/main.cpp @@ -0,0 +1,52 @@ +/* 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(MAEMO) + +#define FORBIDDEN_SYMBOL_EXCEPTION_unistd_h + +#include "backends/platform/maemo/maemo.h" +#include "backends/plugins/sdl/sdl-provider.h" +#include "base/main.h" + +#include <unistd.h> + +int main(int argc, char* argv[]) { + g_system = new Maemo::OSystem_SDL_Maemo(); + assert(g_system); + + ((Maemo::OSystem_SDL_Maemo *)g_system)->init(); + +#ifdef DYNAMIC_MODULES + PluginManager::instance().addPluginProvider(new SDLPluginProvider()); +#endif + + // Invoke the actual ScummVM main entry point: + int res = scummvm_main(argc, argv); + + // Free OSystem + delete (Maemo::OSystem_SDL_Maemo *)g_system; + + return res; +} + +#endif diff --git a/backends/platform/maemo/module.mk b/backends/platform/maemo/module.mk new file mode 100644 index 0000000000..47f6b56ad0 --- /dev/null +++ b/backends/platform/maemo/module.mk @@ -0,0 +1,13 @@ +MODULE := backends/platform/maemo + +MODULE_OBJS := \ + main.o \ + maemo.o + +# We don't use rules.mk but rather manually update OBJS and MODULE_DIRS. +MODULE_OBJS := $(addprefix $(MODULE)/, $(MODULE_OBJS)) +OBJS := $(MODULE_OBJS) $(OBJS) +MODULE_DIRS += $(sort $(dir $(MODULE_OBJS))) + +# Hack to ensure the SDL backend is built so we can use OSystem_SDL. +-include $(srcdir)/backends/platform/sdl/module.mk diff --git a/backends/platform/maemo/scummvm-1.1.0-maemo.patch b/backends/platform/maemo/scummvm-1.1.0-maemo.patch deleted file mode 100644 index 49b14120b5..0000000000 --- a/backends/platform/maemo/scummvm-1.1.0-maemo.patch +++ /dev/null @@ -1,1371 +0,0 @@ -diff -Naur scummvm-1.1.orig/debian/changelog scummvm-1.1/debian/changelog ---- scummvm-1.1.orig/debian/changelog 1970-01-01 01:00:00.000000000 +0100 -+++ scummvm-1.1/debian/changelog 2010-03-24 15:40:44.000000000 +0100 -@@ -0,0 +1,211 @@ -+scummvm (1.1.0~pre) unstable; urgency=low -+ -+ * 1.1.0 testing release -+ * cleanup for N900 (new firmwares need less hacks) -+ * unified binary for all devices now have datafiles included (~2MB) -+ -+ -- Frantisek Dufka <dufkaf@seznam.cz> Wed, 24 Mar 2010 01:48:05 +0100 -+scummvm (1.0.0-4) unstable; urgency=low -+ -+ * datadir optified (/usr/share/scummvm -> /opt/scummvm/share) -+ * added engine files to datadir -+ * Application Manager icon enlarged to 48x48 -+ -+ -- Frantisek Dufka <dufkaf@seznam.cz> Thu, 17 Dec 2009 13:54:51 +0100 -+scummvm (1.0.0-3) unstable; urgency=low -+ -+ * disable taskmanager topleft button in fullscreen mode (N900) -+ * map shift+click to right button click -+ * mam ctrl+click to mouse move (no click) -+ * set fullscreen window as _HILDON_NON_COMPOSITED_WINDOW (N900) -+ -+ -- Frantisek Dufka <dufkaf@seznam.cz> Tue, 15 Dec 2009 23:12:51 +0100 -+scummvm (1.0.0-2) unstable; urgency=low -+ -+ * grab N900 volume keys -+ * map Shift+Backspace to Escape key, shift+enter to Menu key (N900) -+ * optified = main binary moved to /opt/scummvm/bin/scummvm -+ -+ -- Frantisek Dufka <dufkaf@seznam.cz> Sat, 12 Dec 2009 23:39:04 +0100 -+scummvm (1.0.0-1) unstable; urgency=low -+ -+ * -mcpu=arm1136j-s -mfpu=vfp -mfloat-abi=softfp breaks Gobliins, reverted -+ -+ -- Frantisek Dufka <dufkaf@seznam.cz> Wed, 2 Dec 2009 10:25:11 +0100 -+scummvm (1.0.0) unstable; urgency=low -+ -+ * upstream 1.0 release -+ * Initial support for N900 -+ -+ -- Frantisek Dufka <dufkaf@seznam.cz> Fri, 6 Nov 2009 22:02:25 +0100 -+scummvm (1.0.0~rc1-3) unstable; urgency=low -+ -+ * updated to 1.0 branch revision 43999 to fix bugs (Cruise pause, ..) -+ * Cruise for Corpse mapping added to zoom+ for N800/770 -+ -+ -- Frantisek Dufka <dufkaf@seznam.cz> Mon, 7 Sep 2009 09:03:13 +0200 -+scummvm (1.0.0~rc1-2) unstable; urgency=low -+ -+ * Cruise for Corpse key bindings added -+ - menu key for menu, zoom-=right click, zoom+=context menu -+ -+ -- Frantisek Dufka <dufkaf@seznam.cz> Wed, 2 Sep 2009 23:03:59 +0200 -+scummvm (1.0.0~rc1-1) unstable; urgency=low -+ -+ * Discworld key bindings added - menu key for menu, zoom-=right click, zoom+=Enter/y key -+ -+ -- Frantisek Dufka <dufkaf@seznam.cz> Wed, 2 Sep 2009 09:53:08 +0200 -+scummvm (1.0.0~rc1) unstable; urgency=low -+ -+ * upstream 1.0.0rc1 release -+ -+ -- Frantisek Dufka <dufkaf@seznam.cz> Thu, 20 Aug 2009 23:33:59 +0200 -+scummvm (0.13.1) unstable; urgency=low -+ -+ * upstream 0.13.1 release -+ -+ -- Frantisek Dufka <dufkaf@seznam.cz> Sat, 18 Apr 2009 22:40:42 +0200 -+scummvm (0.13.0-2) unstable; urgency=low -+ -+ * dbus_service.patch is incomplete - needs also install line in debian/rules -+ -+ -- Frantisek Dufka <dufkaf@seznam.cz> Fri, 27 Feb 2009 20:37:29 +0100 -+scummvm (0.13.0-1) unstable; urgency=low -+ -+ * fix crash in task switcher caption code when .scummvmrc had fullscreen value set -+ * enabled also dbus_service.patch for home key switching back (not needed in OS < 2008) -+ -+ -- Frantisek Dufka <dufkaf@seznam.cz> Fri, 27 Feb 2009 09:29:01 +0100 -+scummvm (0.13.0) unstable; urgency=low -+ -+ * upstream 0.13.0 release -+ * Feeble Files mapping -+ * task switcher item name patch from mikkov -+ -+ -- Frantisek Dufka <dufkaf@seznam.cz> Wed, 18 Feb 2009 21:52:33 +0100 -+scummvm (0.11.99-4) unstable; urgency=low -+ -+ * Maemo extras-devel test version -+ - maemo-taskswitcher.patch: title shown right from the beginning -+ and title not fixed to "ScummVM" only -+ - dbus_service.patch: modify scummvm.desktop, scummvm.wrapper and -+ scummvm.service to make switching application automatically back -+ via second home key long press to work -+ -+ -- Mikko Vartiainen <mvartiainen@gmail.com> Thu, 03 Jan 2009 01:59:52 +0200 -+scummvm (0.11.99-3) unstable; urgency=low -+ -+ * Maemo extras-devel test version -+ - maemo-taskswitcher.patch -+ -+ -- Mikko Vartiainen <mvartiainen@gmail.com> Thu, 01 Jan 2009 13:13:13 +0200 -+scummvm (0.11.99-2) unstable; urgency=low -+ -+ * Maemo extras-devel test version -+ - keeping version below 0.12.0 -+ - not in user/ category -+ -+ -- Mikko Vartiainen <mvartiainen@gmail.com> Thu, 01 Jan 2009 02:04:14 +0200 -+scummvm (0.12.0) unstable; urgency=low -+ -+ * upstream 0.12.0 release -+ * update description -+ -+ -- Frantisek Dufka <dufkaf@seznam.cz> Mon, 25 Aug 2008 21:47:41 +0200 -+scummvm (0.11.99) unstable; urgency=low -+ -+ * upstream 0.12.0 testing pre-release -+ * big icons added for OS2008 menu -+ -+ -- Frantisek Dufka <dufkaf@seznam.cz> Fri, 22 Aug 2008 08:20:48 +0200 -+scummvm (0.11.1) unstable; urgency=low -+ -+ * upstream 0.11.1 release -+ * mapping for N810: zoom+ = menu for all games (except FW) -+ -+ -- Frantisek Dufka <dufkaf@seznam.cz> Sat, 23 Feb 2008 20:41:37 +0100 -+scummvm (0.11.0-2) unstable; urgency=low -+ -+ * mapping for N800/770: zoom+ = y, zoom- = 1 (all games except FW) -+ this fixes save dialog in BS1 and also allows to exit some games via 'y' -+ * mapping for N810: zoom- = rightclick for all games -+ * updated to revision 30849 from 0.11 branch (some bugfixes for 0.11.1) -+ -+ -- Frantisek Dufka <dufkaf@seznam.cz> Mon, 11 Feb 2008 22:22:48 +0100 -+scummvm (0.11.0-1) unstable; urgency=low -+ -+ * theme files added back -+ * SWORD2,SAGA - added zoom keys =1/2 for saved games -+ * different mapping for N810 rightclick=zoom-,menu=zoom+ (currently only in LURE) -+ * added NEWS README COPYRIGHT do doc dir as per scummvm project guidelines -+ -+ -- Frantisek Dufka <dufkaf@seznam.cz> Sun, 13 Jan 2008 22:58:41 +0100 -+scummvm (0.11.0-0) unstable; urgency=low -+ -+ * upstream 0.11 release -+ -+ -- Frantisek Dufka <dufkaf@seznam.cz> Sat, 12 Jan 2008 22:26:34 +0100 -+scummvm (0.10.0-5) unstable; urgency=low -+ -+ * fixed for chinook, menu selection postinst script added -+ -+ -- Frantisek Dufka <dufkaf@seznam.cz> Thu, 25 Oct 2007 09:56:32 +0200 -+scummvm (0.10.0-4) unstable; urgency=low -+ -+ * AGI - added pred.dic to DATA_PATH (=/usr/share/scummvm) to enable -+ predictive input -+ -+ -- Frantisek Dufka <dufkaf@seznam.cz> Tue, 28 Aug 2007 09:58:29 +0200 -+scummvm (0.10.0-3) unstable; urgency=low -+ -+ * SCUMM - added mapping also for key up events (may fix right button in FT?) -+ * SWORD2 - added right button press mapping (not tested) -+ -+ -- Frantisek Dufka <dufkaf@seznam.cz> Mon, 20 Aug 2007 22:39:07 +0200 -+scummvm (0.10.0-2) unstable; urgency=low -+ -+ * Future Wars - add mapping for left/up/down/right,zoom +/- -+ * fix SDL backend to set mouse position on button down event -+ as we may not have mousemove events with touchscreen -+ -+ -- Frantisek Dufka <dufkaf@seznam.cz> Fri, 13 Jul 2007 09:56:37 +0200 -+scummvm (0.10.0-1) unstable; urgency=low -+ -+ * mapped F10 in Future Wars to menu key -+ -+ -- Frantisek Dufka <dufkaf@seznam.cz> Wed, 11 Jul 2007 22:20:00 +0200 -+scummvm (0.10.0) unstable; urgency=low -+ -+ * upstream 0.10 release, enabled FLAC too -+ -+ -- Frantisek Dufka <dufkaf@seznam.cz> Wed, 4 Jul 2007 12:48:48 +0200 -+scummvm (0.9.1-1) unstable; urgency=low -+ -+ * 0.9.1 mapped right mouse button in sword1 -+ -+ -- Frantisek Dufka <dufkaf@seznam.cz> Mon, 18 Jun 2007 21:15:31 +0200 -+scummvm (0.9.1) unstable; urgency=low -+ -+ * 0.9.1 upstream release -+ -+ -- Frantisek Dufka <dufkaf@seznam.cz> Wed, 1 Nov 2006 20:40:51 +0100 -+scummvm (0.9.0-3) unstable; urgency=low -+ -+ * merged fixes in 0.9.0 upstream branch -+ -+ -- Frantisek Dufka <dufkaf@seznam.cz> Mon, 9 Oct 2006 15:40:59 +0200 -+scummvm (0.9.0-2) unstable; urgency=low -+ -+ * merged fixes in 0.9.0 upstream branch -+ -+ -- Frantisek Dufka <dufkaf@seznam.cz> Sat, 12 Aug 2006 20:10:47 +0200 -+scummvm (0.9.0-1) unstable; urgency=low -+ -+ * merged changes in 0.9.0 upstream release -+ -+ -- Frantisek Dufka <dufkaf@seznam.cz> Sun, 23 Jul 2006 22:29:51 +0200 -+scummvm (0.9.0) unstable; urgency=low -+ -+ * 0.9.0 upstream release -+ -+ -- Frantisek Dufka <dufkaf@seznam.cz> Tue, 27 Jun 2006 20:30:54 +0200 -diff -Naur scummvm-1.1.orig/debian/compat scummvm-1.1/debian/compat ---- scummvm-1.1.orig/debian/compat 1970-01-01 01:00:00.000000000 +0100 -+++ scummvm-1.1/debian/compat 2010-03-24 00:14:36.000000000 +0100 -@@ -0,0 +1 @@ -+4 -diff -Naur scummvm-1.1.orig/debian/control scummvm-1.1/debian/control ---- scummvm-1.1.orig/debian/control 1970-01-01 01:00:00.000000000 +0100 -+++ scummvm-1.1/debian/control 2010-03-24 00:14:36.000000000 +0100 -@@ -0,0 +1,51 @@ -+Source: scummvm -+Section: user/games -+Priority: optional -+Maintainer: Frantisek Dufka <dufkaf@seznam.cz> -+Build-Depends: debhelper (>> 4.0.0), libsdl1.2-dev, libmad0-dev, libasound2-dev, libvorbisidec-dev, libmpeg2-4-dev, libflac-dev (>= 1.1.2), libz-dev, quilt -+ -+Standards-Version: 3.6.1.1 -+Package: scummvm -+Depends: ${shlibs:Depends} -+Architecture: i386 armel -+Section: user/games -+Description: interpreter that will play graphic adventure games -+ written for LucasArts' SCUMM virtual machine, Sierra's AGI adventures, -+ Adventure Soft's Simon the Sorcerer 1, 2 and Feeble Files, -+ Revolution Software's Beneath a Steel Sky and Broken Sword 1 and 2, -+ Interactive Binary Illusions' Flight of the Amazon Queen, -+ Coktel Vision's Gobliiins, Wyrmkeep's Inherit the Earth, -+ Westwood's Legend of Kyrandia, and various others. -+ This package does not contain any actual games. -+XBS-Maemo-Icon-26: -+ iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAMAAACelLz8AAAC/VBMVEUICwcH -+ CQUKDAgLDQoMDwsOEAwREAUPEQ0QEg8PFQoRExAUEwoVFAwPGAcTFBIRFg0W -+ FQ0XFg4RGgkTGA8XGQsTGwwUHA0aGRIWGxMXHQkVHQ8aGhMbGxQcHQocGxUZ -+ HwsYIgcfHxgeIRUbJQwhIBofJAweJwgfKQocKwwgKgshKw0gLggfLg8jLQ8n -+ LwwpLhEmMwcoMRQjNgotLCYmNwQlNwwqOBQtOQgsOQ8xNh4sPQswNyQqQAUw -+ PAsuOiAsQgcwOyIqRgIsSAQvRgs0PyY1Rg06RA0+PDAwSwg2RxUzTQE4TQsz -+ VAc/SSo6VAk4VwE6VRM2XAVAUC85XwlJVCNEXQo+YwJGXwxMWS1JXC5AagBI -+ awJUagRIcQBSbwpHeAJTaD9OdwNXcwJKewZNfABacRlOfQBPfgBQfwBMggBW -+ fgBNgwNSgQJOhAVecUJjdSZefwNUiABZhgBjeDZieDxhezFQjQBgghZkhQ5j -+ iQJUkAZcixJmgDZnhCtckQpblgBekw5clwBqgkthlQBdmAJriz90hz5omgBs -+ mAhxlgd0mAB5lgBpnA16khdzmAtxnABooQBtnwB4jUpzngBkpQR5nQF8j0Vr -+ pQduoRZ4nRR3k014oQBzpAt8oAh/ogBvqA5trACBmypwqRF1pw+GogCAow+D -+ pQB8phJ/nUNurxh0rRd4rwmHqQd6qDOArwCJqwyDsgCMrgB8ryiFtAB7uQN8 -+ sDKBuAWOsBWJqFR8ti2IsiOSswaBuRt6vxCOtgqXsgePrjR9wQCFuw2KuQyB -+ uSeSuACEux6JuR2OvACAxACEvCuSuhOHujSMwQGTtiqfuACRvwGOvRWHuz2T -+ wASPwwmYvwaLvTebuxiWvhmSwBqZwAmNu0aevgiKvkCVviaMvE6bwQycuTid -+ vhylvQyZwB2cwg+QywCawR6fwB+bwyGI0gaewCudxCOjwyOT1ACmwjiX0g+j -+ xTqmxzOd1gCV0i6kyyuoyTah1Sif2h6tzjukzF+pz1uq1Eeg2Uml3U1kaLAB -+ AAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAHrSURBVCjPY2BAAC5ubkFB -+ BkzAzggDfKgSUFEmKCmOIsPvktA0aVpbSYQ+FwsjkwpMBsi2m/X7z89v3759 -+ +ngg1UqIlZEVponJYcW/rw9unH/04u2bc0vbo+WZWGCahEv/fj+6Yc2SZfv3 -+ b5w6+eACHVYWmCazMz+unN44b3ZfV3dnx5yDiaKsUAOZGD2/fL58+PSGg3Gu -+ buEVWyZacLCzw6S8X324fOHqibMxWpKy5okBIjAZoNOt9r47e+HOnafbe/ND -+ DNWkOGAyDKwsCtXPTly4eufqm+fvHy4M1RRggsnJMLI6z9x99Oqtx7cuPP/2 -+ ele5LjtCGyObbcHcDfuevHn+5s319RuSpOByrEwcwsqhlcvXHbp38+LxiXP6 -+ DeBSTKzWvkrCun5Zq04dO7S6p67ZHibFziiRt6PYUk5YtfbUqSMTGnKyHaFS -+ rMDA3fHr7tqayKDWa0dWVmXHp5lCpRgZ2QI2HTl25NLt+1t3rppRFJ8SrwGX -+ 4g9rmbJo0cpVqxZNaK5OS0nzF4NLMWkHZ1TVN9bXlxXmAo2L0uNgZITaxcjI -+ axAYH5+RATQrPtZHk5udA+Z2cIpQN3Hy8vOwMVLmYGTidoenDSawLAsnJz8L -+ kMUiY4ySpviYoKmKRVAcIyXKyIiLyygi+ADqVqrAkApevwAAAABJRU5ErkJg -+ gg== -diff -Naur scummvm-1.1.orig/debian/copyright scummvm-1.1/debian/copyright ---- scummvm-1.1.orig/debian/copyright 1970-01-01 01:00:00.000000000 +0100 -+++ scummvm-1.1/debian/copyright 2010-03-24 00:14:36.000000000 +0100 -@@ -0,0 +1,20 @@ -+ScummVM was debianized by Bastien Nocera <hadess@hadess.net> the 5th Apr 2002. -+It was adopted by Tore Anderson <tore@linpro.no> the 4th Oct 2002. -+Packaged for the Maemo platform by Tomas Junnoen <tomas@fs-security.com> Oct 2005 -+Since 0.8.2 packaging for Maemo done by Frantisek Dufka <dufkaf@seznam.cz> -+ -+It was downloaded from <http://www.scummvm.org/>. -+ -+Upstream Authors: see AUTHORS file of the ScummVM source distribution. -+ -+Copyright: -+ -+ 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, or (at your option) any -+ later version. -+ -+ On Debian GNU/Linux systems, the complete text of the GNU General -+ Public License can be found in `/usr/share/common-licenses/GPL'. -+ -+This copyright also applies to the Debian-related build scripts. -diff -Naur scummvm-1.1.orig/debian/postinst scummvm-1.1/debian/postinst ---- scummvm-1.1.orig/debian/postinst 1970-01-01 01:00:00.000000000 +0100 -+++ scummvm-1.1/debian/postinst 2010-03-24 00:14:36.000000000 +0100 -@@ -0,0 +1,19 @@ -+#! /bin/sh -+if [ "$1" = "configure" ] ; then -+OSVER=$OSSO_VERSION -+[ -z "$OSVER" -a -f /etc/osso_software_version ] && OSVER=`cat /etc/osso_software_version` -+OSVER=`echo $OSVER | cut -d _ -f 2` -+case $OSVER in -+ 2006*|2007*) -+ #nothing to do -+ true -+ ;; -+ *) -+ #ugly trick, until this icon is removed big icon in menu does not show -+ [ -f /usr/share/icons/scummvm.xpm ] && rm /usr/share/icons/scummvm.xpm -+ ;; -+esac -+ [ -x /usr/bin/gtk-update-icon-cache ] && /usr/bin/gtk-update-icon-cache /usr/share/icons/hicolor -+ [ -x /usr/bin/maemo-select-menu-location -a -z "$2" ] && /usr/bin/maemo-select-menu-location scummvm.desktop tana_fi_games -+fi -+exit 0 -diff -Naur scummvm-1.1.orig/debian/rules scummvm-1.1/debian/rules ---- scummvm-1.1.orig/debian/rules 1970-01-01 01:00:00.000000000 +0100 -+++ scummvm-1.1/debian/rules 2010-03-24 13:39:46.000000000 +0100 -@@ -0,0 +1,72 @@ -+#!/usr/bin/make -f -+ -+#include /usr/share/quilt/quilt.make -+ -+build: scummvm -+ -+scummvm: -+ dh_testdir -+ CXXFLAGS="-Os -mcpu=arm926ej-s -fomit-frame-pointer -DMAEMO_SDL -I/usr/X11R6/include" ./configure --prefix=/usr --disable-debug --disable-mt32emu --disable-hq-scalers --with-tremor-prefix=/usr --enable-tremor --with-zlib-prefix=/usr --enable-zlib --with-mad-prefix=/usr --enable-mad --enable-flac --disable-alsa --prefix=/opt/scummvm --datadir=/opt/scummvm/share -+## --host=arm-linux --enable-plugins --disable-scumm-7-8 -+ $(MAKE) -+ -+clean: -+ dh_testdir -+ dh_testroot -+ -$(MAKE) distclean -+ dh_clean -+ -+install: build -+ dh_testdir -+ dh_testroot -+ dh_clean -+ dh_installdirs -+# not as a service -+# install -m0755 dists/maemo/scummvm.wrapper debian/scummvm/usr/games/scummvm -+# install -m0644 dists/maemo/scummvm.desktop debian/scummvm/usr/share/applications/hildon -+# run as fake dbus-service to enable switching back to application from desktop via home key -+ install -m0755 dists/maemo/scummvm.servicewrapper debian/scummvm/usr/games/scummvm -+ install -m0644 dists/maemo/scummvm.servicedesktop debian/scummvm/usr/share/applications/hildon/scummvm.desktop -+ install -m0644 dists/maemo/scummvm.service debian/scummvm/usr/share/dbus-1/services -+# end of fake dbus service -+ install -m0644 dists/maemo/scummvm26.png debian/scummvm/usr/share/icons/hicolor/26x26/hildon/scummvm.png -+ install -m0644 dists/maemo/scummvm40.png debian/scummvm/usr/share/icons/hicolor/40x40/hildon/scummvm.png -+ install -m0644 dists/maemo/scummvm48.png debian/scummvm/usr/share/icons/hicolor/48x48/hildon/scummvm.png -+ install -m0644 dists/maemo/scummvm64.png debian/scummvm/usr/share/icons/hicolor/64x64/hildon/scummvm.png -+ install -m0644 icons/scummvm.xpm debian/scummvm/usr/share/icons -+# install -m0644 -d debian/scummvm/usr/lib/scummvm -+# install -m0644 plugins/lib*.so debian/scummvm/usr/lib/scummvm -+##non-optified version -+# install -m0755 scummvm debian/scummvm/usr/games/scummvm.bin -+# install -m0644 -d debian/scummvm/usr/share/scummvm -+# install -m0644 dists/pred.dic debian/scummvm/usr/share/scummvm -+# install -m0644 gui/themes/scummclassic.zip gui/themes/scummmodern.zip debian/scummvm/usr/share/scummvm -+# optified version (save rootfs space on N900), see also configure prefix and datadir paths above -+ install -m0644 -d debian/scummvm/opt/scummvm/bin -+ install -m0755 scummvm debian/scummvm/opt/scummvm/bin -+ install -m0644 -d debian/scummvm/opt/scummvm/share -+ install -m0644 dists/pred.dic debian/scummvm/opt/scummvm/share -+ install -m0644 gui/themes/scummclassic.zip gui/themes/scummmodern.zip debian/scummvm/opt/scummvm/share -+# for optified version we can also add engine datafiles -+ install -m0644 dists/engine-data/drascula.dat dists/engine-data/kyra.dat dists/engine-data/lure.dat dists/engine-data/queen.tbl dists/engine-data/sky.cpt dists/engine-data/teenagent.dat debian/scummvm/opt/scummvm/share -+ -+ install -m0644 -d debian/scummvm/usr/share/doc/scummvm -+ install -m0644 NEWS README COPYRIGHT debian/scummvm/usr/share/doc/scummvm -+binary: binary-arch -+ -+binary-arch: build install -+ dh_testdir -+ dh_testroot -+ dh_installchangelogs NEWS -+ dh_link -+ dh_strip -+ dh_fixperms -+ dh_installdeb -+ dh_shlibdeps -+ dh_gencontrol -+ dh_md5sums -+ dh_builddeb -+ -+binary-indep: -+ -+.PHONY: build clean binary install binary-arch binary-indep -diff -Naur scummvm-1.1.orig/debian/scummvm.dirs scummvm-1.1/debian/scummvm.dirs ---- scummvm-1.1.orig/debian/scummvm.dirs 1970-01-01 01:00:00.000000000 +0100 -+++ scummvm-1.1/debian/scummvm.dirs 2010-03-24 00:14:36.000000000 +0100 -@@ -0,0 +1,8 @@ -+usr/games -+usr/share/icons -+usr/share/icons/hicolor/26x26/hildon -+usr/share/icons/hicolor/40x40/hildon -+usr/share/icons/hicolor/48x48/hildon -+usr/share/icons/hicolor/64x64/hildon -+usr/share/applications/hildon -+usr/share/dbus-1/services -\ No newline at end of file ---- scummvm-1.1.orig/configure 2010-03-24 21:25:00.000000000 +0100 -+++ scummvm-1.1/configure 2010-03-24 21:24:28.000000000 +0100 -@@ -1355,6 +1355,9 @@ - _need_memalign=yes - add_line_to_config_mk 'USE_ARM_SOUND_ASM = 1' - add_line_to_config_mk 'USE_ARM_SMUSH_ASM = 1' -+ add_line_to_config_mk 'USE_ARM_GFX_ASM = 1' -+ add_line_to_config_mk 'ARM_USE_GFX_ASM = 1' -+ add_line_to_config_mk 'USE_ARM_COSTUME_ASM = 1' - ;; - arm-riscos|linupy) - DEFINES="$DEFINES -DUNIX -DLINUPY" -@@ -2205,11 +2208,11 @@ - # - test -z "$_bindir" && _bindir="$_prefix/bin" - test -z "$_mandir" && _mandir="$_prefix/share/man" --test -z "$_datadir" && _datadir="$_prefix/share" --test -z "$_libdir" && _libdir="$_prefix/lib" -+test -z "$_datadir" && _datadir="$_prefix/share/scummvm" -+test -z "$_libdir" && _libdir="$_prefix/lib/scummvm" - --DEFINES="$DEFINES -DDATA_PATH=\\\"$_datadir/scummvm\\\"" --DEFINES="$DEFINES -DPLUGIN_DIRECTORY=\\\"$_libdir/scummvm\\\"" -+DEFINES="$DEFINES -DDATA_PATH=\\\"$_datadir\\\"" -+DEFINES="$DEFINES -DPLUGIN_DIRECTORY=\\\"$_libdir\\\"" - - - echo_n "Backend... " ---- scummvm-1.1.orig/engines/kyra/module.mk 2010-03-21 22:01:04.000000000 +0100 -+++ scummvm-1.1/engines/kyra/module.mk 2010-03-24 00:14:36.000000000 +0100 -@@ -95,3 +95,9 @@ - - # Include common rules - include $(srcdir)/rules.mk -+ -+#ugly workaround, screen.cpp crashes gcc version 3.4.4 (CodeSourcery ARM 2005q3-2) with anything but -O3 -+$(MODULE)/screen.o: $(MODULE)/screen.cpp -+ $(MKDIR) $(*D)/$(DEPDIR) -+ $(CXX) -Wp,-MMD,"$(*D)/$(DEPDIR)/$(*F).d",-MQ,"$@",-MP $(CXXFLAGS) -O3 $(CPPFLAGS) -c $(<) -o $*.o -+ ---- scummvm-1.1.orig/engines/gob/util.cpp 2010-03-21 22:01:08.000000000 +0100 -+++ scummvm-1.1/engines/gob/util.cpp 2010-03-24 00:17:52.000000000 +0100 -@@ -114,6 +114,10 @@ - _mouseButtons = (MouseButtons) (((uint32) _mouseButtons) & ~((uint32) kMouseButtonsRight)); - break; - case Common::EVENT_KEYDOWN: -+#ifdef MAEMO_SDL -+ if (event.kbd.keycode==Common::KEYCODE_F4) -+ _mouseButtons = (MouseButtons) (((uint32) _mouseButtons) | ((uint32) kMouseButtonsRight)); -+#endif - if (event.kbd.hasFlags(Common::KBD_CTRL)) { - if (event.kbd.keycode == Common::KEYCODE_f) - _fastMode ^= 1; -@@ -126,6 +130,10 @@ - addKeyToBuffer(event.kbd); - break; - case Common::EVENT_KEYUP: -+#ifdef MAEMO_SDL -+ if (event.kbd.keycode==Common::KEYCODE_F4) -+ _mouseButtons = (MouseButtons) (((uint32) _mouseButtons) & ~((uint32) kMouseButtonsRight)); -+#endif - break; - default: - break; ---- scummvm-1.1.orig/engines/queen/input.cpp 2010-03-21 22:01:14.000000000 +0100 -+++ scummvm-1.1/engines/queen/input.cpp 2010-03-24 00:14:36.000000000 +0100 -@@ -176,7 +176,11 @@ - } - break; - case Common::KEYCODE_F1: // use Journal -+#ifdef MAEMO_SDL -+ case Common::KEYCODE_F4: // menu key on N770 -+#else - case Common::KEYCODE_F5: -+#endif - if (_cutawayRunning) { - if (_canQuit) { - _keyVerb = VERB_USE_JOURNAL; ---- scummvm-1.1.orig/engines/sword1/sword1.cpp 2010-03-21 22:01:22.000000000 +0100 -+++ scummvm-1.1/engines/sword1/sword1.cpp 2010-03-24 00:14:36.000000000 +0100 -@@ -697,8 +697,21 @@ - while (_eventMan->pollEvent(event)) { - switch (event.type) { - case Common::EVENT_KEYDOWN: -+#ifdef MAEMO_SDL -+// map center to right button -+ if (event.kbd.keycode == 13) { -+ _mouseState |= BS1R_BUTTON_DOWN; -+ } else -+#endif - _keyPressed = event.kbd; - break; -+#ifdef MAEMO_SDL -+ case Common::EVENT_KEYUP: -+ if (event.kbd.keycode == 13) { -+ _mouseState |= BS1R_BUTTON_UP; -+ } -+ break; -+#endif - case Common::EVENT_MOUSEMOVE: - _mouseCoord = event.mouse; - break; ---- scummvm-1.1.orig/engines/sword2/sword2.cpp 2010-03-21 22:01:23.000000000 +0100 -+++ scummvm-1.1/engines/sword2/sword2.cpp 2010-03-24 00:14:36.000000000 +0100 -@@ -662,11 +662,27 @@ - _gameSpeed = 1; - } - } -+#ifdef MAEMO_SDL -+// map center to right button -+ else if (event.kbd.keycode == 13 && !(_inputEventFilter & RD_RIGHTBUTTONDOWN)) { -+ _mouseEvent.pending = true; -+ _mouseEvent.buttons = RD_RIGHTBUTTONDOWN; -+ } else -+#endif - if (!(_inputEventFilter & RD_KEYDOWN)) { - _keyboardEvent.pending = true; - _keyboardEvent.kbd = event.kbd; - } - break; -+#ifdef MAEMO_SDL -+ case Common::EVENT_KEYUP: -+// map center to right button -+ if (event.kbd.keycode == 13 && !(_inputEventFilter & RD_RIGHTBUTTONUP)) { -+ _mouseEvent.pending = true; -+ _mouseEvent.buttons = RD_RIGHTBUTTONUP; -+ } -+ break; -+#endif - case Common::EVENT_LBUTTONDOWN: - if (!(_inputEventFilter & RD_LEFTBUTTONDOWN)) { - _mouseEvent.pending = true; ---- scummvm-1.1.orig/engines/scumm/input.cpp 2010-03-21 22:01:31.000000000 +0100 -+++ scummvm-1.1/engines/scumm/input.cpp 2010-03-24 00:19:14.000000000 +0100 -@@ -135,7 +135,20 @@ - // Normal key press, pass on to the game. - _keyPressed = event.kbd; - } -- -+#ifdef MAEMO_SDL -+ switch (_keyPressed.keycode) { -+ case Common::KEYCODE_F8: _fastMode ^= 1; break ;// Map F8 (zoom out) to toggle fast mode -+ case Common::KEYCODE_F4: _keyPressed.keycode = Common::KEYCODE_F5; _keyPressed.ascii=Common::ASCII_F5 ; break; // map F4 to F5 (menu key) -+ case Common::KEYCODE_RETURN: _keyPressed.keycode = Common::KEYCODE_TAB; _keyPressed.ascii=Common::ASCII_TAB ; break; // map Select (return) to Tab (right mouse button) -+ default: ; -+ } -+ if (_game.version < 7) switch(event.kbd.keycode){ -+ case Common::KEYCODE_UP: _keyPressed.ascii = ' '; _keyPressed.keycode=Common::KEYCODE_SPACE; break ;// map Up to space (pause game) -+ case Common::KEYCODE_DOWN: _keyPressed.ascii ='.'; _keyPressed.keycode=Common::KEYCODE_PERIOD; break ;// map Down to . (skip one line of dialog) -+ default: ; -+ } -+#endif -+ - // FIXME: We are using ASCII values to index the _keyDownMap here, - // yet later one code which checks _keyDownMap will use KEYCODEs - // to do so. That is, we are mixing ascii and keycode values here, -@@ -151,6 +164,20 @@ - break; - - case Common::EVENT_KEYUP: -+#ifdef MAEMO_SDL -+ // map keyup with similar rules as keydown -+ switch (event.kbd.keycode) { -+ -+ case Common::KEYCODE_F4: event.kbd.keycode = Common::KEYCODE_F5; event.kbd.ascii=Common::ASCII_F5 ; break; // map F4 to F5 (menu key) -+ case Common::KEYCODE_RETURN: event.kbd.keycode = Common::KEYCODE_TAB; event.kbd.ascii=Common::ASCII_TAB ; break; // map Select (return) to Tab (right mouse button) -+ default: ; -+ } -+ if (_game.version < 7) switch(event.kbd.keycode){ -+ case Common::KEYCODE_UP: event.kbd.ascii = ' '; event.kbd.keycode=Common::KEYCODE_SPACE; break ;// map Up to space (pause game) -+ case Common::KEYCODE_DOWN: event.kbd.ascii ='.'; event.kbd.keycode=Common::KEYCODE_PERIOD; break ;// map Down to . (skip one line of dialog) -+ default: ; -+ } -+#endif - if (event.kbd.ascii >= 512) { - debugC(DEBUG_GENERAL, "keyPressed > 512 (%d)", event.kbd.ascii); - } else { -@@ -513,9 +540,10 @@ - if (VAR_SAVELOAD_SCRIPT != 0xFF && _currentRoom != 0) - runScript(VAR(VAR_SAVELOAD_SCRIPT2), 0, 0, 0); - -+#ifndef MAEMO_SDL - } else if (restartKeyEnabled && (lastKeyHit.keycode == Common::KEYCODE_F8 && lastKeyHit.hasFlags(0))) { - confirmRestartDialog(); -- -+#endif - } else if (pauseKeyEnabled && (lastKeyHit.keycode == Common::KEYCODE_SPACE && lastKeyHit.hasFlags(0))) { - pauseGame(); - ---- scummvm-1.1.orig/engines/scumm/dialogs.cpp 2010-03-21 22:01:31.000000000 +0100 -+++ scummvm-1.1/engines/scumm/dialogs.cpp 2010-03-24 00:14:36.000000000 +0100 -@@ -633,7 +633,11 @@ - } - - void PauseDialog::handleKeyDown(Common::KeyState state) { -+#ifdef MAEMO_SDL -+ if (state.ascii == ' ' || state.keycode == Common::KEYCODE_UP ) // Close pause dialog if space or UP key is pressed -+#else - if (state.ascii == ' ') // Close pause dialog if space key is pressed -+#endif - close(); - else - ScummDialog::handleKeyDown(state); -@@ -695,12 +699,19 @@ - } - - void ValueDisplayDialog::handleKeyDown(Common::KeyState state) { -+#ifdef MAEMO_SDL -+ if (state.ascii == _incKey || state.ascii == _decKey || state.keycode == 275 || state.keycode == 276) { -+ if ((state.ascii == _incKey || state.keycode == 275 ) && _value < _max) -+ _value++; -+ else if ((state.ascii == _decKey || state.keycode == 276) && _value > _min) -+ _value--; -+#else - if (state.ascii == _incKey || state.ascii == _decKey) { - if (state.ascii == _incKey && _value < _max) - _value++; - else if (state.ascii == _decKey && _value > _min) - _value--; -- -+#endif - setResult(_value); - _timer = getMillis() + kDisplayDelay; - draw(); ---- scummvm-1.1.orig/engines/touche/touche.cpp 2010-03-21 22:01:32.000000000 +0100 -+++ scummvm-1.1/engines/touche/touche.cpp 2010-03-24 00:25:29.000000000 +0100 -@@ -294,6 +294,13 @@ - while (_eventMan->pollEvent(event)) { - switch (event.type) { - case Common::EVENT_KEYDOWN: -+#ifdef MAEMO_SDL -+ if (event.kbd.keycode == 13) { // select button simulates righ button toggle -+ _inp_rightMouseButtonPressed=!_inp_rightMouseButtonPressed; -+ } else { -+ _inp_rightMouseButtonPressed = false; -+ } -+#endif - if (!handleKeyEvents) { - break; - } -@@ -304,10 +311,18 @@ - quitGame(); - } - } -+#ifdef MAEMO_SDL -+ } else if (event.kbd.keycode == Common::KEYCODE_F4) { -+#else - } else if (event.kbd.keycode == Common::KEYCODE_F5) { -+#endif - if (_flagsTable[618] == 0 && !_hideInventoryTexts) { - handleOptions(0); - } -+#ifdef MAEMO_SDL -+ } else if (event.kbd.keycode == Common::KEYCODE_F8) { -+ _fastWalkMode = !_fastWalkMode; -+#endif - } else if (event.kbd.keycode == Common::KEYCODE_F9) { - _fastWalkMode = true; - } else if (event.kbd.keycode == Common::KEYCODE_F10) { -@@ -332,12 +347,22 @@ - case Common::EVENT_LBUTTONDOWN: - _inp_leftMouseButtonPressed = true; - break; -+#ifdef MAEMO_SDL -+ case Common::EVENT_LBUTTONUP: -+ // this is done elsewhere _inp_leftMouseButtonPressed = false; -+ _inp_rightMouseButtonPressed = false; // simulate rbutton up to close menu -+ break; -+ case Common::EVENT_RBUTTONDOWN: -+ _inp_rightMouseButtonPressed = !_inp_rightMouseButtonPressed; -+ break; -+#else - case Common::EVENT_RBUTTONDOWN: - _inp_rightMouseButtonPressed = true; - break; - case Common::EVENT_RBUTTONUP: - _inp_rightMouseButtonPressed = false; - break; -+#endif - default: - break; - } ---- scummvm-1.1.orig/engines/sky/sky.cpp 2010-03-21 22:01:39.000000000 +0100 -+++ scummvm-1.1/engines/sky/sky.cpp 2010-03-24 00:14:36.000000000 +0100 -@@ -406,6 +406,17 @@ - switch (event.type) { - case Common::EVENT_KEYDOWN: - _keyPressed = event.kbd; -+#ifdef MAEMO_SDL -+ // Maemo platform keybindings -+ if (_keyPressed.keycode == Common::KEYCODE_F4) // Map F4 (menu) to F5 (access main menu) -+ _keyPressed.keycode = Common::KEYCODE_F5; -+ if (_keyPressed.ascii == 13) // Map Select=Enter to right mouse button -+ _skyMouse->buttonPressed(1); -+ if (_keyPressed.keycode == Common::KEYCODE_F8) // Map F8 (zoom out) to toggle fast mode -+ _fastMode ^= 1; -+ if (_keyPressed.keycode == Common::KEYCODE_DOWN) // Map Down to . (skip one line of dialog) -+ _keyPressed.ascii = '.'; -+#endif - break; - case Common::EVENT_MOUSEMOVE: - if (!(_systemVars.systemFlags & SF_MOUSE_LOCKED)) ---- scummvm-1.1.orig/engines/lure/menu.cpp 2010-03-21 22:01:40.000000000 +0100 -+++ scummvm-1.1/engines/lure/menu.cpp 2010-03-24 00:14:36.000000000 +0100 -@@ -34,7 +34,7 @@ - #include "lure/events.h" - #include "lure/lure.h" - --#if defined(_WIN32_WCE) || defined(__SYMBIAN32__) -+#if defined(_WIN32_WCE) || defined(MAEMO_SDL) || defined(__SYMBIAN32__) - #define LURE_CLICKABLE_MENUS - #endif - ---- scummvm-1.1.orig/engines/cine/main_loop.cpp 2010-03-21 22:01:43.000000000 +0100 -+++ scummvm-1.1/engines/cine/main_loop.cpp 2010-03-24 00:14:36.000000000 +0100 -@@ -75,18 +75,27 @@ - mouseRight = 1; - } - break; -+#ifdef MAEMO_SDL -+ case Common::KEYCODE_UP: -+#else - case Common::KEYCODE_F1: -+#endif - if (allowPlayerInput) { - playerCommand = 0; // EXAMINE - makeCommandLine(); - } - break; -+#ifdef MAEMO_SDL -+ case Common::KEYCODE_DOWN: -+#else - case Common::KEYCODE_F2: -+#endif - if (allowPlayerInput) { - playerCommand = 1; // TAKE - makeCommandLine(); - } - break; -+#ifndef MAEMO_SDL - case Common::KEYCODE_F3: - if (allowPlayerInput) { - playerCommand = 2; // INVENTORY -@@ -99,13 +108,43 @@ - makeCommandLine(); - } - break; -+#else -+//map f3, f4 to f8,f7 = zoom +- keys, when in menu generate keypresses for savegame -+ case Common::KEYCODE_F8: -+ if (inMenu) -+ lastKeyStroke = '1'; -+ else if (allowPlayerInput) { -+ playerCommand = 2; // INVENTORY -+ makeCommandLine(); -+ } -+ break; -+ case Common::KEYCODE_F7: -+ if (inMenu) -+ lastKeyStroke = '2'; -+ else -+ if (allowPlayerInput) { -+ playerCommand = 3; // USE -+ makeCommandLine(); -+ } -+ break; -+#endif -+#ifdef MAEMO_SDL -+ case Common::KEYCODE_LEFT: -+// if (event.kbd.flags&Common::KBD_SHIFT) -+// moveUsingKeyboard(-1, 0); // Left -+#else - case Common::KEYCODE_F5: -+#endif - if (allowPlayerInput) { - playerCommand = 4; // ACTIVATE - makeCommandLine(); - } - break; -+#ifdef MAEMO_SDL -+ case Common::KEYCODE_RIGHT: -+#else - case Common::KEYCODE_F6: -+#endif - if (allowPlayerInput) { - playerCommand = 5; // SPEAK - makeCommandLine(); -@@ -117,7 +156,11 @@ - makeCommandLine(); - } - break; -+#ifdef MAEMO_SDL -+ case Common::KEYCODE_F4: // Menu key -+#else - case Common::KEYCODE_F10: -+#endif - if (!disableSystemMenu && !inMenu) { - g_cine->makeSystemMenu(); - } -@@ -133,19 +176,19 @@ - case Common::KEYCODE_KP_PLUS: - g_cine->modifyGameSpeed(+1); // Faster - break; -- case Common::KEYCODE_LEFT: -+// case Common::KEYCODE_LEFT: - case Common::KEYCODE_KP4: - moveUsingKeyboard(-1, 0); // Left - break; -- case Common::KEYCODE_RIGHT: -+// case Common::KEYCODE_RIGHT: - case Common::KEYCODE_KP6: - moveUsingKeyboard(+1, 0); // Right - break; -- case Common::KEYCODE_UP: -+// case Common::KEYCODE_UP: - case Common::KEYCODE_KP8: - moveUsingKeyboard(0, +1); // Up - break; -- case Common::KEYCODE_DOWN: -+// case Common::KEYCODE_DOWN: - case Common::KEYCODE_KP2: - moveUsingKeyboard(0, -1); // Down - break; ---- scummvm-1.1.orig/backends/platform/sdl/graphics.cpp 2010-03-21 22:01:52.000000000 +0100 -+++ scummvm-1.1/backends/platform/sdl/graphics.cpp 2010-03-24 09:34:28.000000000 +0100 -@@ -520,6 +520,56 @@ - height = bestMode->h; - } - -+#ifdef MAEMO_SDL -+#include "SDL_syswm.h" -+ -+static void maemo5_WM_init(int fullscreen){ -+//static int fsdone=0; -+//static int wmdone=0; -+SDL_SysWMinfo info; -+SDL_VERSION(&info.version); -+if ( SDL_GetWMInfo(&info) ) { -+ Display *dpy = info.info.x11.display; -+ Window win; -+ unsigned long val = 1; -+ Atom atom_zoom = XInternAtom(dpy, "_HILDON_ZOOM_KEY_ATOM", 0); -+ info.info.x11.lock_func(); -+ win = info.info.x11.fswindow; -+ if (win) -+ XChangeProperty (dpy,win,atom_zoom,XA_INTEGER,32,PropModeReplace,(unsigned char *) &val,1); // grab zoom keys -+ win = info.info.x11.wmwindow; -+ if (win) -+ XChangeProperty (dpy,win,atom_zoom,XA_INTEGER,32,PropModeReplace,(unsigned char *) &val,1); // grab zoom keys -+#if 0 -+ if (win && fullscreen /* && !fsdone */ ) { -+ XUnmapWindow(dpy,win); -+ XChangeProperty (dpy,win,atom_zoom,XA_INTEGER,32,PropModeReplace,(unsigned char *) &val,1); // grab zoom keys -+ Atom atom_noncomposited = XInternAtom(dpy, "_HILDON_NON_COMPOSITED_WINDOW", 0); -+ Atom atom_wmstate = XInternAtom(dpy, "_NET_WM_STATE", 0); -+ Atom atom_wmstate_fullscreen = XInternAtom(dpy, "_NET_WM_STATE_FULLSCREEN", 0); -+ XSetWindowAttributes xattr; -+ xattr.override_redirect = False; -+ XChangeProperty (dpy,win,atom_noncomposited,XA_INTEGER,32,PropModeReplace,(unsigned char *) &val,1); // make window not composited -+ //XChangeWindowAttributes(dpy, win, CWOverrideRedirect, &xattr); // -+ XChangeProperty (dpy,win,atom_wmstate,XA_ATOM,32,PropModeReplace,(unsigned char *) &atom_wmstate_fullscreen,1); // mark as fullscreen = disable tskswitch button -+ XMapWindow(dpy,win); -+ //fsdone=1; -+ } -+ win = info.info.x11.wmwindow; -+ if (win && !fullscreen /* && !wmdone */) { -+ XUnmapWindow(dpy,win); -+ XChangeProperty (dpy,win,atom_zoom,XA_INTEGER,32,PropModeReplace,(unsigned char *) &val,1); -+ XMapWindow(dpy,win); -+ //wmdone=1; -+ } -+#endif -+ info.info.x11.unlock_func(); -+// XSync(dpy,False); -+} -+} -+#endif -+ -+ - bool OSystem_SDL::loadGFXMode() { - assert(_inited); - _forceFull = true; -@@ -560,6 +610,9 @@ - error("allocating _screen failed"); - #endif - -+#ifdef MAEMO_SDL -+ maemo5_WM_init(_videoMode.fullscreen); -+#endif - // - // Create the surface that contains the scaled graphics in 16 bit mode - // -@@ -939,6 +992,14 @@ - _videoMode.fullscreen = enable; - _transactionDetails.needHotswap = true; - } -+#ifdef MAEMO_SDL -+ char *caption; -+ char title[50]; -+ title[49] = '\0'; -+ SDL_WM_GetCaption(&caption, NULL); -+ if (caption!=NULL) {strncpy(title,caption,49); -+ setXWindowName(caption); } -+#endif - } - - void OSystem_SDL::setAspectRatioCorrection(bool enable) { ---- scummvm-1.1.orig/backends/platform/sdl/sdl.cpp 2010-03-21 22:01:52.000000000 +0100 -+++ scummvm-1.1/backends/platform/sdl/sdl.cpp 2010-03-24 00:14:36.000000000 +0100 -@@ -47,6 +47,10 @@ - #include "icons/scummvm.xpm" - - #include <time.h> // for getTimeAndDate() -+#ifdef MAEMO_SDL -+#include <SDL/SDL_syswm.h> -+#include <X11/Xutil.h> -+#endif - - //#define SAMPLES_PER_SEC 11025 - #define SAMPLES_PER_SEC 22050 -@@ -212,7 +216,15 @@ - _timerID = SDL_AddTimer(10, &timer_handler, _timer); - } - -- // Invoke parent implementation of this method -+#ifdef MAEMO_SDL -+ // some keymappings are done differently for devices with full keyboard (N810=RX-34) -+ _have_keyboard=0; -+ char *device=getenv("SCUMMVM_MAEMO_DEVICE"); -+ if (device != NULL) -+ if ( (strcmp(device,"RX-44") == 0) || (strcmp(device,"RX-48") == 0) || (strcmp(device,"RX-51") == 0)) -+ _have_keyboard=1; -+#endif -+ // Invoke parent implementation of this method - OSystem::initBackend(); - - _inited = true; -@@ -429,6 +441,23 @@ - return file.createWriteStream(); - } - -+#ifdef MAEMO_SDL -+void OSystem_SDL::setXWindowName(const char *caption) { -+ SDL_SysWMinfo info; -+ SDL_VERSION(&info.version); -+ if ( SDL_GetWMInfo(&info) ) { -+ Display *dpy = info.info.x11.display; -+ Window win; -+ //if (_videoMode.fullscreen) -+ win = info.info.x11.fswindow; -+ if (win) XStoreName(dpy, win, caption); -+ //else -+ win = info.info.x11.wmwindow; -+ if (win) XStoreName(dpy, win, caption); -+ } -+} -+#endif -+ - void OSystem_SDL::setWindowCaption(const char *caption) { - Common::String cap; - byte c; -@@ -445,6 +474,11 @@ - } - - SDL_WM_SetCaption(cap.c_str(), cap.c_str()); -+#ifdef MAEMO_SDL -+ Common::String cap2("ScummVM - "); // 2 lines in OS2008 task switcher, set first line -+ cap=cap2+cap; -+ setXWindowName(cap.c_str()); -+#endif - } - - bool OSystem_SDL::hasFeature(Feature f) { -@@ -529,6 +563,14 @@ - #endif - } - -+#ifdef MAEMO_SDL -+// no Maemo version needs setupIcon -+// also N900 is hit by SDL_WM_SetIcon bug (window cannot receive input) -+// http://bugzilla.libsdl.org/show_bug.cgi?id=586 -+void OSystem_SDL::setupIcon() { -+ ; -+} -+#else - void OSystem_SDL::setupIcon() { - int x, y, w, h, ncols, nbytes, i; - unsigned int rgba[256]; -@@ -580,6 +622,7 @@ - SDL_FreeSurface(sdl_surf); - free(icon); - } -+#endif - - OSystem::MutexRef OSystem_SDL::createMutex() { - return (MutexRef) SDL_CreateMutex(); ---- scummvm-1.1.orig/backends/platform/sdl/events.cpp 2010-04-02 22:45:24.000000000 +0200 -+++ scummvm-1.1/backends/platform/sdl/events.cpp 2010-04-02 22:44:04.000000000 +0200 -@@ -26,7 +26,9 @@ - #include "backends/platform/sdl/sdl.h" - #include "common/util.h" - #include "common/events.h" -- -+#ifdef MAEMO_SDL -+#include "common/config-manager.h" -+#endif - // FIXME move joystick defines out and replace with confile file options - // we should really allow users to map any key to a joystick button - #define JOY_DEADZONE 3200 -@@ -232,8 +234,13 @@ - - bool OSystem_SDL::handleKeyDown(SDL_Event &ev, Common::Event &event) { - -+#ifdef MAEMO_SDL -+// we want to remap first including ctr/shift/alt modifiers -+ const bool event_complete = remapKey(ev, event); -+ SDLModToOSystemKeyFlags(ev.key.keysym.mod, event); -+#else - SDLModToOSystemKeyFlags(SDL_GetModState(), event); -- -+#endif - // Handle scroll lock as a key modifier - if (ev.key.keysym.sym == SDLK_SCROLLOCK) - _scrollLock = !_scrollLock; -@@ -241,8 +248,13 @@ - if (_scrollLock) - event.kbd.flags |= Common::KBD_SCRL; - -+#ifdef MAEMO_SDL -+ // fullscreen button or ctrl+space toggle full screen mode -+ if (ev.key.keysym.sym == SDLK_F6 || (_have_keyboard && event.kbd.hasFlags(Common::KBD_CTRL) && (ev.key.keysym.sym == SDLK_SPACE) ) ) { -+#else - // Alt-Return and Alt-Enter toggle full screen mode - if (event.kbd.hasFlags(Common::KBD_ALT) && (ev.key.keysym.sym == SDLK_RETURN || ev.key.keysym.sym == SDLK_KP_ENTER)) { -+#endif - beginGFXTransaction(); - setFullscreenMode(!_videoMode.fullscreen); - endGFXTransaction(); -@@ -276,11 +288,15 @@ - return false; - } - -+#ifndef MAEMO_SDL - // Ctrl-m toggles mouse capture - if (event.kbd.hasFlags(Common::KBD_CTRL) && ev.key.keysym.sym == 'm') { - toggleMouseGrab(); - return false; - } -+#else -+// mouse capture makes no sense for Maemo and ctrl+m is used for global menu -+#endif - - #if defined(MACOSX) - // On Macintosh', Cmd-Q quits -@@ -313,7 +329,11 @@ - return false; - } - -+#ifdef MAEMO_SDL -+ if (event_complete) -+#else - if (remapKey(ev, event)) -+#endif - return true; - - event.type = Common::EVENT_KEYDOWN; -@@ -332,7 +352,12 @@ - event.kbd.ascii = mapKey(ev.key.keysym.sym, ev.key.keysym.mod, ev.key.keysym.unicode); - - // Ctrl-Alt-<key> will change the GFX mode -+#ifdef MAEMO_SDL -+ // we can't call SDL_GetModState(), modifiers can be remapped too -+ SDLModToOSystemKeyFlags(ev.key.keysym.mod, event); -+#else - SDLModToOSystemKeyFlags(SDL_GetModState(), event); -+#endif - - // Set the scroll lock sticky flag - if (_scrollLock) -@@ -355,8 +380,20 @@ - } - - bool OSystem_SDL::handleMouseButtonDown(SDL_Event &ev, Common::Event &event) { -+#ifdef MAEMO_SDL -+ if (ev.button.button == SDL_BUTTON_LEFT){ -+ SDLMod mod=SDL_GetModState(); -+ if (mod & KMOD_SHIFT) -+ event.type = Common::EVENT_RBUTTONDOWN; -+ else if ( mod & KMOD_CTRL) -+ event.type = Common::EVENT_MOUSEMOVE; -+ else -+ event.type = Common::EVENT_LBUTTONDOWN; -+ } -+#else - if (ev.button.button == SDL_BUTTON_LEFT) - event.type = Common::EVENT_LBUTTONDOWN; -+#endif - else if (ev.button.button == SDL_BUTTON_RIGHT) - event.type = Common::EVENT_RBUTTONDOWN; - #if defined(SDL_BUTTON_WHEELUP) && defined(SDL_BUTTON_WHEELDOWN) -@@ -372,14 +409,33 @@ - else - return false; - -+#ifdef MAEMO_SDL -+ // we have touchscreen so we may have no mousemotion events between taps -+ setMousePos(event.mouse.x, event.mouse.y); -+ // this is trying to fix wrong action done by mouse click in some engines -+ // it looks like clicking affects objects in previous mouse position -+ // if this does not help we should perhaps generate some fake mouse motion event(s) -+#endif - fillMouseEvent(event, ev.button.x, ev.button.y); - - return true; - } - - bool OSystem_SDL::handleMouseButtonUp(SDL_Event &ev, Common::Event &event) { -+#ifdef MAEMO_SDL -+ if (ev.button.button == SDL_BUTTON_LEFT){ -+ SDLMod mod=SDL_GetModState(); -+ if (mod & KMOD_SHIFT) -+ event.type = Common::EVENT_RBUTTONUP; -+ else if ( mod & KMOD_CTRL) -+ event.type = Common::EVENT_MOUSEMOVE; -+ else -+ event.type = Common::EVENT_LBUTTONUP; -+ } -+#else - if (ev.button.button == SDL_BUTTON_LEFT) - event.type = Common::EVENT_LBUTTONUP; -+#endif - else if (ev.button.button == SDL_BUTTON_RIGHT) - event.type = Common::EVENT_RBUTTONUP; - #if defined(SDL_BUTTON_MIDDLE) -@@ -503,7 +559,203 @@ - return true; - } - -+// called on SDL KEYUP and KEYDOWN events - bool OSystem_SDL::remapKey(SDL_Event &ev, Common::Event &event) { -+#ifdef MAEMO_SDL -+ static int engine=0; -+#define ENG_OTHER -1 -+//#define ENG_SCUMM 1 -+ static int game=0; -+#define GAME_OTHER -1 -+#define GAME_LURE 1 -+#define GAME_SWORD1 2 -+#define GAME_SWORD2 3 -+#define GAME_SAGA 4 -+#define GAME_FW 5 -+//#define GAME_SIMON1 6 -+//#define GAME_SIMON2 7 -+#define GAME_FEEBLE 8 -+//#define GAME_TOUCHE 9 -+#define GAME_DISCWORLD 10 -+#define GAME_CRUISE 11 -+ -+ -+ if (engine == 0){ -+ // one time initialization -+ Common::String gameid(ConfMan.get("gameid")); -+ if (gameid.hasPrefix("lure")) { -+ game=GAME_LURE; -+ engine=ENG_OTHER; -+ } else if (gameid.hasPrefix("sword2")) { -+ game=GAME_SWORD2; -+ engine=ENG_OTHER; -+ } else if (gameid.hasPrefix("cine")) { -+ game=GAME_FW; -+ engine=ENG_OTHER; -+/* } else if (gameid == "touche") { -+ game=GAME_TOUCHE; -+ engine=ENG_OTHER; -+ } else if (gameid == "simon1") { -+ game=GAME_SIMON1; -+ engine=ENG_OTHER; -+ } else if (gameid == "simon2") { -+ game=GAME_SIMON2; -+ engine=ENG_OTHER; -+*/ -+ } else if (gameid.hasPrefix("feeble")) { -+ game=GAME_FEEBLE; -+ engine=ENG_OTHER; -+ } else if (gameid.hasPrefix("sword1")) { -+ game=GAME_SWORD1; -+ engine=ENG_OTHER; -+ } else if (gameid.hasPrefix("saga")) { -+ game=GAME_SAGA; -+ engine=ENG_OTHER; -+ } else if (gameid.hasPrefix("tinsel")) { -+ game=GAME_DISCWORLD; -+ engine=ENG_OTHER; -+ } else if (gameid.hasPrefix("cruise")) { -+ game=GAME_CRUISE; -+ engine=ENG_OTHER; -+ } else { -+ game=GAME_OTHER; -+ engine=ENG_OTHER; -+ } -+ } -+ // global mapping - N810, N900 -+ if (_have_keyboard && (ev.key.keysym.mod & KMOD_CTRL)){ -+ // map ctrl-m to ctrl F5 = global scummvm menu -+ if (ev.key.keysym.sym==SDLK_m) ev.key.keysym.sym=SDLK_F5 ; -+ } -+ if (_have_keyboard && (ev.key.keysym.mod & KMOD_SHIFT)){ -+ // map shift backspace to escape, shift enter to menu key -+ if (ev.key.keysym.sym==SDLK_BACKSPACE) { ev.key.keysym.sym=SDLK_ESCAPE ; ev.key.keysym.mod = (SDLMod) (ev.key.keysym.mod & ~KMOD_SHIFT); } -+ if (ev.key.keysym.sym==SDLK_KP_ENTER) { ev.key.keysym.sym=SDLK_F4; ev.key.keysym.mod = (SDLMod) (ev.key.keysym.mod & ~KMOD_SHIFT); } -+ } -+ -+ // engine specific mappings -+ switch (engine){ -+ // nothing now -+ } -+ // game specific mapping -+ switch (game) { -+ case GAME_LURE: -+ if ((ev.key.keysym.sym==SDLK_F8 && _have_keyboard ) || (ev.key.keysym.sym==SDLK_F4 && !_have_keyboard)){ -+ // map zoom - to right click if we have keyboard (N810), otherwise map menu key (770,N800) -+ event.type = ((ev.type==SDL_KEYUP) ? Common::EVENT_RBUTTONUP : Common::EVENT_RBUTTONDOWN ); -+ event.mouse.x = _mouseCurState.x; -+ event.mouse.y = _mouseCurState.y; -+ return true; -+ -+ } -+ switch(ev.key.keysym.sym){ -+ case SDLK_F5: // map F5 (home key) to f9 = restart game -+ ev.key.keysym.sym=SDLK_F9; -+ break; -+ case SDLK_F8: // map F8 (zoom - key) to F5 (save dialog) in game -+ ev.key.keysym.sym=SDLK_F5; -+ break; -+ case SDLK_F4: // same as above, only one mapping happens due to right click maping above -+ ev.key.keysym.sym=SDLK_F5; -+ default: -+ ; -+ } -+ break; -+ case GAME_FW: -+ // Future Wars - no mapping here, done in game engine -+ break; -+ case GAME_FEEBLE: -+ if ((ev.key.keysym.sym==SDLK_F8 && _have_keyboard ) || (ev.key.keysym.sym==SDLK_F4 && !_have_keyboard)){ -+ // map zoom - to right click if we have keyboard (N810), otherwise map menu key (770,N800) -+ event.type = ((ev.type==SDL_KEYUP) ? Common::EVENT_RBUTTONUP : Common::EVENT_RBUTTONDOWN ); -+ event.mouse.x = _mouseCurState.x; -+ event.mouse.y = _mouseCurState.y; -+ return true; -+ -+ } -+ if (!_have_keyboard) switch(ev.key.keysym.sym){ -+ case SDLK_F7: // map F7 (zoom + key) to letter y -+ ev.key.keysym.sym=SDLK_y; -+ break; -+ case SDLK_F8: // map F8 (zoom - key) to letter 1 -+ ev.key.keysym.sym=SDLK_1; -+ break; -+ default: -+ ; -+ } -+ break; -+ case GAME_DISCWORLD: -+ switch(ev.key.keysym.sym) { -+ case SDLK_F8: // map F8 (zoom - key) to right click -+ event.type = ((ev.type==SDL_KEYUP) ? Common::EVENT_RBUTTONUP : Common::EVENT_RBUTTONDOWN ); -+ event.mouse.x = _mouseCurState.x; -+ event.mouse.y = _mouseCurState.y; -+ return true; -+ // now map F7 (=zoom+) to Enter for N810 (useful when closed) -+ case SDLK_F7: -+ if (_have_keyboard) ev.key.keysym.sym=SDLK_RETURN; else ev.key.keysym.sym=SDLK_y; -+ break; -+ case SDLK_F4: // map menu key to game menu -+ case SDLK_F5: // swap/home key too -+ ev.key.keysym.sym=SDLK_F1; -+ break; -+ default: -+ ; -+ } -+ break; -+ case GAME_CRUISE: -+ switch(ev.key.keysym.sym) { -+ case SDLK_F8: // map F8 (zoom - key) to right click -+ event.type = ((ev.type==SDL_KEYUP) ? Common::EVENT_RBUTTONUP : Common::EVENT_RBUTTONDOWN ); -+ event.mouse.x = _mouseCurState.x; -+ event.mouse.y = _mouseCurState.y; -+ return true; -+ // now map F7 (=zoom+) to menu for N810 (useful when closed) -+ case SDLK_F7: -+ if (_have_keyboard) ev.key.keysym.sym=SDLK_F10; else ev.key.keysym.sym=SDLK_p; -+ break; -+ case SDLK_F4: // map menu key to game menu -+ ev.key.keysym.sym=SDLK_F10; -+ break; -+ default: -+ ; -+ } -+ break; -+ default: -+ //case GAME_SWORD2: -+ //case GAME_SWORD1: -+ //case GAME_SAGA: //I Have No Mouth -+ if (!_have_keyboard) switch(ev.key.keysym.sym){ -+ case SDLK_F7: // map F7 (zoom + key) to letter y for save game entry and 'yes' replies (simon, touche) -+ ev.key.keysym.sym=SDLK_y; -+ break; -+ case SDLK_F8: // map F8 (zoom - key) to letter 1 for save game entry and copyprotection in monkey2 -+ ev.key.keysym.sym=SDLK_1; -+ break; -+ default: -+ ; -+ } else switch(ev.key.keysym.sym) { -+ case SDLK_F8: // map F8 (zoom - key) to right click -+ event.type = ((ev.type==SDL_KEYUP) ? Common::EVENT_RBUTTONUP : Common::EVENT_RBUTTONDOWN ); -+ event.mouse.x = _mouseCurState.x; -+ event.mouse.y = _mouseCurState.y; -+ return true; -+ // now map F7 (=zoom+) to menu (=F4) so we can have same mapping for N810 and 770/800 for menu key -+ // N800's real menu key is hidden on retractable keyboard so we use zoom+ for it instead too -+ case SDLK_F7: -+ ev.key.keysym.sym=SDLK_F4; -+ break; -+ /* with real keyboard we can afford to lose F7, do not remap F4 back -+ case SDLK_F4: -+ ev.key.keysym.sym=SDLK_F7; -+ break; */ -+ default: -+ ; -+ } -+ break; -+ } -+#endif //SDL_MAEMO -+ - #ifdef LINUPY - // On Yopy map the End button to quit - if ((ev.key.keysym.sym == 293)) { ---- scummvm-1.1.orig/backends/platform/sdl/sdl.h 2010-03-21 22:01:52.000000000 +0100 -+++ scummvm-1.1/backends/platform/sdl/sdl.h 2010-03-24 00:14:36.000000000 +0100 -@@ -230,6 +230,9 @@ - virtual int getGraphicsMode() const; - - virtual void setWindowCaption(const char *caption); -+#ifdef MAEMO_SDL -+ void setXWindowName(const char *caption); -+#endif - virtual bool openCD(int drive); - - virtual bool hasFeature(Feature f); -@@ -418,6 +421,9 @@ - // joystick - SDL_Joystick *_joystick; - -+#ifdef MAEMO_SDL -+ int _have_keyboard; -+#endif - // Shake mode - int _currentShakePos; - int _newShakePos; 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.xml b/backends/platform/openpandora/build/PXML.xml index f4d2e2a595..a87c49e2b8 100755 --- a/backends/platform/openpandora/build/PXML.xml +++ b/backends/platform/openpandora/build/PXML.xml @@ -1,34 +1,55 @@ <?xml version="1.0" encoding="UTF-8"?> <PXML xmlns="http://openpandora.org/namespaces/PXML" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="PXML_schema.xsd"> - - <application id="scummvm.djwillis.0001" appdata="scummvm"> - - <title lang="en_US">ScummVM</title> - - <exec command="./runscummvm.sh"/> - <icon src="icon/scummvm.png"/> - - <previewpics> - <pic src="icon/preview-pic.png"/> - </previewpics> - - <info name="ScummVM Documentation" type="text/html" src="docs/index.html"/> - - <description lang="en_US">Point & click game interpreter.</description> - - <author name="DJWillis" website="http://www.scummvm.org/"/> - - <version major="1" minor="1" release="1" build="1"/><!--This programs version--> - <osversion major="1" minor="0" release="0" build="0"/><!--The minimum OS version required--> - - <categories> - <category name="Game"><!--category like "Games", "Graphics", "Internet" etc--> - <subcategory name="Adventure Games"/><!--subcategory, like "Board Games", "Strategy", "First Person Shooters"--> - </category> - </categories> - - <clockspeed frequency="500"/><!--Frequency in Hz--> - - </application> - + <!-- This is the package, in our case ScummVM --> + <package id="scummvm.djwillis.0001"> + <author name="DJWillis" website="http://www.scummvm.org/"/> + <!-- version type can be alpha, beta or release, set to release in branch --> + <version major="1" minor="4" release="0" build="1" type="alpha"/> + <!-- Both title and titles are needed --> + <title lang="en_US">ScummVM</title> + <titles> + <title lang="en_US">ScummVM</title> + </titles> + <descriptions> + <description lang="en_US"> + ScummVM is a program which allows you to run certain classic graphical point-and-click adventure games, provided you already have their data files. The clever part about this: ScummVM just replaces the executables shipped with the games, allowing you to play them on systems for which they were never designed! + + ScummVM supports many adventure games, including LucasArts SCUMM games (such as Monkey Island 1-3, Day of the Tentacle, Sam & Max, ...), many of Sierra's AGI and SCI games (such as King's Quest 1-6, Space Quest 1-5, ...), Discworld 1 and 2, Simon the Sorcerer 1 and 2, Beneath A Steel Sky, Lure of the Temptress, Broken Sword 1 and 2, Flight of the Amazon Queen, Gobliiins 1-3, The Legend of Kyrandia 1-3, many of Humongous Entertainment's children's SCUMM games (including Freddi Fish and Putt Putt games) and many more. + </description> + </descriptions> + <icon src="icon/scummvm.png"/> + </package> + + <!-- This is the application, the ScummVM binary --> + <application id="scummvm.djwillis.0001" appdata="scummvm"> + <exec command="./runscummvm.sh"/> + <author name="DJWillis" website="http://www.scummvm.org/"/> + <!-- version type can be alpha, beta or release, set to release in branch --> + <version major="1" minor="4" release="0" build="1" type="alpha"/> + <!-- Both title and titles are needed --> + <title lang="en_US">ScummVM</title> + <titles> + <title lang="en_US">ScummVM</title> + </titles> + <descriptions> + <description lang="en_US"> + ScummVM is a program which allows you to run certain classic graphical point-and-click adventure games, provided you already have their data files. The clever part about this: ScummVM just replaces the executables shipped with the games, allowing you to play them on systems for which they were never designed! + + ScummVM supports many adventure games, including LucasArts SCUMM games (such as Monkey Island 1-3, Day of the Tentacle, Sam & Max, ...), many of Sierra's AGI and SCI games (such as King's Quest 1-6, Space Quest 1-5, ...), Discworld 1 and 2, Simon the Sorcerer 1 and 2, Beneath A Steel Sky, Lure of the Temptress, Broken Sword 1 and 2, Flight of the Amazon Queen, Gobliiins 1-3, The Legend of Kyrandia 1-3, many of Humongous Entertainment's children's SCUMM games (including Freddi Fish and Putt Putt games) and many more. + </description> + </descriptions> + <licenses> + <license name="GPLv2" url="http://www.gnu.org/licenses/gpl-2.0.html" sourcecodeurl="http://www.scummvm.org"/> + </licenses> + <icon src="icon/scummvm.png"/> + <previewpics> + <pic src="icon/preview-pic.png"/> + </previewpics> + <info name="ScummVM Documentation" type="text/html" src="docs/index.html"/> + <categories> + <category name="Game"> + <subcategory name="AdventureGame"/> + </category> + </categories> + </application> </PXML> diff --git a/backends/platform/openpandora/build/PXML_schema.xsd b/backends/platform/openpandora/build/PXML_schema.xsd new file mode 100644 index 0000000000..7c0d635016 --- /dev/null +++ b/backends/platform/openpandora/build/PXML_schema.xsd @@ -0,0 +1,341 @@ +<?xml version="1.0" encoding="utf-8"?> +<xs:schema targetNamespace="http://openpandora.org/namespaces/PXML" xmlns="http://openpandora.org/namespaces/PXML" xmlns:xs="http://www.w3.org/2001/XMLSchema" attributeFormDefault="unqualified" elementFormDefault="qualified"> + + + <!-- declare some simpleTypes for later usage --> + + <!-- Specify params allows with the 'x11' entry in exec --> + <xs:simpleType name="x11Param"> + <xs:restriction base="xs:string"> + <xs:enumeration value="req" /> + <xs:enumeration value="stop" /> + <xs:enumeration value="ignore" /> + </xs:restriction> + </xs:simpleType> + + <!-- Specify the valid documentation formats in the <info> block --> + <xs:simpleType name="docType"> + <xs:restriction base="xs:string"> + <xs:enumeration value="text/html" /> + <xs:enumeration value="text/plain" /> + </xs:restriction> + </xs:simpleType> + + <!-- Make sure that version numbers only consist of letters, numbers and + as well as - --> + <xs:simpleType name="versionNumber"> + <xs:restriction base="xs:string"> + <xs:minLength value="1"/> + <xs:pattern value="[a-zA-Z0-9+-]*" /> + </xs:restriction> + </xs:simpleType> + + <!-- Specify what is valid as release type --> + <xs:simpleType name="releaseType"> + <xs:restriction base="xs:string"> + <xs:enumeration value="alpha" /> + <xs:enumeration value="beta" /> + <xs:enumeration value="release" /> + </xs:restriction> + </xs:simpleType> + + <!-- Specify what makes an email address "valid" --> + <xs:simpleType name="emailAddress"> + <xs:restriction base="xs:string"> + <xs:pattern value="[^@]+@[^\.]+\..+"/> + </xs:restriction> + </xs:simpleType> + + <!-- some restrictions regarding file names that are eg not allowed/possible when using sd cards formated as fat32 --> + <xs:simpleType name="dumbPath"> + <xs:restriction base="xs:normalizedString"> + <xs:pattern value="[^?>:]+" /> + </xs:restriction> + </xs:simpleType> + <xs:simpleType name="dumbFolderName"> + <xs:restriction base="xs:normalizedString"> + <xs:pattern value="[^?>:/]+" /> + </xs:restriction> + </xs:simpleType> + + <!-- Specify lang codes --> + <xs:simpleType name="isoLangcode"> + <xs:restriction base="xs:string"> + <xs:minLength value="2"/> + <xs:pattern value="[a-zA-Z]{2,3}(_[a-zA-Z0-9]{2,3})*" /> + </xs:restriction> + </xs:simpleType> + <xs:simpleType name="isoLangcode_en_US"> + <xs:restriction base="xs:string"> + <xs:enumeration value="en_US" /> + </xs:restriction> + </xs:simpleType> + + <!-- Definition of all allowed categories following the FDO specs --> + <xs:simpleType name="fdoCategory"> + <xs:restriction base="xs:string"> + <xs:pattern value="AudioVideo|Audio|Video|Development|Education|Game|Graphics|Network|Office|Settings|System|Utility"/> + </xs:restriction> + </xs:simpleType> + <!-- Definition of all allowed subcategories following the FDO specs (should be based upon the given main categories, but would significantly increase complexity of the schema) --> + <xs:simpleType name="fdoSubCategory"> + <xs:restriction base="xs:string"> + <xs:pattern value="Building|Debugger|IDE|GUIDesigner|Profiling|RevisionControl|Translation|Calendar|ContactManagement|Database|Dictionary|Chart|Email|Finance|FlowChart|PDA|ProjectManagement|Presentation|Spreadsheet|WordProcessor|2DGraphics|VectorGraphics|RasterGraphics|3DGraphics|Scanning|OCR|Photography|Publishing|Viewer|TextTools|DesktopSettings|HardwareSettings|Printing|PackageManager|Dialup|InstantMessaging|Chat|IRCClient|FileTransfer|HamRadio|News|P2P|RemoteAccess|Telephony|TelephonyTools|VideoConference|WebBrowser|WebDevelopment|Midi|Mixer|Sequencer|Tuner|TV|AudioVideoEditing|Player|Recorder|DiscBurning|ActionGame|AdventureGame|ArcadeGame|BoardGame|BlocksGame|CardGame|KidsGame|LogicGame|RolePlaying|Simulation|SportsGame|StrategyGame|Art|Construction|Music|Languages|Science|ArtificialIntelligence|Astronomy|Biology|Chemistry|ComputerScience|DataVisualization|Economy|Electricity|Geography|Geology|Geoscience|History|ImageProcessing|Literature|Math|NumericalAnalysis|MedicalSoftware|Physics|Robotics|Sports|ParallelComputing|Amusement|Archiving|Compression|Electronics|Emulator|Engineering|FileTools|FileManager|TerminalEmulator|Filesystem|Monitor|Security|Accessibility|Calculator|Clock|TextEditor|Documentation|Core|KDE|GNOME|GTK|Qt|Motif|Java|ConsoleOnly"/> + </xs:restriction> + </xs:simpleType> + + <!-- Create some way to enforce entries to be nonempty --> + <xs:simpleType name="nonempty_token"> + <xs:restriction base="xs:token"> + <xs:minLength value="1"/> + </xs:restriction> + </xs:simpleType> + <xs:simpleType name="nonempty_string"> + <xs:restriction base="xs:string"> + <xs:minLength value="1"/> + </xs:restriction> + </xs:simpleType> + <xs:simpleType name="nonempty_normalizedString"> + <xs:restriction base="xs:string"> + <xs:minLength value="1"/> + </xs:restriction> + </xs:simpleType> + + + + <!-- declare some complexTypes for later usage --> + + <!-- type used for file associations --> + <xs:complexType name="association_data"> + <xs:attribute name="name" use="required" type="nonempty_normalizedString" /> + <xs:attribute name="filetype" use="required" type="nonempty_token" /> + <xs:attribute name="exec" use="required" type="nonempty_token" /> + </xs:complexType> + + <!-- type used for author info --> + <xs:complexType name="author_data"> + <xs:attribute name="name" use="required" type="nonempty_normalizedString" /> + <xs:attribute name="website" use="optional" type="xs:anyURI" /> + <xs:attribute name="email" use="optional" type="emailAddress" /> + </xs:complexType> + + <!-- type used for version informations (full entry as well as os version) --> + <xs:complexType name="app_version_info"> + <xs:attribute name="major" use="required" type="versionNumber" /> + <xs:attribute name="minor" use="required" type="versionNumber" /> + <xs:attribute name="release" use="required" type="versionNumber" /> + <xs:attribute name="build" use="required" type="versionNumber" /> + <xs:attribute name="type" use="optional" type="releaseType" /> + </xs:complexType> + <xs:complexType name="os_version_info"> + <xs:attribute name="major" use="required" type="versionNumber" /> + <xs:attribute name="minor" use="required" type="versionNumber" /> + <xs:attribute name="release" use="required" type="versionNumber" /> + <xs:attribute name="build" use="required" type="versionNumber" /> + </xs:complexType> + + <!-- type used for exec entries --> + <xs:complexType name="exec_params"> + <xs:attribute name="command" use="required" type="nonempty_token" /> + <xs:attribute name="arguments" use="optional" type="nonempty_token" /> + <xs:attribute name="background" use="optional" type="xs:boolean" /> + <xs:attribute name="startdir" use="optional" type="dumbPath" /> + <xs:attribute name="standalone" use="optional" type="xs:boolean" /> + <xs:attribute name="x11" use="optional" type="x11Param" /> + </xs:complexType> + + <!-- type used for tiles or descriptions, once in 'normal' version, once enforcing usage of en_US --> + <xs:complexType name="title_or_description"> + <xs:simpleContent> + <xs:extension base="nonempty_string"> + <xs:attribute name="lang" use="required" type="isoLangcode" /> + </xs:extension> + </xs:simpleContent> + </xs:complexType> + <xs:complexType name="title_or_description_enUS"> + <xs:simpleContent> + <xs:extension base="nonempty_string"> + <xs:attribute name="lang" use="required" type="isoLangcode_en_US" /> + </xs:extension> + </xs:simpleContent> + </xs:complexType> + + <!-- type used for referencing images --> + <xs:complexType name="image_entry"> + <xs:attribute name="src" use="required" type="dumbPath" /> + </xs:complexType> + + <!-- type for referencing manuals/readme docs --> + <xs:complexType name="information_entry"> + <xs:attribute name="name" use="required" type="nonempty_normalizedString" /> + <xs:attribute name="type" use="required" type="docType" /> + <xs:attribute name="src" use="required" type="dumbPath" /> + </xs:complexType> + + <!-- type used for the license information --> + <xs:complexType name="license_info"> + <xs:attribute name="name" use="required" type="nonempty_normalizedString" /> + <xs:attribute name="url" use="optional" type="xs:anyURI" /> + <xs:attribute name="sourcecodeurl" use="optional" type="xs:anyURI" /> + </xs:complexType> + + + + <!-- Combine the symple and complex types into the "real" PXML specification --> + + <xs:element name="PXML"> + <xs:complexType> + <xs:sequence> + <!-- specify the <package> tag with info about the complete package, information providable: + author + version + title(s) + description(s) + icon + --> + <xs:element name="package" minOccurs="1" maxOccurs="1"> + <xs:complexType> + <xs:all> + <!--Author info--> + <xs:element name="author" type="author_data" minOccurs="1" /> + <!--App version info--> + <xs:element name="version" type="app_version_info" minOccurs="1" /> + <!--Title--> + <xs:element name="titles" minOccurs="1"> + <xs:complexType> + <xs:sequence> + <xs:element name="title" type="title_or_description_enUS" minOccurs="1" maxOccurs="1" /> + <xs:element name="title" type="title_or_description" minOccurs="0" maxOccurs="unbounded" /> + </xs:sequence> + </xs:complexType> + </xs:element> + <!--Description--> + <xs:element name="descriptions" minOccurs="0"> + <xs:complexType> + <xs:sequence> + <xs:element name="title" type="title_or_description_enUS" minOccurs="0" maxOccurs="1" /> + <xs:element name="description" type="title_or_description" minOccurs="0" maxOccurs="unbounded" /> + </xs:sequence> + </xs:complexType> + </xs:element> + <!--Icon--> + <xs:element name="icon" type="image_entry" minOccurs="0" /> + </xs:all> + <!--Package ID--> + <xs:attribute name="id" use="required" type="dumbFolderName" /> + </xs:complexType> + </xs:element> + <!-- specify the <application> tag with info about a single program + executable call + author + version (of the application) + osversion (min OS version supported) + title(s) (allowing compatibility to <HF6, too!) + description(s) (allowing compatibility to <HF6, too!) + icon + license + preview pictures + info/manual/readme entry + categories + associations to file types + clockspeed + --> + <xs:element name="application" minOccurs="1" maxOccurs="unbounded"> + <xs:complexType> + <xs:all> + <!--Execution params --> + <xs:element name="exec" type="exec_params" minOccurs="1" /> + <!--Author info--> + <xs:element name="author" type="author_data" minOccurs="1" /> + <!--App version info--> + <xs:element name="version" type="app_version_info" minOccurs="1" /> + <!--OS Version info--> + <xs:element name="osversion" type="os_version_info" minOccurs="0" /> + <!--Title--> + <!-- via <titles> element, used for HF6+ --> + <xs:element name="titles" minOccurs="1"> + <xs:complexType> + <xs:sequence> + <xs:element name="title" type="title_or_description_enUS" minOccurs="1" maxOccurs="1" /> + <xs:element name="title" type="title_or_description" minOccurs="0" maxOccurs="unbounded" /> + </xs:sequence> + </xs:complexType> + </xs:element> + <!--Title--> + <!-- via <title> element, only one for en_US allowed, meant for backwards compatibility with libpnd from <HF6 --> + <xs:element name="title" type="title_or_description_enUS" minOccurs="0" /> + <!--Description--> + <!-- via <descriptions> element, used for HF6+ --> + <xs:element name="descriptions" minOccurs="0"> + <xs:complexType> + <xs:sequence> + <xs:element name="description" type="title_or_description_enUS" minOccurs="1" maxOccurs="1" /> + <xs:element name="description" type="title_or_description" minOccurs="0" maxOccurs="unbounded" /> + </xs:sequence> + </xs:complexType> + </xs:element> + <!--Description--> + <!-- via <description> element, only one for en_US allowed, meant for backwards compatibility with libpnd from <HF6 --> + <xs:element name="description" type="title_or_description_enUS" minOccurs="0" /> + <!--Icon--> + <xs:element name="icon" type="image_entry" minOccurs="0" /> + <!--License--> + <xs:element name="licenses" minOccurs="1"> + <xs:complexType> + <xs:sequence> + <xs:element name="license" type="license_info" minOccurs="1" maxOccurs="unbounded" /> + </xs:sequence> + </xs:complexType> + </xs:element> + <!--Preview pics--> + <xs:element name="previewpics" minOccurs="0"> + <xs:complexType> + <xs:sequence> + <xs:element name="pic" type="image_entry" minOccurs="0" maxOccurs="unbounded" /> + </xs:sequence> + </xs:complexType> + </xs:element> + <!--Info (aka manual or readme entry)--> + <xs:element name="info" type="information_entry" minOccurs="0" /> + <!--Categories--> + <xs:element name="categories" minOccurs="1"> + <xs:complexType> + <xs:sequence> + <xs:element name="category" minOccurs="1" maxOccurs="unbounded"> + <xs:complexType> + <xs:sequence> + <xs:element name="subcategory" minOccurs="0" maxOccurs="unbounded"> + <xs:complexType> + <xs:attribute name="name" type="fdoSubCategory" /> + </xs:complexType> + </xs:element> + </xs:sequence> + <xs:attribute name="name" use="required" type="fdoCategory" /> + </xs:complexType> + </xs:element> + </xs:sequence> + </xs:complexType> + </xs:element> + <!--Associations--> + <xs:element name="associations" minOccurs="0"> + <xs:complexType> + <xs:sequence> + <xs:element name="association" type="association_data" maxOccurs="unbounded" /> + </xs:sequence> + </xs:complexType> + </xs:element> + <!--Clockspeed--> + <xs:element name="clockspeed" minOccurs="0"> + <xs:complexType> + <xs:attribute name="frequency" use="required" type="xs:positiveInteger" /> + </xs:complexType> + </xs:element> + </xs:all> + <!--AppID--> + <xs:attribute name="id" use="required" type="dumbFolderName" /> + <xs:attribute name="appdata" use="optional" type="dumbFolderName" /> + </xs:complexType> + </xs:element> + </xs:sequence> + </xs:complexType> + </xs:element> +</xs:schema> diff --git a/backends/platform/openpandora/build/pnd_make.sh b/backends/platform/openpandora/build/pnd_make.sh index b19de87bb4..0c03e8154d 100755 --- a/backends/platform/openpandora/build/pnd_make.sh +++ b/backends/platform/openpandora/build/pnd_make.sh @@ -1,65 +1,321 @@ -#!/bin/sh +#!/bin/bash +# +# pnd_make.sh +# +# This script is meant to ease generation of a pnd file. Please consult the output +# when running --help for a list of available parameters and an explaination of +# those. +# +# Required tools when running the script: +# bash +# echo, cat, mv, rm +# mkisofs or mksquashfs (the latter when using the -c param!) +# xmllint (optional, only for validation of the PXML against the schema) -######adjust path of genpxml.sh if you want to use that "feture"##### -TEMP=`getopt -o p:d:x:i:c -- "$@"` +PXML_schema=$(dirname ${0})/PXML_schema.xsd +GENPXML_PATH=$(dirname ${0})/genpxml.sh -if [ $? != 0 ] ; then echo "Terminating..." >&2 ; exit 1 ; fi +# useful functions ... +black='\E[30m' +red='\E[31m' +green='\E[32m' +yellow='\E[33m' +blue='\E[34m' +magenta='\E[35m' +cyan='\E[36m' +white='\E[37m' -eval set -- "$TEMP" -while true ; do - case "$1" in - -p) echo "PNDNAME set to $2" ;PNDNAME=$2;shift 2;; - -d) echo "FOLDER set to $2" ;FOLDER=$2;shift 2 ;; - -x) echo "PXML set to $2" ;PXML=$2;shift 2 ;; - -i) echo "ICON set to $2" ;ICON=$2;shift 2 ;; - -c) echo "-c set, will create compressed squasfs image instead of iso $2" ;SQUASH=1;shift 1 ;; - --) shift ; break ;; - *) echo "Error while parsing arguments! $2" ; exit 1 ;; - esac +check_for_tool() +{ + which $1 &> /dev/null + if [ "$?" -ne "0" ]; + then + cecho "ERROR: Could not find the program '$1'. Please make sure +that it is available in your PATH since it is required to complete your request." $red + exit 1 + fi +} + +cecho () # Color-echo. Argument $1 = message, Argument $2 = color +{ + local default_msg="No message passed." # Doesn't really need to be a local variable. + message=${1:-$default_msg} # Defaults to default message. + color=${2:-$black} # Defaults to black, if not specified. + echo -e "$color$message" + tput sgr0 # Reset to normal. + return +} + + +print_help() +{ + cat << EOSTREAM +pnd_make.sh - A script to package "something" into a PND. + +Usage: + $(basename ${0}) {--directory|-d} <folder> {--pndname|-p} <file> [{--compress-squashfs|-c}] + [{--genpxml} <file>] [{--icon|-i} <file>] [{--pxml|-x} <file>] + [{--schema|-s} <file>] [{--help|-h}] + + +Switches: + --compress-squashfs / -c Define whether or not the pnd should be compressed using + squashfs. If this parameter is selected, a compressed pnd + will be created. + + --directory / -d Sets the folder that is to be used for the resulting pnd + to <folder>. This option is mandatory for the script to + function correctly. + + --genpxml Sets the script used for generating a PXML file (if none + is available already) to <file>. Please make sure to either + provide a full path or prefix a script in the current folder + with './' so that the script can actually be executed. If + this variable is not specified, $GENPXML_PATH + will be used. + + --help / -h Displays this help text. + + --icon / -i Sets the icon that will be appended in the pnd to <file>. + + --pndname / -p Sets the output filename of the resulting pnd to <file>. + This option is mandatory for the script to function + correctly. + + --pxml / -x Sets the PXML file that is to be used to <file>. If you + neither provide a PXML file or set this entry to 'guess', + an existing 'PXML.xml' in your selected '--directory' + will be used, or the script $GENPXML_PATH + will be called to try to generate a basic PXML file for you. + + --schema / -s Sets the schema file, that is to be used for validation, + to <file. If this is not defined, the script will try to + use the file '$PXML_schema'. If this fails, + a warning is issued. + +If you select the option to create a compressed squashfs, a version >=4.0 of squashfs +is required to be available in your PATH. +EOSTREAM +} + + +# Parse command line parameters +while [ "${1}" != "" ]; do + if [ "${1}" = "--compress-squashfs" ] || [ "${1}" = "-c" ]; + then + SQUASH=1 + shift 1 + elif [ "${1}" = "--directory" ] || [ "${1}" = "-d" ]; + then + FOLDER=$2 + shift 2 + elif [ "${1}" = "--genpxml" ]; + then + GENPXML_PATH=$2 + shift 2 + elif [ "${1}" = "--help" ] || [ "${1}" = "-h" ]; + then + print_help + exit 0 + elif [ "${1}" = "--icon" ] || [ "${1}" = "-i" ]; + then + ICON=$2 + shift 2 + elif [ "${1}" = "--pndname" ] || [ "${1}" = "-p" ]; + then + PNDNAME=$2 + shift 2 + elif [ "${1}" = "--pxml" ] || [ "${1}" = "-x" ]; + then + PXML=$2 + shift 2 + elif [ "${1}" = "--schema" ] || [ "${1}" = "-f" ] + then + PXML_schema=$2 + shift 2 + else + cecho "ERROR: '$1' is not a known argument. Printing --help and aborting." $red + print_help + exit 1 + fi done -rnd=$RANDOM; # random number for genpxml and index$rnd.xml -#generate pxml if guess or empty -if [ ! $PXML ] || [ $PXML = "guess" ] && [ $PNDNAME ] && [ $FOLDER ]; then - PXMLtxt=$(/home/user/libpnd/pandora-libraries/testdata/scripts/genpxml.sh $FOLDER $ICON) - PXML=$FOLDER/PXML.xml - echo "$PXMLtxt" > $FOLDER/PXML.xml +# Generate a PXML if the param is set to Guess or it is empty. +if [ ! $PXML ] || [ $PXML = "guess" ] && [ $PNDNAME ] && [ $FOLDER ]; +then + if [ -f $FOLDER/PXML.xml ]; # use the already existing PXML.xml file if there is one... + then + PXML=$FOLDER/PXML.xml + PXML_ALREADY_EXISTING="true" + else + if [ -f $GENPXML_PATH ]; + then + $GENPXML_PATH --src $FOLDER --dest $FOLDER --author $USER + if [ -f $FOLDER/PXML.xml ]; + then + PXML_GENERATED="true" + else + cecho "ERROR: Generating a PXML file using '$GENPXML_PATH' failed. +Please generate a PXML file manually." $red + exit 1 + fi + else + cecho "ERROR: Could not find '$GENPXML_PATH' for generating a PXML file." $red + exit 1 + fi + fi fi -#check arguments -if [ ! $PNDNAME ] || [ ! $FOLDER ] || [ ! $PXML ]; then - echo " Usage: pnd_make.sh -p your.pnd -d folder/containing/your/app/ -x - your.pxml (or \"guess\" to try to generate it from the folder) -i icon.png" + +# Probe if required variables were set +echo -e +cecho "Checking if all required variables were set." $green +if [ ! $PNDNAME ] || [ ! $FOLDER ] || [ ! $PXML ]; +then + echo -e + cecho "ERROR: Not all required options were set! Please see the --help information below." $red + echo -e + print_help exit 1 +else + echo "PNDNAME set to '$PNDNAME'." +fi +# Check if the selected folder actually exists +if [ ! -d $FOLDER ]; +then + echo -e + cecho "ERROR: '$FOLDER' doesn't exist or is not a folder." $red + exit 1 +else + echo "FOLDER set to '$FOLDER'." +fi +# Check if the selected PXML file actually exists +if [ ! -f $PXML ]; +then + echo -e + cecho "ERROR: '$PXML' doesn't exist or is not a file." $red + exit 1 +else + if [ $PXML_ALREADY_EXISTING ]; + then + echo "You have not explicitly specified a PXML to use, but an existing file was +found. Will be using this one." + elif [ $PXML_GENERATED ]; + then + echo "A PXML file was generated for you using '$GENPXML_PATH'. This file will +not be removed at the end of this script because you might want to review it, adjust +single entries and rerun the script to generate a pnd with a PXML file with all the +information you want to have listed." + fi + echo "PXML set to '$PXML'." fi -if [ ! -d $FOLDER ]; then echo "$FOLDER doesnt exist"; exit 1; fi #check if folder actually exists -if [ ! -f $PXML ]; then echo "$PXML doesnt exist"; exit 1; fi #check if pxml actually exists -#make iso from folder -if [ ! $SQUASH ]; then - mkisofs -o $PNDNAME.iso -R $FOLDER +# Print the other variables: +if [ $ICON ]; +then + if [ ! -f $ICON ] + then + cecho "WARNING: '$ICON' doesn't exist, will not append the selected icon to the pnd." $red + else + echo "ICON set to '$ICON'." + USE_ICON="true" + fi +fi +if [ $SQUASH ]; +then + echo "Will use a squashfs for '$PNDNAME'." +fi + + +# Validate the PXML file (if xmllint is available) +# Errors and problems in this section will be shown but are not fatal. +echo -e +cecho "Trying to validate '$PXML' now. Will be using '$PXML_schema' to do so." $green +which xmllint &> /dev/null +if [ "$?" -ne "0" ]; +then + VALIDATED=false + cecho "WARNING: Could not find 'xmllint'. Validity check of '$PXML' is not possible!" $red else - if [ $(mksquashfs -version | awk '{if ($3 >= 4) print 1}') = 1 ]; then - echo "your squashfs version is older then version 4, please upgrade to 4.0 or later" + if [ ! -f "$PXML_schema" ]; + then + VALIDATED=false + cecho "WARNING: Could not find '$PXML_schema'. If you want to validate your +PXML file please make sure to provide a schema using the --schema option." $red + else + xmllint --noout --schema $PXML_schema $PXML + if [ "$?" -ne "0" ]; then VALIDATED=false; else VALIDATED=true; fi + fi +fi +# Print some message at the end about the validation in case the user missed the output above +if [ $VALIDATED = "false" ] +then + cecho "WARNING: Could not successfully validate '$PXML'. Please check the output +above. This does not mean that your pnd will be broken. Either you are not following the strict +syntax required for validation or you don't have all files/programs required for validating." $red +else + cecho "Your file '$PXML' was validated successfully. The resulting pnd should +work nicely with libpnd." $green +fi + + +# Make iso from folder +echo -e +cecho "Creating an iso file based on '$FOLDER'." $green +if [ $SQUASH ]; +then + check_for_tool mksquashfs + if [ $(mksquashfs -version | awk 'BEGIN{r=0} $3>=4{r=1} END{print r}') -eq 0 ]; + then + cecho "ERROR: Your squashfs version is older then version 4, please upgrade to 4.0 or later" $red exit 1 fi - mksquashfs -no-recovery -nopad $FOLDER $PNDNAME.iso + mksquashfs $FOLDER $PNDNAME.iso -nopad -no-recovery +else + check_for_tool mkisofs + mkisofs -o $PNDNAME.iso -R $FOLDER +fi + +# Check that the iso file was actually created before continuing +if [ ! -f $PNDNAME.iso ]; +then + cecho "ERROR: The temporary file '$PNDNAME.iso' could not be created. +Please check the output above for any errors and retry after fixing them. Aborting." $red + exit 1 fi -#append pxml to iso -cat $PNDNAME.iso $PXML > $PNDNAME + + +# Append pxml to iso +echo -e +cecho "Appending '$PXML' to the created iso file." $green +cat $PNDNAME.iso $PXML > $PNDNAME rm $PNDNAME.iso #cleanup -#append icon if specified -if [ $ICON ]; then # check if we want to add an icon - if [ ! -f $ICON ]; then #does the icon actually exist? - echo "$ICON doesnt exist" - else # yes + +# Append icon if specified and available +if [ $USE_ICON ]; +then + echo -e + cecho "Appending the icon '$ICON' to the pnd." $green mv $PNDNAME $PNDNAME.tmp cat $PNDNAME.tmp $ICON > $PNDNAME # append icon rm $PNDNAME.tmp #cleanup - fi fi -if [ $PXML = "guess" ];then rm $FOLDER/PXML.xml; fi #cleanup + +# Final message +echo -e +if [ -f $PNDNAME ]; +then + cecho "Successfully finished creating the pnd '$PNDNAME'." $green +else + cecho "There seems to have been a problem and '$PNDNAME' was not created. Please check +the output above for any error messages. A possible cause for this is that there was +not enough space available." $red + exit 1 +fi + + +#if [ $PXML = "guess" ];then rm $FOLDER/PXML.xml; fi #cleanup diff --git a/backends/platform/openpandora/build/runscummvm.sh b/backends/platform/openpandora/build/runscummvm.sh index 48d24a2b81..9c9d8362cb 100755 --- a/backends/platform/openpandora/build/runscummvm.sh +++ b/backends/platform/openpandora/build/runscummvm.sh @@ -11,4 +11,4 @@ mkdir saves mkdir runtime cd runtime -../bin/scummvm --fullscreen --gfx-mode=2x --config=../scummvm.config +../bin/scummvm --fullscreen --gfx-mode=2x --config=../scummvm.config --themepath=../data diff --git a/backends/platform/openpandora/op-backend.cpp b/backends/platform/openpandora/op-backend.cpp index 5231e9790d..dcec387f97 100644 --- a/backends/platform/openpandora/op-backend.cpp +++ b/backends/platform/openpandora/op-backend.cpp @@ -49,7 +49,7 @@ #include <limits.h> #include <errno.h> #include <sys/stat.h> -#include <time.h> // for getTimeAndDate() +#include <time.h> // for getTimeAndDate() /* Dump console info to files. */ #define DUMP_STDOUT @@ -97,7 +97,7 @@ void OSystem_OP::initBackend() { // if (_mixer == 0) { // _mixerManager = new DoubleBufferSDLMixerManager(); - // Setup and start mixer + // Setup and start mixer // _mixerManager->init(); // } @@ -123,49 +123,49 @@ void OSystem_OP::initBackend() { _savefileManager = new DefaultSaveFileManager(savePath); - #ifdef DUMP_STDOUT - // The OpenPandora has a serial console on the EXT connection but most users do not use this so we - // output all our STDOUT and STDERR to files for debug purposes. - char STDOUT_FILE[PATH_MAX+1]; - char STDERR_FILE[PATH_MAX+1]; - - strcpy(STDOUT_FILE, workDirName); - strcpy(STDERR_FILE, workDirName); - strcat(STDOUT_FILE, "/scummvm.stdout.txt"); - strcat(STDERR_FILE, "/scummvm.stderr.txt"); - - // Flush the output in case anything is queued - fclose(stdout); - fclose(stderr); - - // Redirect standard input and standard output - FILE *newfp = freopen(STDOUT_FILE, "w", stdout); - if (newfp == NULL) { - #if !defined(stdout) - stdout = fopen(STDOUT_FILE, "w"); - #else - newfp = fopen(STDOUT_FILE, "w"); - if (newfp) { - *stdout = *newfp; - } - #endif +#ifdef DUMP_STDOUT + // The OpenPandora has a serial console on the EXT connection but most users do not use this so we + // output all our STDOUT and STDERR to files for debug purposes. + char STDOUT_FILE[PATH_MAX+1]; + char STDERR_FILE[PATH_MAX+1]; + + strcpy(STDOUT_FILE, workDirName); + strcpy(STDERR_FILE, workDirName); + strcat(STDOUT_FILE, "/scummvm.stdout.txt"); + strcat(STDERR_FILE, "/scummvm.stderr.txt"); + + // Flush the output in case anything is queued + fclose(stdout); + fclose(stderr); + + // Redirect standard input and standard output + FILE *newfp = freopen(STDOUT_FILE, "w", stdout); + if (newfp == NULL) { +#if !defined(stdout) + stdout = fopen(STDOUT_FILE, "w"); +#else + newfp = fopen(STDOUT_FILE, "w"); + if (newfp) { + *stdout = *newfp; } +#endif + } - newfp = freopen(STDERR_FILE, "w", stderr); - if (newfp == NULL) { - #if !defined(stderr) - stderr = fopen(STDERR_FILE, "w"); - #else - newfp = fopen(STDERR_FILE, "w"); - if (newfp) { - *stderr = *newfp; - } - #endif + newfp = freopen(STDERR_FILE, "w", stderr); + if (newfp == NULL) { +#if !defined(stderr) + stderr = fopen(STDERR_FILE, "w"); +#else + newfp = fopen(STDERR_FILE, "w"); + if (newfp) { + *stderr = *newfp; } +#endif + } - setbuf(stderr, NULL); - printf("%s\n", "Debug: STDOUT and STDERR redirected to text files."); - #endif /* DUMP_STDOUT */ + setbuf(stderr, NULL); + printf("%s\n", "Debug: STDOUT and STDERR redirected to text files."); +#endif /* DUMP_STDOUT */ /* Trigger autosave every 4 minutes. */ ConfMan.registerDefault("autosave_period", 4 * 60); @@ -187,7 +187,7 @@ void OSystem_OP::initBackend() { _inited = true; } - // enable joystick +// enable joystick // if (joystick_num > -1 && SDL_NumJoysticks() > 0) { // printf("Using joystick: %s\n", SDL_JoystickName(0)); // _joystick = SDL_JoystickOpen(joystick_num); @@ -195,13 +195,13 @@ void OSystem_OP::initBackend() { // // setupMixer(); - // Note: We could implement a custom SDLTimerManager by using - // SDL_AddTimer. That might yield better timer resolution, but it would - // also change the semantics of a timer: Right now, ScummVM timers - // *never* run in parallel, due to the way they are implemented. If we - // switched to SDL_AddTimer, each timer might run in a separate thread. - // However, not all our code is prepared for that, so we can't just - // switch. Still, it's a potential future change to keep in mind. +// Note: We could implement a custom SDLTimerManager by using +// SDL_AddTimer. That might yield better timer resolution, but it would +// also change the semantics of a timer: Right now, ScummVM timers +// *never* run in parallel, due to the way they are implemented. If we +// switched to SDL_AddTimer, each timer might run in a separate thread. +// However, not all our code is prepared for that, so we can't just +// switch. Still, it's a potential future change to keep in mind. // _timer = new DefaultTimerManager(); // _timerID = SDL_AddTimer(10, &timer_handler, _timer); @@ -217,9 +217,9 @@ void OSystem_OP::initSDL() { if (SDL_Init(sdlFlags) == -1) error("Could not initialize SDL: %s", SDL_GetError()); - uint8_t hiddenCursorData = 0; + uint8_t hiddenCursorData = 0; - hiddenCursor = SDL_CreateCursor(&hiddenCursorData, &hiddenCursorData, 8, 1, 0, 0); + hiddenCursor = SDL_CreateCursor(&hiddenCursorData, &hiddenCursorData, 8, 1, 0, 0); /* On the OpenPandora we need to work around an SDL assumption that returns relative mouse coordinates when you get to the screen @@ -277,11 +277,11 @@ void OSystem_OP::quit() { SDL_FreeCursor(hiddenCursor); - #ifdef DUMP_STDOUT - printf("%s\n", "Debug: STDOUT and STDERR text files closed."); - fclose(stdout); - fclose(stderr); - #endif /* DUMP_STDOUT */ +#ifdef DUMP_STDOUT + printf("%s\n", "Debug: STDOUT and STDERR text files closed."); + fclose(stdout); + fclose(stderr); +#endif /* DUMP_STDOUT */ OSystem_POSIX::quit(); } diff --git a/backends/platform/openpandora/op-bundle.mk b/backends/platform/openpandora/op-bundle.mk index 163f4711ce..089430f43c 100755 --- a/backends/platform/openpandora/op-bundle.mk +++ b/backends/platform/openpandora/op-bundle.mk @@ -75,11 +75,10 @@ endif $(CP) $(libloc)/../arm-angstrom-linux-gnueabi/usr/lib/libFLAC.so.8.2.0 $(bundle_name)/scummvm/lib/libFLAC.so.8 - $(srcdir)/backends/platform/openpandora/build/pnd_make.sh -p $(bundle_name).pnd -d $(bundle_name)/scummvm -x $(bundle_name)/scummvm/data/PXML.xml -i $(bundle_name)/scummvm/icon/scummvm.png + $(srcdir)/backends/platform/openpandora/build/pnd_make.sh -p $(bundle_name).pnd -c -d $(bundle_name)/scummvm -x $(bundle_name)/scummvm/data/PXML.xml -i $(bundle_name)/scummvm/icon/scummvm.png $(CP) $(srcdir)/backends/platform/openpandora/build/README-PND.txt $(bundle_name) tar -cvjf $(bundle_name)-pnd.tar.bz2 $(bundle_name).pnd $(bundle_name)/README-PND.txt rm -R ./$(bundle_name) -# rm $(bundle_name).pnd .PHONY: op-bundle op-pnd diff --git a/backends/platform/openpandora/op-main.cpp b/backends/platform/openpandora/op-main.cpp index bb359e7204..ebe018f570 100644 --- a/backends/platform/openpandora/op-main.cpp +++ b/backends/platform/openpandora/op-main.cpp @@ -43,7 +43,7 @@ int main(int argc, char *argv[]) { int res = scummvm_main(argc, argv); // Free OSystem - delete (OSystem_OP *)g_system; + delete(OSystem_OP *)g_system; return res; } diff --git a/backends/platform/openpandora/op-options.cpp b/backends/platform/openpandora/op-options.cpp index c60ba58cc7..58f0fb7188 100644 --- a/backends/platform/openpandora/op-options.cpp +++ b/backends/platform/openpandora/op-options.cpp @@ -31,9 +31,9 @@ namespace OP { enum { /* Touchscreen TapMode */ - TAPMODE_LEFT = 0, - TAPMODE_RIGHT = 1, - TAPMODE_HOVER = 2 + TAPMODE_LEFT = 0, + TAPMODE_RIGHT = 1, + TAPMODE_HOVER = 2 }; int tapmodeLevel = TAPMODE_LEFT; @@ -47,7 +47,7 @@ void ToggleTapMode() { tapmodeLevel = TAPMODE_LEFT; } else { tapmodeLevel = TAPMODE_LEFT; - } + } } } /* namespace OP */ diff --git a/backends/platform/openpandora/op-options.h b/backends/platform/openpandora/op-options.h index ebc83ca00c..919d217f4b 100644 --- a/backends/platform/openpandora/op-options.h +++ b/backends/platform/openpandora/op-options.h @@ -32,7 +32,7 @@ namespace OP { extern int tapmodeLevel; -extern void ToggleTapMode(); +extern void ToggleTapMode(); } /* namespace OP */ diff --git a/backends/platform/openpandora/op-sdl.h b/backends/platform/openpandora/op-sdl.h index d493c3957c..8cccbb5f86 100644 --- a/backends/platform/openpandora/op-sdl.h +++ b/backends/platform/openpandora/op-sdl.h @@ -34,7 +34,7 @@ //#define MIXER_DOUBLE_BUFFERING 1 #ifndef PATH_MAX - #define PATH_MAX 255 +#define PATH_MAX 255 #endif class OSystem_OP : public OSystem_POSIX { 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/ps2/systemps2.cpp b/backends/platform/ps2/systemps2.cpp index d3acd06089..c75d7493a2 100644 --- a/backends/platform/ps2/systemps2.cpp +++ b/backends/platform/ps2/systemps2.cpp @@ -66,7 +66,7 @@ #include "engines/engine.h" -#include "graphics/font.h" +#include "graphics/fonts/bdf.h" #include "graphics/surface.h" #include "icon.h" @@ -96,7 +96,7 @@ OSystem_PS2 *g_systemPs2; #define FOREVER 2147483647 namespace Graphics { - extern const NewFont g_sysfont; + extern const BdfFont g_sysfont; }; PS2Device detectBootPath(const char *elfPath, char *bootPath); 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..bc0bd35a6e 100644 --- a/backends/platform/psp/README.PSP +++ b/backends/platform/psp/README.PSP @@ -1,4 +1,4 @@ -ScummVM-PSP 1.4.0git README +ScummVM-PSP 1.5.0git README ============================================================================== Installation @@ -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 e945dca4a8..cdb130e2a0 100644 --- a/backends/platform/psp/display_manager.cpp +++ b/backends/platform/psp/display_manager.cpp @@ -62,7 +62,9 @@ const OSystem::GraphicsMode DisplayManager::_supportedModes[] = { // Class VramAllocator ----------------------------------- +namespace Common { DECLARE_SINGLETON(VramAllocator); +} //#define __PSP_DEBUG_FUNCS__ /* For debugging the stack */ //#define __PSP_DEBUG_PRINT__ @@ -477,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/powerman.cpp b/backends/platform/psp/powerman.cpp index fe9dcfa673..b72d05809d 100644 --- a/backends/platform/psp/powerman.cpp +++ b/backends/platform/psp/powerman.cpp @@ -30,7 +30,9 @@ //#define __PSP_DEBUG_PRINT__ #include "backends/platform/psp/trace.h" +namespace Common { DECLARE_SINGLETON(PowerManager); +} // Function to debug the Power Manager (we have no output to screen) inline void PowerManager::debugPM() { 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 3d6d4295a6..cbbb7d3f80 100644 --- a/backends/platform/psp/rtc.cpp +++ b/backends/platform/psp/rtc.cpp @@ -34,7 +34,9 @@ // Class PspRtc --------------------------------------------------------------- +namespace Common { DECLARE_SINGLETON(PspRtc); +} void PspRtc::init() { // init our starting ticks uint32 ticks[2]; @@ -81,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/appmenu_osx.h b/backends/platform/sdl/macosx/appmenu_osx.h new file mode 100755 index 0000000000..005414b789 --- /dev/null +++ b/backends/platform/sdl/macosx/appmenu_osx.h @@ -0,0 +1,32 @@ +/* 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 APPMENU_OSX_H +#define APPMENU_OSX_H + +#if defined(MACOSX) + +void replaceApplicationMenuItems(); + +#endif // MACOSX + +#endif diff --git a/backends/platform/sdl/macosx/appmenu_osx.mm b/backends/platform/sdl/macosx/appmenu_osx.mm new file mode 100755 index 0000000000..bb089a6b61 --- /dev/null +++ b/backends/platform/sdl/macosx/appmenu_osx.mm @@ -0,0 +1,110 @@ +/* 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/platform/sdl/macosx/appmenu_osx.h" +#include "common/translation.h" + +#include <Cocoa/Cocoa.h> + +// Apple removed setAppleMenu from the header files in 10.4, +// but as the method still exists we declare it ourselves here. +// Yes, this works :) +@interface NSApplication(MissingFunction) +- (void)setAppleMenu:(NSMenu *)menu; +@end + +void replaceApplicationMenuItems() { + + // Code mainly copied and adapted from SDLmain.m + NSMenu *appleMenu; + NSMenu *windowMenu; + NSMenuItem *menuItem; + + // For some reason [[NSApp mainMenu] removeAllItems] doesn't work and crashes, so we need + // to remove the SDL generated menus one by one + [[NSApp mainMenu] removeItemAtIndex:0]; // Remove application menu + [[NSApp mainMenu] removeItemAtIndex:0]; // Remove "Windows" menu + + // Create new application menu + appleMenu = [[NSMenu alloc] initWithTitle:@""]; + + // Get current encoding +#ifdef USE_TRANSLATION + NSStringEncoding stringEncoding = CFStringConvertEncodingToNSStringEncoding(CFStringConvertIANACharSetNameToEncoding((CFStringRef)[NSString stringWithCString:(TransMan.getCurrentCharset()).c_str() encoding:NSASCIIStringEncoding])); +#else + NSStringEncoding stringEncoding = NSASCIIStringEncoding; +#endif + + // Add "About ScummVM" menu item + [appleMenu addItemWithTitle:[NSString stringWithCString:_("About ScummVM") encoding:stringEncoding] action:@selector(orderFrontStandardAboutPanel:) keyEquivalent:@""]; + + // Add separator + [appleMenu addItem:[NSMenuItem separatorItem]]; + + // Add "Hide ScummVM" menu item + [appleMenu addItemWithTitle:[NSString stringWithCString:_("Hide ScummVM") encoding:stringEncoding] action:@selector(hide:) keyEquivalent:@"h"]; + + // Add "Hide Others" menu item + menuItem = (NSMenuItem *)[appleMenu addItemWithTitle:[NSString stringWithCString:_("Hide Others") encoding:stringEncoding] action:@selector(hideOtherApplications:) keyEquivalent:@"h"]; + [menuItem setKeyEquivalentModifierMask:(NSAlternateKeyMask|NSCommandKeyMask)]; + + // Add "Show All" menu item + [appleMenu addItemWithTitle:[NSString stringWithCString:_("Show All") encoding:stringEncoding] action:@selector(unhideAllApplications:) keyEquivalent:@""]; + + // Add separator + [appleMenu addItem:[NSMenuItem separatorItem]]; + + // Add "Quit ScummVM" menu item + [appleMenu addItemWithTitle:[NSString stringWithCString:_("Quit ScummVM") encoding:stringEncoding] action:@selector(terminate:) keyEquivalent:@"q"]; + + // Put application menu into the menubar + menuItem = [[NSMenuItem alloc] initWithTitle:@"" action:nil keyEquivalent:@""]; + [menuItem setSubmenu:appleMenu]; + [[NSApp mainMenu] addItem:menuItem]; + + // Tell the application object that this is now the application menu + [NSApp setAppleMenu:appleMenu]; + + + // Create new "Window" menu + windowMenu = [[NSMenu alloc] initWithTitle:[NSString stringWithCString:_("Window") encoding:stringEncoding]]; + + // Add "Minimize" menu item + menuItem = [[NSMenuItem alloc] initWithTitle:[NSString stringWithCString:_("Minimize") encoding:stringEncoding] action:@selector(performMiniaturize:) keyEquivalent:@"m"]; + [windowMenu addItem:menuItem]; + + // Put menu into the menubar + menuItem = [[NSMenuItem alloc] initWithTitle:[NSString stringWithCString:_("Window") encoding:stringEncoding] action:nil keyEquivalent:@""]; + [menuItem setSubmenu:windowMenu]; + [[NSApp mainMenu] addItem:menuItem]; + + // Tell the application object that this is now the window menu. + [NSApp setWindowsMenu:windowMenu]; + + // Finally give up our references to the objects + [appleMenu release]; + [windowMenu release]; + [menuItem release]; +} diff --git a/backends/platform/sdl/macosx/macosx.cpp b/backends/platform/sdl/macosx/macosx.cpp index 817f61e864..639bd980f6 100644 --- a/backends/platform/sdl/macosx/macosx.cpp +++ b/backends/platform/sdl/macosx/macosx.cpp @@ -29,9 +29,13 @@ #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" #include "common/fs.h" +#include "common/translation.h" #include "ApplicationServices/ApplicationServices.h" // for LSOpenFSRef #include "CoreFoundation/CoreFoundation.h" // for CF* stuff @@ -51,6 +55,20 @@ void OSystem_MacOSX::initBackend() { _mixerManager->init(); } +#ifdef USE_TRANSLATION + // We need to initialize the translataion manager here for the following + // call to replaceApplicationMenuItems() work correctly + TransMan.setLanguage(ConfMan.get("gui_language").c_str()); +#endif // USE_TRANSLATION + + // 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(); } @@ -100,4 +118,51 @@ bool OSystem_MacOSX::displayLogFile() { return err != noErr; } +Common::String OSystem_MacOSX::getSystemLanguage() const { +#if defined(USE_DETECTLANG) && defined(USE_TRANSLATION) + CFArrayRef availableLocalizations = CFBundleCopyBundleLocalizations(CFBundleGetMainBundle()); + if (availableLocalizations) { + CFArrayRef preferredLocalizations = CFBundleCopyPreferredLocalizationsFromArray(availableLocalizations); + CFRelease(availableLocalizations); + if (preferredLocalizations) { + CFIndex localizationsSize = CFArrayGetCount(preferredLocalizations); + // Since we have a list of sorted preferred localization, I would like here to + // check that they are supported by the TranslationManager and take the first + // one that is supported. The listed localizations are taken from the Bundle + // plist file, so they should all be supported, unless the plist file is not + // synchronized with the translations.dat file. So this is not really a big + // issue. And because getSystemLanguage() is called from the constructor of + // TranslationManager (therefore before the instance pointer is set), calling + // TransMan here results in an infinite loop and creation of a lot of TransMan + // instances. + /* + for (CFIndex i = 0 ; i < localizationsSize ; ++i) { + CFStringRef language = (CFStringRef)CFArrayGetValueAtIndex(preferredLocalizations, i); + char buffer[10]; + CFStringGetCString(language, buffer, 50, kCFStringEncodingASCII); + int32 languageId = TransMan.findMatchingLanguage(buffer); + if (languageId != -1) { + CFRelease(preferredLocalizations); + return TransMan.getLangById(languageId); + } + } + */ + if (localizationsSize > 0) { + CFStringRef language = (CFStringRef)CFArrayGetValueAtIndex(preferredLocalizations, 0); + char buffer[10]; + CFStringGetCString(language, buffer, 50, kCFStringEncodingASCII); + CFRelease(preferredLocalizations); + return buffer; + } + CFRelease(preferredLocalizations); + } + + } + // Falback to POSIX implementation + return OSystem_POSIX::getSystemLanguage(); +#else // USE_DETECTLANG + return OSystem_POSIX::getSystemLanguage(); +#endif // USE_DETECTLANG +} + #endif diff --git a/backends/platform/sdl/macosx/macosx.h b/backends/platform/sdl/macosx/macosx.h index 86c70297ec..4837e643b3 100644 --- a/backends/platform/sdl/macosx/macosx.h +++ b/backends/platform/sdl/macosx/macosx.h @@ -32,6 +32,8 @@ public: virtual bool hasFeature(Feature f); virtual bool displayLogFile(); + + virtual Common::String getSystemLanguage() const; virtual void initBackend(); virtual void addSysArchivesToSearchSet(Common::SearchSet &s, int priority = 0); diff --git a/backends/platform/sdl/main.cpp b/backends/platform/sdl/main.cpp index 1992bdd3f2..040028079d 100644 --- a/backends/platform/sdl/main.cpp +++ b/backends/platform/sdl/main.cpp @@ -26,7 +26,7 @@ // of this file. The following "#if" ensures that. #if !defined(POSIX) && \ !defined(WIN32) && \ - !defined(__MAEMO__) && \ + !defined(MAEMO) && \ !defined(__SYMBIAN32__) && \ !defined(_WIN32_WCE) && \ !defined(__amigaos4__) && \ @@ -34,6 +34,7 @@ !defined(CAANOO) && \ !defined(LINUXMOTO) && \ !defined(SAMSUNGTV) && \ + !defined(PLAYSTATION3) && \ !defined(OPENPANDORA) #include "backends/platform/sdl/sdl.h" diff --git a/backends/platform/sdl/module.mk b/backends/platform/sdl/module.mk index efc5168d5b..f1afe37349 100644 --- a/backends/platform/sdl/module.mk +++ b/backends/platform/sdl/module.mk @@ -14,7 +14,8 @@ endif ifdef MACOSX MODULE_OBJS += \ macosx/macosx-main.o \ - macosx/macosx.o + macosx/macosx.o \ + macosx/appmenu_osx.o endif ifdef WIN32 @@ -29,6 +30,12 @@ MODULE_OBJS += \ amigaos/amigaos.o endif +ifdef PLAYSTATION3 +MODULE_OBJS += \ + ps3/ps3-main.o \ + ps3/ps3.o +endif + # We don't use rules.mk but rather manually update OBJS and MODULE_DIRS. MODULE_OBJS := $(addprefix $(MODULE)/, $(MODULE_OBJS)) OBJS := $(MODULE_OBJS) $(OBJS) diff --git a/backends/platform/sdl/posix/posix-main.cpp b/backends/platform/sdl/posix/posix-main.cpp index f78e001398..5f0914e04f 100644 --- a/backends/platform/sdl/posix/posix-main.cpp +++ b/backends/platform/sdl/posix/posix-main.cpp @@ -22,7 +22,7 @@ #include "common/scummsys.h" -#if defined(POSIX) && !defined(MACOSX) && !defined(SAMSUNGTV) && !defined(WEBOS) && !defined(LINUXMOTO) && !defined(GPH_DEVICE) && !defined(GP2X) && !defined(DINGUX) && !defined(OPENPANDORA) +#if defined(POSIX) && !defined(MACOSX) && !defined(SAMSUNGTV) && !defined(MAEMO) && !defined(WEBOS) && !defined(LINUXMOTO) && !defined(GPH_DEVICE) && !defined(GP2X) && !defined(DINGUX) && !defined(OPENPANDORA) && !defined(PLAYSTATION3) #include "backends/platform/sdl/posix/posix.h" #include "backends/plugins/sdl/sdl-provider.h" diff --git a/backends/platform/sdl/ps3/ps3-main.cpp b/backends/platform/sdl/ps3/ps3-main.cpp new file mode 100644 index 0000000000..ba548a3749 --- /dev/null +++ b/backends/platform/sdl/ps3/ps3-main.cpp @@ -0,0 +1,49 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "common/scummsys.h" + +#include "backends/platform/sdl/ps3/ps3.h" +#include "backends/plugins/sdl/sdl-provider.h" +#include "base/main.h" + +int main(int argc, char *argv[]) { + + // Create our OSystem instance + g_system = new OSystem_PS3(); + assert(g_system); + + // Pre initialize the backend + ((OSystem_PS3 *)g_system)->init(); + +#ifdef DYNAMIC_MODULES + PluginManager::instance().addPluginProvider(new SDLPluginProvider()); +#endif + + // Invoke the actual ScummVM main entry point: + int res = scummvm_main(argc, argv); + + // Free OSystem + delete (OSystem_PS3 *)g_system; + + return res; +} diff --git a/backends/platform/sdl/ps3/ps3.cpp b/backends/platform/sdl/ps3/ps3.cpp new file mode 100644 index 0000000000..33586ce693 --- /dev/null +++ b/backends/platform/sdl/ps3/ps3.cpp @@ -0,0 +1,94 @@ +/* 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. + * + */ + +#define FORBIDDEN_SYMBOL_EXCEPTION_mkdir +#define FORBIDDEN_SYMBOL_EXCEPTION_time_h // sys/stat.h includes sys/time.h +#define FORBIDDEN_SYMBOL_EXCEPTION_unistd_h + +#include "common/scummsys.h" +#include "common/config-manager.h" +#include "backends/platform/sdl/ps3/ps3.h" +#include "backends/graphics/surfacesdl/surfacesdl-graphics.h" +#include "backends/saves/default/default-saves.h" +#include "backends/fs/ps3/ps3-fs-factory.h" +#include "backends/events/ps3sdl/ps3sdl-events.h" +#include "backends/mixer/sdl13/sdl13-mixer.h" + +#include <dirent.h> +#include <sys/stat.h> + +int access(const char *pathname, int mode) { + struct stat sb; + + if (stat(pathname, &sb) == -1) { + return -1; + } + + return 0; +} + +OSystem_PS3::OSystem_PS3(Common::String baseConfigName) + : _baseConfigName(baseConfigName) { +} + +void OSystem_PS3::init() { + // Initialze File System Factory + _fsFactory = new PS3FilesystemFactory(); + + // Invoke parent implementation of this method + OSystem_SDL::init(); +} + +void OSystem_PS3::initBackend() { + ConfMan.set("joystick_num", 0); + ConfMan.set("vkeybdpath", PREFIX "/data"); + ConfMan.registerDefault("fullscreen", true); + ConfMan.registerDefault("aspect_ratio", true); + + // Create the savefile manager + if (_savefileManager == 0) + _savefileManager = new DefaultSaveFileManager(PREFIX "/saves"); + + // Create the mixer manager + if (_mixer == 0) { + _mixerManager = new Sdl13MixerManager(); + + // Setup and start mixer + _mixerManager->init(); + } + + // Event source + if (_eventSource == 0) + _eventSource = new PS3SdlEventSource(); + + // Invoke parent implementation of this method + OSystem_SDL::initBackend(); +} + +Common::String OSystem_PS3::getDefaultConfigFileName() { + return PREFIX "/" + _baseConfigName; +} + +Common::WriteStream *OSystem_PS3::createLogFile() { + Common::FSNode file(PREFIX "/scummvm.log"); + return file.createWriteStream(); +} diff --git a/backends/platform/sdl/ps3/ps3.h b/backends/platform/sdl/ps3/ps3.h new file mode 100644 index 0000000000..daed7599a9 --- /dev/null +++ b/backends/platform/sdl/ps3/ps3.h @@ -0,0 +1,47 @@ +/* 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 PLATFORM_SDL_PS3_H +#define PLATFORM_SDL_PS3_H + +#include "backends/platform/sdl/sdl.h" + +class OSystem_PS3 : public OSystem_SDL { +public: + // Let the subclasses be able to change _baseConfigName in the constructor + OSystem_PS3(Common::String baseConfigName = "scummvm.ini"); + virtual ~OSystem_PS3() {} + + virtual void init(); + virtual void initBackend(); + +protected: + // Base string for creating the default path and filename + // for the configuration file + Common::String _baseConfigName; + + virtual Common::String getDefaultConfigFileName(); + + virtual Common::WriteStream *createLogFile(); +}; + +#endif diff --git a/backends/platform/sdl/sdl-sys.h b/backends/platform/sdl/sdl-sys.h index 63bfc58617..ca3c586e03 100644 --- a/backends/platform/sdl/sdl-sys.h +++ b/backends/platform/sdl/sdl-sys.h @@ -27,7 +27,7 @@ // fashion, even on the Symbian port. // Moreover, it contains a workaround for the fact that SDL_rwops.h uses // a FILE pointer in one place, which conflicts with common/forbidden.h. - +// The SDL 1.3 headers also include strings.h #include "common/scummsys.h" @@ -39,6 +39,16 @@ typedef struct { int FAKE; } FAKE_FILE; #define FILE FAKE_FILE #endif +#if !defined(FORBIDDEN_SYMBOL_ALLOW_ALL) && !defined(FORBIDDEN_SYMBOL_EXCEPTION_strcasecmp) +#undef strcasecmp +#define strcasecmp FAKE_strcasecmp +#endif + +#if !defined(FORBIDDEN_SYMBOL_ALLOW_ALL) && !defined(FORBIDDEN_SYMBOL_EXCEPTION_strncasecmp) +#undef strncasecmp +#define strncasecmp FAKE_strncasecmp +#endif + #if defined(__SYMBIAN32__) #include <esdl\SDL.h> #else @@ -51,4 +61,15 @@ typedef struct { int FAKE; } FAKE_FILE; #define FILE FORBIDDEN_SYMBOL_REPLACEMENT #endif +#if !defined(FORBIDDEN_SYMBOL_ALLOW_ALL) && !defined(FORBIDDEN_SYMBOL_EXCEPTION_strcasecmp) +#undef strcasecmp +#define strcasecmp FORBIDDEN_SYMBOL_REPLACEMENT +#endif + +#if !defined(FORBIDDEN_SYMBOL_ALLOW_ALL) && !defined(FORBIDDEN_SYMBOL_EXCEPTION_strncasecmp) +#undef strncasecmp +#define strncasecmp FORBIDDEN_SYMBOL_REPLACEMENT +#endif + + #endif diff --git a/backends/platform/sdl/sdl.cpp b/backends/platform/sdl/sdl.cpp index 3f85b1a564..8dff5cec05 100644 --- a/backends/platform/sdl/sdl.cpp +++ b/backends/platform/sdl/sdl.cpp @@ -35,13 +35,21 @@ #include "common/textconsole.h" #include "backends/saves/default/default-saves.h" + +// Audio CD support was removed with SDL 1.3 +#if SDL_VERSION_ATLEAST(1, 3, 0) +#include "backends/audiocd/default/default-audiocd.h" +#else #include "backends/audiocd/sdl/sdl-audiocd.h" +#endif + #include "backends/events/sdl/sdl-events.h" #include "backends/mutex/sdl/sdl-mutex.h" #include "backends/timer/sdl/sdl-timer.h" #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" @@ -167,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; } } @@ -188,8 +196,15 @@ void OSystem_SDL::initBackend() { _mixerManager->init(); } - if (_audiocdManager == 0) + if (_audiocdManager == 0) { + // Audio CD support was removed with SDL 1.3 +#if SDL_VERSION_ATLEAST(1, 3, 0) + _audiocdManager = new DefaultAudioCDManager(); +#else _audiocdManager = new SdlAudioCDManager(); +#endif + + } // Setup a custom program icon. setupIcon(); @@ -413,6 +428,7 @@ void OSystem_SDL::setupIcon() { for (i = 0; i < ncols; i++) { unsigned char code; char color[32]; + memset(color, 0, sizeof(color)); unsigned int col; if (sscanf(scummvm_icon[1 + i], "%c c %s", &code, color) != 2) { warning("Wrong format of scummvm_icon[%d] (%s)", 1 + i, scummvm_icon[1 + i]); @@ -457,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 { @@ -508,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) { @@ -519,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/sdl/win32/win32.cpp b/backends/platform/sdl/win32/win32.cpp index 5b02a20abc..a2c8e43424 100644 --- a/backends/platform/sdl/win32/win32.cpp +++ b/backends/platform/sdl/win32/win32.cpp @@ -23,10 +23,6 @@ // Disable symbol overrides so that we can use system headers. #define FORBIDDEN_SYMBOL_ALLOW_ALL -#include "common/scummsys.h" -#include "common/error.h" -#include "common/textconsole.h" - #ifdef WIN32 #define WIN32_LEAN_AND_MEAN @@ -34,6 +30,13 @@ #undef ARRAYSIZE // winnt.h defines ARRAYSIZE, but we want our own one... #include <shellapi.h> +#include "common/scummsys.h" +#include "common/config-manager.h" +#include "common/error.h" +#include "common/textconsole.h" + +#include <SDL_syswm.h> // For setting the icon + #include "backends/platform/sdl/win32/win32.h" #include "backends/fs/windows/windows-fs-factory.h" #include "backends/taskbar/win32/win32-taskbar.h" @@ -42,46 +45,7 @@ #define DEFAULT_CONFIG_FILE "scummvm.ini" -//#define HIDE_CONSOLE - -#ifdef HIDE_CONSOLE -struct SdlConsoleHidingWin32 { - DWORD myPid; - DWORD myTid; - HWND consoleHandle; -}; - -// console hiding for win32 -static BOOL CALLBACK initBackendFindConsoleWin32Proc(HWND hWnd, LPARAM lParam) { - DWORD pid, tid; - SdlConsoleHidingWin32 *variables = (SdlConsoleHidingWin32 *)lParam; - tid = GetWindowThreadProcessId(hWnd, &pid); - if ((tid == variables->myTid) && (pid == variables->myPid)) { - variables->consoleHandle = hWnd; - return FALSE; - } - return TRUE; -} - -#endif - void OSystem_Win32::init() { -#ifdef HIDE_CONSOLE - // console hiding for win32 - SdlConsoleHidingWin32 consoleHidingWin32; - consoleHidingWin32.consoleHandle = 0; - consoleHidingWin32.myPid = GetCurrentProcessId(); - consoleHidingWin32.myTid = GetCurrentThreadId(); - EnumWindows (initBackendFindConsoleWin32Proc, (LPARAM)&consoleHidingWin32); - - if (!ConfMan.getBool("show_console")) { - if (consoleHidingWin32.consoleHandle) { - // We won't find a window with our TID/PID in case we were started from command-line - ShowWindow(consoleHidingWin32.consoleHandle, SW_HIDE); - } - } -#endif - // Initialize File System Factory _fsFactory = new WindowsFilesystemFactory(); @@ -94,6 +58,26 @@ void OSystem_Win32::init() { OSystem_SDL::init(); } +void OSystem_Win32::initBackend() { + // Console window is enabled by default on Windows + ConfMan.registerDefault("console", true); + + // Enable or disable the window console window + if (ConfMan.getBool("console")) { + if (AllocConsole()) { + freopen("CONIN$","r",stdin); + freopen("CONOUT$","w",stdout); + freopen("CONOUT$","w",stderr); + } + SetConsoleTitle("ScummVM Status Window"); + } else { + FreeConsole(); + } + + // Invoke parent implementation of this method + OSystem_SDL::initBackend(); +} + bool OSystem_Win32::hasFeature(Feature f) { if (f == kFeatureDisplayLogFile) @@ -137,6 +121,28 @@ bool OSystem_Win32::displayLogFile() { return false; } +void OSystem_Win32::setupIcon() { + HMODULE handle = GetModuleHandle(NULL); + HICON ico = LoadIcon(handle, MAKEINTRESOURCE(1001 /* IDI_ICON */)); + if (ico) { + SDL_SysWMinfo wminfo; + SDL_VERSION(&wminfo.version); + if (SDL_GetWMInfo(&wminfo)) { + // Replace the handle to the icon associated with the window class by our custom icon + SetClassLongPtr(wminfo.window, GCLP_HICON, (ULONG_PTR)ico); + + // Since there wasn't any default icon, we can't use the return value from SetClassLong + // to check for errors (it would be 0 in both cases: error or no previous value for the + // icon handle). Instead we check for the last-error code value. + if (GetLastError() == ERROR_SUCCESS) + return; + } + } + + // If no icon has been set, fallback to default path + OSystem_SDL::setupIcon(); +} + Common::String OSystem_Win32::getDefaultConfigFileName() { char configFile[MAXPATHLEN]; @@ -155,18 +161,31 @@ Common::String OSystem_Win32::getDefaultConfigFileName() { error("Unable to access user profile directory"); strcat(configFile, "\\Application Data"); - CreateDirectory(configFile, NULL); + + // If the directory already exists (as it should in most cases), + // we don't want to fail, but we need to stop on other errors (such as ERROR_PATH_NOT_FOUND) + if (!CreateDirectory(configFile, NULL)) { + if (GetLastError() != ERROR_ALREADY_EXISTS) + error("Cannot create Application data folder"); + } } strcat(configFile, "\\ScummVM"); - CreateDirectory(configFile, NULL); + if (!CreateDirectory(configFile, NULL)) { + if (GetLastError() != ERROR_ALREADY_EXISTS) + error("Cannot create ScummVM application data folder"); + } + strcat(configFile, "\\" DEFAULT_CONFIG_FILE); FILE *tmp = NULL; if ((tmp = fopen(configFile, "r")) == NULL) { // Check windows directory char oldConfigFile[MAXPATHLEN]; - GetWindowsDirectory(oldConfigFile, MAXPATHLEN); + uint ret = GetWindowsDirectory(oldConfigFile, MAXPATHLEN); + if (ret == 0 || ret > MAXPATHLEN) + error("Cannot retrieve the path of the Windows directory"); + strcat(oldConfigFile, "\\" DEFAULT_CONFIG_FILE); if ((tmp = fopen(oldConfigFile, "r"))) { strcpy(configFile, oldConfigFile); @@ -178,7 +197,10 @@ Common::String OSystem_Win32::getDefaultConfigFileName() { } } else { // Check windows directory - GetWindowsDirectory(configFile, MAXPATHLEN); + uint ret = GetWindowsDirectory(configFile, MAXPATHLEN); + if (ret == 0 || ret > MAXPATHLEN) + error("Cannot retrieve the path of the Windows directory"); + strcat(configFile, "\\" DEFAULT_CONFIG_FILE); } diff --git a/backends/platform/sdl/win32/win32.h b/backends/platform/sdl/win32/win32.h index ef7b6af3f1..b56997a63b 100644 --- a/backends/platform/sdl/win32/win32.h +++ b/backends/platform/sdl/win32/win32.h @@ -28,6 +28,7 @@ class OSystem_Win32 : public OSystem_SDL { public: virtual void init(); + virtual void initBackend(); virtual void addSysArchivesToSearchSet(Common::SearchSet &s, int priority = 0); @@ -46,6 +47,7 @@ protected: */ Common::String _logFilePath; + virtual void setupIcon(); virtual Common::String getDefaultConfigFileName(); virtual Common::WriteStream *createLogFile(); }; 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..83e98a534a 100644 --- a/backends/platform/symbian/README +++ b/backends/platform/symbian/README @@ -24,6 +24,17 @@ About ScummVM Jurgen and Lars have successfully transfered all needed changes into CVS/SVN, with additional helpful tools for Symbian OS Release History: + Release version: 1.4.0 + * Nothing significant in the Symbian port, except SDL improvements (new SDL version used) + * See main readme for general ScummVM improvements, major update + + Release version: 1.3.1 + * Nothing significant in the Symbian port, except SDL improvements (new SDL version used) + * See main readme for general ScummVM improvements, major update + + Release version: 1.3.0 + * Nothing significant in the Symbian port, except SDL improvements (new SDL version used) + * See main readme for general ScummVM improvements, major update Release version: 1.2.1 * Symbian port now split in two parts, ScummVM 1 and ScummVM 2 to keep the exe size down. ScummVM 1 contains the following engines: @@ -177,4 +188,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_A0000658_S60v3.mmp.in b/backends/platform/symbian/S60v3/ScummVM_A0000658_S60v3.mmp.in index aa5e1f9b18..583d1a35e7 100644 --- a/backends/platform/symbian/S60v3/ScummVM_A0000658_S60v3.mmp.in +++ b/backends/platform/symbian/S60v3/ScummVM_A0000658_S60v3.mmp.in @@ -87,7 +87,7 @@ STATICLIBRARY esdl.lib // *** Include paths -USERINCLUDE ..\..\..\.. ..\..\..\..\common ..\..\..\..\gui ..\..\..\..\engines +USERINCLUDE ..\..\..\.. ..\..\..\..\gui ..\..\..\..\engines USERINCLUDE ..\..\..\..\backends\fs ..\src ..\..\..\..\backends\platform\sdl ..\..\..\..\audio SYSTEMINCLUDE \epoc32\include\ESDL @@ -130,9 +130,13 @@ SOURCE gui\Dialog.cpp // Common error source common\error.cpp +source common\quicktime.cpp // Special for graphics source graphics\iff.cpp +source backends\graphics\symbiansdl\symbiansdl-graphics.cpp +source backends\graphics\surfacesdl\surfacesdl-graphics.cpp +source engines\obsolete.cpp // *** Dynamic Libraries LIBRARY cone.lib eikcore.lib 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_S60v3.mmp.in b/backends/platform/symbian/S60v3/ScummVM_S60v3.mmp.in index 09592ef3e3..5367bf0d1f 100644 --- a/backends/platform/symbian/S60v3/ScummVM_S60v3.mmp.in +++ b/backends/platform/symbian/S60v3/ScummVM_S60v3.mmp.in @@ -87,7 +87,7 @@ STATICLIBRARY esdl.lib // *** Include paths -USERINCLUDE ..\..\..\.. ..\..\..\..\common ..\..\..\..\gui ..\..\..\..\engines +USERINCLUDE ..\..\..\.. ..\..\..\..\gui ..\..\..\..\engines USERINCLUDE ..\..\..\..\backends\fs ..\src ..\..\..\..\backends\platform\sdl ..\..\..\..\audio SYSTEMINCLUDE \epoc32\include\ESDL @@ -130,9 +130,13 @@ SOURCE gui\Dialog.cpp // Common error source common\error.cpp +source common\quicktime.cpp // Special for graphics source graphics\iff.cpp +source backends\graphics\symbiansdl\symbiansdl-graphics.cpp +source backends\graphics\surfacesdl\surfacesdl-graphics.cpp +source engines\obsolete.cpp // *** Dynamic Libraries LIBRARY cone.lib eikcore.lib diff --git a/backends/platform/symbian/S60v3/scummvm-CVS-SymbianS60v3.pkg b/backends/platform/symbian/S60v3/scummvm-CVS-SymbianS60v3.pkg index 2cc49a2bc6..efa1a3c50f 100644 --- a/backends/platform/symbian/S60v3/scummvm-CVS-SymbianS60v3.pkg +++ b/backends/platform/symbian/S60v3/scummvm-CVS-SymbianS60v3.pkg @@ -33,7 +33,7 @@ :"ScummVM" ; UID is the app's UID -#{"ScummVM S60v3"},(0xA0000657),1,30,0 +#{"ScummVM S60v3"},(0xA0000657),1,40,0 ;Supports Series 60 v 3.0 [0x101F7961], 0, 0, 0, {"Series60ProductID"} @@ -60,12 +60,15 @@ ; Common datafiles needed for some games "..\..\..\..\dists\engine-data\kyra.dat"-"c:\data\scummvm\kyra.dat" "..\..\..\..\dists\engine-data\sky.cpt"-"c:\data\scummvm\sky.cpt" +"..\..\..\..\dists\engine-data\hugo.dat"-"c:\data\scummvm\hugo.dat" "..\..\..\..\dists\engine-data\lure.dat"-"c:\data\scummvm\lure.dat" "..\..\..\..\dists\engine-data\drascula.dat"-"c:\data\scummvm\drascula.dat" "..\..\..\..\dists\engine-data\m4.dat"-"c:\data\scummvm\m4.dat" "..\..\..\..\dists\engine-data\teenagent.dat"-"c:\data\scummvm\teenagent.dat" +"..\..\..\..\dists\engine-data\toon.dat"-"c:\data\scummvm\toon.dat" "..\..\..\vkeybd\packs\vkeybd_default.zip"-"c:\data\scummvm\vkeybd_default.zip" "..\..\..\..\gui\themes\translations.dat"-"c:\data\scummvm\translations.dat" +"..\..\..\..\gui\themes\scummmodern.zip"-"c:\data\scummvm\scummmodern.zip" ; Config/log files: 'empty' will automagically be removed on uninstall ""-"c:\data\scummvm\scummvm.ini",FILENULL diff --git a/backends/platform/symbian/S60v3/scummvm-CVS-SymbianS60v3_split.pkg b/backends/platform/symbian/S60v3/scummvm-CVS-SymbianS60v3_split.pkg new file mode 100644 index 0000000000..aea6701709 --- /dev/null +++ b/backends/platform/symbian/S60v3/scummvm-CVS-SymbianS60v3_split.pkg @@ -0,0 +1,88 @@ +; +; 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. +; +; $URL$ +; $Id$ +; +; + +;;; +;;; ScummVM .PKG file for .SIS gegeration +;;; + +;Language - standard language definitions +&EN + +; List of localised vendor names - one per language. At least one must be provided (English [EN]). +; List must correspond to list of languages specified elsewhere in the .pkg +%{"ScummVM"} +; The non-localised, globally unique vendor name (mandatory) +:"ScummVM" + +; UID is the app's UID +#{"ScummVM S60v3"},(0xA0000657),1,40,0 + +;Supports Series 60 v 3.0 +[0x101F7961], 0, 0, 0, {"Series60ProductID"} +;Supports Series 60 v 5.0 +[0x1028315F], 0, 0, 0, {"Series60ProductID"} + +; Launcher, Application, AIF & Resource file +"\epoc32\release\gcce\urel\ScummVM.exe"- "!:\sys\bin\ScummVM.exe" +"\epoc32\data\z\resource\apps\ScummVM.rsc"- "!:\resource\apps\ScummVM.rsc" +"\epoc32\Data\Z\resource\apps\scummvm_loc.rsc"- "!:\resource\apps\scummvm_loc.rsc" +"\epoc32\data\Z\resource\APPS\scummvm.MIF"- "!:\resource\apps\scummvm.MIF" +"\epoc32\data\z\private\10003a3f\apps\scummvm_reg.rsc"-"!:\private\10003a3f\import\apps\scummvm_reg.rsc" + +"\epoc32\release\gcce\urel\ScummVM_A0000658.exe"- "!:\sys\bin\ScummVM_A0000658.exe" +"\epoc32\data\z\resource\apps\ScummVM_A0000658.rsc"- "!:\resource\apps\ScummVM_A0000658.rsc" +"\epoc32\Data\Z\resource\apps\ScummVM_A0000658_loc.rsc"- "!:\resource\apps\ScummVM_A0000658_loc.rsc" +"\epoc32\data\z\private\10003a3f\apps\scummvm_A0000658_reg.rsc"-"!:\private\10003a3f\import\apps\scummvm_A0000658_reg.rsc" + +"..\..\..\..\dists\pred.dic"-"c:\data\scummvm\pred.dic" + +; Scummvm Documentation +"..\..\..\..\COPYRIGHT"-"!:\resource\apps\scummvm\COPYRIGHT", FT, TC +"..\..\..\..\COPYING"-"!:\resource\apps\scummvm\COPYING", FT, TC +"..\README"-"!:\resource\apps\scummvm\SYMBIAN_README", FT, TC +"..\..\..\..\AUTHORS"-"!:\resource\apps\scummvm\AUTHORS" +"..\..\..\..\README"-"!:\resource\apps\scummvm\README" +"..\..\..\..\NEWS"-"!:\resource\apps\scummvm\NEWS" + +; Common datafiles needed for some games +"..\..\..\..\dists\engine-data\kyra.dat"-"c:\data\scummvm\kyra.dat" +"..\..\..\..\dists\engine-data\sky.cpt"-"c:\data\scummvm\sky.cpt" +"..\..\..\..\dists\engine-data\hugo.dat"-"c:\data\scummvm\hugo.dat" +"..\..\..\..\dists\engine-data\lure.dat"-"c:\data\scummvm\lure.dat" +"..\..\..\..\dists\engine-data\drascula.dat"-"c:\data\scummvm\drascula.dat" +"..\..\..\..\dists\engine-data\m4.dat"-"c:\data\scummvm\m4.dat" +"..\..\..\..\dists\engine-data\teenagent.dat"-"c:\data\scummvm\teenagent.dat" +"..\..\..\..\dists\engine-data\toon.dat"-"c:\data\scummvm\toon.dat" +"..\..\..\vkeybd\packs\vkeybd_default.zip"-"c:\data\scummvm\vkeybd_default.zip" +"..\..\..\..\gui\themes\translations.dat"-"c:\data\scummvm\translations.dat" +"..\..\..\..\gui\themes\scummmodern.zip"-"c:\data\scummvm\scummmodern.zip" + +; Config/log files: 'empty' will automagically be removed on uninstall +""-"c:\data\scummvm\scummvm.ini",FILENULL +""-"c:\data\scummvm\scummvm.stdout.txt",FILENULL +""-"c:\data\scummvm\scummvm.stderr.txt",FILENULL +""-"c:\data\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. 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_UIQ3.mmp.in b/backends/platform/symbian/UIQ3/ScummVM_A0000658_UIQ3.mmp.in index e6f2b691ce..3bc93d8ce3 100644 --- a/backends/platform/symbian/UIQ3/ScummVM_A0000658_UIQ3.mmp.in +++ b/backends/platform/symbian/UIQ3/ScummVM_A0000658_UIQ3.mmp.in @@ -88,7 +88,7 @@ STATICLIBRARY esdl.lib // *** Include paths -USERINCLUDE ..\..\..\.. ..\..\..\..\common ..\..\..\..\gui ..\..\..\..\engines +USERINCLUDE ..\..\..\.. ..\..\..\..\gui ..\..\..\..\engines USERINCLUDE ..\..\..\..\backends\fs ..\src ..\..\..\..\backends\platform\sdl ..\..\..\..\sound SYSTEMINCLUDE \epoc32\include\ESDL @@ -128,9 +128,13 @@ SOURCE gui\Dialog.cpp // Common error source common\error.cpp +source common\quicktime.cpp // Special for graphics source graphics\iff.cpp +source backends\graphics\symbiansdl\symbiansdl-graphics.cpp +source backends\graphics\surfacesdl\surfacesdl-graphics.cpp +source engines\obsolete.cpp // *** Dynamic Libraries LIBRARY cone.lib eikcore.lib diff --git a/backends/platform/symbian/UIQ3/ScummVM_UIQ3.mmp.in b/backends/platform/symbian/UIQ3/ScummVM_UIQ3.mmp.in index 3b6a3d9bd7..bd5016f8d1 100644 --- a/backends/platform/symbian/UIQ3/ScummVM_UIQ3.mmp.in +++ b/backends/platform/symbian/UIQ3/ScummVM_UIQ3.mmp.in @@ -88,7 +88,7 @@ STATICLIBRARY esdl.lib // *** Include paths -USERINCLUDE ..\..\..\.. ..\..\..\..\common ..\..\..\..\gui ..\..\..\..\engines +USERINCLUDE ..\..\..\.. ..\..\..\..\gui ..\..\..\..\engines USERINCLUDE ..\..\..\..\backends\fs ..\src ..\..\..\..\backends\platform\sdl ..\..\..\..\sound SYSTEMINCLUDE \epoc32\include\ESDL @@ -128,9 +128,13 @@ SOURCE gui\Dialog.cpp // Common error source common\error.cpp +source common\quicktime.cpp // Special for graphics source graphics\iff.cpp +source backends\graphics\symbiansdl\symbiansdl-graphics.cpp +source backends\graphics\surfacesdl\surfacesdl-graphics.cpp +source engines\obsolete.cpp // *** Dynamic Libraries LIBRARY cone.lib eikcore.lib diff --git a/backends/platform/symbian/UIQ3/scummvm-CVS-SymbianUIQ3.pkg b/backends/platform/symbian/UIQ3/scummvm-CVS-SymbianUIQ3.pkg index 2187a375a8..47e0ebbd09 100644 --- a/backends/platform/symbian/UIQ3/scummvm-CVS-SymbianUIQ3.pkg +++ b/backends/platform/symbian/UIQ3/scummvm-CVS-SymbianUIQ3.pkg @@ -32,7 +32,7 @@ :"ScummVM" ; UID is the app's UID -#{"ScummVM UIQ3"},(0xA0000657),1,30,0 +#{"ScummVM UIQ3"},(0xA0000657),1,40,0 ; ProductID for UIQ 3.0 ; Product/platform version UID, Major, Minor, Build, Product ID @@ -44,6 +44,7 @@ "\epoc32\Data\Z\resource\apps\scummvm_loc.rsc"- "!:\resource\apps\scummvm_loc.rsc" "\epoc32\data\Z\resource\APPS\scummvm.MBM"- "!:\resource\apps\scummvm.MBM" "\epoc32\data\z\private\10003a3f\apps\scummvm_reg.rsc"-"!:\private\10003a3f\import\apps\scummvm_reg.rsc" + "..\..\..\..\dists\pred.dic"-"c:\shared\scummvm\pred.dic" ; Scummvm Documentation @@ -57,12 +58,15 @@ ; Common datafiles needed for some games "..\..\..\..\dists\engine-data\kyra.dat"-"c:\shared\scummvm\kyra.dat" "..\..\..\..\dists\engine-data\sky.cpt"-"c:\shared\scummvm\sky.cpt" +"..\..\..\..\dists\engine-data\hugo.dat"-"c:\shared\scummvm\hugo.dat" "..\..\..\..\dists\engine-data\lure.dat"-"c:\shared\scummvm\lure.dat" "..\..\..\..\dists\engine-data\drascula.dat"-"c:\shared\scummvm\drascula.dat" "..\..\..\..\dists\engine-data\m4.dat"-"c:\shared\scummvm\m4.dat" "..\..\..\..\dists\engine-data\teenagent.dat"-"c:\shared\scummvm\teenagent.dat" +"..\..\..\..\dists\engine-data\toon.dat"-"c:\shared\scummvm\toon.dat" "..\..\..\vkeybd\packs\vkeybd_default.zip"-"c:\shared\scummvm\vkeybd_default.zip" "..\..\..\..\gui\themes\translations.dat"-"c:\shared\scummvm\translations.dat" +"..\..\..\..\gui\themes\scummmodern.zip"-"c:\shared\scummvm\scummmodern.zip" ; Config/log files: 'empty' will automagically be removed on uninstall ""-"c:\shared\scummvm\scummvm.ini",FILENULL diff --git a/backends/platform/symbian/UIQ3/scummvm-CVS-SymbianUIQ3_split.pkg b/backends/platform/symbian/UIQ3/scummvm-CVS-SymbianUIQ3_split.pkg new file mode 100644 index 0000000000..fb9923fae0 --- /dev/null +++ b/backends/platform/symbian/UIQ3/scummvm-CVS-SymbianUIQ3_split.pkg @@ -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. +; +; $URL$ +; $Id$ +; +; + +;;; +;;; ScummVM .PKG file for .SIS gegeration +;;; + + +; List of localised vendor names - one per language. At least one must be provided (English [EN]). +; List must correspond to list of languages specified elsewhere in the .pkg +%{"ScummVM"} +; The non-localised, globally unique vendor name (mandatory) +:"ScummVM" + +; UID is the app's UID +#{"ScummVM UIQ3"},(0xA0000657),1,40,0 + +; ProductID for UIQ 3.0 +; Product/platform version UID, Major, Minor, Build, Product ID +(0x101F6300), 3, 0, 0, {"UIQ30ProductID"} + +; Application, AIF & Resource file +"\epoc32\release\gcce\urel\ScummVM.exe"- "!:\sys\bin\ScummVM.exe" +"\epoc32\data\z\resource\apps\ScummVM.rsc"- "!:\resource\apps\ScummVM.rsc" +"\epoc32\Data\Z\resource\apps\scummvm_loc.rsc"- "!:\resource\apps\scummvm_loc.rsc" +"\epoc32\data\Z\resource\APPS\scummvm.MBM"- "!:\resource\apps\scummvm.MBM" +"\epoc32\data\z\private\10003a3f\apps\scummvm_reg.rsc"-"!:\private\10003a3f\import\apps\scummvm_reg.rsc" + +"\epoc32\release\gcce\urel\ScummVM_A0000658.exe"- "!:\sys\bin\ScummVM_A0000658.exe" +"\epoc32\data\z\resource\apps\ScummVM_A0000658.rsc"- "!:\resource\apps\ScummVM_A0000658.rsc" +"\epoc32\Data\Z\resource\apps\ScummVM_A0000658_loc.rsc"- "!:\resource\apps\ScummVM_A0000658_loc.rsc" +"\epoc32\data\z\private\10003a3f\apps\scummvm_A0000658_reg.rsc"-"!:\private\10003a3f\import\apps\scummvm_A0000658_reg.rsc" + +"..\..\..\..\dists\pred.dic"-"c:\shared\scummvm\pred.dic" + +; Scummvm Documentation +"..\..\..\..\COPYRIGHT"-"!:\resource\apps\scummvm\COPYRIGHT", FT, TC +"..\..\..\..\COPYING"-"!:\resource\apps\scummvm\COPYING", FT, TC +"..\README"-"!:\system\apps\scummvm\SYMBIAN_README", FT, TC +"..\..\..\..\AUTHORS"-"!:\resource\apps\scummvm\AUTHORS" +"..\..\..\..\README"-"!:\resource\apps\scummvm\README" +"..\..\..\..\NEWS"-"!:\resource\apps\scummvm\NEWS" + +; Common datafiles needed for some games +"..\..\..\..\dists\engine-data\kyra.dat"-"c:\shared\scummvm\kyra.dat" +"..\..\..\..\dists\engine-data\sky.cpt"-"c:\shared\scummvm\sky.cpt" +"..\..\..\..\dists\engine-data\hugo.dat"-"c:\shared\scummvm\hugo.dat" +"..\..\..\..\dists\engine-data\lure.dat"-"c:\shared\scummvm\lure.dat" +"..\..\..\..\dists\engine-data\drascula.dat"-"c:\shared\scummvm\drascula.dat" +"..\..\..\..\dists\engine-data\m4.dat"-"c:\shared\scummvm\m4.dat" +"..\..\..\..\dists\engine-data\teenagent.dat"-"c:\shared\scummvm\teenagent.dat" +"..\..\..\..\dists\engine-data\toon.dat"-"c:\shared\scummvm\toon.dat" +"..\..\..\vkeybd\packs\vkeybd_default.zip"-"c:\shared\scummvm\vkeybd_default.zip" +"..\..\..\..\gui\themes\translations.dat"-"c:\shared\scummvm\translations.dat" +"..\..\..\..\gui\themes\scummmodern.zip"-"c:\shared\scummvm\scummmodern.zip" + +; Config/log files: 'empty' will automagically be removed on uninstall +""-"c:\shared\scummvm\scummvm.ini",FILENULL +""-"c:\shared\scummvm\scummvm.stdout.txt",FILENULL +""-"c:\shared\scummvm\scummvm.stderr.txt",FILENULL +""-"c:\shared\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. 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_agi.mmp.in b/backends/platform/symbian/mmp/scummvm_agi.mmp.in index a7dcfb0bb5..5805d36133 100644 --- a/backends/platform/symbian/mmp/scummvm_agi.mmp.in +++ b/backends/platform/symbian/mmp/scummvm_agi.mmp.in @@ -56,6 +56,6 @@ SOURCEPATH ..\..\..\..\engines\agi // *** Include paths USERINCLUDE ..\..\..\..\engines -USERINCLUDE ..\..\..\.. ..\..\..\..\common ..\..\..\..\gui ..\..\..\..\audio ..\src +USERINCLUDE ..\..\..\.. ..\..\..\..\gui ..\..\..\..\audio ..\src SYSTEMINCLUDE \epoc32\include\ZLIB // before \epoc32\include because symbian already has older version SYSTEMINCLUDE \epoc32\include \epoc32\include\libc ..\src diff --git a/backends/platform/symbian/mmp/scummvm_agos.mmp.in b/backends/platform/symbian/mmp/scummvm_agos.mmp.in index 4708a040ec..236a62f1b8 100644 --- a/backends/platform/symbian/mmp/scummvm_agos.mmp.in +++ b/backends/platform/symbian/mmp/scummvm_agos.mmp.in @@ -62,6 +62,6 @@ SOURCEPATH ..\..\..\..\engines\agos // *** Include paths USERINCLUDE ..\..\..\..\engines -USERINCLUDE ..\..\..\.. ..\..\..\..\common ..\..\..\..\gui ..\..\..\..\audio ..\src +USERINCLUDE ..\..\..\.. ..\..\..\..\gui ..\..\..\..\audio ..\src SYSTEMINCLUDE \epoc32\include\ZLIB // before \epoc32\include because symbian already has older version SYSTEMINCLUDE \epoc32\include \epoc32\include\libc ..\src diff --git a/backends/platform/symbian/mmp/scummvm_base.mmp.in b/backends/platform/symbian/mmp/scummvm_base.mmp.in index 9acef57cea..0387bfaf26 100644 --- a/backends/platform/symbian/mmp/scummvm_base.mmp.in +++ b/backends/platform/symbian/mmp/scummvm_base.mmp.in @@ -48,7 +48,7 @@ ALWAYS_BUILD_AS_ARM // *** Include paths -USERINCLUDE ..\..\..\.. ..\..\..\..\common ..\..\..\..\gui ..\..\..\..\audio +USERINCLUDE ..\..\..\.. ..\..\..\..\gui ..\..\..\..\audio USERINCLUDE ..\..\..\..\backends\fs ..\src ..\..\..\..\backends\platform\sdl SYSTEMINCLUDE \epoc32\include\ESDL @@ -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/mmp/scummvm_cine.mmp.in b/backends/platform/symbian/mmp/scummvm_cine.mmp.in index aac7d8b5b1..e75ece95f1 100644 --- a/backends/platform/symbian/mmp/scummvm_cine.mmp.in +++ b/backends/platform/symbian/mmp/scummvm_cine.mmp.in @@ -56,5 +56,5 @@ SOURCEPATH ..\..\..\..\engines\cine // *** Include paths USERINCLUDE ..\..\..\..\engines -USERINCLUDE ..\..\..\.. ..\..\..\..\common ..\..\..\..\gui ..\..\..\..\audio ..\src +USERINCLUDE ..\..\..\.. ..\..\..\..\gui ..\..\..\..\audio ..\src SYSTEMINCLUDE \epoc32\include \epoc32\include\libc ..\src diff --git a/backends/platform/symbian/mmp/scummvm_cruise.mmp.in b/backends/platform/symbian/mmp/scummvm_cruise.mmp.in index fc60bfeace..a91d33b5f5 100644 --- a/backends/platform/symbian/mmp/scummvm_cruise.mmp.in +++ b/backends/platform/symbian/mmp/scummvm_cruise.mmp.in @@ -56,5 +56,5 @@ SOURCEPATH ..\..\..\..\engines\cruise // *** Include paths USERINCLUDE ..\..\..\..\engines -USERINCLUDE ..\..\..\.. ..\..\..\..\common ..\..\..\..\gui ..\..\..\..\audio ..\src +USERINCLUDE ..\..\..\.. ..\..\..\..\gui ..\..\..\..\audio ..\src SYSTEMINCLUDE \epoc32\include \epoc32\include\libc ..\src diff --git a/backends/platform/symbian/mmp/scummvm_draci.mmp.in b/backends/platform/symbian/mmp/scummvm_draci.mmp.in index d879a03797..044247fac7 100644 --- a/backends/platform/symbian/mmp/scummvm_draci.mmp.in +++ b/backends/platform/symbian/mmp/scummvm_draci.mmp.in @@ -56,6 +56,6 @@ SOURCEPATH ..\..\..\..\engines\draci // *** Include paths USERINCLUDE ..\..\..\..\engines -USERINCLUDE ..\..\..\.. ..\..\..\..\common ..\..\..\..\gui ..\..\..\..\audio ..\src +USERINCLUDE ..\..\..\.. ..\..\..\..\gui ..\..\..\..\audio ..\src SYSTEMINCLUDE \epoc32\include\ZLIB // before \epoc32\include because symbian already has older version SYSTEMINCLUDE \epoc32\include \epoc32\include\libc ..\src diff --git a/backends/platform/symbian/mmp/scummvm_drascula.mmp.in b/backends/platform/symbian/mmp/scummvm_drascula.mmp.in index f83bcdb68f..0561e494c1 100644 --- a/backends/platform/symbian/mmp/scummvm_drascula.mmp.in +++ b/backends/platform/symbian/mmp/scummvm_drascula.mmp.in @@ -56,5 +56,5 @@ SOURCEPATH ..\..\..\..\engines\drascula // *** Include paths USERINCLUDE ..\..\..\..\engines -USERINCLUDE ..\..\..\.. ..\..\..\..\common ..\..\..\..\gui ..\..\..\..\audio ..\src +USERINCLUDE ..\..\..\.. ..\..\..\..\gui ..\..\..\..\audio ..\src SYSTEMINCLUDE \epoc32\include \epoc32\include\libc ..\src diff --git a/backends/platform/symbian/mmp/scummvm_gob.mmp.in b/backends/platform/symbian/mmp/scummvm_gob.mmp.in index 900f862846..7c92611fd2 100644 --- a/backends/platform/symbian/mmp/scummvm_gob.mmp.in +++ b/backends/platform/symbian/mmp/scummvm_gob.mmp.in @@ -56,5 +56,5 @@ SOURCEPATH ..\..\..\..\engines\gob // *** Include paths USERINCLUDE ..\..\..\..\engines -USERINCLUDE ..\..\..\.. ..\..\..\..\common ..\..\..\..\gui ..\..\..\..\audio ..\src +USERINCLUDE ..\..\..\.. ..\..\..\..\gui ..\..\..\..\audio ..\src SYSTEMINCLUDE \epoc32\include \epoc32\include\libc ..\src diff --git a/backends/platform/symbian/mmp/scummvm_groovie.mmp.in b/backends/platform/symbian/mmp/scummvm_groovie.mmp.in index 1051e6adea..c0294b3b0d 100644 --- a/backends/platform/symbian/mmp/scummvm_groovie.mmp.in +++ b/backends/platform/symbian/mmp/scummvm_groovie.mmp.in @@ -56,6 +56,6 @@ SOURCEPATH ..\..\..\..\engines\groovie // *** Include paths USERINCLUDE ..\..\..\..\engines -USERINCLUDE ..\..\..\.. ..\..\..\..\common ..\..\..\..\gui ..\..\..\..\audio ..\src +USERINCLUDE ..\..\..\.. ..\..\..\..\gui ..\..\..\..\audio ..\src SYSTEMINCLUDE \epoc32\include\ZLIB // before \epoc32\include because symbian already has older version SYSTEMINCLUDE \epoc32\include \epoc32\include\libc ..\src diff --git a/backends/platform/symbian/mmp/scummvm_hugo.mmp.in b/backends/platform/symbian/mmp/scummvm_hugo.mmp.in index 31975d3107..66e22fc34b 100644 --- a/backends/platform/symbian/mmp/scummvm_hugo.mmp.in +++ b/backends/platform/symbian/mmp/scummvm_hugo.mmp.in @@ -56,6 +56,6 @@ SOURCEPATH ..\..\..\..\engines\hugo // *** Include paths USERINCLUDE ..\..\..\..\engines -USERINCLUDE ..\..\..\.. ..\..\..\..\common ..\..\..\..\gui ..\..\..\..\audio ..\src +USERINCLUDE ..\..\..\.. ..\..\..\..\gui ..\..\..\..\audio ..\src SYSTEMINCLUDE \epoc32\include\ZLIB // before \epoc32\include because symbian already has older version SYSTEMINCLUDE \epoc32\include \epoc32\include\libc ..\src diff --git a/backends/platform/symbian/mmp/scummvm_kyra.mmp.in b/backends/platform/symbian/mmp/scummvm_kyra.mmp.in index 453d41bdc1..d5f2ec951c 100644 --- a/backends/platform/symbian/mmp/scummvm_kyra.mmp.in +++ b/backends/platform/symbian/mmp/scummvm_kyra.mmp.in @@ -62,5 +62,5 @@ SOURCEPATH ..\..\..\..\engines\kyra // *** Include paths USERINCLUDE ..\..\..\..\engines -USERINCLUDE ..\..\..\.. ..\..\..\..\common ..\..\..\..\gui ..\..\..\..\audio ..\src +USERINCLUDE ..\..\..\.. ..\..\..\..\gui ..\..\..\..\audio ..\src SYSTEMINCLUDE \epoc32\include \epoc32\include\libc ..\src diff --git a/backends/platform/symbian/mmp/scummvm_lastexpress.mmp.in b/backends/platform/symbian/mmp/scummvm_lastexpress.mmp.in index 5d0fe6de36..57efa31a85 100644 --- a/backends/platform/symbian/mmp/scummvm_lastexpress.mmp.in +++ b/backends/platform/symbian/mmp/scummvm_lastexpress.mmp.in @@ -56,6 +56,6 @@ SOURCEPATH ..\..\..\..\engines\lastexpress // *** Include paths USERINCLUDE ..\..\..\..\engines -USERINCLUDE ..\..\..\.. ..\..\..\..\common ..\..\..\..\gui ..\..\..\..\audio ..\src +USERINCLUDE ..\..\..\.. ..\..\..\..\gui ..\..\..\..\audio ..\src SYSTEMINCLUDE \epoc32\include\ZLIB // before \epoc32\include because symbian already has older version SYSTEMINCLUDE \epoc32\include \epoc32\include\libc ..\src diff --git a/backends/platform/symbian/mmp/scummvm_lure.mmp.in b/backends/platform/symbian/mmp/scummvm_lure.mmp.in index add33d7d8b..2ac1f8f8ff 100644 --- a/backends/platform/symbian/mmp/scummvm_lure.mmp.in +++ b/backends/platform/symbian/mmp/scummvm_lure.mmp.in @@ -56,5 +56,5 @@ SOURCEPATH ..\..\..\..\engines\lure // *** Include paths USERINCLUDE ..\..\..\..\engines -USERINCLUDE ..\..\..\.. ..\..\..\..\common ..\..\..\..\gui ..\..\..\..\audio ..\src +USERINCLUDE ..\..\..\.. ..\..\..\..\gui ..\..\..\..\audio ..\src SYSTEMINCLUDE \epoc32\include \epoc32\include\libc ..\src diff --git a/backends/platform/symbian/mmp/scummvm_m4.mmp.in b/backends/platform/symbian/mmp/scummvm_m4.mmp.in index 6896dadf10..81ec94dbd4 100644 --- a/backends/platform/symbian/mmp/scummvm_m4.mmp.in +++ b/backends/platform/symbian/mmp/scummvm_m4.mmp.in @@ -56,6 +56,6 @@ SOURCEPATH ..\..\..\..\engines\m4 // *** Include paths USERINCLUDE ..\..\..\..\engines -USERINCLUDE ..\..\..\.. ..\..\..\..\common ..\..\..\..\gui ..\..\..\..\audio ..\src +USERINCLUDE ..\..\..\.. ..\..\..\..\gui ..\..\..\..\audio ..\src SYSTEMINCLUDE \epoc32\include\ZLIB // before \epoc32\include because symbian already has older version SYSTEMINCLUDE \epoc32\include \epoc32\include\libc ..\src diff --git a/backends/platform/symbian/mmp/scummvm_made.mmp.in b/backends/platform/symbian/mmp/scummvm_made.mmp.in index c51d3ac618..dc24aee279 100644 --- a/backends/platform/symbian/mmp/scummvm_made.mmp.in +++ b/backends/platform/symbian/mmp/scummvm_made.mmp.in @@ -56,6 +56,6 @@ SOURCEPATH ..\..\..\..\engines\made // *** Include paths USERINCLUDE ..\..\..\..\engines -USERINCLUDE ..\..\..\.. ..\..\..\..\common ..\..\..\..\gui ..\..\..\..\audio ..\src +USERINCLUDE ..\..\..\.. ..\..\..\..\gui ..\..\..\..\audio ..\src SYSTEMINCLUDE \epoc32\include\ZLIB // before \epoc32\include because symbian already has older version SYSTEMINCLUDE \epoc32\include \epoc32\include\libc ..\src diff --git a/backends/platform/symbian/mmp/scummvm_mohawk.mmp.in b/backends/platform/symbian/mmp/scummvm_mohawk.mmp.in index 296c458e39..cb5b18ba18 100644 --- a/backends/platform/symbian/mmp/scummvm_mohawk.mmp.in +++ b/backends/platform/symbian/mmp/scummvm_mohawk.mmp.in @@ -56,6 +56,6 @@ SOURCEPATH ..\..\..\..\engines\mohawk // *** Include paths USERINCLUDE ..\..\..\..\engines -USERINCLUDE ..\..\..\.. ..\..\..\..\common ..\..\..\..\gui ..\..\..\..\audio ..\src +USERINCLUDE ..\..\..\.. ..\..\..\..\gui ..\..\..\..\audio ..\src SYSTEMINCLUDE \epoc32\include\ZLIB // before \epoc32\include because symbian already has older version SYSTEMINCLUDE \epoc32\include \epoc32\include\libc ..\src diff --git a/backends/platform/symbian/mmp/scummvm_parallaction.mmp.in b/backends/platform/symbian/mmp/scummvm_parallaction.mmp.in index 4052a16693..e86473e47a 100644 --- a/backends/platform/symbian/mmp/scummvm_parallaction.mmp.in +++ b/backends/platform/symbian/mmp/scummvm_parallaction.mmp.in @@ -56,6 +56,6 @@ SOURCEPATH ..\..\..\..\engines\parallaction // *** Include paths USERINCLUDE ..\..\..\..\engines -USERINCLUDE ..\..\..\.. ..\..\..\..\common ..\..\..\..\gui ..\..\..\..\audio ..\src +USERINCLUDE ..\..\..\.. ..\..\..\..\gui ..\..\..\..\audio ..\src SYSTEMINCLUDE \epoc32\include\ZLIB // before \epoc32\include because symbian already has older version SYSTEMINCLUDE \epoc32\include \epoc32\include\libc ..\src diff --git a/backends/platform/symbian/mmp/scummvm_queen.mmp.in b/backends/platform/symbian/mmp/scummvm_queen.mmp.in index ec4ccff939..b5326abe74 100644 --- a/backends/platform/symbian/mmp/scummvm_queen.mmp.in +++ b/backends/platform/symbian/mmp/scummvm_queen.mmp.in @@ -56,5 +56,5 @@ SOURCEPATH ..\..\..\..\engines\queen // *** Include paths USERINCLUDE ..\..\..\..\engines -USERINCLUDE ..\..\..\.. ..\..\..\..\common ..\..\..\..\gui ..\..\..\..\audio ..\src +USERINCLUDE ..\..\..\.. ..\..\..\..\gui ..\..\..\..\audio ..\src SYSTEMINCLUDE \epoc32\include \epoc32\include\libc ..\src diff --git a/backends/platform/symbian/mmp/scummvm_saga.mmp.in b/backends/platform/symbian/mmp/scummvm_saga.mmp.in index 44e222144c..55d89f7868 100644 --- a/backends/platform/symbian/mmp/scummvm_saga.mmp.in +++ b/backends/platform/symbian/mmp/scummvm_saga.mmp.in @@ -68,5 +68,5 @@ SOURCEPATH ..\..\..\..\engines\saga // *** Include paths USERINCLUDE ..\..\..\..\engines -USERINCLUDE ..\..\..\.. ..\..\..\..\common ..\..\..\..\gui ..\..\..\..\audio ..\src +USERINCLUDE ..\..\..\.. ..\..\..\..\gui ..\..\..\..\audio ..\src SYSTEMINCLUDE \epoc32\include \epoc32\include\libc ..\src diff --git a/backends/platform/symbian/mmp/scummvm_sci.mmp.in b/backends/platform/symbian/mmp/scummvm_sci.mmp.in index 12588495cb..dc06f44a5d 100644 --- a/backends/platform/symbian/mmp/scummvm_sci.mmp.in +++ b/backends/platform/symbian/mmp/scummvm_sci.mmp.in @@ -56,6 +56,6 @@ SOURCEPATH ..\..\..\..\engines\sci // *** Include paths USERINCLUDE ..\..\..\..\engines -USERINCLUDE ..\..\..\.. ..\..\..\..\common ..\..\..\..\gui ..\..\..\..\audio ..\src +USERINCLUDE ..\..\..\.. ..\..\..\..\gui ..\..\..\..\audio ..\src SYSTEMINCLUDE \epoc32\include\ZLIB // before \epoc32\include because symbian already has older version SYSTEMINCLUDE \epoc32\include \epoc32\include\libc ..\src diff --git a/backends/platform/symbian/mmp/scummvm_scumm.mmp.in b/backends/platform/symbian/mmp/scummvm_scumm.mmp.in index 381a6060dd..527ce75181 100644 --- a/backends/platform/symbian/mmp/scummvm_scumm.mmp.in +++ b/backends/platform/symbian/mmp/scummvm_scumm.mmp.in @@ -79,7 +79,7 @@ SOURCE smush/codec47ARM.s // ARM version: add ASM routines // *** Include paths USERINCLUDE ..\..\..\..\engines ..\..\..\..\engines\scumm\smush ..\..\..\..\engines\scumm\insane -USERINCLUDE ..\..\..\.. ..\..\..\..\common ..\..\..\..\gui ..\..\..\..\audio ..\src +USERINCLUDE ..\..\..\.. ..\..\..\..\gui ..\..\..\..\audio ..\src SYSTEMINCLUDE \epoc32\include\ZLIB // before \epoc32\include because symbian already has older version SYSTEMINCLUDE \epoc32\include\libc diff --git a/backends/platform/symbian/mmp/scummvm_sky.mmp.in b/backends/platform/symbian/mmp/scummvm_sky.mmp.in index f34c839076..eeb517ffcc 100644 --- a/backends/platform/symbian/mmp/scummvm_sky.mmp.in +++ b/backends/platform/symbian/mmp/scummvm_sky.mmp.in @@ -56,5 +56,5 @@ SOURCEPATH ..\..\..\..\engines\sky // *** Include paths USERINCLUDE ..\..\..\..\engines ..\..\..\..\engines\sky\music -USERINCLUDE ..\..\..\.. ..\..\..\..\common ..\..\..\..\gui ..\..\..\..\audio ..\src +USERINCLUDE ..\..\..\.. ..\..\..\..\gui ..\..\..\..\audio ..\src SYSTEMINCLUDE \epoc32\include \epoc32\include\libc ..\src diff --git a/backends/platform/symbian/mmp/scummvm_sword1.mmp.in b/backends/platform/symbian/mmp/scummvm_sword1.mmp.in index 58f9f8fa05..0adc156719 100644 --- a/backends/platform/symbian/mmp/scummvm_sword1.mmp.in +++ b/backends/platform/symbian/mmp/scummvm_sword1.mmp.in @@ -56,5 +56,5 @@ SOURCEPATH ..\..\..\..\engines\sword1 // *** Include paths USERINCLUDE ..\..\..\..\engines -USERINCLUDE ..\..\..\.. ..\..\..\..\common ..\..\..\..\gui ..\..\..\..\audio ..\src +USERINCLUDE ..\..\..\.. ..\..\..\..\gui ..\..\..\..\audio ..\src SYSTEMINCLUDE \epoc32\include \epoc32\include\libc ..\src diff --git a/backends/platform/symbian/mmp/scummvm_sword2.mmp.in b/backends/platform/symbian/mmp/scummvm_sword2.mmp.in index 4a19be92ce..c8034c3015 100644 --- a/backends/platform/symbian/mmp/scummvm_sword2.mmp.in +++ b/backends/platform/symbian/mmp/scummvm_sword2.mmp.in @@ -56,5 +56,5 @@ SOURCEPATH ..\..\..\..\engines\sword2 // *** Include paths USERINCLUDE ..\..\..\..\engines -USERINCLUDE ..\..\..\.. ..\..\..\..\common ..\..\..\..\gui ..\..\..\..\audio ..\src +USERINCLUDE ..\..\..\.. ..\..\..\..\gui ..\..\..\..\audio ..\src SYSTEMINCLUDE \epoc32\include \epoc32\include\libc ..\src diff --git a/backends/platform/symbian/mmp/scummvm_teenagent.mmp.in b/backends/platform/symbian/mmp/scummvm_teenagent.mmp.in index 6b4812489e..f065bf4376 100644 --- a/backends/platform/symbian/mmp/scummvm_teenagent.mmp.in +++ b/backends/platform/symbian/mmp/scummvm_teenagent.mmp.in @@ -56,6 +56,6 @@ SOURCEPATH ..\..\..\..\engines\teenagent // *** Include paths USERINCLUDE ..\..\..\..\engines -USERINCLUDE ..\..\..\.. ..\..\..\..\common ..\..\..\..\gui ..\..\..\..\audio ..\src +USERINCLUDE ..\..\..\.. ..\..\..\..\gui ..\..\..\..\audio ..\src SYSTEMINCLUDE \epoc32\include\ZLIB // before \epoc32\include because symbian already has older version SYSTEMINCLUDE \epoc32\include \epoc32\include\libc ..\src diff --git a/backends/platform/symbian/mmp/scummvm_tinsel.mmp.in b/backends/platform/symbian/mmp/scummvm_tinsel.mmp.in index bb56022f20..d61492de6b 100644 --- a/backends/platform/symbian/mmp/scummvm_tinsel.mmp.in +++ b/backends/platform/symbian/mmp/scummvm_tinsel.mmp.in @@ -56,5 +56,5 @@ SOURCEPATH ..\..\..\..\engines\tinsel // *** Include paths USERINCLUDE ..\..\..\..\engines -USERINCLUDE ..\..\..\.. ..\..\..\..\common ..\..\..\..\gui ..\..\..\..\audio ..\src +USERINCLUDE ..\..\..\.. ..\..\..\..\gui ..\..\..\..\audio ..\src SYSTEMINCLUDE \epoc32\include \epoc32\include\libc ..\src diff --git a/backends/platform/symbian/mmp/scummvm_toon.mmp.in b/backends/platform/symbian/mmp/scummvm_toon.mmp.in index 05742d5242..01924614b4 100644 --- a/backends/platform/symbian/mmp/scummvm_toon.mmp.in +++ b/backends/platform/symbian/mmp/scummvm_toon.mmp.in @@ -56,6 +56,6 @@ SOURCEPATH ..\..\..\..\engines\toon // *** Include paths USERINCLUDE ..\..\..\..\engines -USERINCLUDE ..\..\..\.. ..\..\..\..\common ..\..\..\..\gui ..\..\..\..\audio ..\src +USERINCLUDE ..\..\..\.. ..\..\..\..\gui ..\..\..\..\audio ..\src SYSTEMINCLUDE \epoc32\include\ZLIB // before \epoc32\include because symbian already has older version SYSTEMINCLUDE \epoc32\include \epoc32\include\libc ..\src diff --git a/backends/platform/symbian/mmp/scummvm_touche.mmp.in b/backends/platform/symbian/mmp/scummvm_touche.mmp.in index ea8dd2392c..b9cb53b4bf 100644 --- a/backends/platform/symbian/mmp/scummvm_touche.mmp.in +++ b/backends/platform/symbian/mmp/scummvm_touche.mmp.in @@ -56,6 +56,6 @@ SOURCEPATH ..\..\..\..\engines\touche // *** Include paths USERINCLUDE ..\..\..\..\engines -USERINCLUDE ..\..\..\.. ..\..\..\..\common ..\..\..\..\gui ..\..\..\..\audio ..\src +USERINCLUDE ..\..\..\.. ..\..\..\..\gui ..\..\..\..\audio ..\src SYSTEMINCLUDE \epoc32\include\ZLIB // before \epoc32\include because symbian already has older version SYSTEMINCLUDE \epoc32\include \epoc32\include\libc ..\src diff --git a/backends/platform/symbian/mmp/scummvm_tsage.mmp.in b/backends/platform/symbian/mmp/scummvm_tsage.mmp.in index b7eb3290b3..fa4968f704 100644 --- a/backends/platform/symbian/mmp/scummvm_tsage.mmp.in +++ b/backends/platform/symbian/mmp/scummvm_tsage.mmp.in @@ -56,6 +56,6 @@ SOURCEPATH ..\..\..\..\engines\tsage // *** Include paths USERINCLUDE ..\..\..\..\engines -USERINCLUDE ..\..\..\.. ..\..\..\..\common ..\..\..\..\gui ..\..\..\..\audio ..\src +USERINCLUDE ..\..\..\.. ..\..\..\..\gui ..\..\..\..\audio ..\src SYSTEMINCLUDE \epoc32\include\ZLIB // before \epoc32\include because symbian already has older version SYSTEMINCLUDE \epoc32\include \epoc32\include\libc ..\src diff --git a/backends/platform/symbian/mmp/scummvm_tucker.mmp.in b/backends/platform/symbian/mmp/scummvm_tucker.mmp.in index 0aeb0dc4ec..1ea564c0c0 100644 --- a/backends/platform/symbian/mmp/scummvm_tucker.mmp.in +++ b/backends/platform/symbian/mmp/scummvm_tucker.mmp.in @@ -56,6 +56,6 @@ SOURCEPATH ..\..\..\..\engines\tucker // *** Include paths USERINCLUDE ..\..\..\..\engines -USERINCLUDE ..\..\..\.. ..\..\..\..\common ..\..\..\..\gui ..\..\..\..\audio ..\src +USERINCLUDE ..\..\..\.. ..\..\..\..\gui ..\..\..\..\audio ..\src SYSTEMINCLUDE \epoc32\include\ZLIB // before \epoc32\include because symbian already has older version SYSTEMINCLUDE \epoc32\include \epoc32\include\libc ..\src 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/symbian/src/portdefs.h b/backends/platform/symbian/src/portdefs.h index 86460e65c5..dd81080afe 100644 --- a/backends/platform/symbian/src/portdefs.h +++ b/backends/platform/symbian/src/portdefs.h @@ -32,7 +32,7 @@ #include <e32def.h> #include <e32std.h> -#include <math.h> +#include <libc\math.h> /* define pi */ #ifndef M_PI @@ -157,6 +157,10 @@ void *scumm_bsearch(const void *key, const void *base, size_t nmemb, size_t size #define FORBIDDEN_SYMBOL_EXCEPTION_FILE #define FORBIDDEN_SYMBOL_EXCEPTION_fclose #define FORBIDDEN_SYMBOL_EXCEPTION_fopen +#define FORBIDDEN_SYMBOL_EXCEPTION_unlink +#define FORBIDDEN_SYMBOL_EXCEPTION_getcwd +#define FORBIDDEN_SYMBOL_EXCEPTION_stdout +#define FORBIDDEN_SYMBOL_EXCEPTION_stderr // we cannot include SymbianOS.h everywhere, but this works too (functions code is in SymbianOS.cpp) namespace Symbian { diff --git a/backends/platform/webos/webos.mk b/backends/platform/webos/webos.mk index 37223ac56c..804b56de35 100644 --- a/backends/platform/webos/webos.mk +++ b/backends/platform/webos/webos.mk @@ -51,8 +51,8 @@ # Increment this number when the packaging of the app has been changed while # ScummVM itself has the same version as before. The number can be reset to -# 1 when the ScummVM version is increased. -VER_PACKAGE = 5 +# 0 when the ScummVM version is increased. +VER_PACKAGE = 0 PATH_DIST = $(srcdir)/dists/webos PATH_MOJO = $(PATH_DIST)/mojo @@ -60,10 +60,19 @@ APP_ID = $(shell basename $(prefix)) APP_VERSION = $(shell printf "%d.%d.%02d%02d" $(VER_MAJOR) $(VER_MINOR) $(VER_PATCH) $(VER_PACKAGE)) DESTDIR ?= staging PORTDISTDIR ?= portdist +ifeq ($(HOST_COMPILER),Darwin) + SED_DASH_I = "-i \"\"" +else + SED_DASH_I = "-i" +endif install: all $(QUIET)$(INSTALL) -d "$(DESTDIR)$(prefix)" +ifeq ($(HOST_COMPILER),Darwin) + $(QUIET)$(INSTALL) -m 0644 "$(PATH_MOJO)/"* "$(DESTDIR)$(prefix)/" +else $(QUIET)$(INSTALL) -m 0644 -t "$(DESTDIR)$(prefix)/" "$(PATH_MOJO)/"* +endif $(QUIET)$(INSTALL) -m 0755 "$(PATH_MOJO)/start" "$(DESTDIR)$(prefix)/" $(QUIET)$(INSTALL) -d "$(DESTDIR)$(bindir)" $(QUIET)$(INSTALL) -c -m 755 "./$(EXECUTABLE)" "$(DESTDIR)$(bindir)/$(EXECUTABLE)" @@ -77,12 +86,12 @@ ifdef DYNAMIC_MODULES $(QUIET)$(INSTALL) -c -m 644 $(PLUGINS) "$(DESTDIR)$(libdir)/" $(QUIET)$(STRIP) "$(DESTDIR)$(libdir)/"* endif - $(QUIET)sed -i s/'APP_VERSION'/'$(APP_VERSION)'/ "$(DESTDIR)$(prefix)/appinfo.json" - $(QUIET)sed -i s/'APP_ID'/'$(APP_ID)'/ "$(DESTDIR)$(prefix)/appinfo.json" + $(QUIET)sed $(SED_DASH_I) s/'APP_VERSION'/'$(APP_VERSION)'/ "$(DESTDIR)$(prefix)/appinfo.json" + $(QUIET)sed $(SED_DASH_I) s/'APP_ID'/'$(APP_ID)'/ "$(DESTDIR)$(prefix)/appinfo.json" ifneq (,$(findstring -beta,$(APP_ID))) - $(QUIET)sed -i s/'APP_TITLE'/'ScummVM Beta'/ "$(DESTDIR)$(prefix)/appinfo.json" + $(QUIET)sed $(SED_DASH_I) s/'APP_TITLE'/'ScummVM Beta'/ "$(DESTDIR)$(prefix)/appinfo.json" else - $(QUIET)sed -i s/'APP_TITLE'/'ScummVM'/ "$(DESTDIR)$(prefix)/appinfo.json" + $(QUIET)sed $(SED_DASH_I) s/'APP_TITLE'/'ScummVM'/ "$(DESTDIR)$(prefix)/appinfo.json" endif uninstall: 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 859e3a1395..83607984cc 100644 --- a/backends/platform/wii/osystem_gfx.cpp +++ b/backends/platform/wii/osystem_gfx.cpp @@ -20,6 +20,7 @@ */ #define FORBIDDEN_SYMBOL_EXCEPTION_printf +#define FORBIDDEN_SYMBOL_EXCEPTION_abort #include <malloc.h> @@ -746,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/CEActionsPocket.cpp b/backends/platform/wince/CEActionsPocket.cpp index a4786d330d..5980a41caa 100644 --- a/backends/platform/wince/CEActionsPocket.cpp +++ b/backends/platform/wince/CEActionsPocket.cpp @@ -137,6 +137,7 @@ void CEActionsPocket::initInstanceGame() { bool is_tinsel = (gameid == "tinsel"); bool is_cruise = (gameid == "cruise"); bool is_made = (gameid == "made"); + bool is_sci = (gameid == "sci"); GUI_Actions::initInstanceGame(); @@ -214,12 +215,14 @@ void CEActionsPocket::initInstanceGame() { _key_action[POCKET_ACTION_MULTI].setKey(Common::ASCII_F1, SDLK_F1); // bargon : F1 to start else if (gameid == "atlantis") _key_action[POCKET_ACTION_MULTI].setKey(0, SDLK_KP0); // fate of atlantis : Ins to sucker-punch + else if (is_simon) + _key_action[POCKET_ACTION_MULTI].setKey(Common::ASCII_F10, SDLK_F10); // F10 else _key_action[POCKET_ACTION_MULTI].setKey('V', SDLK_v, KMOD_SHIFT); // FT cheat : shift-V // Key bind method _action_enabled[POCKET_ACTION_BINDKEYS] = true; // Disable double-tap right-click for convenience - if (is_tinsel || is_cruise) + if (is_tinsel || is_cruise || is_sci) if (!ConfMan.hasKey("no_doubletap_rightclick")) { ConfMan.setBool("no_doubletap_rightclick", true); ConfMan.flushToDisk(); @@ -267,6 +270,15 @@ bool CEActionsPocket::perform(GUI::ActionType action, bool pushed) { else _key_action[action].setKey(SDLK_s); } + if (action == POCKET_ACTION_SKIP && ConfMan.get("gameid") == "agi") { + // In several AGI games (for example SQ2) it is needed to press F10 to exit from + // a screen. But we still want be able to skip normally with the skip button. + // Because of this, we inject a F10 keystroke here (this works and doesn't seem + // to have side-effects) + _key_action[action].setKey(Common::ASCII_F10, SDLK_F10); // F10 + EventsBuffer::simulateKey(&_key_action[action], true); + _key_action[action].setKey(KEY_ALL_SKIP); + } EventsBuffer::simulateKey(&_key_action[action], true); return true; case POCKET_ACTION_KEYBOARD: diff --git a/backends/platform/wince/CEActionsSmartphone.cpp b/backends/platform/wince/CEActionsSmartphone.cpp index b12dadabb6..2cce288323 100644 --- a/backends/platform/wince/CEActionsSmartphone.cpp +++ b/backends/platform/wince/CEActionsSmartphone.cpp @@ -128,6 +128,7 @@ void CEActionsSmartphone::initInstanceGame() { bool is_tinsel = (gameid == "tinsel"); bool is_cruise = (gameid == "cruise"); bool is_made = (gameid == "made"); + bool is_sci = (gameid == "sci"); GUI_Actions::initInstanceGame(); @@ -180,12 +181,14 @@ void CEActionsSmartphone::initInstanceGame() { _key_action[SMARTPHONE_ACTION_MULTI].setKey(Common::ASCII_F1, SDLK_F1); // bargon : F1 to start else if (gameid == "atlantis") _key_action[SMARTPHONE_ACTION_MULTI].setKey(0, SDLK_KP0); // fate of atlantis : Ins to sucker-punch + else if (is_simon) + _key_action[SMARTPHONE_ACTION_MULTI].setKey(Common::ASCII_F10, SDLK_F10); // F10 else _key_action[SMARTPHONE_ACTION_MULTI].setKey('V', SDLK_v, KMOD_SHIFT); // FT cheat : shift-V // Bind keys _action_enabled[SMARTPHONE_ACTION_BINDKEYS] = true; // Disable double-tap right-click for convenience - if (is_tinsel || is_cruise) + if (is_tinsel || is_cruise || is_sci) if (!ConfMan.hasKey("no_doubletap_rightclick")) { ConfMan.setBool("no_doubletap_rightclick", true); ConfMan.flushToDisk(); @@ -231,6 +234,15 @@ bool CEActionsSmartphone::perform(GUI::ActionType action, bool pushed) { else _key_action[action].setKey(SDLK_s); } + if (action == SMARTPHONE_ACTION_SKIP && ConfMan.get("gameid") == "agi") { + // In several AGI games (for example SQ2) it is needed to press F10 to exit from + // a screen. But we still want be able to skip normally with the skip button. + // Because of this, we inject a F10 keystroke here (this works and doesn't seem + // to have side-effects) + _key_action[action].setKey(Common::ASCII_F10, SDLK_F10); // F10 + EventsBuffer::simulateKey(&_key_action[action], true); + _key_action[action].setKey(KEY_ALL_SKIP); + } EventsBuffer::simulateKey(&_key_action[action], true); return true; case SMARTPHONE_ACTION_RIGHTCLICK: diff --git a/backends/platform/wince/CELauncherDialog.cpp b/backends/platform/wince/CELauncherDialog.cpp index 9c832dd585..dd6076e0af 100644 --- a/backends/platform/wince/CELauncherDialog.cpp +++ b/backends/platform/wince/CELauncherDialog.cpp @@ -24,6 +24,7 @@ #define FORBIDDEN_SYMBOL_ALLOW_ALL #include "backends/platform/wince/wince-sdl.h" +#include "backends/graphics/wincesdl/wincesdl-graphics.h" #include "CELauncherDialog.h" @@ -34,6 +35,7 @@ #include "gui/browser.h" #include "gui/message.h" #include "gui/ThemeEval.h" +#include "gui/widgets/list.h" #include "common/config-manager.h" @@ -63,9 +65,13 @@ public: }; CELauncherDialog::CELauncherDialog() : GUI::LauncherDialog() { + ((WINCESdlGraphicsManager *)((OSystem_SDL *)g_system)->getGraphicsManager())->reset_panel(); } void CELauncherDialog::handleCommand(CommandSender *sender, uint32 cmd, uint32 data) { + if ((cmd == 'STRT') || (cmd == kListItemActivatedCmd) || (cmd == kListItemDoubleClickedCmd)) { + ((WINCESdlGraphicsManager *)((OSystem_SDL *)g_system)->getGraphicsManager())->init_panel(); + } LauncherDialog::handleCommand(sender, cmd, data); if (cmd == 'ABOU') { CEAboutDialog about; 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/README-WinCE.txt b/backends/platform/wince/README-WinCE.txt index c48d9ca998..429168c293 100644 --- a/backends/platform/wince/README-WinCE.txt +++ b/backends/platform/wince/README-WinCE.txt @@ -1,10 +1,40 @@ ScummVM Windows CE FAQ -Last updated: 2011-05-27 -Release version: 1.3.0 +Last updated: 2011-10-15 +Release version: 1.4.0 ------------------------------------------------------------------------ New in this version ------------------- +1.4.0: +- Changed the memory management so that it is finally possible to break the + 32MB per process barrier on Windows CE. It should be possible now (finally) + to play nearly every game with the "big" binary (scummvm.exe, which includes + all game engines). +- Changed default values for "high_sample_rate" & "FM_high_quality" to "true" + as most devices today are fast enough to handle this. It's still possible to + set this to "false" if you have a slower device. +- Fix for TeenAgent & Hugo engines (both weren't running at all, crashed right + at the beginning) +- Discworld 2 is now playable (works now because of the new memory management) +- Replaced the game mass-adding functionality with the functionality used on + all other platforms. It now shows progress while searching for games. + +1.3.1: +- Fix for Normal2xAspect scaler which was causing screen update issues in some + games. +- Fix for Normal1xAspect scaler which caused problems in the bottom part of the + screen when toolbar was hidden. +- Fix for freelook mode. +- Fix for timer manager, caused timing issues in some games. +- Activated runtime language detection for ScummVM gui. +- Toolbar is now hidden when returning to the game list. +- Double-tap right-click emulation is now turned off for SCI games by default. +- Added a new option "no_doubletap_paneltoggle" for scummvm.ini to disable + toolbar toggling when double-tapping on the top part of the screen. +- SDL library related fixes: + * Fix for screen/mouse-cursor rotation issues (fixes erratic touchscreen + behaviour) + * Fix for hardware keyboard on some devices (HTC Touch Pro, etc.) 1.3.0: This is the first official Windows CE release since 1.1.1. @@ -345,14 +375,13 @@ Some parameters are specific to this port : Game specific sections (f.e. [monkey2]) - performance options * high_sample_rate bool Desktop quality (22 kHz) sound output if - set. The default is 11 kHz. - If you have a fast device, you can set this - to true to enjoy better sound effects and - music. + set. This is the default. + If you have a slow device, you can set this + to false to prevent lags/delays in the game. * FM_high_quality bool Desktop quality FM synthesis if set. Lower - quality otherwise. The default is low + quality otherwise. The default is high quality. You can change this if you have a - fast device. + slow device. * sound_thread_priority int Set the priority of the sound thread (0, 1, 2). Depending on the release, this is set to 1 internally (above normal). 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/platform/wince/wince-sdl.cpp b/backends/platform/wince/wince-sdl.cpp index 9b1ffe817c..4e17827e5c 100644 --- a/backends/platform/wince/wince-sdl.cpp +++ b/backends/platform/wince/wince-sdl.cpp @@ -42,6 +42,7 @@ #include "audio/mixer_intern.h" #include "audio/fmopl.h" +#include "backends/mutex/sdl/sdl-mutex.h" #include "backends/timer/sdl/sdl-timer.h" #include "gui/Actions.h" @@ -71,6 +72,50 @@ extern "C" _CRTIMP FILE *__cdecl _wfreopen(const wchar_t *, const wchar_t *, FILE *); #endif +#ifdef WRAP_MALLOC + +extern "C" void *__real_malloc(size_t size); +extern "C" void __real_free(void *ptr); + +extern "C" void *__wrap_malloc(size_t size) { +/* + void *ptr = __real_malloc(size); + printf("malloc(%d) = %p\n", size, ptr); + return ptr; +*/ + if (size < 64 * 1024) { + void *ptr = __real_malloc(size+4); +// printf("malloc(%d) = %p\n", size, ptr); + if (ptr != NULL) { + *((HANDLE*)ptr) = 0; + return 4+(char*)ptr; + } + return NULL; + } + HANDLE H = CreateFileMapping((HANDLE)INVALID_HANDLE_VALUE, 0, PAGE_READWRITE, 0, size+4, 0); + void *ptr = MapViewOfFile(H, FILE_MAP_ALL_ACCESS, 0, 0, 0); + *((HANDLE*)ptr) = H; + return 4+(char*)ptr; +} + +extern "C" void __wrap_free(void *ptr) { +/* + __real_free(ptr); + printf("free(%p)\n", ptr); +*/ + if (ptr != NULL) { + HANDLE H = *(HANDLE*)((char *)ptr-4); + if (H == 0) { + __real_free((char*)ptr-4); + return; + } + UnmapViewOfFile((char *)ptr-4); + CloseHandle(H); + } +} + +#endif + using namespace CEGUI; // ******************************************************************************************** @@ -353,9 +398,9 @@ void drawError(char *error) { } // ******************************************************************************************** -static DefaultTimerManager *_int_timer = NULL; static Uint32 timer_handler_wrapper(Uint32 interval) { - _int_timer->handler(); + DefaultTimerManager *tm = (DefaultTimerManager *)g_system->getTimerManager(); + tm->handler(); return interval; } @@ -379,21 +424,7 @@ void OSystem_WINCE3::initBackend() { ((WINCESdlEventSource *)_eventSource)->init((WINCESdlGraphicsManager *)_graphicsManager); - - // FIXME: This timer manager is *not accesible* from the outside. - // Instead the timer manager setup by OSystem_SDL is visible on the outside. - // Since the WinCE backend actually seems to work, my guess is that - // SDL_AddTimer works after all and the following code is redundant. - // However it may be, this must be resolved one way or another. - - // Create the timer. CE SDL does not support multiple timers (SDL_AddTimer). - // We work around this by using the SetTimer function, since we only use - // one timer in scummvm (for the time being) - _int_timer = new DefaultTimerManager(); - //_timerID = NULL; // OSystem_SDL will call removetimer with this, it's ok - SDL_SetTimer(10, &timer_handler_wrapper); - - // Chain init + // Call parent implementation of this method OSystem_SDL::initBackend(); // Initialize global key mapping @@ -404,9 +435,6 @@ void OSystem_WINCE3::initBackend() { GUI_Actions::Instance()->saveMapping(); // write defaults } - // Call parent implementation of this method - //OSystem_SDL::initBackend(); - _inited = true; } @@ -555,6 +583,24 @@ void OSystem_WINCE3::initSDL() { } } +void OSystem_WINCE3::init() { + // Create SdlMutexManager instance as the TimerManager relies on the + // MutexManager being already initialized + if (_mutexManager == 0) + _mutexManager = new SdlMutexManager(); + + // Create the timer. CE SDL does not support multiple timers (SDL_AddTimer). + // We work around this by using the SetTimer function, since we only use + // one timer in scummvm (for the time being) + if (_timerManager == 0) { + _timerManager = new DefaultTimerManager(); + SDL_SetTimer(10, &timer_handler_wrapper); + } + + // Call parent implementation of this method + OSystem_SDL::init(); +} + void OSystem_WINCE3::quit() { fclose(stdout_file); fclose(stderr_file); diff --git a/backends/platform/wince/wince-sdl.h b/backends/platform/wince/wince-sdl.h index 481956c19a..b4f323c9e2 100644 --- a/backends/platform/wince/wince-sdl.h +++ b/backends/platform/wince/wince-sdl.h @@ -52,6 +52,7 @@ public: void initBackend(); // Overloaded from SDL backend + void init(); void quit(); virtual Common::String getSystemLanguage() const; diff --git a/backends/platform/wince/wince.mk b/backends/platform/wince/wince.mk index cac3ad4e8f..c5f3274747 100644 --- a/backends/platform/wince/wince.mk +++ b/backends/platform/wince/wince.mk @@ -1,3 +1,7 @@ +ifdef WRAP_MALLOC + LDFLAGS += -Wl,--wrap,malloc -Wl,--wrap,free +endif + backends/platform/wince/PocketSCUMM.o: $(srcdir)/backends/platform/wince/PocketSCUMM.rc $(QUIET)$(MKDIR) $(*D) $(WINDRES) $(WINDRESFLAGS) -I$(srcdir)/backends/platform/wince $< $@ 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 02669b3647..47b77a3ec2 100644 --- a/backends/plugins/elf/memory-manager.cpp +++ b/backends/plugins/elf/memory-manager.cpp @@ -29,7 +29,9 @@ #include "common/util.h" #include <malloc.h> +namespace Common { DECLARE_SINGLETON(ELFMemoryManager); +} ELFMemoryManager::ELFMemoryManager() : _heap(0), _heapSize(0), _heapAlign(0), @@ -170,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 b3a9531c2d..993a538f6c 100644 --- a/backends/plugins/elf/shorts-segment-manager.cpp +++ b/backends/plugins/elf/shorts-segment-manager.cpp @@ -33,7 +33,9 @@ extern char __plugin_hole_start; // Indicates start of hole in program file for extern char __plugin_hole_end; // Indicates end of hole in program file extern char _gp[]; // Value of gp register +namespace Common { DECLARE_SINGLETON(ShortSegmentManager); // For singleton +} ShortSegmentManager::ShortSegmentManager() { _shortsStart = &__plugin_hole_start ; //shorts segment begins at the plugin hole we made when linking @@ -83,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 49c56b746d..f36e2bf628 100644 --- a/backends/taskbar/unity/unity-taskbar.cpp +++ b/backends/taskbar/unity/unity-taskbar.cpp @@ -8,29 +8,30 @@ * 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 +#define FORBIDDEN_SYMBOL_EXCEPTION_time_h #include "common/scummsys.h" -#if defined(UNIX) && defined(USE_TASKBAR) && defined(USE_TASKBAR_UNITY) +#if defined(POSIX) && defined(USE_TASKBAR) && defined(USE_TASKBAR_UNITY) #include "backends/taskbar/unity/unity-taskbar.h" #include "common/textconsole.h" +#include <unity.h> + UnityTaskbarManager::UnityTaskbarManager() { g_type_init(); diff --git a/backends/taskbar/unity/unity-taskbar.h b/backends/taskbar/unity/unity-taskbar.h index 9f14b44d8f..d1d9430bcd 100644 --- a/backends/taskbar/unity/unity-taskbar.h +++ b/backends/taskbar/unity/unity-taskbar.h @@ -8,31 +8,29 @@ * 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 #define BACKEND_UNITY_TASKBAR_H -#if defined(UNIX) && defined(USE_TASKBAR) && defined(USE_TASKBAR_UNITY) +#if defined(POSIX) && defined(USE_TASKBAR) && defined(USE_TASKBAR_UNITY) #include "common/events.h" #include "common/str.h" #include "common/taskbar.h" -#include <unity.h> +typedef struct _GMainLoop GMainLoop; +typedef struct _UnityLauncherEntry UnityLauncherEntry; class UnityTaskbarManager : public Common::TaskbarManager, public Common::EventSource { public: diff --git a/backends/taskbar/win32/mingw-compat.h b/backends/taskbar/win32/mingw-compat.h index 06968b62ff..55105407c6 100644 --- a/backends/taskbar/win32/mingw-compat.h +++ b/backends/taskbar/win32/mingw-compat.h @@ -8,23 +8,20 @@ * 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 -// For reference, the interface definitions here are imported the SDK headers and from the +// For reference, the interface definitions here are imported the SDK headers and from the // EcWin7 project (https://code.google.com/p/dukto/) #ifndef BACKEND_WIN32_TASKBAR_MINGW_H @@ -42,8 +39,14 @@ #include <commctrl.h> #include <initguid.h> #include <shlwapi.h> +#include <shlguid.h> #define CMIC_MASK_ASYNCOK SEE_MASK_ASYNCOK +extern const GUID CLSID_ShellLink; + +// Shard enumeration value +#define SHARD_LINK 0x00000006 + // Taskbar GUID definitions DEFINE_GUID(CLSID_TaskbarList,0x56fdf344,0xfd6d,0x11d0,0x95,0x8a,0x0,0x60,0x97,0xc9,0xa0,0x90); DEFINE_GUID(IID_ITaskbarList3,0xea1afb91,0x9e28,0x4b86,0x90,0xE9,0x9e,0x9f,0x8a,0x5e,0xef,0xaf); @@ -67,6 +70,9 @@ DECLARE_INTERFACE_(IPropertyStore, IUnknown) { STDMETHOD (GetValue) (REFPROPERTYKEY key, PROPVARIANT *pv) PURE; STDMETHOD (SetValue) (REFPROPERTYKEY key, REFPROPVARIANT propvar) PURE; STDMETHOD (Commit) (void) PURE; + +private: + ~IPropertyStore(); }; typedef IPropertyStore *LPIPropertyStore; @@ -131,6 +137,9 @@ DECLARE_INTERFACE_(ITaskbarList3, IUnknown) { STDMETHOD (SetOverlayIcon) (THIS_ HWND hwnd, HICON hIcon, LPCWSTR pszDescription) PURE; STDMETHOD (SetThumbnailTooltip) (THIS_ HWND hwnd, LPCWSTR pszTip) PURE; STDMETHOD (SetThumbnailClip) (THIS_ HWND hwnd, RECT *prcClip) PURE; + +private: + ~ITaskbarList3(); }; typedef ITaskbarList3 *LPITaskbarList3; diff --git a/backends/taskbar/win32/win32-taskbar.cpp b/backends/taskbar/win32/win32-taskbar.cpp index 0cfd81e3f2..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 @@ -66,7 +63,7 @@ // System.Title property key, values taken from http://msdn.microsoft.com/en-us/library/bb787584.aspx const PROPERTYKEY PKEY_Title = { /* fmtid = */ { 0xF29F85E0, 0x4FF9, 0x1068, { 0xAB, 0x91, 0x08, 0x00, 0x2B, 0x27, 0xB3, 0xD9 } }, /* propID = */ 2 }; -Win32TaskbarManager::Win32TaskbarManager() { +Win32TaskbarManager::Win32TaskbarManager() : _taskbar(NULL), _count(0), _icon(NULL) { // Do nothing if not running on Windows 7 or later if (!isWin7OrLater()) return; @@ -96,6 +93,9 @@ Win32TaskbarManager::~Win32TaskbarManager() { _taskbar->Release(); _taskbar = NULL; + if (_icon) + DestroyIcon(_icon); + CoUninitialize(); } @@ -144,6 +144,123 @@ void Win32TaskbarManager::setProgressState(TaskbarProgressState state) { _taskbar->SetProgressState(getHwnd(), (TBPFLAG)state); } +void Win32TaskbarManager::setCount(int count) { + if (_taskbar == NULL) + return; + + if (count == 0) { + _taskbar->SetOverlayIcon(getHwnd(), NULL, L""); + return; + } + + // FIXME: This isn't really nice and could use a cleanup. + // The only good thing is that it doesn't use GDI+ + // and thus does not have a dependancy on it, + // with the downside of being a lot more ugly. + // Maybe replace it by a Graphic::Surface, use + // ScummVM font drawing and extract the contents at + // the end? + + if (_count != count || _icon == NULL) { + // Cleanup previous icon + _count = count; + if (_icon) + DestroyIcon(_icon); + + Common::String countString = (count < 100 ? Common::String::format("%d", count) : "9+"); + + // Create transparent background + BITMAPV5HEADER bi; + ZeroMemory(&bi, sizeof(BITMAPV5HEADER)); + bi.bV5Size = sizeof(BITMAPV5HEADER); + bi.bV5Width = 16; + bi.bV5Height = 16; + bi.bV5Planes = 1; + bi.bV5BitCount = 32; + bi.bV5Compression = BI_RGB; + // Set 32 BPP alpha format + bi.bV5RedMask = 0x00FF0000; + bi.bV5GreenMask = 0x0000FF00; + bi.bV5BlueMask = 0x000000FF; + bi.bV5AlphaMask = 0xFF000000; + + // Get DC + HDC hdc; + hdc = GetDC(NULL); + HDC hMemDC = CreateCompatibleDC(hdc); + ReleaseDC(NULL, hdc); + + // Create a bitmap mask + HBITMAP hBitmapMask = CreateBitmap(16, 16, 1, 1, NULL); + + // Create the DIB section with an alpha channel + void *lpBits; + HBITMAP hBitmap = CreateDIBSection(hdc, (BITMAPINFO *)&bi, DIB_RGB_COLORS, (void **)&lpBits, NULL, 0); + HBITMAP hOldBitmap = (HBITMAP)SelectObject(hMemDC, hBitmap); + + // Load the icon background + HICON hIconBackground = LoadIcon(GetModuleHandle(NULL), MAKEINTRESOURCE(1002 /* IDI_COUNT */)); + DrawIconEx(hMemDC, 0, 0, hIconBackground, 16, 16, 0, 0, DI_NORMAL); + DeleteObject(hIconBackground); + + // Draw the count + LOGFONT lFont; + memset(&lFont, 0, sizeof(LOGFONT)); + lFont.lfHeight = 10; + lFont.lfWeight = FW_BOLD; + lFont.lfItalic = 1; + strcpy(lFont.lfFaceName, "Arial"); + + HFONT hFont = CreateFontIndirect(&lFont); + SelectObject(hMemDC, hFont); + + RECT rect; + SetRect(&rect, 4, 4, 12, 12); + SetTextColor(hMemDC, RGB(48, 48, 48)); + SetBkMode(hMemDC, TRANSPARENT); + DrawText(hMemDC, countString.c_str(), -1, &rect, DT_NOCLIP|DT_CENTER); + + // Set the text alpha to fully opaque (we consider the data inside the text rect) + DWORD *lpdwPixel = (DWORD *)lpBits; + for (int x = 3; x < 12; x++) { + for(int y = 3; y < 12; y++) { + unsigned char *p = (unsigned char *)(lpdwPixel + x * 16 + y); + + if (p[0] != 0 && p[1] != 0 && p[2] != 0) + p[3] = 255; + } + } + + // Cleanup DC + DeleteObject(hFont); + SelectObject(hMemDC, hOldBitmap); + DeleteDC(hMemDC); + + // Prepare our new icon + ICONINFO ii; + ii.fIcon = FALSE; + ii.xHotspot = 0; + ii.yHotspot = 0; + ii.hbmMask = hBitmapMask; + ii.hbmColor = hBitmap; + + _icon = CreateIconIndirect(&ii); + + DeleteObject(hBitmap); + DeleteObject(hBitmapMask); + + if (!_icon) { + warning("[Win32TaskbarManager::setCount] Cannot create icon for count"); + return; + } + } + + // Sets the overlay icon + LPWSTR desc = ansiToUnicode(Common::String::format("Found games: %d", count).c_str()); + _taskbar->SetOverlayIcon(getHwnd(), _icon, desc); + delete[] desc; +} + void Win32TaskbarManager::addRecent(const Common::String &name, const Common::String &description) { //warning("[Win32TaskbarManager::addRecent] Adding recent list entry: %s (%s)", name.c_str(), description.c_str()); @@ -200,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 @@ -232,6 +358,28 @@ Common::String Win32TaskbarManager::getIconPath(Common::String target) { return ""; } +// VerSetConditionMask and VerifyVersionInfo didn't appear until Windows 2000, +// so we need to check for them at runtime +LONGLONG VerSetConditionMaskFunc(ULONGLONG dwlConditionMask, DWORD dwTypeMask, BYTE dwConditionMask) { + typedef BOOL (WINAPI *VerSetConditionMaskFunction)(ULONGLONG conditionMask, DWORD typeMask, BYTE conditionOperator); + + VerSetConditionMaskFunction verSetConditionMask = (VerSetConditionMaskFunction)GetProcAddress(GetModuleHandle(TEXT("kernel32.dll")), "VerSetConditionMask"); + if (verSetConditionMask == NULL) + return 0; + + return verSetConditionMask(dwlConditionMask, dwTypeMask, dwConditionMask); +} + +BOOL VerifyVersionInfoFunc(LPOSVERSIONINFOEXA lpVersionInformation, DWORD dwTypeMask, DWORDLONG dwlConditionMask) { + typedef BOOL (WINAPI *VerifyVersionInfoFunction)(LPOSVERSIONINFOEXA versionInformation, DWORD typeMask, DWORDLONG conditionMask); + + VerifyVersionInfoFunction verifyVersionInfo = (VerifyVersionInfoFunction)GetProcAddress(GetModuleHandle(TEXT("kernel32.dll")), "VerifyVersionInfoA"); + if (verifyVersionInfo == NULL) + return FALSE; + + return verifyVersionInfo(lpVersionInformation, dwTypeMask, dwlConditionMask); +} + bool Win32TaskbarManager::isWin7OrLater() { OSVERSIONINFOEX versionInfo; DWORDLONG conditionMask = 0; @@ -241,10 +389,10 @@ bool Win32TaskbarManager::isWin7OrLater() { versionInfo.dwMajorVersion = 6; versionInfo.dwMinorVersion = 1; - VER_SET_CONDITION(conditionMask, VER_MAJORVERSION, VER_GREATER_EQUAL); - VER_SET_CONDITION(conditionMask, VER_MINORVERSION, VER_GREATER_EQUAL); + conditionMask = VerSetConditionMaskFunc(conditionMask, VER_MAJORVERSION, VER_GREATER_EQUAL); + conditionMask = VerSetConditionMaskFunc(conditionMask, VER_MINORVERSION, VER_GREATER_EQUAL); - return VerifyVersionInfo(&versionInfo, VER_MAJORVERSION | VER_MINORVERSION, conditionMask); + return VerifyVersionInfoFunc(&versionInfo, VER_MAJORVERSION | VER_MINORVERSION, conditionMask); } LPWSTR Win32TaskbarManager::ansiToUnicode(const char *s) { diff --git a/backends/taskbar/win32/win32-taskbar.h b/backends/taskbar/win32/win32-taskbar.h index 3415a79bd7..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 @@ -41,11 +38,18 @@ public: virtual void setOverlayIcon(const Common::String &name, const Common::String &description); virtual void setProgressValue(int completed, int total); 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; + // Count handling + HICON _icon; + int _count; + /** * Get the path to an icon for the game * 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-parser.cpp b/backends/vkeybd/virtual-keyboard-parser.cpp index 5e4ce11fe4..58f0c468f6 100644 --- a/backends/vkeybd/virtual-keyboard-parser.cpp +++ b/backends/vkeybd/virtual-keyboard-parser.cpp @@ -205,6 +205,9 @@ bool VirtualKeyboardParser::parserCallback_event(ParserNode *node) { evt->type = VirtualKeyboard::kVKEventModifier; byte *flags = (byte*) malloc(sizeof(byte)); + if (!flags) + error("[VirtualKeyboardParser::parserCallback_event] Cannot allocate memory"); + *(flags) = parseFlags(node->values["modifiers"]); evt->data = flags; @@ -217,6 +220,9 @@ bool VirtualKeyboardParser::parserCallback_event(ParserNode *node) { evt->type = VirtualKeyboard::kVKEventSwitchMode; String& mode = node->values["mode"]; char *str = (char*) malloc(sizeof(char) * mode.size() + 1); + if (!str) + error("[VirtualKeyboardParser::parserCallback_event] Cannot allocate memory"); + memcpy(str, mode.c_str(), sizeof(char) * mode.size()); str[mode.size()] = 0; evt->data = str; 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 - |