mirror of
https://github.com/RGBCube/serenity
synced 2025-05-25 22:25:08 +00:00
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. :^)
This commit is contained in:
parent
b2bba5ce5c
commit
7dc5a3ead8
83 changed files with 444 additions and 957 deletions
|
@ -71,20 +71,20 @@ void ScrollableWidget::mousewheel_event(MouseEvent& event)
|
|||
void ScrollableWidget::custom_layout()
|
||||
{
|
||||
auto inner_rect = frame_inner_rect_for_size(size());
|
||||
int height_wanted_by_horizontal_scrollbar = m_horizontal_scrollbar->is_visible() ? m_horizontal_scrollbar->preferred_size().height() : 0;
|
||||
int width_wanted_by_vertical_scrollbar = m_vertical_scrollbar->is_visible() ? m_vertical_scrollbar->preferred_size().width() : 0;
|
||||
int height_wanted_by_horizontal_scrollbar = m_horizontal_scrollbar->is_visible() ? m_horizontal_scrollbar->min_height() : 0;
|
||||
int width_wanted_by_vertical_scrollbar = m_vertical_scrollbar->is_visible() ? m_vertical_scrollbar->min_width() : 0;
|
||||
|
||||
m_vertical_scrollbar->set_relative_rect(
|
||||
inner_rect.right() + 1 - m_vertical_scrollbar->preferred_size().width(),
|
||||
inner_rect.right() + 1 - m_vertical_scrollbar->min_width(),
|
||||
inner_rect.top(),
|
||||
m_vertical_scrollbar->preferred_size().width(),
|
||||
m_vertical_scrollbar->min_width(),
|
||||
inner_rect.height() - height_wanted_by_horizontal_scrollbar);
|
||||
|
||||
m_horizontal_scrollbar->set_relative_rect(
|
||||
inner_rect.left(),
|
||||
inner_rect.bottom() + 1 - m_horizontal_scrollbar->preferred_size().height(),
|
||||
inner_rect.bottom() + 1 - m_horizontal_scrollbar->min_height(),
|
||||
inner_rect.width() - width_wanted_by_vertical_scrollbar,
|
||||
m_horizontal_scrollbar->preferred_size().height());
|
||||
m_horizontal_scrollbar->min_height());
|
||||
|
||||
m_corner_widget->set_visible(m_vertical_scrollbar->is_visible() && m_horizontal_scrollbar->is_visible());
|
||||
if (m_corner_widget->is_visible()) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue