From 27255cdb64b87c048fad70ca893f684cf61819a4 Mon Sep 17 00:00:00 2001 From: dec05eba Date: Thu, 1 Aug 2024 20:46:13 +0200 Subject: Change global widget container to page --- src/gui/ComboBox.cpp | 1 - src/gui/Page.cpp | 22 +++++++++++++++++ src/gui/Widget.cpp | 5 ++-- src/gui/WidgetContainer.cpp | 57 --------------------------------------------- src/main.cpp | 18 +++++++------- 5 files changed, 34 insertions(+), 69 deletions(-) create mode 100644 src/gui/Page.cpp delete mode 100644 src/gui/WidgetContainer.cpp (limited to 'src') 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) { + 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 diff --git a/src/main.cpp b/src/main.cpp index 0ecd715..0e7721e 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,5 +1,5 @@ -#include "../include/gui/WidgetContainer.hpp" +#include "../include/gui/Page.hpp" #include "../include/gui/DropdownButton.hpp" #include "../include/gui/ComboBox.hpp" #include "../include/Process.hpp" @@ -235,8 +235,10 @@ int main(int argc, char **argv) { mgl::Rectangle bg_screenshot_overlay(window.get_size().to_vec2f()); bg_screenshot_overlay.set_color(bg_color); + gsr::Page front_page; + struct MainButton { - std::unique_ptr button; + gsr::DropdownButton* button; gsr::GsrMode mode; }; @@ -273,9 +275,11 @@ int main(int argc, char **argv) { auto button = std::make_unique(&title_font, &font, titles[i], descriptions_on[i], descriptions_off[i], textures[i], mgl::vec2f(button_width, button_height)); button->add_item("Start", "start"); button->add_item("Settings", "settings"); + gsr::DropdownButton *button_ptr = button.get(); + front_page.add_widget(std::move(button)); MainButton main_button = { - std::move(button), + button_ptr, gsr::GsrMode::Unknown }; @@ -482,14 +486,12 @@ int main(int argc, char **argv) { mgl::Clock state_update_timer; const double state_update_timeout_sec = 2.0; - gsr::WidgetContainer &widget_container = gsr::WidgetContainer::get_instance(); - mgl::Event event; event.type = mgl::Event::MouseMoved; event.mouse_move.x = window.get_mouse_position().x; event.mouse_move.y = window.get_mouse_position().y; - widget_container.on_event(event, window); + front_page.on_event(event, window); auto render = [&] { window.clear(bg_color); @@ -503,7 +505,7 @@ int main(int argc, char **argv) { // window.draw(audio_input_title); // window.draw(video_quality_title); // window.draw(framerate_title); - widget_container.draw(window); + front_page.draw(window); window.draw(top_bar_background); window.draw(top_bar_text); window.draw(logo_sprite); @@ -519,7 +521,7 @@ int main(int argc, char **argv) { } while(window.poll_event(event)) { - widget_container.on_event(event, window); + front_page.on_event(event, window); if(event.type == mgl::Event::KeyPressed) { if(event.key.code == mgl::Keyboard::Escape) { window.set_visible(false); -- cgit v1.2.3