diff --git a/src/gui/widget/stringinput_ext.cpp b/src/gui/widget/stringinput_ext.cpp index 4b4923e00..a70187c54 100644 --- a/src/gui/widget/stringinput_ext.cpp +++ b/src/gui/widget/stringinput_ext.cpp @@ -92,6 +92,9 @@ void CExtendedInput::Init(void) x = getScreenStartX(width); y = getScreenStartY(height); + + savescreen = false; + background = NULL; } CExtendedInput::~CExtendedInput() @@ -136,6 +139,34 @@ void CExtendedInput::calculateDialog() y = getScreenStartY(height); } +void CExtendedInput::saveScreen() +{ + if(!savescreen) + return; + + delete[] background; + + background = new fb_pixel_t [width * height]; + if(background) + frameBuffer->SaveScreen(x, y, width, height, background); +} + +void CExtendedInput::restoreScreen() +{ + if(background) { + if(savescreen) + frameBuffer->RestoreScreen(x, y, width, height, background); + } +} + +void CExtendedInput::enableSaveScreen(bool enable) +{ + savescreen = enable; + if (!enable && background) { + delete[] background; + background = NULL; + } +} int CExtendedInput::exec( CMenuTarget* parent, const std::string & ) { @@ -151,6 +182,8 @@ int CExtendedInput::exec( CMenuTarget* parent, const std::string & ) std::string oldval = *valueString; std::string dispval = *valueString; + if (savescreen) + saveScreen(); paint(); frameBuffer->blit(); @@ -285,7 +318,10 @@ int CExtendedInput::exec( CMenuTarget* parent, const std::string & ) void CExtendedInput::hide() { - frameBuffer->paintBackgroundBoxRel(x, y, width, height); + if (savescreen && background) + restoreScreen(); + else + frameBuffer->paintBackgroundBoxRel(x, y, width, height); frameBuffer->blit(); } diff --git a/src/gui/widget/stringinput_ext.h b/src/gui/widget/stringinput_ext.h index af3e838fd..78440df27 100644 --- a/src/gui/widget/stringinput_ext.h +++ b/src/gui/widget/stringinput_ext.h @@ -70,6 +70,11 @@ class CExtendedInput : public CMenuTarget CChangeObserver* observ; bool* cancel; + fb_pixel_t *background; + bool savescreen; + void saveScreen(); + void restoreScreen(); + virtual void paint(); virtual void onBeforeExec(){}; virtual void onAfterExec(){}; @@ -85,6 +90,8 @@ class CExtendedInput : public CMenuTarget void calculateDialog(); void addInputField( CExtendedInput_Item* ); + + void enableSaveScreen(bool enable); };