diff --git a/Applications/About/main.cpp b/Applications/About/main.cpp index 627b13a880..69bdf87d41 100644 --- a/Applications/About/main.cpp +++ b/Applications/About/main.cpp @@ -2,6 +2,7 @@ #include #include #include +#include #include int main(int argc, char** argv) @@ -10,23 +11,27 @@ int main(int argc, char** argv) auto* window = new GWindow; window->set_title("About Serenity"); - window->set_rect(362, 284, 240, 130); + Rect window_rect { 0, 0, 240, 120 }; + window_rect.center_within({ 0, 0, 1024, 768 }); + window->set_rect(window_rect); window->set_should_exit_app_on_close(true); auto* widget = new GWidget; window->set_main_widget(widget); + widget->set_layout(make(Orientation::Vertical)); + widget->layout()->set_margins({ 0, 8, 0, 8 }); + widget->layout()->set_spacing(8); auto* icon_label = new GLabel(widget); icon_label->set_icon(GraphicsBitmap::load_from_file(GraphicsBitmap::Format::RGBA32, "/res/icons/Serenity.rgb", { 32, 32 })); - icon_label->set_relative_rect( - widget->rect().center().x() - 16, - 10, - 32, 32); + icon_label->set_size_policy(SizePolicy::Fixed, SizePolicy::Fixed); + icon_label->set_preferred_size({ 32, 32 }); auto* label = new GLabel(widget); label->set_font(Font::default_bold_font()); label->set_text("Serenity Operating System"); - label->set_relative_rect(0, 50, widget->width(), 20); + label->set_size_policy(SizePolicy::Fill, SizePolicy::Fixed); + label->set_preferred_size({ 0, 11 }); utsname uts; int rc = uname(&uts); @@ -34,11 +39,13 @@ int main(int argc, char** argv) auto* version_label = new GLabel(widget); version_label->set_text(String::format("Version %s", uts.release)); - version_label->set_relative_rect(0, 70, widget->width(), 20); + version_label->set_size_policy(SizePolicy::Fill, SizePolicy::Fixed); + version_label->set_preferred_size({ 0, 11 }); auto* quit_button = new GButton(widget); quit_button->set_caption("Okay"); - quit_button->set_relative_rect(80, 100, widget->width() - 160, 20); + quit_button->set_size_policy(SizePolicy::Fixed, SizePolicy::Fixed); + quit_button->set_preferred_size({ 100, 20 }); quit_button->on_click = [] (GButton&) { GApplication::the().quit(0); }; diff --git a/LibGUI/GBoxLayout.cpp b/LibGUI/GBoxLayout.cpp index 6432e380d5..684ae35bdc 100644 --- a/LibGUI/GBoxLayout.cpp +++ b/LibGUI/GBoxLayout.cpp @@ -3,6 +3,10 @@ //#define GBOXLAYOUT_DEBUG +#ifdef GBOXLAYOUT_DEBUG +#include +#endif + GBoxLayout::GBoxLayout(Orientation orientation) : m_orientation(orientation) { @@ -47,7 +51,7 @@ void GBoxLayout::run(GWidget& widget) int number_of_entries_with_automatic_size = m_entries.size() - number_of_entries_with_fixed_size; #ifdef GBOXLAYOUT_DEBUG - dbgprintf("GBoxLayout: available_size=%d, fixed=%d, fill=%d\n", available_size.height(), number_of_entries_with_fixed_size, number_of_entries_with_automatic_size); + printf("GBoxLayout: available_size=%s, fixed=%d, fill=%d\n", available_size.to_string().characters(), number_of_entries_with_fixed_size, number_of_entries_with_automatic_size); #endif Size automatic_size; @@ -63,7 +67,7 @@ void GBoxLayout::run(GWidget& widget) } #ifdef GBOXLAYOUT_DEBUG - dbgprintf("GBoxLayout: automatic_size=%s\n", automatic_size.to_string().characters()); + printf("GBoxLayout: automatic_size=%s\n", automatic_size.to_string().characters()); #endif int current_x = margins().left(); @@ -76,19 +80,26 @@ void GBoxLayout::run(GWidget& widget) ASSERT_NOT_REACHED(); } ASSERT(entry.widget); - rect.set_size({ automatic_size.width() - margins().left() - margins().right(), automatic_size.height() - margins().top() - margins().bottom() }); + rect.set_size(automatic_size.width() - margins().left() - margins().right(), automatic_size.height() - margins().top() - margins().bottom()); + if (entry.widget->size_policy(Orientation::Vertical) == SizePolicy::Fixed) rect.set_height(entry.widget->preferred_size().height()); + if (entry.widget->size_policy(Orientation::Horizontal) == SizePolicy::Fixed) rect.set_width(entry.widget->preferred_size().width()); - if (orientation() == Orientation::Horizontal) + if (orientation() == Orientation::Horizontal) { + if (entry.widget->size_policy(Orientation::Vertical) == SizePolicy::Fill) + rect.set_height(widget.height() - margins().top() - margins().bottom()); rect.center_vertically_within(widget.rect()); - else + } else { + if (entry.widget->size_policy(Orientation::Horizontal) == SizePolicy::Fill) + rect.set_width(widget.width() - margins().left() - margins().right()); rect.center_horizontally_within(widget.rect()); + } #ifdef GBOXLAYOUT_DEBUG - dbgprintf("GBoxLayout: apply, %s{%p} <- %s\n", entry.widget->class_name(), entry.widget.ptr(), rect.to_string().characters()); + printf("GBoxLayout: apply, %s{%p} <- %s\n", entry.widget->class_name(), entry.widget.ptr(), rect.to_string().characters()); #endif entry.widget->set_relative_rect(rect); diff --git a/SharedGraphics/Rect.h b/SharedGraphics/Rect.h index e57d0e989b..6ba9741369 100644 --- a/SharedGraphics/Rect.h +++ b/SharedGraphics/Rect.h @@ -62,6 +62,12 @@ public: m_size = size; } + void set_size(int width, int height) + { + m_size.set_width(width); + m_size.set_height(height); + } + void inflate(int w, int h) { set_x(x() - w / 2);