diff options
author | Andreas Kling <kling@serenityos.org> | 2020-12-30 01:23:32 +0100 |
---|---|---|
committer | Andreas Kling <kling@serenityos.org> | 2020-12-30 01:36:41 +0100 |
commit | 7dc5a3ead86627d11b1bf8d243750e5e3390c067 (patch) | |
tree | bfcab42f5b00c5b368ac9ee4a288d7c0d9c4bd01 /Libraries/LibGUI/ToolBarContainer.cpp | |
parent | b2bba5ce5c06d40e2fbcfff4cf1412532f93ae6b (diff) | |
download | serenity-7dc5a3ead86627d11b1bf8d243750e5e3390c067.zip |
LibGUI: Rewrite layout system in terms of min and max sizes
This patch removes size policies and preferred sizes, and replaces them
with min-size and max-size for each widget.
Box layout now works in 3 passes:
1) Set all items (widgets/spacers) to their min-size
2) Distribute remaining space evenly, respecting max-size
3) Place widgets one after the other, adding spacing in between
I've also added convenience helpers for setting a fixed size (which is
the same as setting min-size and max-size to the same value.)
This significantly reduces the verbosity of widget layout and makes GML
a bit more pleasant to write, too. :^)
Diffstat (limited to 'Libraries/LibGUI/ToolBarContainer.cpp')
-rw-r--r-- | Libraries/LibGUI/ToolBarContainer.cpp | 14 |
1 files changed, 3 insertions, 11 deletions
diff --git a/Libraries/LibGUI/ToolBarContainer.cpp b/Libraries/LibGUI/ToolBarContainer.cpp index 3bb3410024..8cbca228e2 100644 --- a/Libraries/LibGUI/ToolBarContainer.cpp +++ b/Libraries/LibGUI/ToolBarContainer.cpp @@ -72,18 +72,15 @@ void ToolBarContainer::recompute_preferred_size() if (!toolbar.is_visible()) continue; ++visible_toolbar_count; - if (m_orientation == Gfx::Orientation::Horizontal) - preferred_size += toolbar.preferred_size().height(); - else - preferred_size += toolbar.preferred_size().width(); + preferred_size += toolbar.min_size().secondary_size_for_orientation(m_orientation); } preferred_size += (visible_toolbar_count - 1) * 2; if (m_orientation == Gfx::Orientation::Horizontal) - set_preferred_size(0, preferred_size); + set_fixed_height(preferred_size); else - set_preferred_size(preferred_size, 0); + set_fixed_width(preferred_size); } ToolBarContainer::ToolBarContainer(Gfx::Orientation orientation) @@ -95,11 +92,6 @@ ToolBarContainer::ToolBarContainer(Gfx::Orientation orientation) set_frame_shape(Gfx::FrameShape::Box); set_frame_shadow(Gfx::FrameShadow::Sunken); - if (m_orientation == Gfx::Orientation::Horizontal) - set_size_policy(SizePolicy::Fill, SizePolicy::Fixed); - else - set_size_policy(SizePolicy::Fixed, SizePolicy::Fill); - auto& layout = set_layout<VerticalBoxLayout>(); layout.set_spacing(2); layout.set_margins({ 2, 2, 2, 2 }); |