X-Git-Url: https://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fui%2FWidget.hpp;fp=src%2Fui%2FWidget.hpp;h=84570a3f70ca81e32bbb21ef43ee4aae07819517;hb=bf25780e00b719b0e5fa5d0191087bca2d99462b;hp=a69defbcfc45a4cb1b2dcd510b9fb4a2cb540eb5;hpb=fe2ad02c75b369e2a055c38b8ee08a43f5f6c367;p=blobs.git diff --git a/src/ui/Widget.hpp b/src/ui/Widget.hpp index a69defb..84570a3 100644 --- a/src/ui/Widget.hpp +++ b/src/ui/Widget.hpp @@ -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; };