mirror of
https://github.com/zhenyan121/Cubed.git
synced 2026-08-09 02:07:04 +08:00
feat(ui): add ComboButton widget and integrate into settings
Introduce ComboButton, a button that cycles through options on click. Used in SettingsUI for fullscreen, V-Sync, and anisotropic filtering. Adds texture reload support in SettingsScene and makes Button methods virtual to allow overriding. Also fixes default mouse_enable to true.
This commit is contained in:
@@ -29,11 +29,13 @@ public:
|
||||
void on_re_enter() override;
|
||||
SceneManager& scene_manager();
|
||||
SliderVariable& slider_variable();
|
||||
void set_texture_reload(bool reload);
|
||||
|
||||
private:
|
||||
void save_and_apply();
|
||||
SceneManager& m_scene_manager;
|
||||
SliderVariable m_slider_variable;
|
||||
SettingsUI m_settings_ui;
|
||||
bool m_need_texture_reload = false;
|
||||
};
|
||||
} // namespace Cubed
|
||||
@@ -17,7 +17,7 @@ public:
|
||||
Button& operator=(Button&&) = delete;
|
||||
|
||||
bool handle_mouse_move_event(const MouseMoveEvent& e) override;
|
||||
bool handle_mouse_button_event(const MouseButtonEvent& e) override;
|
||||
virtual bool handle_mouse_button_event(const MouseButtonEvent& e) override;
|
||||
Button& set_scale(float scale);
|
||||
|
||||
float width() const override;
|
||||
@@ -28,7 +28,7 @@ public:
|
||||
Button& set_background_image(const std::string& path,
|
||||
TextureManager& texture_manager);
|
||||
Button& set_default_image(TextureManager& texture_manager);
|
||||
Button& set_text(const std::string& text);
|
||||
virtual Button& set_text(const std::string& text);
|
||||
|
||||
Button& set_auto_scale(bool auto_scale);
|
||||
Button& set_enable(bool enable);
|
||||
@@ -38,6 +38,13 @@ public:
|
||||
return *this;
|
||||
}
|
||||
|
||||
protected:
|
||||
std::unique_ptr<Image> m_background;
|
||||
std::unique_ptr<Label> m_foreground;
|
||||
bool m_hovered = false;
|
||||
bool m_enable = true;
|
||||
void update_text_scale();
|
||||
|
||||
private:
|
||||
static constexpr float PADDING = 5.0f;
|
||||
static constexpr float DEFAULT_SCALE = 3.0f;
|
||||
@@ -46,16 +53,12 @@ private:
|
||||
static constexpr const char* DEFAULT_BUTTON_IMAGE =
|
||||
"texture/ui/button001.png";
|
||||
std::function<void()> m_clicked;
|
||||
std::unique_ptr<Image> m_background;
|
||||
std::unique_ptr<Label> m_foreground;
|
||||
bool m_hovered = false;
|
||||
bool m_enable = true;
|
||||
|
||||
float m_width = NORMAL_BUTTON_WIDTH;
|
||||
float m_height = NORMAL_BUTTON_HEIGHT;
|
||||
float m_scale = DEFAULT_SCALE;
|
||||
bool m_auto_scale = false;
|
||||
void on_render(Renderer& renderer) override;
|
||||
void on_update(float dt) override;
|
||||
void update_text_scale();
|
||||
};
|
||||
} // namespace Cubed
|
||||
30
include/Cubed/ui/combo_button.hpp
Normal file
30
include/Cubed/ui/combo_button.hpp
Normal file
@@ -0,0 +1,30 @@
|
||||
#pragma once
|
||||
#include "Cubed/ui/button.hpp"
|
||||
|
||||
#include <span>
|
||||
namespace Cubed {
|
||||
using ComboPair = std::pair<std::string, std::function<void()>>;
|
||||
class ComboButton : public Button {
|
||||
|
||||
public:
|
||||
ComboButton(const ComboButton&) = delete;
|
||||
ComboButton(ComboButton&&) = delete;
|
||||
ComboButton& operator=(const ComboButton&) = delete;
|
||||
ComboButton& operator=(ComboButton&&) = delete;
|
||||
|
||||
ComboButton(Widget* parent);
|
||||
Button& set_text(const std::string& text) override;
|
||||
bool handle_mouse_button_event(const MouseButtonEvent& e) override;
|
||||
ComboButton& set_combos(std::span<ComboPair> combos);
|
||||
ComboButton& set_index(int index);
|
||||
|
||||
private:
|
||||
void update_text();
|
||||
|
||||
std::vector<std::string> m_suffix;
|
||||
std::vector<std::function<void()>> m_funs;
|
||||
std::string m_text;
|
||||
int m_index = 0;
|
||||
int m_sum = 0;
|
||||
};
|
||||
} // namespace Cubed
|
||||
@@ -41,7 +41,7 @@ public:
|
||||
void set_imgui_enabled(bool enable);
|
||||
|
||||
private:
|
||||
bool m_mouse_enable = false;
|
||||
bool m_mouse_enable = true;
|
||||
bool m_imgui_init = false;
|
||||
bool m_game_running = false;
|
||||
GLFWwindow* m_window;
|
||||
|
||||
Reference in New Issue
Block a user