Pārlūkot izejas kodu

LibGUI: Add preferred_size to Widget

FrHun 3 gadi atpakaļ
vecāks
revīzija
bd277939a1

+ 11 - 0
Userland/Libraries/LibGUI/Widget.cpp

@@ -51,12 +51,15 @@ Widget::Widget()
 
     REGISTER_UI_SIZE_PROPERTY("min_size", min_size, set_min_size);
     REGISTER_UI_SIZE_PROPERTY("max_size", max_size, set_max_size);
+    REGISTER_UI_SIZE_PROPERTY("preferred_size", preferred_size, set_preferred_size);
     REGISTER_INT_PROPERTY("width", width, set_width);
     REGISTER_UI_DIMENSION_PROPERTY("min_width", min_width, set_min_width);
     REGISTER_UI_DIMENSION_PROPERTY("max_width", max_width, set_max_width);
+    REGISTER_UI_DIMENSION_PROPERTY("preferred_width", preferred_width, set_preferred_width);
     REGISTER_INT_PROPERTY("height", height, set_height);
     REGISTER_UI_DIMENSION_PROPERTY("min_height", min_height, set_min_height);
     REGISTER_UI_DIMENSION_PROPERTY("max_height", max_height, set_max_height);
+    REGISTER_UI_DIMENSION_PROPERTY("preferred_height", preferred_height, set_preferred_height);
 
     REGISTER_INT_PROPERTY("fixed_width", dummy_fixed_width, set_fixed_width);
     REGISTER_INT_PROPERTY("fixed_height", dummy_fixed_height, set_fixed_height);
@@ -798,6 +801,14 @@ void Widget::set_max_size(UISize const& size)
     invalidate_layout();
 }
 
+void Widget::set_preferred_size(UISize const& size)
+{
+    if (m_preferred_size == size)
+        return;
+    m_preferred_size = size;
+    invalidate_layout();
+}
+
 void Widget::invalidate_layout()
 {
     if (window())

+ 9 - 0
Userland/Libraries/LibGUI/Widget.h

@@ -99,6 +99,14 @@ public:
     void set_max_width(UIDimension width) { set_max_size(width, max_height()); }
     void set_max_height(UIDimension height) { set_max_size(max_width(), height); }
 
+    UISize preferred_size() const { return m_preferred_size; }
+    void set_preferred_size(UISize const&);
+    void set_preferred_size(UIDimension width, UIDimension height) { set_preferred_size({ width, height }); }
+
+    UIDimension preferred_width() const { return m_preferred_size.width(); }
+    UIDimension preferred_height() const { return m_preferred_size.height(); }
+    void set_preferred_width(UIDimension width) { set_preferred_size(width, preferred_height()); }
+    void set_preferred_height(UIDimension height) { set_preferred_size(preferred_width(), height); }
     void set_fixed_size(UISize const& size)
     {
         VERIFY(size.has_only_int_values());
@@ -383,6 +391,7 @@ private:
 
     UISize m_min_size { SpecialDimension::Shrink };
     UISize m_max_size { SpecialDimension::Grow };
+    UISize m_preferred_size { SpecialDimension::Grow };
     Margins m_grabbable_margins;
 
     bool m_fill_with_background_color { false };