#pragma once #include #include #include #include "AssetManager.hpp" class Widget; class RootWidget { std::vector> allWidgets; std::vector childs; double prevX, prevY; bool prevBut; public: RootWidget() = default; ~RootWidget() = default; void AttachWidget(std::unique_ptr widget, Widget* parent); void AttachWidget(std::unique_ptr widget); std::vector GetRenderList(); void UpdateEvents(double mouseX, double mouseY, bool mouseButton); }; struct Widget { Widget() = default; virtual ~Widget() = default; Widget *parent; std::vector childs; double x, y, w, h; //In OGL screen-coordinates virtual std::tuple GetTexture() = 0; using Handler = std::function; Handler onPress; Handler onRelease; Handler onHover; Handler onUnhover; Handler onUpdate; }; struct WidgetButton : Widget { WidgetButton(); ~WidgetButton() override = default; std::string Text; Handler onClick; std::tuple GetTexture() override; enum class WidgetState { Idle, Hovering, Pressed, } state; };