diff --git a/src/ui/elements/ui_element.cpp b/src/ui/elements/ui_element.cpp index 3d7fc97..db5ce5e 100644 --- a/src/ui/elements/ui_element.cpp +++ b/src/ui/elements/ui_element.cpp @@ -227,7 +227,7 @@ bool Element::is_enabled() const { return enabled && !disabled_from_parent; } -void Element::set_text(const std::string &text) { +void Element::set_text(std::string_view text) { base->SetInnerRML(std::string(text)); } diff --git a/src/ui/elements/ui_element.h b/src/ui/elements/ui_element.h index 07eef78..8d58d7a 100644 --- a/src/ui/elements/ui_element.h +++ b/src/ui/elements/ui_element.h @@ -47,7 +47,7 @@ public: void add_style(Style *style, const std::initializer_list<std::string_view> &style_names); void set_enabled(bool enabled); bool is_enabled() const; - void set_text(const std::string &text); + void set_text(std::string_view text); void set_style_enabled(std::string_view style_name, bool enabled); bool is_element() override { return true; } float get_absolute_left(); diff --git a/src/ui/elements/ui_slider.cpp b/src/ui/elements/ui_slider.cpp index 9915f20..62d8b2b 100644 --- a/src/ui/elements/ui_slider.cpp +++ b/src/ui/elements/ui_slider.cpp @@ -67,16 +67,18 @@ namespace recompui { set_flex(1.0f, 1.0f, 100.0f, Unit::Percent); set_flex_direction(FlexDirection::Row); - value_label = new Label("0", LabelStyle::Small, this); + ContextId context = get_current_context(); + + value_label = context.create_element<Label>("0", LabelStyle::Small, this); value_label->set_margin_right(20.0f); value_label->set_min_width(60.0f); value_label->set_max_width(60.0f); - slider_element = new Element(this); + slider_element = context.create_element<Element>(this); slider_element->set_width(slider_width_dp); { - bar_element = new Clickable(slider_element, true); + bar_element = context.create_element<Clickable>(slider_element, true); bar_element->set_width(100.0f, Unit::Percent); bar_element->set_height(2.0f); bar_element->set_margin_top(8.0f); @@ -84,7 +86,7 @@ namespace recompui { bar_element->add_pressed_callback(std::bind(&Slider::bar_clicked, this, std::placeholders::_1, std::placeholders::_2)); bar_element->add_dragged_callback(std::bind(&Slider::bar_dragged, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3)); - circle_element = new Clickable(slider_element, true); + circle_element = context.create_element<Clickable>(slider_element, true); circle_element->set_position(Position::Relative); circle_element->set_width(16.0f); circle_element->set_height(16.0f); diff --git a/src/ui/ui_config_sub_menu.cpp b/src/ui/ui_config_sub_menu.cpp index 735e569..8479550 100644 --- a/src/ui/ui_config_sub_menu.cpp +++ b/src/ui/ui_config_sub_menu.cpp @@ -21,7 +21,7 @@ void ConfigOptionElement::process_event(const Event &e) { ConfigOptionElement::ConfigOptionElement(Element *parent) : Element(parent, Events(EventType::Hover)) { set_min_height(100.0f); - name_label = new Label(LabelStyle::Normal, this); + name_label = get_current_context().create_element<Label>(LabelStyle::Normal, this); } ConfigOptionElement::~ConfigOptionElement() { @@ -53,7 +53,7 @@ void ConfigOptionSlider::slider_value_changed(double v) { } ConfigOptionSlider::ConfigOptionSlider(Element *parent) : ConfigOptionElement(parent) { - slider = new Slider(SliderType::Percent, this); + slider = get_current_context().create_element<Slider>(SliderType::Percent, this); slider->add_value_changed_callback(std::bind(&ConfigOptionSlider::slider_value_changed, this, std::placeholders::_1)); } @@ -103,25 +103,26 @@ ConfigSubMenu::ConfigSubMenu(Element *parent) : Element(parent) { set_flex_direction(FlexDirection::Column); set_height(100.0f, Unit::Percent); - header_container = new Container(FlexDirection::Row, JustifyContent::FlexStart, this); + recompui::ContextId context = get_current_context(); + header_container = context.create_element<Container>(FlexDirection::Row, JustifyContent::FlexStart, this); { - back_button = new Button("Back", ButtonStyle::Secondary, header_container); + back_button = context.create_element<Button>("Back", ButtonStyle::Secondary, header_container); back_button->add_pressed_callback(std::bind(&ConfigSubMenu::back_button_pressed, this)); - title_label = new Label("Title", LabelStyle::Large, header_container); + title_label = context.create_element<Label>("Title", LabelStyle::Large, header_container); } - body_container = new Container(FlexDirection::Row, JustifyContent::SpaceEvenly, this); + body_container = context.create_element<Container>(FlexDirection::Row, JustifyContent::SpaceEvenly, this); { - config_container = new Container(FlexDirection::Column, JustifyContent::Center, body_container); + config_container = context.create_element<Container>(FlexDirection::Column, JustifyContent::Center, body_container); config_container->set_display(Display::Block); config_container->set_flex_basis(100.0f); config_container->set_align_items(AlignItems::Center); { - config_scroll_container = new ScrollContainer(ScrollDirection::Vertical, config_container); + config_scroll_container = context.create_element<ScrollContainer>(ScrollDirection::Vertical, config_container); } - description_label = new Label("Description", LabelStyle::Small, body_container); + description_label = context.create_element<Label>("Description", LabelStyle::Small, body_container); description_label->set_min_width(800.0f); } } @@ -152,7 +153,7 @@ void ConfigSubMenu::add_option(ConfigOptionElement *option, std::string_view nam } void ConfigSubMenu::add_slider_option(std::string_view name, std::string_view description, double min, double max) { - ConfigOptionSlider *option_slider = new ConfigOptionSlider(config_scroll_container); + ConfigOptionSlider *option_slider = get_current_context().create_element<ConfigOptionSlider>(config_scroll_container); option_slider->set_min_value(min); option_slider->set_max_value(max); add_option(option_slider, name, description); @@ -174,7 +175,8 @@ ElementConfigSubMenu::ElementConfigSubMenu(const Rml::String &tag) : Rml::Elemen SetProperty("height", "100%"); recompui::Element this_compat(this); - config_sub_menu = std::make_unique<ConfigSubMenu>(&this_compat); + recompui::ContextId context = get_current_context(); + config_sub_menu = context.create_element<ConfigSubMenu>(&this_compat); } ElementConfigSubMenu::~ElementConfigSubMenu() { @@ -194,7 +196,7 @@ void ElementConfigSubMenu::set_quit_sub_menu_callback(std::function<void()> call } ConfigSubMenu *ElementConfigSubMenu::get_config_sub_menu_element() const { - return config_sub_menu.get(); + return config_sub_menu; } } \ No newline at end of file diff --git a/src/ui/ui_config_sub_menu.h b/src/ui/ui_config_sub_menu.h index 627b915..200c712 100644 --- a/src/ui/ui_config_sub_menu.h +++ b/src/ui/ui_config_sub_menu.h @@ -78,7 +78,7 @@ public: void set_quit_sub_menu_callback(std::function<void()> callback); ConfigSubMenu *get_config_sub_menu_element() const; private: - std::unique_ptr<ConfigSubMenu> config_sub_menu; + ConfigSubMenu *config_sub_menu; }; } diff --git a/src/ui/ui_mod_menu.cpp b/src/ui/ui_mod_menu.cpp index 0402325..2a05cee 100644 --- a/src/ui/ui_mod_menu.cpp +++ b/src/ui/ui_mod_menu.cpp @@ -195,7 +195,7 @@ ElementModMenu::ElementModMenu(const Rml::String &tag) : Rml::Element(tag) { recompui::Element this_compat(this); recompui::ContextId context = get_current_context(); - context.create_element<ModMenu>(&this_compat); + mod_menu = context.create_element<ModMenu>(&this_compat); } ElementModMenu::~ElementModMenu() { diff --git a/src/ui/ui_mod_menu.h b/src/ui/ui_mod_menu.h index 2136854..865cc1b 100644 --- a/src/ui/ui_mod_menu.h +++ b/src/ui/ui_mod_menu.h @@ -56,7 +56,7 @@ public: virtual ~ElementModMenu(); void set_config_sub_menu(ConfigSubMenu *config_sub_menu); private: - std::unique_ptr<ModMenu> mod_menu; + ModMenu *mod_menu; }; } // namespace recompui