OPENPANDORA: Move SDL_CreateCursor hacklet from init to loadGFXMode.

* Fixes a bug that can occur on load.
This commit is contained in:
David-John Willis 2012-07-23 22:28:10 +01:00
parent 3d395545cb
commit 45354676eb
3 changed files with 22 additions and 58 deletions

View File

@ -36,7 +36,8 @@ static const OSystem::GraphicsMode s_supportedGraphicsModes[] = {
}; };
GPHGraphicsManager::GPHGraphicsManager(SdlEventSource *sdlEventSource) GPHGraphicsManager::GPHGraphicsManager(SdlEventSource *sdlEventSource)
: SurfaceSdlGraphicsManager(sdlEventSource) { : SurfaceSdlGraphicsManager(sdlEventSource),
_cursorDontScale(true) {
} }
const OSystem::GraphicsMode *GPHGraphicsManager::getSupportedGraphicsModes() const { const OSystem::GraphicsMode *GPHGraphicsManager::getSupportedGraphicsModes() const {

View File

@ -31,17 +31,35 @@
#include "common/mutex.h" #include "common/mutex.h"
#include "common/textconsole.h" #include "common/textconsole.h"
static SDL_Cursor *hiddenCursor;
OPGraphicsManager::OPGraphicsManager(SdlEventSource *sdlEventSource) OPGraphicsManager::OPGraphicsManager(SdlEventSource *sdlEventSource)
: SurfaceSdlGraphicsManager(sdlEventSource) { : SurfaceSdlGraphicsManager(sdlEventSource) {
} }
bool OPGraphicsManager::loadGFXMode() { bool OPGraphicsManager::loadGFXMode() {
uint8_t hiddenCursorData = 0;
hiddenCursor = SDL_CreateCursor(&hiddenCursorData, &hiddenCursorData, 8, 1, 0, 0);
/* On the OpenPandora we need to work around an SDL assumption that
returns relative mouse coordinates when you get to the screen
edges using the touchscreen. The workaround is to set a blank
SDL cursor and not disable it (Hackish I know).
The root issues likes in the Windows Manager GRAB code in SDL.
That is why the issue is not seen on framebuffer devices like the
GP2X (there is no X window manager ;)).
*/
SDL_ShowCursor(SDL_ENABLE);
SDL_SetCursor(hiddenCursor);
/* FIXME: For now we just cheat and set the overlay to 640*480 not 800*480 and let SDL /* FIXME: For now we just cheat and set the overlay to 640*480 not 800*480 and let SDL
deal with the boarders (it saves cleaning up the overlay when the game screen is deal with the boarders (it saves cleaning up the overlay when the game screen is
smaller than the overlay ;) smaller than the overlay ;)
*/ */
_videoMode.overlayWidth = 640; //_videoMode.overlayWidth = 640;
_videoMode.overlayHeight = 480; //_videoMode.overlayHeight = 480;
_videoMode.fullscreen = true; _videoMode.fullscreen = true;
if (_videoMode.screenHeight != 200 && _videoMode.screenHeight != 400) if (_videoMode.screenHeight != 200 && _videoMode.screenHeight != 400)

View File

@ -54,8 +54,6 @@
/* Dump console info to files. */ /* Dump console info to files. */
#define DUMP_STDOUT #define DUMP_STDOUT
static SDL_Cursor *hiddenCursor;
OSystem_OP::OSystem_OP() OSystem_OP::OSystem_OP()
: :
OSystem_POSIX() { OSystem_POSIX() {
@ -179,32 +177,12 @@ void OSystem_OP::initBackend() {
/* Make sure SDL knows that we have a joystick we want to use. */ /* Make sure SDL knows that we have a joystick we want to use. */
ConfMan.setInt("joystick_num", 0); ConfMan.setInt("joystick_num", 0);
// _graphicsMutex = createMutex();
/* Pass to POSIX method to do the heavy lifting */ /* Pass to POSIX method to do the heavy lifting */
OSystem_POSIX::initBackend(); OSystem_POSIX::initBackend();
_inited = true; _inited = true;
} }
// enable joystick
// if (joystick_num > -1 && SDL_NumJoysticks() > 0) {
// printf("Using joystick: %s\n", SDL_JoystickName(0));
// _joystick = SDL_JoystickOpen(joystick_num);
// }
//
// setupMixer();
// Note: We could implement a custom SDLTimerManager by using
// SDL_AddTimer. That might yield better timer resolution, but it would
// also change the semantics of a timer: Right now, ScummVM timers
// *never* run in parallel, due to the way they are implemented. If we
// switched to SDL_AddTimer, each timer might run in a separate thread.
// However, not all our code is prepared for that, so we can't just
// switch. Still, it's a potential future change to keep in mind.
// _timer = new DefaultTimerManager();
// _timerID = SDL_AddTimer(10, &timer_handler, _timer);
void OSystem_OP::initSDL() { void OSystem_OP::initSDL() {
// Check if SDL has not been initialized // Check if SDL has not been initialized
if (!_initedSDL) { if (!_initedSDL) {
@ -217,38 +195,7 @@ void OSystem_OP::initSDL() {
if (SDL_Init(sdlFlags) == -1) if (SDL_Init(sdlFlags) == -1)
error("Could not initialize SDL: %s", SDL_GetError()); error("Could not initialize SDL: %s", SDL_GetError());
uint8_t hiddenCursorData = 0;
hiddenCursor = SDL_CreateCursor(&hiddenCursorData, &hiddenCursorData, 8, 1, 0, 0);
/* On the OpenPandora we need to work around an SDL assumption that
returns relative mouse coordinates when you get to the screen
edges using the touchscreen. The workaround is to set a blank
SDL cursor and not disable it (Hackish I know).
The root issues likes in the Windows Manager GRAB code in SDL.
That is why the issue is not seen on framebuffer devices like the
GP2X (there is no X window manager ;)).
*/
SDL_ShowCursor(SDL_ENABLE);
SDL_SetCursor(hiddenCursor);
SDL_EnableUNICODE(1);
// memset(&_oldVideoMode, 0, sizeof(_oldVideoMode));
// memset(&_videoMode, 0, sizeof(_videoMode));
// memset(&_transactionDetails, 0, sizeof(_transactionDetails));
// _videoMode.mode = GFX_DOUBLESIZE;
// _videoMode.scaleFactor = 2;
// _videoMode.aspectRatioCorrection = ConfMan.getBool("aspect_ratio");
// _scalerProc = Normal2x;
// _scalerType = 0;
// _videoMode.fullscreen = true;
_initedSDL = true; _initedSDL = true;
// OSystem_POSIX::initSDL();
} }
} }
@ -275,8 +222,6 @@ void OSystem_OP::addSysArchivesToSearchSet(Common::SearchSet &s, int priority) {
void OSystem_OP::quit() { void OSystem_OP::quit() {
SDL_FreeCursor(hiddenCursor);
#ifdef DUMP_STDOUT #ifdef DUMP_STDOUT
printf("%s\n", "Debug: STDOUT and STDERR text files closed."); printf("%s\n", "Debug: STDOUT and STDERR text files closed.");
fclose(stdout); fclose(stdout);