]> git.localhorst.tv Git - blobs.git/blobdiff - src/ui/Widget.hpp
fix layout
[blobs.git] / src / ui / Widget.hpp
index a69defbcfc45a4cb1b2dcd510b9fb4a2cb540eb5..84570a3f70ca81e32bbb21ef43ee4aae07819517 100644 (file)
@@ -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;
 
 };