diff options
author | dec05eba <dec05eba@protonmail.com> | 2024-08-01 20:46:13 +0200 |
---|---|---|
committer | dec05eba <dec05eba@protonmail.com> | 2024-08-01 20:46:13 +0200 |
commit | 27255cdb64b87c048fad70ca893f684cf61819a4 (patch) | |
tree | d89ea70475d1e8e9508d652eef836c49c0d162a8 /src/gui | |
parent | 6624db873c91087bc1805b9d018c92c455b85190 (diff) |
Change global widget container to page
Diffstat (limited to 'src/gui')
-rw-r--r-- | src/gui/ComboBox.cpp | 1 | ||||
-rw-r--r-- | src/gui/Page.cpp | 22 | ||||
-rw-r--r-- | src/gui/Widget.cpp | 5 | ||||
-rw-r--r-- | src/gui/WidgetContainer.cpp | 57 |
4 files changed, 24 insertions, 61 deletions
diff --git a/src/gui/ComboBox.cpp b/src/gui/ComboBox.cpp index dd683e1..2766797 100644 --- a/src/gui/ComboBox.cpp +++ b/src/gui/ComboBox.cpp @@ -40,7 +40,6 @@ namespace gsr { if(mgl::FloatRect(position, item_size).contains(mouse_pos)) { show_dropdown = !show_dropdown; - move_to_top = true; } else { show_dropdown = false; } diff --git a/src/gui/Page.cpp b/src/gui/Page.cpp new file mode 100644 index 0000000..817c7fd --- /dev/null +++ b/src/gui/Page.cpp @@ -0,0 +1,22 @@ +#include "../../include/gui/Page.hpp" +#include "../../include/gui/Widget.hpp" + +namespace gsr { + void Page::add_widget(std::unique_ptr<Widget> widget) { + widgets.push_back(std::move(widget)); + } + + void Page::on_event(mgl::Event &event, mgl::Window &window) { + // Process widgets by visibility (backwards) + for(auto it = widgets.rbegin(), end = widgets.rend(); it != end; ++it) { + if(!(*it)->on_event(event, window)) + return; + } + } + + void Page::draw(mgl::Window &window) { + for(auto &widget : widgets) { + widget->draw(window); + } + } +}
\ No newline at end of file diff --git a/src/gui/Widget.cpp b/src/gui/Widget.cpp index 718fd8d..1dc4d98 100644 --- a/src/gui/Widget.cpp +++ b/src/gui/Widget.cpp @@ -1,13 +1,12 @@ #include "../../include/gui/Widget.hpp" -#include "../../include/gui/WidgetContainer.hpp" namespace gsr { Widget::Widget() { - WidgetContainer::get_instance().add_widget(this); + } Widget::~Widget() { - WidgetContainer::get_instance().remove_widget(this); + } void Widget::set_position(mgl::vec2f position) { diff --git a/src/gui/WidgetContainer.cpp b/src/gui/WidgetContainer.cpp deleted file mode 100644 index 8824d1a..0000000 --- a/src/gui/WidgetContainer.cpp +++ /dev/null @@ -1,57 +0,0 @@ -#include "../../include/gui/WidgetContainer.hpp" -#include "../../include/gui/Widget.hpp" - -namespace gsr { - // static - WidgetContainer& WidgetContainer::get_instance() { - static WidgetContainer instance; - return instance; - } - - void WidgetContainer::add_widget(Widget *widget) { - // TODO: to_be_added, and remove in the draw loop - #ifdef DEBUG - for(Widget *existing_widget : widgets) { - if(existing_widget == widget) - return; - } - #endif - widgets.push_back(widget); - } - - void WidgetContainer::remove_widget(Widget *widget) { - // TODO: to_be_removed, and remove in draw loop - for(auto it = widgets.begin(), end = widgets.end(); it != end; ++it) { - if(*it == widget) { - widgets.erase(it); - return; - } - } - } - - void WidgetContainer::on_event(mgl::Event &event, mgl::Window &window) { - // Process widgets by visibility (backwards) - for(auto it = widgets.rbegin(), end = widgets.rend(); it != end; ++it) { - if(!(*it)->on_event(event, window)) - return; - } - } - - void WidgetContainer::draw(mgl::Window &window) { - for(auto it = widgets.begin(); it != widgets.end(); ++it) { - Widget *widget = *it; - if(widget->move_to_top) { - widget->move_to_top = false; - std::swap(*it, widgets.back()); - /*if(widgets.back() != widget) { - widgets.erase(it); - widgets.push_back(widget); - }*/ - } - } - - for(Widget *widget : widgets) { - widget->draw(window); - } - } -}
\ No newline at end of file |