diff --git a/main/displays/gameoflifedisplay.cpp b/main/displays/gameoflifedisplay.cpp index e50c117..84445a5 100644 --- a/main/displays/gameoflifedisplay.cpp +++ b/main/displays/gameoflifedisplay.cpp @@ -6,6 +6,9 @@ #include #include +// local includes +#include "screens.h" + void GameOfLifeDisplay::start() { Base::start(); @@ -18,6 +21,8 @@ void GameOfLifeDisplay::initScreen() { Base::initScreen(); + disableScreenFlip(true); + espgui::tft.setRotation(3); espgui::tft.fillScreen(TFT_BLACK); } @@ -45,7 +50,8 @@ void GameOfLifeDisplay::stop() { Base::stop(); - espgui::tft.setRotation(0); + disableScreenFlip(false); + m_grid = nullptr; m_newgrid = nullptr; } diff --git a/main/displays/pingpongdisplay.cpp b/main/displays/pingpongdisplay.cpp index 0c036e6..71d85cd 100644 --- a/main/displays/pingpongdisplay.cpp +++ b/main/displays/pingpongdisplay.cpp @@ -6,6 +6,9 @@ #include #include +// local includes +#include + PingPongDisplay::PingPongDisplay() : lpaddle_y(cpputils::randomNumber(0, h - paddle_h, espcpputils::esp_random_device{})), rpaddle_y(cpputils::randomNumber(0, h - paddle_h, espcpputils::esp_random_device{})), @@ -19,6 +22,8 @@ void PingPongDisplay::initScreen() { Base::initScreen(); + disableScreenFlip(true); + espgui::tft.fillScreen(TFT_BLACK); espgui::tft.setRotation(1); @@ -41,7 +46,7 @@ void PingPongDisplay::stop() { Base::stop(); - espgui::tft.setRotation(0); + disableScreenFlip(false); } void PingPongDisplay::buttonPressed(espgui::Button button) diff --git a/main/displays/spirodisplay.cpp b/main/displays/spirodisplay.cpp index 548f2a0..eed469e 100644 --- a/main/displays/spirodisplay.cpp +++ b/main/displays/spirodisplay.cpp @@ -7,6 +7,9 @@ #include #include +// local includes +#include "screens.h" + namespace { typedef unsigned char byte; } // namespace @@ -15,6 +18,7 @@ void SpiroDisplay::initScreen() { Base::initScreen(); + disableScreenFlip(true); espgui::tft.setRotation(3); } @@ -79,7 +83,7 @@ void SpiroDisplay::stop() { Base::stop(); - espgui::tft.setRotation(0); + disableScreenFlip(false); } void SpiroDisplay::buttonPressed(espgui::Button button) diff --git a/main/displays/starfielddisplay.cpp b/main/displays/starfielddisplay.cpp index 2615498..5495805 100644 --- a/main/displays/starfielddisplay.cpp +++ b/main/displays/starfielddisplay.cpp @@ -7,8 +7,9 @@ #include // local includes -#include "globals.h" #include "displays/menus/demosmenu.h" +#include "globals.h" +#include "screens.h" StarfieldDisplay::StarfieldDisplay() : za(cpputils::randomNumber(espcpputils::esp_random_device{})), @@ -22,6 +23,8 @@ void StarfieldDisplay::initScreen() { Base::initScreen(); + disableScreenFlip(true); + espgui::tft.fillScreen(TFT_BLACK); espgui::tft.setRotation(1); @@ -75,8 +78,7 @@ void StarfieldDisplay::redraw() void StarfieldDisplay::stop() { Base::stop(); - - espgui::tft.setRotation(0); + disableScreenFlip(false); } void StarfieldDisplay::buttonPressed(espgui::Button button) diff --git a/main/screens.cpp b/main/screens.cpp index 6f1f406..65b94ba 100644 --- a/main/screens.cpp +++ b/main/screens.cpp @@ -13,6 +13,10 @@ using namespace espgui; Label bootLabel{32, 250}; +namespace { +bool disable_screen_flip{false}; +} + void initScreen() { // vertical screen @@ -54,7 +58,8 @@ void updateDisplay() changeScreenCallback = {}; } - updateRotation(); + if (!disable_screen_flip) + updateRotation(); if (const int8_t rawButton = rawButtonRequest.load(); rawButton != -1 && currentDisplay) { @@ -85,3 +90,8 @@ void redrawDisplay() currentDisplay->redraw(); } } + +void disableScreenFlip(bool enable) +{ + disable_screen_flip = enable; +} diff --git a/main/screens.h b/main/screens.h index 37911e1..53be905 100644 --- a/main/screens.h +++ b/main/screens.h @@ -9,3 +9,4 @@ void initScreen(); void updateDisplay(); void updateRotation(); void redrawDisplay(); +void disableScreenFlip(bool enable);