aboutsummaryrefslogtreecommitdiff
path: root/src/gui/PageStack.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/gui/PageStack.cpp')
-rw-r--r--src/gui/PageStack.cpp58
1 files changed, 58 insertions, 0 deletions
diff --git a/src/gui/PageStack.cpp b/src/gui/PageStack.cpp
new file mode 100644
index 0000000..94196cd
--- /dev/null
+++ b/src/gui/PageStack.cpp
@@ -0,0 +1,58 @@
+#include "../../include/gui/PageStack.hpp"
+
+namespace gsr {
+ PageStack::PageStack() {}
+
+ bool PageStack::on_event(mgl::Event &event, mgl::Window &window, mgl::vec2f offset) {
+ if(!visible)
+ return true;
+
+ offset = position + offset;
+ std::unique_ptr<Page> *top_page = widget_stack.back();
+ if(top_page) {
+ if(!(*top_page)->on_event(event, window, offset))
+ return false;
+ }
+
+ return true;
+ }
+
+ void PageStack::draw(mgl::Window &window, mgl::vec2f offset) {
+ if(!visible)
+ return;
+
+ offset = position + offset;
+ std::unique_ptr<Page> *top_page = widget_stack.back();
+ if(top_page)
+ (*top_page)->draw(window, offset);
+ }
+
+ mgl::vec2f PageStack::get_size() {
+ return {0.0f, 0.0f};
+ }
+
+ void PageStack::push(std::unique_ptr<Page> widget) {
+ widget->on_navigate_to_page();
+ widget_stack.push_back(std::move(widget));
+ }
+
+ void PageStack::pop() {
+ std::unique_ptr<Page> *top_page = widget_stack.back();
+ if(top_page) {
+ (*top_page)->on_navigate_away_from_page();
+ widget_stack.pop_back();
+ }
+ }
+
+ Page* PageStack::top() {
+ std::unique_ptr<Page> *top_page = widget_stack.back();
+ if(top_page)
+ return top_page->get();
+ else
+ return nullptr;
+ }
+
+ bool PageStack::empty() const {
+ return widget_stack.empty();
+ }
+} \ No newline at end of file