Skip to content

Commit

Permalink
OPENPANDORA: Move SDL_CreateCursor hacklet from init to loadGFXMode.
Browse files Browse the repository at this point in the history
* Fixes a bug that can occur on load.
  • Loading branch information
djwillis committed Jul 24, 2012
1 parent 3d39554 commit 4535467
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 58 deletions.
3 changes: 2 additions & 1 deletion backends/graphics/gph/gph-graphics.cpp
Expand Up @@ -36,7 +36,8 @@ static const OSystem::GraphicsMode s_supportedGraphicsModes[] = {
};

GPHGraphicsManager::GPHGraphicsManager(SdlEventSource *sdlEventSource)
: SurfaceSdlGraphicsManager(sdlEventSource) {
: SurfaceSdlGraphicsManager(sdlEventSource),
_cursorDontScale(true) {
}

const OSystem::GraphicsMode *GPHGraphicsManager::getSupportedGraphicsModes() const {
Expand Down
22 changes: 20 additions & 2 deletions backends/graphics/openpandora/op-graphics.cpp
Expand Up @@ -31,17 +31,35 @@
#include "common/mutex.h"
#include "common/textconsole.h"

static SDL_Cursor *hiddenCursor;

OPGraphicsManager::OPGraphicsManager(SdlEventSource *sdlEventSource)
: SurfaceSdlGraphicsManager(sdlEventSource) {
}

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
deal with the boarders (it saves cleaning up the overlay when the game screen is
smaller than the overlay ;)
*/
_videoMode.overlayWidth = 640;
_videoMode.overlayHeight = 480;
//_videoMode.overlayWidth = 640;
//_videoMode.overlayHeight = 480;
_videoMode.fullscreen = true;

if (_videoMode.screenHeight != 200 && _videoMode.screenHeight != 400)
Expand Down
55 changes: 0 additions & 55 deletions backends/platform/openpandora/op-backend.cpp
Expand Up @@ -54,8 +54,6 @@
/* Dump console info to files. */
#define DUMP_STDOUT

static SDL_Cursor *hiddenCursor;

OSystem_OP::OSystem_OP()
:
OSystem_POSIX() {
Expand Down Expand Up @@ -179,32 +177,12 @@ void OSystem_OP::initBackend() {
/* Make sure SDL knows that we have a joystick we want to use. */
ConfMan.setInt("joystick_num", 0);

// _graphicsMutex = createMutex();

/* Pass to POSIX method to do the heavy lifting */
OSystem_POSIX::initBackend();

_inited = true;
}

// enable joystick
// if (joystick_num > -1 && SDL_NumJoysticks() > 0) {
// printf("Using joystick: %s\n", SDL_JoystickName(0));
// _joystick = SDL_JoystickOpen(joystick_num);
// }
//
// setupMixer();

// Note: We could implement a custom SDLTimerManager by using
// SDL_AddTimer. That might yield better timer resolution, but it would
// also change the semantics of a timer: Right now, ScummVM timers
// *never* run in parallel, due to the way they are implemented. If we
// switched to SDL_AddTimer, each timer might run in a separate thread.
// However, not all our code is prepared for that, so we can't just
// switch. Still, it's a potential future change to keep in mind.
// _timer = new DefaultTimerManager();
// _timerID = SDL_AddTimer(10, &timer_handler, _timer);

void OSystem_OP::initSDL() {
// Check if SDL has not been initialized
if (!_initedSDL) {
Expand All @@ -217,38 +195,7 @@ void OSystem_OP::initSDL() {
if (SDL_Init(sdlFlags) == -1)
error("Could not initialize SDL: %s", SDL_GetError());

uint8_t hiddenCursorData = 0;

hiddenCursor = SDL_CreateCursor(&hiddenCursorData, &hiddenCursorData, 8, 1, 0, 0);

/* On the OpenPandora we need to work around an SDL assumption that
returns relative mouse coordinates when you get to the screen
edges using the touchscreen. The workaround is to set a blank
SDL cursor and not disable it (Hackish I know).
The root issues likes in the Windows Manager GRAB code in SDL.
That is why the issue is not seen on framebuffer devices like the
GP2X (there is no X window manager ;)).
*/
SDL_ShowCursor(SDL_ENABLE);
SDL_SetCursor(hiddenCursor);
SDL_EnableUNICODE(1);

// memset(&_oldVideoMode, 0, sizeof(_oldVideoMode));
// memset(&_videoMode, 0, sizeof(_videoMode));
// memset(&_transactionDetails, 0, sizeof(_transactionDetails));

// _videoMode.mode = GFX_DOUBLESIZE;
// _videoMode.scaleFactor = 2;
// _videoMode.aspectRatioCorrection = ConfMan.getBool("aspect_ratio");
// _scalerProc = Normal2x;
// _scalerType = 0;

// _videoMode.fullscreen = true;

_initedSDL = true;

// OSystem_POSIX::initSDL();
}
}

Expand All @@ -275,8 +222,6 @@ void OSystem_OP::addSysArchivesToSearchSet(Common::SearchSet &s, int priority) {

void OSystem_OP::quit() {

SDL_FreeCursor(hiddenCursor);

#ifdef DUMP_STDOUT
printf("%s\n", "Debug: STDOUT and STDERR text files closed.");
fclose(stdout);
Expand Down

0 comments on commit 4535467

Please sign in to comment.