aboutsummaryrefslogtreecommitdiff
path: root/src/gui
diff options
context:
space:
mode:
authordec05eba <dec05eba@protonmail.com>2024-08-01 20:46:13 +0200
committerdec05eba <dec05eba@protonmail.com>2024-08-01 20:46:13 +0200
commit27255cdb64b87c048fad70ca893f684cf61819a4 (patch)
treed89ea70475d1e8e9508d652eef836c49c0d162a8 /src/gui
parent6624db873c91087bc1805b9d018c92c455b85190 (diff)
Change global widget container to page
Diffstat (limited to 'src/gui')
-rw-r--r--src/gui/ComboBox.cpp1
-rw-r--r--src/gui/Page.cpp22
-rw-r--r--src/gui/Widget.cpp5
-rw-r--r--src/gui/WidgetContainer.cpp57
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