DeskControl/src/lib/screen.h

85 lines
1.5 KiB
C
Raw Normal View History

#ifndef __screen
#define __screen
#include <Adafruit_GFX.h>
#include "include/display.h"
#if DISPLAY_WIDTH != 240 || DISPLAY_HEIGHT != 240
#error "The menu assumes a display pixel size of 240x240"
#endif
class ScreenManager;
enum Button
{
Up = 0,
Menu = 1,
Down = 2
};
class BaseScreen
{
public:
BaseScreen(ScreenManager* screenManager)
{
this->screenManager = screenManager;
}
virtual ~BaseScreen() {}
virtual void onShow() = 0;
virtual void onButton(Button button) = 0;
virtual void onTick() = 0;
protected:
ScreenManager* getScreenManager() { return this->screenManager; }
Adafruit_GFX* getDisplay();
private:
ScreenManager* screenManager;
};
class ScreenManager
{
public:
ScreenManager(Adafruit_GFX* display, uint32_t* currentTime)
{
this->display = display;
this->currentTime = currentTime;
}
inline void tick() { this->getCurrentScreen()->onTick(); }
inline BaseScreen* getCurrentScreen() { return this->currentScreen; }
inline uint32_t getCurrentTime() { return *this->currentTime; }
inline Adafruit_GFX* getDisplay() { return this->display; }
template<class T> void show()
{
if (this->currentScreen != nullptr)
{
//currentScreen->onHide();
delete this->currentScreen;
}
this->currentScreen = new T(this);
this->currentScreen->onShow();
}
private:
Adafruit_GFX* display;
uint32_t* currentTime;
BaseScreen* currentScreen = nullptr;
};
#endif