X-Git-Url: https://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fui%2FWidget.hpp;h=84570a3f70ca81e32bbb21ef43ee4aae07819517;hb=a19fdf3d9f0d7ecbf6eeeec817856d85049a8336;hp=0f9c8d9d3ad3a77ebadf3fffecd4d78bc312da39;hpb=fd08d1defb5c42d2847a9001e1921898e3d526bf;p=blobs.git diff --git a/src/ui/Widget.hpp b/src/ui/Widget.hpp index 0f9c8d9..84570a3 100644 --- a/src/ui/Widget.hpp +++ b/src/ui/Widget.hpp @@ -1,7 +1,7 @@ #ifndef BLOBS_UI_WIDGET_HPP_ #define BLOBS_UI_WIDGET_HPP_ -#include "../graphics/glm.hpp" +#include "../math/glm.hpp" namespace blobs { @@ -26,18 +26,33 @@ public: Widget &operator =(Widget &&) = delete; public: + void SetParent(Widget &) noexcept; + bool HasParent() const noexcept { return parent; } + Widget &GetParent() noexcept { return *parent; } + const Widget &GetParent() const noexcept { return *parent; } + Widget *Position(const glm::vec2 &p) noexcept { pos = p; return this; } const glm::vec2 &Position() const noexcept { return pos; } Widget *ZIndex(float z) noexcept { z_index = z; return this; } float ZIndex() const noexcept { return z_index; } + bool DirtyLayout() const noexcept { return dirty_layout; } + void BreakLayout() noexcept; + void BreakParentLayout() noexcept; + void Layout(); + virtual glm::vec2 Size() = 0; virtual void Draw(app::Assets &, graphics::Viewport &) noexcept = 0; private: + virtual void FixLayout() { } + +private: + Widget *parent; glm::vec2 pos; float z_index; + bool dirty_layout; };