#pragma once #include "../Widgets/Widget.h" #include "../Graphics/Rectangle.h" #include "../Graphics/Text.h" #include #include #include namespace UI { class Button : public Widget { protected: std::string label; std::function onClick; Color previousColor = Color(0,0,0,0); Color normalColor{0.25f, 0.25f, 0.28f, 1.0f}; Color hoverColor{0.35f, 0.35f, 0.40f, 1.0f}; Color activeColor{0.18f, 0.45f, 0.75f, 1.0f}; Color textColor{1.0f, 1.0f, 1.0f, 1.0f}; std::unique_ptr bgRect; std::unique_ptr labelText; virtual void RefreshPrimitives(); public: explicit Button(const std::string& label = "Button", std::function onClick = nullptr); void SetLabel(const std::string& newLabel); const std::string& GetLabel() const { return label; } void SetOnClick(std::function callback) { onClick = callback; } void SetNormalColor(Color c) { normalColor = c; MarkDirty(DirtyFlags::Render); } void SetHoverColor(Color c) { hoverColor = c; MarkDirty(DirtyFlags::Render); } void SetActiveColor(Color c) { activeColor = c; MarkDirty(DirtyFlags::Render); } void SetTextColor(Color c) { textColor = c; MarkDirty(DirtyFlags::Render); } virtual void Measure(Size availableSpace) override; void Arrange(Rect finalBounds) override; void Draw() override; bool OnPointerStream(const std::shared_ptr& stream) override; }; }