From 58b8c3458b385e2f93fbe89bc84f99723177bc80 Mon Sep 17 00:00:00 2001 From: Stephen Anthony Date: Mon, 3 Jun 2019 17:09:07 -0230 Subject: [PATCH] Fix UI drawing modes when overlaid on TIA image. --- src/emucore/FrameBuffer.cxx | 17 +++++++++++++++-- src/gui/DialogContainer.cxx | 4 +--- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/src/emucore/FrameBuffer.cxx b/src/emucore/FrameBuffer.cxx index 8b9fba6ed..b8dedb202 100644 --- a/src/emucore/FrameBuffer.cxx +++ b/src/emucore/FrameBuffer.cxx @@ -341,6 +341,7 @@ void FrameBuffer::update(bool force) force |= myOSystem.menu().needsRedraw(); if(force) { + clear(); myTIASurface->render(); myOSystem.menu().draw(force); } @@ -352,6 +353,7 @@ void FrameBuffer::update(bool force) force |= myOSystem.commandMenu().needsRedraw(); if(force) { + clear(); myTIASurface->render(); myOSystem.commandMenu().draw(force); } @@ -363,6 +365,7 @@ void FrameBuffer::update(bool force) force |= myOSystem.timeMachine().needsRedraw(); if(force) { + clear(); myTIASurface->render(); myOSystem.timeMachine().draw(force); } @@ -371,7 +374,12 @@ void FrameBuffer::update(bool force) case EventHandlerState::LAUNCHER: { - force |= myOSystem.launcher().draw(force); + force |= myOSystem.launcher().needsRedraw(); + if(force) + { + clear(); + myOSystem.launcher().draw(force); + } break; // EventHandlerState::LAUNCHER } #endif @@ -379,7 +387,12 @@ void FrameBuffer::update(bool force) #ifdef DEBUGGER_SUPPORT case EventHandlerState::DEBUGGER: { - force |= myOSystem.debugger().draw(force); + force |= myOSystem.debugger().needsRedraw(); + if(force) + { + clear(); + myOSystem.debugger().draw(force); + } break; // EventHandlerState::DEBUGGER } #endif diff --git a/src/gui/DialogContainer.cxx b/src/gui/DialogContainer.cxx index 6db3afafa..3e5666329 100644 --- a/src/gui/DialogContainer.cxx +++ b/src/gui/DialogContainer.cxx @@ -93,9 +93,7 @@ bool DialogContainer::draw(bool full) myDialogStack.top()->setDirty(); // If the top dialog is dirty, then all below it must be redrawn too - bool dirty = needsRedraw(); - if(dirty) - myOSystem.frameBuffer().clear(); + const bool dirty = needsRedraw(); myDialogStack.applyAll([&](Dialog*& d){ if(dirty)