diff options
Diffstat (limited to 'src/Widget.hpp')
-rw-r--r-- | src/Widget.hpp | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/src/Widget.hpp b/src/Widget.hpp new file mode 100644 index 0000000..6d78ebe --- /dev/null +++ b/src/Widget.hpp @@ -0,0 +1,74 @@ +#pragma once + +#include <vector> +#include <memory> +#include <functional> + +#include "AssetManager.hpp" + +class Widget; +class RootWidget { + std::vector<std::unique_ptr<Widget>> allWidgets; + + std::vector<Widget*> childs; + + double prevX, prevY; + bool prevBut; +public: + RootWidget() = default; + + ~RootWidget() = default; + + void AttachWidget(std::unique_ptr<Widget> widget, Widget* parent); + + void AttachWidget(std::unique_ptr<Widget> widget); + + std::vector<Widget*> GetRenderList(); + + void UpdateEvents(double mouseX, double mouseY, bool mouseButton); +}; + +struct Widget { + Widget() = default; + + virtual ~Widget() = default; + + Widget *parent; + + std::vector<Widget*> childs; + + double x, y, w, h; //In OGL screen-coordinates + + virtual std::tuple<double, double, double, double> GetTexture() = 0; + + + using Handler = std::function<void(Widget*)>; + + Handler onPress; + + Handler onRelease; + + Handler onHover; + + Handler onUnhover; + + Handler onUpdate; +}; + +struct WidgetButton : Widget { + WidgetButton(); + + ~WidgetButton() override = default; + + std::string Text; + + Handler onClick; + + std::tuple<double, double, double, double> GetTexture() override; + + enum class WidgetState { + Idle, + Hovering, + Pressed, + } state; +};
\ No newline at end of file |