SDL: Take advantage of SdlGraphicsManager.
This gets rid of the hacks, where SdlEventSource added events with custom type numbers to pass SDL_VIDEOEXPOSE and SDL_VIDEORESIZE to the graphics manager. Furthermore it get rids of the uninituitive and hard to trace way of assigning the proper mouse coordinates to mouse related events. Formerly it passed the real screen coordinates through the even dispatching api to the graphics manager (at least hopefully ;-) and let that handle creating a new event with the proper coordinates. Now instead SdlEventSource handles the proper coordinate setup itself. Since this is a behavior change and I can not test all the SDL based small devices ports this commit might break compilation for them and more serve it might also break mouse position behavior. If any of that occurs I am sorry about it.
This commit is contained in:
parent
0630a88a04
commit
04ab0e58b4
27 changed files with 106 additions and 242 deletions
|
@ -72,6 +72,14 @@ OpenGLSdlGraphicsManager::OpenGLSdlGraphicsManager(SdlEventSource *eventSource)
|
|||
}
|
||||
|
||||
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) {
|
||||
|
@ -610,50 +618,15 @@ 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);
|
||||
|
||||
if (getScale() != scale) {
|
||||
scaleChanged = true;
|
||||
setScale(MAX(MIN(scale, 3), 1));
|
||||
}
|
||||
|
||||
if (_videoMode.mode == OpenGL::GFX_ORIGINAL) {
|
||||
calculateDisplaySize(_videoMode.hardwareWidth, _videoMode.hardwareHeight);
|
||||
}
|
||||
|
||||
_transactionDetails.sizeChanged = true;
|
||||
endGFXTransaction();
|
||||
#ifdef USE_OSD
|
||||
if (scaleChanged)
|
||||
displayScaleChangedMsg();
|
||||
#endif
|
||||
}
|
||||
return true;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return OpenGLGraphicsManager::notifyEvent(event);
|
||||
return false;
|
||||
}
|
||||
|
||||
void OpenGLSdlGraphicsManager::notifyVideoExpose() {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue