added screen manager

This commit is contained in:
feedc0de committed 2021-08-20 13:50:04 +02:00
1 parent ad0d90339e
commit 80bcc7ef07
4 files changed
+60

No files matched your search

+1
View File
@@ -2,6 +2,7 @@
// local includes
#include "actioninterface.h"
#include "screenmanager.h"
namespace espgui {
template<typename Tscreen, typename ...Targs>
+8
View File
@@ -0,0 +1,8 @@
#include "screenmanager.h"
namespace espgui {
std::unique_ptr<Display> currentDisplay;
std::function<void()> changeScreenCallback;
} // namespace espgui
+49
View File
@@ -0,0 +1,49 @@
#pragma once
// system includes
#include <memory>
#include <functional>
#include <utility>
// local includes
#include "display.h"
namespace espgui {
extern std::unique_ptr<Display> currentDisplay;
inline void deconstructScreen()
{
if (currentDisplay)
{
currentDisplay->stop();
//currentDisplay->~Display();
currentDisplay = nullptr;
}
}
template<typename T, typename... Args>
void switchScreenImpl(Args&&... args)
{
deconstructScreen();
std::unique_ptr<T> ptr = std::make_unique<T>(std::forward<Args>(args)...);
currentDisplay = std::move(ptr);
currentDisplay->start();
currentDisplay->initScreen();
currentDisplay->update();
currentDisplay->redraw();
}
extern std::function<void()> changeScreenCallback;
template<typename T, typename... Args>
void switchScreen(Args&&... args)
{
if (currentDisplay)
changeScreenCallback = [&args...](){ switchScreenImpl<T>(std::forward<Args>(args)...); };
else
switchScreenImpl<T>(std::forward<Args>(args)...);
}
} // namespace espgui