mirror of https://github.com/stella-emu/stella.git
Dialogs drawn outside the underlying basedialog area no longer leave parts around.
There is still some work TODO for TIA mode; that is coming next.
This commit is contained in:
parent
6153b8aa6c
commit
d7754aee77
|
@ -306,11 +306,7 @@ bool FrameBufferSDL2::setVideoMode(const string& title, const VideoMode& mode)
|
||||||
Logger::log(msg, 0);
|
Logger::log(msg, 0);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
clear();
|
||||||
// Always clear the (double-buffered) renderer surface
|
|
||||||
SDL_RenderClear(myRenderer);
|
|
||||||
SDL_RenderPresent(myRenderer);
|
|
||||||
SDL_RenderClear(myRenderer);
|
|
||||||
|
|
||||||
SDL_RendererInfo renderinfo;
|
SDL_RendererInfo renderinfo;
|
||||||
if(SDL_GetRendererInfo(myRenderer, &renderinfo) >= 0)
|
if(SDL_GetRendererInfo(myRenderer, &renderinfo) >= 0)
|
||||||
|
@ -352,15 +348,6 @@ string FrameBufferSDL2::about() const
|
||||||
return out.str();
|
return out.str();
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
void FrameBufferSDL2::invalidate()
|
|
||||||
{
|
|
||||||
ASSERT_MAIN_THREAD;
|
|
||||||
|
|
||||||
|
|
||||||
SDL_RenderClear(myRenderer);
|
|
||||||
}
|
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
void FrameBufferSDL2::showCursor(bool show)
|
void FrameBufferSDL2::showCursor(bool show)
|
||||||
{
|
{
|
||||||
|
@ -436,6 +423,7 @@ void FrameBufferSDL2::readPixels(uInt8* pixels, uInt32 pitch,
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
void FrameBufferSDL2::clear()
|
void FrameBufferSDL2::clear()
|
||||||
{
|
{
|
||||||
invalidate();
|
ASSERT_MAIN_THREAD;
|
||||||
renderToScreen();
|
|
||||||
|
SDL_RenderClear(myRenderer);
|
||||||
}
|
}
|
||||||
|
|
|
@ -112,7 +112,7 @@ class FrameBufferSDL2 : public FrameBuffer
|
||||||
void updateWindowedPos() override;
|
void updateWindowedPos() override;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Clear the frame buffer
|
Clear the frame buffer.
|
||||||
*/
|
*/
|
||||||
void clear() override;
|
void clear() override;
|
||||||
|
|
||||||
|
@ -143,13 +143,6 @@ class FrameBufferSDL2 : public FrameBuffer
|
||||||
*/
|
*/
|
||||||
bool setVideoMode(const string& title, const VideoMode& mode) override;
|
bool setVideoMode(const string& title, const VideoMode& mode) override;
|
||||||
|
|
||||||
/**
|
|
||||||
This method is called to invalidate the contents of the entire
|
|
||||||
framebuffer (ie, mark the current content as invalid, and erase it on
|
|
||||||
the next drawing pass).
|
|
||||||
*/
|
|
||||||
void invalidate() override;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
This method is called to create a surface with the given attributes.
|
This method is called to create a surface with the given attributes.
|
||||||
|
|
||||||
|
@ -189,7 +182,7 @@ class FrameBufferSDL2 : public FrameBuffer
|
||||||
// Used by mapRGB (when palettes are created)
|
// Used by mapRGB (when palettes are created)
|
||||||
SDL_PixelFormat* myPixelFormat;
|
SDL_PixelFormat* myPixelFormat;
|
||||||
|
|
||||||
// center setting of curent window
|
// Center setting of current window
|
||||||
bool myCenter;
|
bool myCenter;
|
||||||
|
|
||||||
// last position of windowed window
|
// last position of windowed window
|
||||||
|
|
|
@ -944,7 +944,8 @@ void FrameBuffer::setAvailableVidModes(uInt32 baseWidth, uInt32 baseHeight)
|
||||||
{
|
{
|
||||||
// Windowed and fullscreen mode differ only in screen size
|
// Windowed and fullscreen mode differ only in screen size
|
||||||
myWindowedModeList.add(
|
myWindowedModeList.add(
|
||||||
VideoMode(baseWidth, baseHeight, baseWidth, baseHeight, VideoMode::Stretch::None)
|
VideoMode(baseWidth, baseHeight, baseWidth, baseHeight,
|
||||||
|
VideoMode::Stretch::None)
|
||||||
);
|
);
|
||||||
for(uInt32 i = 0; i < myFullscreenDisplays.size(); ++i)
|
for(uInt32 i = 0; i < myFullscreenDisplays.size(); ++i)
|
||||||
{
|
{
|
||||||
|
@ -1069,10 +1070,11 @@ FrameBuffer::VideoMode::VideoMode(uInt32 iw, uInt32 ih, uInt32 sw, uInt32 sh,
|
||||||
{
|
{
|
||||||
case Stretch::Preserve:
|
case Stretch::Preserve:
|
||||||
case Stretch::Fill:
|
case Stretch::Fill:
|
||||||
case Stretch::None:
|
|
||||||
screen.w = iw;
|
screen.w = iw;
|
||||||
screen.h = ih;
|
screen.h = ih;
|
||||||
break;
|
break;
|
||||||
|
case Stretch::None:
|
||||||
|
break; // Do not change image or screen rects whatsoever
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -73,7 +73,8 @@ class FrameBuffer
|
||||||
friend ostream& operator<<(ostream& os, const VideoMode& vm)
|
friend ostream& operator<<(ostream& os, const VideoMode& vm)
|
||||||
{
|
{
|
||||||
os << "image=" << vm.image << " screen=" << vm.screen
|
os << "image=" << vm.image << " screen=" << vm.screen
|
||||||
<< " stretch= " << (vm.stretch == Stretch::Preserve ? "preserve" : "fill")
|
<< " stretch=" << (vm.stretch == Stretch::Preserve ? "preserve" :
|
||||||
|
vm.stretch == Stretch::Fill ? "fill" : "none")
|
||||||
<< " desc=" << vm.description << " zoom=" << vm.zoom
|
<< " desc=" << vm.description << " zoom=" << vm.zoom
|
||||||
<< " fsIndex= " << vm.fsIndex;
|
<< " fsIndex= " << vm.fsIndex;
|
||||||
return os;
|
return os;
|
||||||
|
@ -391,13 +392,6 @@ class FrameBuffer
|
||||||
virtual bool setVideoMode(const string& title,
|
virtual bool setVideoMode(const string& title,
|
||||||
const FrameBuffer::VideoMode& mode) = 0;
|
const FrameBuffer::VideoMode& mode) = 0;
|
||||||
|
|
||||||
/**
|
|
||||||
This method is called to invalidate the contents of the entire
|
|
||||||
framebuffer (ie, mark the current content as invalid, and erase it on
|
|
||||||
the next drawing pass).
|
|
||||||
*/
|
|
||||||
virtual void invalidate() = 0;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
This method is called to create a surface with the given attributes.
|
This method is called to create a surface with the given attributes.
|
||||||
|
|
||||||
|
|
|
@ -94,6 +94,8 @@ bool DialogContainer::draw(bool full)
|
||||||
|
|
||||||
// If the top dialog is dirty, then all below it must be redrawn too
|
// If the top dialog is dirty, then all below it must be redrawn too
|
||||||
bool dirty = needsRedraw();
|
bool dirty = needsRedraw();
|
||||||
|
if(dirty)
|
||||||
|
myOSystem.frameBuffer().clear();
|
||||||
|
|
||||||
myDialogStack.applyAll([&](Dialog*& d){
|
myDialogStack.applyAll([&](Dialog*& d){
|
||||||
if(dirty)
|
if(dirty)
|
||||||
|
|
Loading…
Reference in New Issue