diff --git a/src/screenmanager.h b/src/screenmanager.h index c72b1ab..2424490 100644 --- a/src/screenmanager.h +++ b/src/screenmanager.h @@ -23,7 +23,20 @@ inline void deconstructScreen() } template -void switchScreenImpl(Args&&... args) +void switchScreenImpl(Args... args) +{ + deconstructScreen(); + + std::unique_ptr ptr = std::make_unique(args...); + currentDisplay = std::move(ptr); + currentDisplay->start(); + currentDisplay->initScreen(); + currentDisplay->update(); + currentDisplay->redraw(); +} + +template +void switchScreenRefImpl(Args&&... args) { deconstructScreen(); @@ -38,12 +51,21 @@ void switchScreenImpl(Args&&... args) extern std::function changeScreenCallback; template -void switchScreen(Args&&... args) +void switchScreen(Args... args) { if (currentDisplay) - changeScreenCallback = [&args...](){ switchScreenImpl(std::forward(args)...); }; + changeScreenCallback = [args...](){ switchScreenImpl(args...); }; else - switchScreenImpl(std::forward(args)...); + switchScreenImpl(args...); +} + +template +void switchScreenRef(Args&&... args) +{ + if (currentDisplay) + changeScreenCallback = [args...](){ switchScreenRefImpl(std::forward(args)...); }; + else + switchScreenRefImpl(std::forward(args)...); } } // namespace espgui