diff --git a/Userland/Libraries/LibGUI/Widget.cpp b/Userland/Libraries/LibGUI/Widget.cpp index 80d1e720df..bbbeb1bf51 100644 --- a/Userland/Libraries/LibGUI/Widget.cpp +++ b/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()) diff --git a/Userland/Libraries/LibGUI/Widget.h b/Userland/Libraries/LibGUI/Widget.h index 12bc8e7519..95c46661cd 100644 --- a/Userland/Libraries/LibGUI/Widget.h +++ b/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 };