mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 12:42:45 +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
				
			
		|  | @ -51,8 +51,7 @@ BookmarksBarWidget::BookmarksBarWidget(const String& bookmarks_file, bool enable | |||
|     set_layout<GUI::HorizontalBoxLayout>(); | ||||
|     layout()->set_spacing(0); | ||||
| 
 | ||||
|     set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|     set_preferred_size(0, 20); | ||||
|     set_fixed_height(20); | ||||
| 
 | ||||
|     if (!enabled) | ||||
|         set_visible(false); | ||||
|  | @ -60,8 +59,7 @@ BookmarksBarWidget::BookmarksBarWidget(const String& bookmarks_file, bool enable | |||
|     m_additional = GUI::Button::construct(); | ||||
|     m_additional->set_button_style(Gfx::ButtonStyle::CoolBar); | ||||
|     m_additional->set_text(">"); | ||||
|     m_additional->set_size_policy(GUI::SizePolicy::Fixed, GUI::SizePolicy::Fixed); | ||||
|     m_additional->set_preferred_size(14, 20); | ||||
|     m_additional->set_fixed_size(14, 20); | ||||
|     m_additional->set_focus_policy(GUI::FocusPolicy::TabFocus); | ||||
|     m_additional->on_click = [this](auto) { | ||||
|         if (m_additional_menu) { | ||||
|  | @ -134,9 +132,8 @@ void BookmarksBarWidget::model_did_update(unsigned) | |||
| 
 | ||||
|         button.set_button_style(Gfx::ButtonStyle::CoolBar); | ||||
|         button.set_text(title); | ||||
|         button.set_size_policy(GUI::SizePolicy::Fixed, GUI::SizePolicy::Fixed); | ||||
|         button.set_icon(Gfx::Bitmap::load_from_file("/res/icons/16x16/filetype-html.png")); | ||||
|         button.set_preferred_size(font().width(title) + 32, 20); | ||||
|         button.set_fixed_size(font().width(title) + 32, 20); | ||||
|         button.set_relative_rect(rect); | ||||
|         button.set_focus_policy(GUI::FocusPolicy::TabFocus); | ||||
|         button.set_tooltip(url); | ||||
|  |  | |||
|  | @ -62,8 +62,7 @@ ConsoleWidget::ConsoleWidget() | |||
| 
 | ||||
|     auto& bottom_container = add<GUI::Widget>(); | ||||
|     bottom_container.set_layout<GUI::HorizontalBoxLayout>(); | ||||
|     bottom_container.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|     bottom_container.set_preferred_size(0, 22); | ||||
|     bottom_container.set_fixed_height(22); | ||||
| 
 | ||||
|     m_input = bottom_container.add<GUI::TextBox>(); | ||||
|     m_input->set_syntax_highlighter(make<GUI::JSSyntaxHighlighter>()); | ||||
|  | @ -112,8 +111,7 @@ ConsoleWidget::ConsoleWidget() | |||
|     set_focus_proxy(m_input); | ||||
| 
 | ||||
|     auto& clear_button = bottom_container.add<GUI::Button>(); | ||||
|     clear_button.set_size_policy(GUI::SizePolicy::Fixed, GUI::SizePolicy::Fixed); | ||||
|     clear_button.set_preferred_size(22, 22); | ||||
|     clear_button.set_fixed_size(22, 22); | ||||
|     clear_button.set_icon(Gfx::Bitmap::load_from_file("/res/icons/16x16/delete.png")); | ||||
|     clear_button.set_tooltip("Clear the console output"); | ||||
|     clear_button.on_click = [this](auto) { | ||||
|  |  | |||
|  | @ -70,8 +70,7 @@ DownloadWidget::DownloadWidget(const URL& url) | |||
|     layout.set_margins({ 4, 4, 4, 4 }); | ||||
| 
 | ||||
|     auto& animation_container = add<GUI::Widget>(); | ||||
|     animation_container.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|     animation_container.set_preferred_size(0, 32); | ||||
|     animation_container.set_fixed_height(32); | ||||
|     auto& animation_layout = animation_container.set_layout<GUI::HorizontalBoxLayout>(); | ||||
| 
 | ||||
|     auto& browser_image = animation_container.add<GUI::ImageWidget>(); | ||||
|  | @ -80,29 +79,24 @@ DownloadWidget::DownloadWidget(const URL& url) | |||
| 
 | ||||
|     auto& source_label = add<GUI::Label>(String::formatted("From: {}", url)); | ||||
|     source_label.set_text_alignment(Gfx::TextAlignment::CenterLeft); | ||||
|     source_label.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|     source_label.set_preferred_size(0, 16); | ||||
|     source_label.set_fixed_height(16); | ||||
| 
 | ||||
|     m_progress_bar = add<GUI::ProgressBar>(); | ||||
|     m_progress_bar->set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|     m_progress_bar->set_preferred_size(0, 20); | ||||
|     m_progress_bar->set_fixed_height(20); | ||||
| 
 | ||||
|     m_progress_label = add<GUI::Label>(); | ||||
|     m_progress_label->set_text_alignment(Gfx::TextAlignment::CenterLeft); | ||||
|     m_progress_label->set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|     m_progress_label->set_preferred_size(0, 16); | ||||
|     m_progress_label->set_fixed_height(16); | ||||
| 
 | ||||
|     auto& destination_label = add<GUI::Label>(String::formatted("To: {}", m_destination_path)); | ||||
|     destination_label.set_text_alignment(Gfx::TextAlignment::CenterLeft); | ||||
|     destination_label.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|     destination_label.set_preferred_size(0, 16); | ||||
|     destination_label.set_fixed_height(16); | ||||
| 
 | ||||
|     auto& button_container = add<GUI::Widget>(); | ||||
|     auto& button_container_layout = button_container.set_layout<GUI::HorizontalBoxLayout>(); | ||||
|     button_container_layout.add_spacer(); | ||||
|     m_cancel_button = button_container.add<GUI::Button>("Cancel"); | ||||
|     m_cancel_button->set_size_policy(GUI::SizePolicy::Fixed, GUI::SizePolicy::Fixed); | ||||
|     m_cancel_button->set_preferred_size(100, 22); | ||||
|     m_cancel_button->set_fixed_size(100, 22); | ||||
|     m_cancel_button->on_click = [this](auto) { | ||||
|         bool success = m_download->stop(); | ||||
|         ASSERT(success); | ||||
|  | @ -111,8 +105,7 @@ DownloadWidget::DownloadWidget(const URL& url) | |||
| 
 | ||||
|     m_close_button = button_container.add<GUI::Button>("OK"); | ||||
|     m_close_button->set_enabled(false); | ||||
|     m_close_button->set_size_policy(GUI::SizePolicy::Fixed, GUI::SizePolicy::Fixed); | ||||
|     m_close_button->set_preferred_size(100, 22); | ||||
|     m_close_button->set_fixed_size(100, 22); | ||||
|     m_close_button->on_click = [this](auto) { | ||||
|         window()->close(); | ||||
|     }; | ||||
|  |  | |||
|  | @ -112,8 +112,7 @@ Tab::Tab(Type type) | |||
|     toolbar.add_action(*m_reload_action); | ||||
| 
 | ||||
|     m_location_box = toolbar.add<GUI::TextBox>(); | ||||
|     m_location_box->set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|     m_location_box->set_preferred_size(0, 22); | ||||
|     m_location_box->set_fixed_height(22); | ||||
|     m_location_box->set_placeholder("Address"); | ||||
| 
 | ||||
|     m_location_box->on_return_pressed = [this] { | ||||
|  | @ -130,8 +129,7 @@ Tab::Tab(Type type) | |||
|     m_bookmark_button = toolbar.add<GUI::Button>(); | ||||
|     m_bookmark_button->set_button_style(Gfx::ButtonStyle::CoolBar); | ||||
|     m_bookmark_button->set_icon(Gfx::Bitmap::load_from_file("/res/icons/16x16/bookmark-contour.png")); | ||||
|     m_bookmark_button->set_size_policy(GUI::SizePolicy::Fixed, GUI::SizePolicy::Fixed); | ||||
|     m_bookmark_button->set_preferred_size(22, 22); | ||||
|     m_bookmark_button->set_fixed_size(22, 22); | ||||
| 
 | ||||
|     m_bookmark_button->on_click = [this](auto) { | ||||
|         auto url = this->url().to_string(); | ||||
|  |  | |||
|  | @ -59,55 +59,46 @@ AddEventDialog::AddEventDialog(Core::DateTime date_time, Window* parent_window) | |||
| 
 | ||||
|     auto& top_container = widget.add<GUI::Widget>(); | ||||
|     top_container.set_layout<GUI::VerticalBoxLayout>(); | ||||
|     top_container.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|     top_container.set_preferred_size(0, 45); | ||||
|     top_container.set_fixed_height(45); | ||||
|     top_container.layout()->set_margins({ 4, 4, 4, 4 }); | ||||
| 
 | ||||
|     auto& add_label = top_container.add<GUI::Label>("Add title & date:"); | ||||
|     add_label.set_text_alignment(Gfx::TextAlignment::CenterLeft); | ||||
|     add_label.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|     add_label.set_preferred_size(0, 14); | ||||
|     add_label.set_fixed_height(14); | ||||
|     add_label.set_font(Gfx::Font::default_bold_font()); | ||||
| 
 | ||||
|     auto& event_title_textbox = top_container.add<GUI::TextBox>(); | ||||
|     event_title_textbox.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|     event_title_textbox.set_preferred_size(0, 20); | ||||
|     event_title_textbox.set_fixed_height(20); | ||||
| 
 | ||||
|     auto& middle_container = widget.add<GUI::Widget>(); | ||||
|     middle_container.set_layout<GUI::HorizontalBoxLayout>(); | ||||
|     middle_container.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|     middle_container.set_preferred_size(0, 25); | ||||
|     middle_container.set_fixed_height(25); | ||||
|     middle_container.layout()->set_margins({ 4, 4, 4, 4 }); | ||||
| 
 | ||||
|     auto& starting_month_combo = middle_container.add<GUI::ComboBox>(); | ||||
|     starting_month_combo.set_only_allow_values_from_model(true); | ||||
|     starting_month_combo.set_size_policy(GUI::SizePolicy::Fixed, GUI::SizePolicy::Fixed); | ||||
|     starting_month_combo.set_preferred_size(50, 20); | ||||
|     starting_month_combo.set_fixed_size(50, 20); | ||||
|     starting_month_combo.set_model(MonthListModel::create()); | ||||
|     starting_month_combo.set_selected_index(m_date_time.month() - 1); | ||||
| 
 | ||||
|     auto& starting_day_combo = middle_container.add<GUI::SpinBox>(); | ||||
|     starting_day_combo.set_size_policy(GUI::SizePolicy::Fixed, GUI::SizePolicy::Fixed); | ||||
|     starting_day_combo.set_preferred_size(40, 20); | ||||
|     starting_day_combo.set_fixed_size(40, 20); | ||||
|     starting_day_combo.set_value(m_date_time.day()); | ||||
|     starting_day_combo.set_min(1); | ||||
| 
 | ||||
|     auto& starting_year_combo = middle_container.add<GUI::SpinBox>(); | ||||
|     starting_year_combo.set_size_policy(GUI::SizePolicy::Fixed, GUI::SizePolicy::Fixed); | ||||
|     starting_year_combo.set_preferred_size(55, 20); | ||||
|     starting_year_combo.set_fixed_size(55, 20); | ||||
|     starting_year_combo.set_range(0, 9999); | ||||
|     starting_year_combo.set_value(m_date_time.year()); | ||||
| 
 | ||||
|     widget.layout()->add_spacer(); | ||||
| 
 | ||||
|     auto& button_container = widget.add<GUI::Widget>(); | ||||
|     button_container.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|     button_container.set_preferred_size(0, 20); | ||||
|     button_container.set_fixed_height(20); | ||||
|     button_container.set_layout<GUI::HorizontalBoxLayout>(); | ||||
|     button_container.layout()->add_spacer(); | ||||
|     auto& ok_button = button_container.add<GUI::Button>("OK"); | ||||
|     ok_button.set_size_policy(GUI::SizePolicy::Fixed, GUI::SizePolicy::Fixed); | ||||
|     ok_button.set_preferred_size(80, 20); | ||||
|     ok_button.set_fixed_size(80, 20); | ||||
|     ok_button.on_click = [this](auto) { | ||||
|         dbgln("TODO: Add event icon on specific tile"); | ||||
|         done(Dialog::ExecOK); | ||||
|  |  | |||
|  | @ -134,8 +134,7 @@ int main(int argc, char** argv) | |||
| 
 | ||||
|     toolbar.add_action(prev_date_action); | ||||
|     selected_calendar_button = toolbar.add<GUI::Button>(calendar_widget.selected_calendar_text()); | ||||
|     selected_calendar_button->set_size_policy(GUI::SizePolicy::Fixed, GUI::SizePolicy::Fill); | ||||
|     selected_calendar_button->set_preferred_size(70, 0); | ||||
|     selected_calendar_button->set_fixed_width(70); | ||||
|     selected_calendar_button->set_button_style(Gfx::ButtonStyle::CoolBar); | ||||
|     selected_calendar_button->set_font(Gfx::Font::default_bold_fixed_width_font()); | ||||
|     selected_calendar_button->on_click = [&](auto) { | ||||
|  |  | |||
|  | @ -6,8 +6,7 @@ | |||
|     } | ||||
| 
 | ||||
|     @GUI::Widget { | ||||
|         vertical_size_policy: "Fixed" | ||||
|         preferred_height: 44 | ||||
|         fixed_height: 44 | ||||
| 
 | ||||
|         layout: @GUI::HorizontalBoxLayout { | ||||
|             spacing: 10 | ||||
|  | @ -24,8 +23,7 @@ | |||
|     } | ||||
| 
 | ||||
|     @GUI::Widget { | ||||
|         vertical_size_policy: "Fixed" | ||||
|         preferred_height: 18 | ||||
|         fixed_height: 18 | ||||
| 
 | ||||
|         layout: @GUI::HorizontalBoxLayout { | ||||
|         } | ||||
|  | @ -33,8 +31,7 @@ | |||
|         @GUI::Label { | ||||
|             text: "Executable path:" | ||||
|             text_alignment: "CenterLeft" | ||||
|             horizontal_size_policy: "Fixed" | ||||
|             preferred_width: 90 | ||||
|             fixed_width: 90 | ||||
|         } | ||||
| 
 | ||||
|         @GUI::LinkLabel { | ||||
|  | @ -44,8 +41,7 @@ | |||
|     } | ||||
| 
 | ||||
|     @GUI::Widget { | ||||
|         vertical_size_policy: "Fixed" | ||||
|         preferred_height: 18 | ||||
|         fixed_height: 18 | ||||
| 
 | ||||
|         layout: @GUI::HorizontalBoxLayout { | ||||
|         } | ||||
|  | @ -53,8 +49,7 @@ | |||
|         @GUI::Label { | ||||
|             text: "Coredump path:" | ||||
|             text_alignment: "CenterLeft" | ||||
|             horizontal_size_policy: "Fixed" | ||||
|             preferred_width: 90 | ||||
|             fixed_width: 90 | ||||
|         } | ||||
| 
 | ||||
|         @GUI::LinkLabel { | ||||
|  | @ -64,8 +59,7 @@ | |||
|     } | ||||
| 
 | ||||
|     @GUI::Widget { | ||||
|         vertical_size_policy: "Fixed" | ||||
|         preferred_height: 18 | ||||
|         fixed_height: 18 | ||||
| 
 | ||||
|         layout: @GUI::HorizontalBoxLayout { | ||||
|         } | ||||
|  | @ -82,27 +76,20 @@ | |||
|     } | ||||
| 
 | ||||
|     @GUI::Widget { | ||||
|         vertical_size_policy: "Fixed" | ||||
|         preferred_height: 32 | ||||
|         fixed_height: 32 | ||||
| 
 | ||||
|         layout: @GUI::HorizontalBoxLayout { | ||||
|         } | ||||
| 
 | ||||
|         // HACK: We need something like Layout::add_spacer() in GML! :^) | ||||
|         @GUI::Widget { | ||||
|             horizontal_size_policy: "Fixed" | ||||
|             vertical_size_policy: "Fill" | ||||
|             preferred_width: 377 | ||||
|             preferred_height: 0 | ||||
|         } | ||||
| 
 | ||||
|         @GUI::Button { | ||||
|             name: "close_button" | ||||
|             text: "Close" | ||||
|             horizontal_size_policy: "Fixed" | ||||
|             vertical_size_policy: "Fixed" | ||||
|             preferred_width: 70 | ||||
|             preferred_height: 22 | ||||
|             fixed_width: 70 | ||||
|             fixed_height: 22 | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  |  | |||
|  | @ -101,26 +101,22 @@ void DisplaySettingsWidget::create_frame() | |||
|     /// Wallpaper Preview /////////////////////////////////////////////////////////////////////////
 | ||||
| 
 | ||||
|     m_monitor_widget = settings_content.add<MonitorWidget>(); | ||||
|     m_monitor_widget->set_size_policy(GUI::SizePolicy::Fixed, GUI::SizePolicy::Fixed); | ||||
|     m_monitor_widget->set_preferred_size(338, 248); | ||||
|     m_monitor_widget->set_fixed_size(338, 248); | ||||
| 
 | ||||
|     /// Wallpaper Row /////////////////////////////////////////////////////////////////////////////
 | ||||
| 
 | ||||
|     auto& wallpaper_selection_container = settings_content.add<GUI::Widget>(); | ||||
|     wallpaper_selection_container.set_layout<GUI::HorizontalBoxLayout>(); | ||||
|     wallpaper_selection_container.layout()->set_margins({ 0, 4, 0, 0 }); | ||||
|     wallpaper_selection_container.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|     wallpaper_selection_container.set_preferred_size(0, 22); | ||||
|     wallpaper_selection_container.set_fixed_height(22); | ||||
| 
 | ||||
|     auto& wallpaper_label = wallpaper_selection_container.add<GUI::Label>(); | ||||
|     wallpaper_label.set_text_alignment(Gfx::TextAlignment::CenterLeft); | ||||
|     wallpaper_label.set_size_policy(GUI::SizePolicy::Fixed, GUI::SizePolicy::Fill); | ||||
|     wallpaper_label.set_preferred_size({ 70, 0 }); | ||||
|     wallpaper_label.set_fixed_width(70); | ||||
|     wallpaper_label.set_text("Wallpaper:"); | ||||
| 
 | ||||
|     m_wallpaper_combo = wallpaper_selection_container.add<GUI::ComboBox>(); | ||||
|     m_wallpaper_combo->set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|     m_wallpaper_combo->set_preferred_size(0, 22); | ||||
|     m_wallpaper_combo->set_fixed_height(22); | ||||
|     m_wallpaper_combo->set_only_allow_values_from_model(true); | ||||
|     m_wallpaper_combo->set_model(*GUI::ItemListModel<AK::String>::create(m_wallpapers)); | ||||
|     m_wallpaper_combo->on_change = [this](auto& text, const GUI::ModelIndex& index) { | ||||
|  | @ -149,8 +145,7 @@ void DisplaySettingsWidget::create_frame() | |||
|     button.set_tooltip("Select Wallpaper from file system."); | ||||
|     button.set_icon(Gfx::Bitmap::load_from_file("/res/icons/16x16/open.png")); | ||||
|     button.set_button_style(Gfx::ButtonStyle::CoolBar); | ||||
|     button.set_size_policy(GUI::SizePolicy::Fixed, GUI::SizePolicy::Fixed); | ||||
|     button.set_preferred_size(22, 22); | ||||
|     button.set_fixed_size(22, 22); | ||||
|     button.on_click = [this](auto) { | ||||
|         Optional<String> open_path = GUI::FilePicker::get_open_filepath(root_widget()->window(), "Select wallpaper from file system."); | ||||
| 
 | ||||
|  | @ -167,18 +162,15 @@ void DisplaySettingsWidget::create_frame() | |||
|     auto& mode_selection_container = settings_content.add<GUI::Widget>(); | ||||
|     mode_selection_container.set_layout<GUI::HorizontalBoxLayout>(); | ||||
|     mode_selection_container.layout()->set_margins({ 0, 4, 0, 0 }); | ||||
|     mode_selection_container.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|     mode_selection_container.set_preferred_size(0, 22); | ||||
|     mode_selection_container.set_fixed_height(22); | ||||
| 
 | ||||
|     auto& mode_label = mode_selection_container.add<GUI::Label>(); | ||||
|     mode_label.set_text_alignment(Gfx::TextAlignment::CenterLeft); | ||||
|     mode_label.set_size_policy(GUI::SizePolicy::Fixed, GUI::SizePolicy::Fill); | ||||
|     mode_label.set_preferred_size({ 70, 0 }); | ||||
|     mode_label.set_fixed_width(70); | ||||
|     mode_label.set_text("Mode:"); | ||||
| 
 | ||||
|     m_mode_combo = mode_selection_container.add<GUI::ComboBox>(); | ||||
|     m_mode_combo->set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|     m_mode_combo->set_preferred_size(0, 22); | ||||
|     m_mode_combo->set_fixed_height(22); | ||||
|     m_mode_combo->set_only_allow_values_from_model(true); | ||||
|     m_mode_combo->set_model(*GUI::ItemListModel<AK::String>::create(m_modes)); | ||||
|     m_mode_combo->on_change = [this](auto&, const GUI::ModelIndex& index) { | ||||
|  | @ -190,18 +182,15 @@ void DisplaySettingsWidget::create_frame() | |||
| 
 | ||||
|     auto& resolution_selection_container = settings_content.add<GUI::Widget>(); | ||||
|     resolution_selection_container.set_layout<GUI::HorizontalBoxLayout>(); | ||||
|     resolution_selection_container.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|     resolution_selection_container.set_preferred_size(0, 22); | ||||
|     resolution_selection_container.set_fixed_height(22); | ||||
| 
 | ||||
|     auto& m_resolution_label = resolution_selection_container.add<GUI::Label>(); | ||||
|     m_resolution_label.set_text_alignment(Gfx::TextAlignment::CenterLeft); | ||||
|     m_resolution_label.set_size_policy(GUI::SizePolicy::Fixed, GUI::SizePolicy::Fill); | ||||
|     m_resolution_label.set_preferred_size({ 70, 0 }); | ||||
|     m_resolution_label.set_fixed_width(70); | ||||
|     m_resolution_label.set_text("Resolution:"); | ||||
| 
 | ||||
|     m_resolution_combo = resolution_selection_container.add<GUI::ComboBox>(); | ||||
|     m_resolution_combo->set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|     m_resolution_combo->set_preferred_size(0, 22); | ||||
|     m_resolution_combo->set_fixed_height(22); | ||||
|     m_resolution_combo->set_only_allow_values_from_model(true); | ||||
|     m_resolution_combo->set_model(*GUI::ItemListModel<Gfx::IntSize>::create(m_resolutions)); | ||||
|     m_resolution_combo->on_change = [this](auto&, const GUI::ModelIndex& index) { | ||||
|  | @ -213,19 +202,16 @@ void DisplaySettingsWidget::create_frame() | |||
| 
 | ||||
|     auto& color_selection_container = settings_content.add<GUI::Widget>(); | ||||
|     color_selection_container.set_layout<GUI::HorizontalBoxLayout>(); | ||||
|     color_selection_container.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|     color_selection_container.set_preferred_size(0, 22); | ||||
|     color_selection_container.set_fixed_height(22); | ||||
| 
 | ||||
|     auto& color_label = color_selection_container.add<GUI::Label>(); | ||||
|     color_label.set_text_alignment(Gfx::TextAlignment::CenterLeft); | ||||
|     color_label.set_size_policy(GUI::SizePolicy::Fixed, GUI::SizePolicy::Fill); | ||||
|     color_label.set_preferred_size({ 70, 0 }); | ||||
|     color_label.set_fixed_width(70); | ||||
|     color_label.set_text("Color:"); | ||||
| 
 | ||||
|     m_color_input = color_selection_container.add<GUI::ColorInput>(); | ||||
|     m_color_input->set_color_has_alpha_channel(false); | ||||
|     m_color_input->set_size_policy(GUI::SizePolicy::Fixed, GUI::SizePolicy::Fill); | ||||
|     m_color_input->set_preferred_size(90, 0); | ||||
|     m_color_input->set_fixed_width(90); | ||||
|     m_color_input->set_color_picker_title("Select color for desktop"); | ||||
|     m_color_input->on_change = [this] { | ||||
|         m_monitor_widget->set_background_color(m_color_input->color()); | ||||
|  | @ -237,14 +223,11 @@ void DisplaySettingsWidget::create_frame() | |||
|     auto& bottom_widget = settings_content.add<GUI::Widget>(); | ||||
|     bottom_widget.set_layout<GUI::HorizontalBoxLayout>(); | ||||
|     bottom_widget.layout()->add_spacer(); | ||||
|     //bottom_widget.layout()->set_margins({ 4, 10, 4, 10 });
 | ||||
|     bottom_widget.set_size_policy(Orientation::Vertical, GUI::SizePolicy::Fixed); | ||||
|     bottom_widget.set_preferred_size(1, 22); | ||||
|     bottom_widget.set_fixed_height(22); | ||||
| 
 | ||||
|     auto& ok_button = bottom_widget.add<GUI::Button>(); | ||||
|     ok_button.set_text("OK"); | ||||
|     ok_button.set_size_policy(Orientation::Horizontal, GUI::SizePolicy::Fixed); | ||||
|     ok_button.set_preferred_size(60, 22); | ||||
|     ok_button.set_fixed_size(60, 22); | ||||
|     ok_button.on_click = [this](auto) { | ||||
|         send_settings_to_window_server(); | ||||
|         GUI::Application::the()->quit(); | ||||
|  | @ -252,16 +235,14 @@ void DisplaySettingsWidget::create_frame() | |||
| 
 | ||||
|     auto& cancel_button = bottom_widget.add<GUI::Button>(); | ||||
|     cancel_button.set_text("Cancel"); | ||||
|     cancel_button.set_size_policy(Orientation::Horizontal, GUI::SizePolicy::Fixed); | ||||
|     cancel_button.set_preferred_size(60, 22); | ||||
|     cancel_button.set_fixed_size(60, 22); | ||||
|     cancel_button.on_click = [](auto) { | ||||
|         GUI::Application::the()->quit(); | ||||
|     }; | ||||
| 
 | ||||
|     auto& apply_button = bottom_widget.add<GUI::Button>(); | ||||
|     apply_button.set_text("Apply"); | ||||
|     apply_button.set_size_policy(Orientation::Horizontal, GUI::SizePolicy::Fixed); | ||||
|     apply_button.set_preferred_size(60, 22); | ||||
|     apply_button.set_fixed_size(60, 22); | ||||
|     apply_button.on_click = [this](auto) { | ||||
|         send_settings_to_window_server(); | ||||
|     }; | ||||
|  |  | |||
|  | @ -19,8 +19,7 @@ | |||
| 
 | ||||
|             @GUI::TextBox { | ||||
|                 name: "location_textbox" | ||||
|                 vertical_size_policy: "Fixed" | ||||
|                 preferred_height: 22 | ||||
|                 fixed_height: 22 | ||||
|             } | ||||
|         } | ||||
|         @GUI::ToolBar { | ||||
|  | @ -37,8 +36,7 @@ | |||
| 
 | ||||
|         @GUI::TreeView { | ||||
|             name: "tree_view" | ||||
|             horizontal_size_policy: "Fixed" | ||||
|             preferred_width: 175 | ||||
|             fixed_width: 175 | ||||
|         } | ||||
| 
 | ||||
|     } | ||||
|  |  | |||
|  | @ -63,25 +63,20 @@ PropertiesDialog::PropertiesDialog(const String& path, bool disable_rename, Wind | |||
|     general_tab.layout()->set_margins({ 12, 8, 12, 8 }); | ||||
|     general_tab.layout()->set_spacing(10); | ||||
| 
 | ||||
|     general_tab.layout()->add_spacer(); | ||||
| 
 | ||||
|     auto& file_container = general_tab.add<GUI::Widget>(); | ||||
|     file_container.set_layout<GUI::HorizontalBoxLayout>(); | ||||
|     file_container.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|     file_container.layout()->set_spacing(20); | ||||
|     file_container.set_preferred_size(0, 34); | ||||
|     file_container.set_fixed_height(34); | ||||
| 
 | ||||
|     m_icon = file_container.add<GUI::ImageWidget>(); | ||||
|     m_icon->set_size_policy(GUI::SizePolicy::Fixed, GUI::SizePolicy::Fixed); | ||||
|     m_icon->set_preferred_size(32, 32); | ||||
|     m_icon->set_fixed_size(32, 32); | ||||
| 
 | ||||
|     m_name = lexical_path.basename(); | ||||
|     m_path = lexical_path.string(); | ||||
|     m_parent_path = lexical_path.dirname(); | ||||
| 
 | ||||
|     m_name_box = file_container.add<GUI::TextBox>(); | ||||
|     m_name_box->set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|     m_name_box->set_preferred_size({ 0, 22 }); | ||||
|     m_name_box->set_fixed_height(22); | ||||
|     m_name_box->set_text(m_name); | ||||
|     m_name_box->set_mode(disable_rename ? GUI::TextBox::Mode::DisplayOnly : GUI::TextBox::Mode::Editable); | ||||
|     m_name_box->on_change = [&]() { | ||||
|  | @ -151,8 +146,7 @@ PropertiesDialog::PropertiesDialog(const String& path, bool disable_rename, Wind | |||
| 
 | ||||
|     auto& button_widget = main_widget.add<GUI::Widget>(); | ||||
|     button_widget.set_layout<GUI::HorizontalBoxLayout>(); | ||||
|     button_widget.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|     button_widget.set_preferred_size(0, 24); | ||||
|     button_widget.set_fixed_height(24); | ||||
|     button_widget.layout()->set_spacing(5); | ||||
| 
 | ||||
|     button_widget.layout()->add_spacer(); | ||||
|  | @ -237,8 +231,7 @@ void PropertiesDialog::make_permission_checkboxes(GUI::Widget& parent, Permissio | |||
| { | ||||
|     auto& widget = parent.add<GUI::Widget>(); | ||||
|     widget.set_layout<GUI::HorizontalBoxLayout>(); | ||||
|     widget.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|     widget.set_preferred_size(0, 16); | ||||
|     widget.set_fixed_height(16); | ||||
|     widget.layout()->set_spacing(10); | ||||
| 
 | ||||
|     auto& label = widget.add<GUI::Label>(label_string); | ||||
|  | @ -277,13 +270,11 @@ void PropertiesDialog::make_property_value_pairs(const Vector<PropertyValuePair> | |||
|     for (auto pair : pairs) { | ||||
|         auto& label_container = parent.add<GUI::Widget>(); | ||||
|         label_container.set_layout<GUI::HorizontalBoxLayout>(); | ||||
|         label_container.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|         label_container.set_preferred_size(0, 14); | ||||
|         label_container.set_fixed_height(14); | ||||
|         label_container.layout()->set_spacing(12); | ||||
| 
 | ||||
|         auto& label_property = label_container.add<GUI::Label>(pair.property); | ||||
|         label_property.set_text_alignment(Gfx::TextAlignment::CenterLeft); | ||||
|         label_property.set_size_policy(GUI::SizePolicy::Fixed, GUI::SizePolicy::Fill); | ||||
| 
 | ||||
|         if (!pair.link.has_value()) { | ||||
|             label_container.add<GUI::Label>(pair.value).set_text_alignment(Gfx::TextAlignment::CenterLeft); | ||||
|  | @ -300,24 +291,18 @@ void PropertiesDialog::make_property_value_pairs(const Vector<PropertyValuePair> | |||
|     } | ||||
| 
 | ||||
|     for (auto label : property_labels) | ||||
|         label->set_preferred_size({ max_width, 0 }); | ||||
|         label->set_fixed_width(max_width); | ||||
| } | ||||
| 
 | ||||
| GUI::Button& PropertiesDialog::make_button(String text, GUI::Widget& parent) | ||||
| { | ||||
|     auto& button = parent.add<GUI::Button>(text); | ||||
|     button.set_size_policy(GUI::SizePolicy::Fixed, GUI::SizePolicy::Fixed); | ||||
|     button.set_preferred_size(70, 22); | ||||
|     button.set_fixed_size(70, 22); | ||||
|     return button; | ||||
| } | ||||
| 
 | ||||
| void PropertiesDialog::make_divider(GUI::Widget& parent) | ||||
| { | ||||
|     parent.layout()->add_spacer(); | ||||
| 
 | ||||
|     auto& divider = parent.add<GUI::Frame>(); | ||||
|     divider.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|     divider.set_preferred_size({ 0, 2 }); | ||||
| 
 | ||||
|     parent.layout()->add_spacer(); | ||||
|     divider.set_fixed_height(2); | ||||
| } | ||||
|  |  | |||
|  | @ -54,38 +54,32 @@ FontEditorWidget::FontEditorWidget(const String& path, RefPtr<Gfx::Font>&& edite | |||
|     main_container.set_layout<GUI::HorizontalBoxLayout>(); | ||||
|     main_container.layout()->set_margins({ 4, 4, 4, 4 }); | ||||
|     main_container.set_background_role(Gfx::ColorRole::SyntaxKeyword); | ||||
|     main_container.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fill); | ||||
| 
 | ||||
|     // Top-Left Glyph Editor and info
 | ||||
|     auto& editor_container = main_container.add<GUI::Widget>(); | ||||
|     editor_container.set_layout<GUI::VerticalBoxLayout>(); | ||||
|     editor_container.layout()->set_margins({ 4, 4, 4, 4 }); | ||||
|     editor_container.set_background_role(Gfx::ColorRole::SyntaxKeyword); | ||||
|     editor_container.set_size_policy(GUI::SizePolicy::Fixed, GUI::SizePolicy::Fill); | ||||
| 
 | ||||
|     m_glyph_editor_widget = editor_container.add<GlyphEditorWidget>(*m_edited_font); | ||||
|     m_glyph_editor_widget->set_size_policy(GUI::SizePolicy::Fixed, GUI::SizePolicy::Fixed); | ||||
|     m_glyph_editor_widget->set_preferred_size(m_glyph_editor_widget->preferred_width(), m_glyph_editor_widget->preferred_height()); | ||||
|     m_glyph_editor_widget->set_fixed_size(m_glyph_editor_widget->preferred_width(), m_glyph_editor_widget->preferred_height()); | ||||
| 
 | ||||
|     editor_container.set_preferred_size(m_glyph_editor_widget->preferred_width(), 0); | ||||
|     editor_container.set_fixed_width(m_glyph_editor_widget->preferred_width()); | ||||
| 
 | ||||
|     auto& glyph_width_label = editor_container.add<GUI::Label>(); | ||||
|     glyph_width_label.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|     glyph_width_label.set_preferred_size(0, 22); | ||||
|     glyph_width_label.set_fixed_height(22); | ||||
|     glyph_width_label.set_text_alignment(Gfx::TextAlignment::CenterLeft); | ||||
|     glyph_width_label.set_text("Glyph width:"); | ||||
| 
 | ||||
|     auto& glyph_width_spinbox = editor_container.add<GUI::SpinBox>(); | ||||
|     glyph_width_spinbox.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|     glyph_width_spinbox.set_preferred_size(0, 22); | ||||
|     glyph_width_spinbox.set_fixed_height(22); | ||||
|     glyph_width_spinbox.set_min(0); | ||||
|     glyph_width_spinbox.set_max(32); | ||||
|     glyph_width_spinbox.set_value(0); | ||||
|     glyph_width_spinbox.set_enabled(!m_edited_font->is_fixed_width()); | ||||
| 
 | ||||
|     auto& info_label = editor_container.add<GUI::Label>(); | ||||
|     info_label.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|     info_label.set_preferred_size(0, 22); | ||||
|     info_label.set_fixed_height(22); | ||||
|     info_label.set_text_alignment(Gfx::TextAlignment::CenterLeft); | ||||
|     info_label.set_text("info_label"); | ||||
| 
 | ||||
|  | @ -94,50 +88,41 @@ FontEditorWidget::FontEditorWidget(const String& path, RefPtr<Gfx::Font>&& edite | |||
|     auto& map_and_test_container = main_container.add<GUI::Widget>(); | ||||
|     map_and_test_container.set_layout<GUI::VerticalBoxLayout>(); | ||||
|     map_and_test_container.layout()->set_margins({ 4, 4, 4, 4 }); | ||||
|     map_and_test_container.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fill); | ||||
| 
 | ||||
|     m_glyph_map_widget = map_and_test_container.add<GlyphMapWidget>(*m_edited_font); | ||||
|     m_glyph_map_widget->set_size_policy(GUI::SizePolicy::Fixed, GUI::SizePolicy::Fixed); | ||||
|     m_glyph_map_widget->set_preferred_size(m_glyph_map_widget->preferred_width(), m_glyph_map_widget->preferred_height()); | ||||
|     m_glyph_map_widget->set_fixed_size(m_glyph_map_widget->preferred_width(), m_glyph_map_widget->preferred_height()); | ||||
| 
 | ||||
|     auto& font_mtest_group_box = map_and_test_container.add<GUI::GroupBox>(); | ||||
|     font_mtest_group_box.set_layout<GUI::VerticalBoxLayout>(); | ||||
|     font_mtest_group_box.layout()->set_margins({ 5, 15, 5, 5 }); | ||||
|     font_mtest_group_box.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|     font_mtest_group_box.set_preferred_size(0, 2 * m_edited_font->glyph_height() + 50); | ||||
|     font_mtest_group_box.set_fixed_height(2 * m_edited_font->glyph_height() + 50); | ||||
|     font_mtest_group_box.set_title("Test"); | ||||
| 
 | ||||
|     auto& demo_label_1 = font_mtest_group_box.add<GUI::Label>(); | ||||
|     demo_label_1.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fill); | ||||
|     demo_label_1.set_font(m_edited_font); | ||||
|     demo_label_1.set_text("quick fox jumps nightly above wizard."); | ||||
| 
 | ||||
|     auto& demo_label_2 = font_mtest_group_box.add<GUI::Label>(); | ||||
|     demo_label_2.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fill); | ||||
|     demo_label_2.set_font(m_edited_font); | ||||
|     demo_label_2.set_text("QUICK FOX JUMPS NIGHTLY ABOVE WIZARD!"); | ||||
| 
 | ||||
|     auto& font_metadata_group_box = map_and_test_container.add<GUI::GroupBox>(); | ||||
|     font_metadata_group_box.set_layout<GUI::VerticalBoxLayout>(); | ||||
|     font_metadata_group_box.layout()->set_margins({ 5, 15, 5, 5 }); | ||||
|     font_metadata_group_box.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|     font_metadata_group_box.set_preferred_size(0, 275); | ||||
|     font_metadata_group_box.set_fixed_height(275); | ||||
|     font_metadata_group_box.set_title("Font metadata"); | ||||
| 
 | ||||
|     //// Name Row
 | ||||
|     auto& namecontainer = font_metadata_group_box.add<GUI::Widget>(); | ||||
|     namecontainer.set_layout<GUI::HorizontalBoxLayout>(); | ||||
|     namecontainer.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|     namecontainer.set_preferred_size(0, 22); | ||||
|     namecontainer.set_fixed_height(22); | ||||
| 
 | ||||
|     auto& name_label = namecontainer.add<GUI::Label>(); | ||||
|     name_label.set_size_policy(GUI::SizePolicy::Fixed, GUI::SizePolicy::Fill); | ||||
|     name_label.set_preferred_size(100, 0); | ||||
|     name_label.set_fixed_width(100); | ||||
|     name_label.set_text_alignment(Gfx::TextAlignment::CenterLeft); | ||||
|     name_label.set_text("Name:"); | ||||
| 
 | ||||
|     auto& name_textbox = namecontainer.add<GUI::TextBox>(); | ||||
|     name_textbox.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fill); | ||||
|     name_textbox.set_text(m_edited_font->name()); | ||||
|     name_textbox.on_change = [&] { | ||||
|         m_edited_font->set_name(name_textbox.text()); | ||||
|  | @ -146,17 +131,14 @@ FontEditorWidget::FontEditorWidget(const String& path, RefPtr<Gfx::Font>&& edite | |||
|     //// Family Row
 | ||||
|     auto& family_container = font_metadata_group_box.add<GUI::Widget>(); | ||||
|     family_container.set_layout<GUI::HorizontalBoxLayout>(); | ||||
|     family_container.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|     family_container.set_preferred_size(0, 22); | ||||
|     family_container.set_fixed_height(22); | ||||
| 
 | ||||
|     auto& family_label = family_container.add<GUI::Label>(); | ||||
|     family_label.set_size_policy(GUI::SizePolicy::Fixed, GUI::SizePolicy::Fill); | ||||
|     family_label.set_preferred_size(100, 0); | ||||
|     family_label.set_fixed_width(100); | ||||
|     family_label.set_text_alignment(Gfx::TextAlignment::CenterLeft); | ||||
|     family_label.set_text("Family:"); | ||||
| 
 | ||||
|     auto& family_textbox = family_container.add<GUI::TextBox>(); | ||||
|     family_textbox.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fill); | ||||
|     family_textbox.set_text(m_edited_font->family()); | ||||
|     family_textbox.on_change = [&] { | ||||
|         m_edited_font->set_family(family_textbox.text()); | ||||
|  | @ -165,17 +147,14 @@ FontEditorWidget::FontEditorWidget(const String& path, RefPtr<Gfx::Font>&& edite | |||
|     //// Presentation size Row
 | ||||
|     auto& presentation_size_container = font_metadata_group_box.add<GUI::Widget>(); | ||||
|     presentation_size_container.set_layout<GUI::HorizontalBoxLayout>(); | ||||
|     presentation_size_container.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|     presentation_size_container.set_preferred_size(0, 22); | ||||
|     presentation_size_container.set_fixed_height(22); | ||||
| 
 | ||||
|     auto& presentation_size_label = presentation_size_container.add<GUI::Label>(); | ||||
|     presentation_size_label.set_size_policy(GUI::SizePolicy::Fixed, GUI::SizePolicy::Fill); | ||||
|     presentation_size_label.set_preferred_size(100, 0); | ||||
|     presentation_size_label.set_fixed_width(100); | ||||
|     presentation_size_label.set_text_alignment(Gfx::TextAlignment::CenterLeft); | ||||
|     presentation_size_label.set_text("Presentation size:"); | ||||
| 
 | ||||
|     auto& presentation_size_spinbox = presentation_size_container.add<GUI::SpinBox>(); | ||||
|     presentation_size_spinbox.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fill); | ||||
|     presentation_size_spinbox.set_min(0); | ||||
|     presentation_size_spinbox.set_max(255); | ||||
|     presentation_size_spinbox.set_value(m_edited_font->presentation_size()); | ||||
|  | @ -183,17 +162,14 @@ FontEditorWidget::FontEditorWidget(const String& path, RefPtr<Gfx::Font>&& edite | |||
|     //// Weight Row
 | ||||
|     auto& weight_container = font_metadata_group_box.add<GUI::Widget>(); | ||||
|     weight_container.set_layout<GUI::HorizontalBoxLayout>(); | ||||
|     weight_container.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|     weight_container.set_preferred_size(0, 22); | ||||
|     weight_container.set_fixed_height(22); | ||||
| 
 | ||||
|     auto& weight_label = weight_container.add<GUI::Label>(); | ||||
|     weight_label.set_size_policy(GUI::SizePolicy::Fixed, GUI::SizePolicy::Fill); | ||||
|     weight_label.set_preferred_size(100, 0); | ||||
|     weight_label.set_fixed_width(100); | ||||
|     weight_label.set_text_alignment(Gfx::TextAlignment::CenterLeft); | ||||
|     weight_label.set_text("Weight:"); | ||||
| 
 | ||||
|     auto& weight_spinbox = weight_container.add<GUI::SpinBox>(); | ||||
|     weight_spinbox.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fill); | ||||
|     weight_spinbox.set_min(0); | ||||
|     weight_spinbox.set_max(65535); | ||||
|     weight_spinbox.set_value(m_edited_font->weight()); | ||||
|  | @ -201,17 +177,14 @@ FontEditorWidget::FontEditorWidget(const String& path, RefPtr<Gfx::Font>&& edite | |||
|     //// Glyph spacing Row
 | ||||
|     auto& glyph_spacing_container = font_metadata_group_box.add<GUI::Widget>(); | ||||
|     glyph_spacing_container.set_layout<GUI::HorizontalBoxLayout>(); | ||||
|     glyph_spacing_container.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|     glyph_spacing_container.set_preferred_size(0, 22); | ||||
|     glyph_spacing_container.set_fixed_height(22); | ||||
| 
 | ||||
|     auto& glyph_spacing = glyph_spacing_container.add<GUI::Label>(); | ||||
|     glyph_spacing.set_size_policy(GUI::SizePolicy::Fixed, GUI::SizePolicy::Fill); | ||||
|     glyph_spacing.set_preferred_size(100, 0); | ||||
|     glyph_spacing.set_fixed_width(100); | ||||
|     glyph_spacing.set_text_alignment(Gfx::TextAlignment::CenterLeft); | ||||
|     glyph_spacing.set_text("Glyph spacing:"); | ||||
| 
 | ||||
|     auto& spacing_spinbox = glyph_spacing_container.add<GUI::SpinBox>(); | ||||
|     spacing_spinbox.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fill); | ||||
|     spacing_spinbox.set_min(0); | ||||
|     spacing_spinbox.set_max(255); | ||||
|     spacing_spinbox.set_value(m_edited_font->glyph_spacing()); | ||||
|  | @ -219,17 +192,14 @@ FontEditorWidget::FontEditorWidget(const String& path, RefPtr<Gfx::Font>&& edite | |||
|     //// Glyph Height Row
 | ||||
|     auto& glyph_height_container = font_metadata_group_box.add<GUI::Widget>(); | ||||
|     glyph_height_container.set_layout<GUI::HorizontalBoxLayout>(); | ||||
|     glyph_height_container.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|     glyph_height_container.set_preferred_size(0, 22); | ||||
|     glyph_height_container.set_fixed_height(22); | ||||
| 
 | ||||
|     auto& glyph_height = glyph_height_container.add<GUI::Label>(); | ||||
|     glyph_height.set_size_policy(GUI::SizePolicy::Fixed, GUI::SizePolicy::Fill); | ||||
|     glyph_height.set_preferred_size(100, 0); | ||||
|     glyph_height.set_fixed_width(100); | ||||
|     glyph_height.set_text_alignment(Gfx::TextAlignment::CenterLeft); | ||||
|     glyph_height.set_text("Glyph height:"); | ||||
| 
 | ||||
|     auto& glyph_height_spinbox = glyph_height_container.add<GUI::SpinBox>(); | ||||
|     glyph_height_spinbox.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fill); | ||||
|     glyph_height_spinbox.set_min(0); | ||||
|     glyph_height_spinbox.set_max(255); | ||||
|     glyph_height_spinbox.set_value(m_edited_font->glyph_height()); | ||||
|  | @ -238,17 +208,14 @@ FontEditorWidget::FontEditorWidget(const String& path, RefPtr<Gfx::Font>&& edite | |||
|     //// Glyph width Row
 | ||||
|     auto& glyph_weight_container = font_metadata_group_box.add<GUI::Widget>(); | ||||
|     glyph_weight_container.set_layout<GUI::HorizontalBoxLayout>(); | ||||
|     glyph_weight_container.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|     glyph_weight_container.set_preferred_size(0, 22); | ||||
|     glyph_weight_container.set_fixed_height(22); | ||||
| 
 | ||||
|     auto& glyph_header_width_label = glyph_weight_container.add<GUI::Label>(); | ||||
|     glyph_header_width_label.set_size_policy(GUI::SizePolicy::Fixed, GUI::SizePolicy::Fill); | ||||
|     glyph_header_width_label.set_preferred_size(100, 0); | ||||
|     glyph_header_width_label.set_fixed_width(100); | ||||
|     glyph_header_width_label.set_text_alignment(Gfx::TextAlignment::CenterLeft); | ||||
|     glyph_header_width_label.set_text("Glyph width:"); | ||||
| 
 | ||||
|     auto& glyph_header_width_spinbox = glyph_weight_container.add<GUI::SpinBox>(); | ||||
|     glyph_header_width_spinbox.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fill); | ||||
|     glyph_header_width_spinbox.set_min(0); | ||||
|     glyph_header_width_spinbox.set_max(255); | ||||
|     glyph_header_width_spinbox.set_value(m_edited_font->glyph_fixed_width()); | ||||
|  | @ -257,18 +224,14 @@ FontEditorWidget::FontEditorWidget(const String& path, RefPtr<Gfx::Font>&& edite | |||
|     //// Baseline Row
 | ||||
|     auto& baseline_container = font_metadata_group_box.add<GUI::Widget>(); | ||||
|     baseline_container.set_layout<GUI::HorizontalBoxLayout>(); | ||||
|     baseline_container.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|     baseline_container.set_preferred_size(0, 22); | ||||
|     baseline_container.set_fixed_height(22); | ||||
| 
 | ||||
|     auto& baseline_label = baseline_container.add<GUI::Label>(); | ||||
|     baseline_label.set_size_policy(GUI::SizePolicy::Fixed, GUI::SizePolicy::Fill); | ||||
|     baseline_label.set_preferred_size(100, 0); | ||||
|     baseline_label.set_fixed_width(100); | ||||
|     baseline_label.set_text_alignment(Gfx::TextAlignment::CenterLeft); | ||||
|     baseline_label.set_text("Baseline:"); | ||||
| 
 | ||||
|     auto& baseline_spinbox = baseline_container.add<GUI::SpinBox>(); | ||||
|     baseline_spinbox.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fill); | ||||
|     baseline_spinbox.set_preferred_size(100, 0); | ||||
|     baseline_spinbox.set_min(0); | ||||
|     baseline_spinbox.set_max(m_edited_font->glyph_height() - 1); | ||||
|     baseline_spinbox.set_value(m_edited_font->baseline()); | ||||
|  | @ -276,26 +239,21 @@ FontEditorWidget::FontEditorWidget(const String& path, RefPtr<Gfx::Font>&& edite | |||
|     //// Mean line Row
 | ||||
|     auto& mean_line_container = font_metadata_group_box.add<GUI::Widget>(); | ||||
|     mean_line_container.set_layout<GUI::HorizontalBoxLayout>(); | ||||
|     mean_line_container.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|     mean_line_container.set_preferred_size(0, 22); | ||||
|     mean_line_container.set_fixed_height(22); | ||||
| 
 | ||||
|     auto& mean_line_label = mean_line_container.add<GUI::Label>(); | ||||
|     mean_line_label.set_size_policy(GUI::SizePolicy::Fixed, GUI::SizePolicy::Fill); | ||||
|     mean_line_label.set_preferred_size(100, 0); | ||||
|     mean_line_label.set_fixed_width(100); | ||||
|     mean_line_label.set_text_alignment(Gfx::TextAlignment::CenterLeft); | ||||
|     mean_line_label.set_text("Mean Line:"); | ||||
| 
 | ||||
|     auto& mean_line_spinbox = mean_line_container.add<GUI::SpinBox>(); | ||||
|     mean_line_spinbox.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fill); | ||||
|     mean_line_spinbox.set_preferred_size(100, 0); | ||||
|     mean_line_spinbox.set_min(0); | ||||
|     mean_line_spinbox.set_max(m_edited_font->glyph_height() - 1); | ||||
|     mean_line_spinbox.set_value(m_edited_font->mean_line()); | ||||
| 
 | ||||
|     //// Fixed checkbox Row
 | ||||
|     auto& fixed_width_checkbox = font_metadata_group_box.add<GUI::CheckBox>(); | ||||
|     fixed_width_checkbox.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|     fixed_width_checkbox.set_preferred_size(0, 22); | ||||
|     fixed_width_checkbox.set_fixed_height(22); | ||||
|     fixed_width_checkbox.set_text("Fixed width"); | ||||
|     fixed_width_checkbox.set_checked(m_edited_font->is_fixed_width()); | ||||
| 
 | ||||
|  | @ -303,20 +261,17 @@ FontEditorWidget::FontEditorWidget(const String& path, RefPtr<Gfx::Font>&& edite | |||
|     auto& bottom_container = add<GUI::Widget>(); | ||||
|     bottom_container.set_layout<GUI::HorizontalBoxLayout>(); | ||||
|     bottom_container.layout()->set_margins({ 8, 0, 8, 8 }); | ||||
|     bottom_container.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|     bottom_container.set_preferred_size(0, 32); | ||||
|     bottom_container.set_fixed_height(32); | ||||
| 
 | ||||
|     bottom_container.layout()->add_spacer(); | ||||
| 
 | ||||
|     auto& save_button = bottom_container.add<GUI::Button>(); | ||||
|     save_button.set_size_policy(GUI::SizePolicy::Fixed, GUI::SizePolicy::Fill); | ||||
|     save_button.set_preferred_size(80, 0); | ||||
|     save_button.set_fixed_size(80, 22); | ||||
|     save_button.set_text("Save"); | ||||
|     save_button.on_click = [this](auto) { save_as(m_path); }; | ||||
| 
 | ||||
|     auto& quit_button = bottom_container.add<GUI::Button>(); | ||||
|     quit_button.set_size_policy(GUI::SizePolicy::Fixed, GUI::SizePolicy::Fill); | ||||
|     quit_button.set_preferred_size(80, 0); | ||||
|     quit_button.set_fixed_size(80, 22); | ||||
|     quit_button.set_text("Quit"); | ||||
|     quit_button.on_click = [](auto) { | ||||
|         exit(0); | ||||
|  |  | |||
|  | @ -124,8 +124,7 @@ int main(int argc, char* argv[]) | |||
|     search_view.layout()->set_margins({ 4, 4, 4, 4 }); | ||||
|     auto& search_box = search_view.add<GUI::TextBox>(); | ||||
|     auto& search_list_view = search_view.add<GUI::ListView>(); | ||||
|     search_box.set_preferred_size(0, 20); | ||||
|     search_box.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|     search_box.set_fixed_height(20); | ||||
|     search_box.set_placeholder("Search..."); | ||||
|     search_box.on_change = [&] { | ||||
|         if (auto model = search_list_view.model()) { | ||||
|  | @ -138,8 +137,7 @@ int main(int argc, char* argv[]) | |||
|     search_list_view.model()->update(); | ||||
| 
 | ||||
|     tree_view.set_model(model); | ||||
|     left_tab_bar.set_size_policy(GUI::SizePolicy::Fixed, GUI::SizePolicy::Fill); | ||||
|     left_tab_bar.set_preferred_size(200, 500); | ||||
|     left_tab_bar.set_fixed_width(200); | ||||
| 
 | ||||
|     auto& page_view = splitter.add<Web::OutOfProcessWebView>(); | ||||
| 
 | ||||
|  |  | |||
|  | @ -333,8 +333,7 @@ void IRCAppWindow::setup_widgets() | |||
|     m_window_list->set_alternating_row_colors(false); | ||||
|     m_window_list->set_model(m_client->client_window_list_model()); | ||||
|     m_window_list->set_activates_on_selection(true); | ||||
|     m_window_list->set_size_policy(GUI::SizePolicy::Fixed, GUI::SizePolicy::Fill); | ||||
|     m_window_list->set_preferred_size(100, 0); | ||||
|     m_window_list->set_fixed_width(100); | ||||
|     m_window_list->on_activation = [this](auto& index) { | ||||
|         set_active_window(m_client->window_at(index.row())); | ||||
|     }; | ||||
|  |  | |||
|  | @ -57,8 +57,7 @@ IRCWindow::IRCWindow(IRCClient& client, void* owner, Type type, const String& na | |||
|     if (m_type == Channel) { | ||||
|         auto& member_view = container.add<GUI::TableView>(); | ||||
|         member_view.set_column_headers_visible(false); | ||||
|         member_view.set_size_policy(GUI::SizePolicy::Fixed, GUI::SizePolicy::Fill); | ||||
|         member_view.set_preferred_size(100, 0); | ||||
|         member_view.set_fixed_width(100); | ||||
|         member_view.set_alternating_row_colors(false); | ||||
|         member_view.set_model(channel().member_model()); | ||||
|         member_view.set_activates_on_selection(true); | ||||
|  | @ -189,8 +188,7 @@ IRCWindow::IRCWindow(IRCClient& client, void* owner, Type type, const String& na | |||
|     } | ||||
| 
 | ||||
|     m_text_box = add<GUI::TextBox>(); | ||||
|     m_text_box->set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|     m_text_box->set_preferred_size(0, 19); | ||||
|     m_text_box->set_fixed_height(19); | ||||
|     m_text_box->on_return_pressed = [this] { | ||||
|         if (m_type == Channel) | ||||
|             m_client->handle_user_input_in_channel(m_name, m_text_box->text()); | ||||
|  |  | |||
|  | @ -49,7 +49,6 @@ void KeyboardMapperWidget::create_frame() | |||
| { | ||||
|     set_fill_with_background_color(true); | ||||
|     set_layout<GUI::VerticalBoxLayout>(); | ||||
|     set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fill); | ||||
|     layout()->set_margins({ 4, 4, 4, 4 }); | ||||
| 
 | ||||
|     auto& main_widget = add<GUI::Widget>(); | ||||
|  | @ -105,14 +104,12 @@ void KeyboardMapperWidget::create_frame() | |||
|     // Action Buttons
 | ||||
|     auto& bottom_widget = add<GUI::Widget>(); | ||||
|     bottom_widget.set_layout<GUI::HorizontalBoxLayout>(); | ||||
|     bottom_widget.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|     bottom_widget.set_preferred_size(0, 40); | ||||
|     bottom_widget.set_fixed_height(40); | ||||
| 
 | ||||
|     // Map Selection
 | ||||
|     m_map_group = bottom_widget.add<GUI::Widget>(); | ||||
|     m_map_group->set_layout<GUI::HorizontalBoxLayout>(); | ||||
|     m_map_group->set_size_policy(GUI::SizePolicy::Fixed, GUI::SizePolicy::Fill); | ||||
|     m_map_group->set_preferred_size(250, 0); | ||||
|     m_map_group->set_fixed_width(250); | ||||
| 
 | ||||
|     auto& radio_map = m_map_group->add<GUI::RadioButton>("Default"); | ||||
|     radio_map.set_name("map"); | ||||
|  | @ -139,8 +136,7 @@ void KeyboardMapperWidget::create_frame() | |||
| 
 | ||||
|     auto& ok_button = bottom_widget.add<GUI::Button>(); | ||||
|     ok_button.set_text("Save"); | ||||
|     ok_button.set_size_policy(GUI::SizePolicy::Fixed, GUI::SizePolicy::Fill); | ||||
|     ok_button.set_preferred_size(80, 0); | ||||
|     ok_button.set_fixed_width(80); | ||||
|     ok_button.on_click = [this](auto) { | ||||
|         save(); | ||||
|     }; | ||||
|  |  | |||
|  | @ -126,18 +126,15 @@ int main(int argc, char** argv) | |||
| 
 | ||||
|     auto& character_map_file_selection_container = root_widget.add<GUI::Widget>(); | ||||
|     character_map_file_selection_container.set_layout<GUI::HorizontalBoxLayout>(); | ||||
|     character_map_file_selection_container.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|     character_map_file_selection_container.set_preferred_size(0, 22); | ||||
|     character_map_file_selection_container.set_fixed_height(22); | ||||
| 
 | ||||
|     auto& character_map_file_label = character_map_file_selection_container.add<GUI::Label>(); | ||||
|     character_map_file_label.set_text_alignment(Gfx::TextAlignment::CenterLeft); | ||||
|     character_map_file_label.set_size_policy(GUI::SizePolicy::Fixed, GUI::SizePolicy::Fill); | ||||
|     character_map_file_label.set_preferred_size({ 130, 0 }); | ||||
|     character_map_file_label.set_fixed_width(130); | ||||
|     character_map_file_label.set_text("Character Mapping File:"); | ||||
| 
 | ||||
|     auto& character_map_file_combo = character_map_file_selection_container.add<GUI::ComboBox>(); | ||||
|     character_map_file_combo.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|     character_map_file_combo.set_preferred_size(0, 22); | ||||
|     character_map_file_combo.set_fixed_height(22); | ||||
|     character_map_file_combo.set_only_allow_values_from_model(true); | ||||
|     character_map_file_combo.set_model(*CharacterMapFileListModel::create(character_map_files)); | ||||
|     character_map_file_combo.set_selected_index(initial_keymap_index); | ||||
|  | @ -163,29 +160,25 @@ int main(int argc, char** argv) | |||
|     auto& bottom_widget = root_widget.add<GUI::Widget>(); | ||||
|     bottom_widget.set_layout<GUI::HorizontalBoxLayout>(); | ||||
|     bottom_widget.layout()->add_spacer(); | ||||
|     bottom_widget.set_size_policy(Orientation::Vertical, GUI::SizePolicy::Fixed); | ||||
|     bottom_widget.set_preferred_size(1, 22); | ||||
|     bottom_widget.set_fixed_height(22); | ||||
| 
 | ||||
|     auto& apply_button = bottom_widget.add<GUI::Button>(); | ||||
|     apply_button.set_text("Apply"); | ||||
|     apply_button.set_size_policy(Orientation::Horizontal, GUI::SizePolicy::Fixed); | ||||
|     apply_button.set_preferred_size(60, 22); | ||||
|     apply_button.set_fixed_width(60); | ||||
|     apply_button.on_click = [&](auto) { | ||||
|         apply_settings(false); | ||||
|     }; | ||||
| 
 | ||||
|     auto& ok_button = bottom_widget.add<GUI::Button>(); | ||||
|     ok_button.set_text("OK"); | ||||
|     ok_button.set_size_policy(Orientation::Horizontal, GUI::SizePolicy::Fixed); | ||||
|     ok_button.set_preferred_size(60, 22); | ||||
|     ok_button.set_fixed_width(60); | ||||
|     ok_button.on_click = [&](auto) { | ||||
|         apply_settings(true); | ||||
|     }; | ||||
| 
 | ||||
|     auto& cancel_button = bottom_widget.add<GUI::Button>(); | ||||
|     cancel_button.set_text("Cancel"); | ||||
|     cancel_button.set_size_policy(Orientation::Horizontal, GUI::SizePolicy::Fixed); | ||||
|     cancel_button.set_preferred_size(60, 22); | ||||
|     cancel_button.set_fixed_width(60); | ||||
|     cancel_button.on_click = [&](auto) { | ||||
|         app->quit(); | ||||
|     }; | ||||
|  |  | |||
|  | @ -47,8 +47,7 @@ KnobsWidget::KnobsWidget(TrackManager& track_manager, MainWidget& main_widget) | |||
| 
 | ||||
|     m_labels_container = add<GUI::Widget>(); | ||||
|     m_labels_container->set_layout<GUI::HorizontalBoxLayout>(); | ||||
|     m_labels_container->set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|     m_labels_container->set_preferred_size(0, 20); | ||||
|     m_labels_container->set_fixed_height(20); | ||||
| 
 | ||||
|     m_octave_label = m_labels_container->add<GUI::Label>("Octave"); | ||||
|     m_wave_label = m_labels_container->add<GUI::Label>("Wave"); | ||||
|  | @ -60,8 +59,7 @@ KnobsWidget::KnobsWidget(TrackManager& track_manager, MainWidget& main_widget) | |||
| 
 | ||||
|     m_values_container = add<GUI::Widget>(); | ||||
|     m_values_container->set_layout<GUI::HorizontalBoxLayout>(); | ||||
|     m_values_container->set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|     m_values_container->set_preferred_size(0, 10); | ||||
|     m_values_container->set_fixed_height(10); | ||||
| 
 | ||||
|     m_octave_value = m_values_container->add<GUI::Label>(String::number(m_track_manager.octave())); | ||||
|     m_wave_value = m_values_container->add<GUI::Label>(wave_strings[m_track_manager.current_track().wave()]); | ||||
|  |  | |||
|  | @ -46,29 +46,25 @@ MainWidget::MainWidget(TrackManager& track_manager) | |||
|     set_fill_with_background_color(true); | ||||
| 
 | ||||
|     m_wave_widget = add<WaveWidget>(track_manager); | ||||
|     m_wave_widget->set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|     m_wave_widget->set_preferred_size(0, 100); | ||||
|     m_wave_widget->set_fixed_height(100); | ||||
| 
 | ||||
|     m_tab_widget = add<GUI::TabWidget>(); | ||||
|     m_roll_widget = m_tab_widget->add_tab<RollWidget>("Piano Roll", track_manager); | ||||
| 
 | ||||
|     m_roll_widget->set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fill); | ||||
|     m_roll_widget->set_preferred_size(0, 300); | ||||
|     m_roll_widget->set_fixed_height(300); | ||||
| 
 | ||||
|     m_tab_widget->add_tab<SamplerWidget>("Sampler", track_manager); | ||||
| 
 | ||||
|     m_keys_and_knobs_container = add<GUI::Widget>(); | ||||
|     m_keys_and_knobs_container->set_layout<GUI::HorizontalBoxLayout>(); | ||||
|     m_keys_and_knobs_container->layout()->set_spacing(2); | ||||
|     m_keys_and_knobs_container->set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|     m_keys_and_knobs_container->set_preferred_size(0, 100); | ||||
|     m_keys_and_knobs_container->set_fixed_height(100); | ||||
|     m_keys_and_knobs_container->set_fill_with_background_color(true); | ||||
| 
 | ||||
|     m_keys_widget = m_keys_and_knobs_container->add<KeysWidget>(track_manager); | ||||
| 
 | ||||
|     m_knobs_widget = m_keys_and_knobs_container->add<KnobsWidget>(track_manager, *this); | ||||
|     m_knobs_widget->set_size_policy(GUI::SizePolicy::Fixed, GUI::SizePolicy::Fill); | ||||
|     m_knobs_widget->set_preferred_size(350, 0); | ||||
|     m_knobs_widget->set_fixed_width(350); | ||||
| 
 | ||||
|     m_roll_widget->set_keys_widget(m_keys_widget); | ||||
| } | ||||
|  |  | |||
|  | @ -99,12 +99,10 @@ SamplerWidget::SamplerWidget(TrackManager& track_manager) | |||
|     m_open_button_and_recorded_sample_name_container = add<GUI::Widget>(); | ||||
|     m_open_button_and_recorded_sample_name_container->set_layout<GUI::HorizontalBoxLayout>(); | ||||
|     m_open_button_and_recorded_sample_name_container->layout()->set_spacing(10); | ||||
|     m_open_button_and_recorded_sample_name_container->set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|     m_open_button_and_recorded_sample_name_container->set_preferred_size(0, 24); | ||||
|     m_open_button_and_recorded_sample_name_container->set_fixed_height(24); | ||||
| 
 | ||||
|     m_open_button = m_open_button_and_recorded_sample_name_container->add<GUI::Button>(); | ||||
|     m_open_button->set_size_policy(GUI::SizePolicy::Fixed, GUI::SizePolicy::Fixed); | ||||
|     m_open_button->set_preferred_size(24, 24); | ||||
|     m_open_button->set_fixed_size(24, 24); | ||||
|     m_open_button->set_focus_policy(GUI::FocusPolicy::TabFocus); | ||||
|     m_open_button->set_icon(Gfx::Bitmap::load_from_file("/res/icons/16x16/open.png")); | ||||
|     m_open_button->on_click = [this](auto) { | ||||
|  | @ -124,8 +122,7 @@ SamplerWidget::SamplerWidget(TrackManager& track_manager) | |||
|     m_recorded_sample_name->set_text_alignment(Gfx::TextAlignment::CenterLeft); | ||||
| 
 | ||||
|     m_wave_editor = add<WaveEditor>(m_track_manager); | ||||
|     m_wave_editor->set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|     m_wave_editor->set_preferred_size(0, 100); | ||||
|     m_wave_editor->set_fixed_height(100); | ||||
| } | ||||
| 
 | ||||
| SamplerWidget::~SamplerWidget() | ||||
|  |  | |||
|  | @ -131,18 +131,15 @@ GUI::Widget* BrushTool::get_properties_widget() | |||
|         m_properties_widget->set_layout<GUI::VerticalBoxLayout>(); | ||||
| 
 | ||||
|         auto& size_container = m_properties_widget->add<GUI::Widget>(); | ||||
|         size_container.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|         size_container.set_preferred_size(0, 20); | ||||
|         size_container.set_fixed_height(20); | ||||
|         size_container.set_layout<GUI::HorizontalBoxLayout>(); | ||||
| 
 | ||||
|         auto& size_label = size_container.add<GUI::Label>("Size:"); | ||||
|         size_label.set_text_alignment(Gfx::TextAlignment::CenterLeft); | ||||
|         size_label.set_size_policy(GUI::SizePolicy::Fixed, GUI::SizePolicy::Fixed); | ||||
|         size_label.set_preferred_size(80, 20); | ||||
|         size_label.set_fixed_size(80, 20); | ||||
| 
 | ||||
|         auto& size_slider = size_container.add<GUI::HorizontalSlider>(); | ||||
|         size_slider.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|         size_slider.set_preferred_size(0, 20); | ||||
|         size_slider.set_fixed_height(20); | ||||
|         size_slider.set_range(1, 100); | ||||
|         size_slider.set_value(m_size); | ||||
|         size_slider.on_value_changed = [this](int value) { | ||||
|  | @ -150,18 +147,15 @@ GUI::Widget* BrushTool::get_properties_widget() | |||
|         }; | ||||
| 
 | ||||
|         auto& hardness_container = m_properties_widget->add<GUI::Widget>(); | ||||
|         hardness_container.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|         hardness_container.set_preferred_size(0, 20); | ||||
|         hardness_container.set_fixed_height(20); | ||||
|         hardness_container.set_layout<GUI::HorizontalBoxLayout>(); | ||||
| 
 | ||||
|         auto& hardness_label = hardness_container.add<GUI::Label>("Hardness:"); | ||||
|         hardness_label.set_text_alignment(Gfx::TextAlignment::CenterLeft); | ||||
|         hardness_label.set_size_policy(GUI::SizePolicy::Fixed, GUI::SizePolicy::Fixed); | ||||
|         hardness_label.set_preferred_size(80, 20); | ||||
|         hardness_label.set_fixed_size(80, 20); | ||||
| 
 | ||||
|         auto& hardness_slider = hardness_container.add<GUI::HorizontalSlider>(); | ||||
|         hardness_slider.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|         hardness_slider.set_preferred_size(0, 20); | ||||
|         hardness_slider.set_fixed_height(20); | ||||
|         hardness_slider.set_range(1, 99); | ||||
|         hardness_slider.set_value(m_hardness); | ||||
|         hardness_slider.on_value_changed = [this](int value) { | ||||
|  |  | |||
|  | @ -111,18 +111,15 @@ GUI::Widget* BucketTool::get_properties_widget() | |||
|         m_properties_widget->set_layout<GUI::VerticalBoxLayout>(); | ||||
| 
 | ||||
|         auto& threshold_container = m_properties_widget->add<GUI::Widget>(); | ||||
|         threshold_container.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|         threshold_container.set_preferred_size(0, 20); | ||||
|         threshold_container.set_fixed_height(20); | ||||
|         threshold_container.set_layout<GUI::HorizontalBoxLayout>(); | ||||
| 
 | ||||
|         auto& threshold_label = threshold_container.add<GUI::Label>("Threshold:"); | ||||
|         threshold_label.set_text_alignment(Gfx::TextAlignment::CenterLeft); | ||||
|         threshold_label.set_size_policy(GUI::SizePolicy::Fixed, GUI::SizePolicy::Fixed); | ||||
|         threshold_label.set_preferred_size(80, 20); | ||||
|         threshold_label.set_fixed_size(80, 20); | ||||
| 
 | ||||
|         auto& threshold_slider = threshold_container.add<GUI::HorizontalSlider>(); | ||||
|         threshold_slider.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|         threshold_slider.set_preferred_size(0, 20); | ||||
|         threshold_slider.set_fixed_height(20); | ||||
|         threshold_slider.set_range(0, 100); | ||||
|         threshold_slider.set_value(m_threshold); | ||||
|         threshold_slider.on_value_changed = [this](int value) { | ||||
|  |  | |||
|  | @ -82,7 +82,6 @@ private: | |||
|             for (size_t column = 0; column < columns; ++column) { | ||||
|                 if (index < columns * rows) { | ||||
|                     auto& textbox = horizontal_container.template add<GUI::TextBox>(); | ||||
|                     textbox.set_preferred_size({ 30, 50 }); | ||||
|                     textbox.on_change = [&, row = row, column = column] { | ||||
|                         auto& element = m_matrix.elements()[row][column]; | ||||
|                         char* endptr = nullptr; | ||||
|  |  | |||
|  | @ -46,36 +46,30 @@ LayerPropertiesWidget::LayerPropertiesWidget() | |||
|     layout.set_margins({ 10, 20, 10, 10 }); | ||||
| 
 | ||||
|     auto& name_container = group_box.add<GUI::Widget>(); | ||||
|     name_container.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|     name_container.set_preferred_size(0, 20); | ||||
|     name_container.set_fixed_height(20); | ||||
|     name_container.set_layout<GUI::HorizontalBoxLayout>(); | ||||
| 
 | ||||
|     auto& name_label = name_container.add<GUI::Label>("Name:"); | ||||
|     name_label.set_text_alignment(Gfx::TextAlignment::CenterLeft); | ||||
|     name_label.set_size_policy(GUI::SizePolicy::Fixed, GUI::SizePolicy::Fixed); | ||||
|     name_label.set_preferred_size(80, 20); | ||||
|     name_label.set_fixed_size(80, 20); | ||||
| 
 | ||||
|     m_name_textbox = name_container.add<GUI::TextBox>(); | ||||
|     m_name_textbox->set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|     m_name_textbox->set_preferred_size(0, 20); | ||||
|     m_name_textbox->set_fixed_height(20); | ||||
|     m_name_textbox->on_change = [this] { | ||||
|         if (m_layer) | ||||
|             m_layer->set_name(m_name_textbox->text()); | ||||
|     }; | ||||
| 
 | ||||
|     auto& opacity_container = group_box.add<GUI::Widget>(); | ||||
|     opacity_container.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|     opacity_container.set_preferred_size(0, 20); | ||||
|     opacity_container.set_fixed_height(20); | ||||
|     opacity_container.set_layout<GUI::HorizontalBoxLayout>(); | ||||
| 
 | ||||
|     auto& opacity_label = opacity_container.add<GUI::Label>("Opacity:"); | ||||
|     opacity_label.set_text_alignment(Gfx::TextAlignment::CenterLeft); | ||||
|     opacity_label.set_size_policy(GUI::SizePolicy::Fixed, GUI::SizePolicy::Fixed); | ||||
|     opacity_label.set_preferred_size(80, 20); | ||||
|     opacity_label.set_fixed_size(80, 20); | ||||
| 
 | ||||
|     m_opacity_slider = opacity_container.add<GUI::HorizontalSlider>(); | ||||
|     m_opacity_slider->set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|     m_opacity_slider->set_preferred_size(0, 20); | ||||
|     m_opacity_slider->set_fixed_height(20); | ||||
|     m_opacity_slider->set_range(0, 100); | ||||
|     m_opacity_slider->on_value_changed = [this](int value) { | ||||
|         if (m_layer) | ||||
|  | @ -83,8 +77,7 @@ LayerPropertiesWidget::LayerPropertiesWidget() | |||
|     }; | ||||
| 
 | ||||
|     m_visibility_checkbox = group_box.add<GUI::CheckBox>("Visible"); | ||||
|     m_visibility_checkbox->set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|     m_visibility_checkbox->set_preferred_size(0, 20); | ||||
|     m_visibility_checkbox->set_fixed_height(20); | ||||
|     m_visibility_checkbox->on_checked = [this](bool checked) { | ||||
|         if (m_layer) | ||||
|             m_layer->set_visible(checked); | ||||
|  |  | |||
|  | @ -79,8 +79,7 @@ PaletteWidget::PaletteWidget(ImageEditor& editor) | |||
|     set_frame_thickness(0); | ||||
|     set_fill_with_background_color(true); | ||||
| 
 | ||||
|     set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|     set_preferred_size(0, 34); | ||||
|     set_fixed_height(34); | ||||
| 
 | ||||
|     m_secondary_color_widget = add<GUI::Frame>(); | ||||
|     m_secondary_color_widget->set_relative_rect({ 2, 2, 60, 31 }); | ||||
|  |  | |||
|  | @ -106,18 +106,15 @@ GUI::Widget* PenTool::get_properties_widget() | |||
|         m_properties_widget->set_layout<GUI::VerticalBoxLayout>(); | ||||
| 
 | ||||
|         auto& thickness_container = m_properties_widget->add<GUI::Widget>(); | ||||
|         thickness_container.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|         thickness_container.set_preferred_size(0, 20); | ||||
|         thickness_container.set_fixed_height(20); | ||||
|         thickness_container.set_layout<GUI::HorizontalBoxLayout>(); | ||||
| 
 | ||||
|         auto& thickness_label = thickness_container.add<GUI::Label>("Thickness:"); | ||||
|         thickness_label.set_text_alignment(Gfx::TextAlignment::CenterLeft); | ||||
|         thickness_label.set_size_policy(GUI::SizePolicy::Fixed, GUI::SizePolicy::Fixed); | ||||
|         thickness_label.set_preferred_size(80, 20); | ||||
|         thickness_label.set_fixed_size(80, 20); | ||||
| 
 | ||||
|         auto& thickness_slider = thickness_container.add<GUI::HorizontalSlider>(); | ||||
|         thickness_slider.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|         thickness_slider.set_preferred_size(0, 20); | ||||
|         thickness_slider.set_fixed_height(20); | ||||
|         thickness_slider.set_range(1, 20); | ||||
|         thickness_slider.set_value(m_thickness); | ||||
|         thickness_slider.on_value_changed = [this](int value) { | ||||
|  |  | |||
|  | @ -138,18 +138,15 @@ GUI::Widget* SprayTool::get_properties_widget() | |||
|         m_properties_widget->set_layout<GUI::VerticalBoxLayout>(); | ||||
| 
 | ||||
|         auto& thickness_container = m_properties_widget->add<GUI::Widget>(); | ||||
|         thickness_container.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|         thickness_container.set_preferred_size(0, 20); | ||||
|         thickness_container.set_fixed_height(20); | ||||
|         thickness_container.set_layout<GUI::HorizontalBoxLayout>(); | ||||
| 
 | ||||
|         auto& thickness_label = thickness_container.add<GUI::Label>("Thickness:"); | ||||
|         thickness_label.set_text_alignment(Gfx::TextAlignment::CenterLeft); | ||||
|         thickness_label.set_size_policy(GUI::SizePolicy::Fixed, GUI::SizePolicy::Fixed); | ||||
|         thickness_label.set_preferred_size(80, 20); | ||||
|         thickness_label.set_fixed_size(80, 20); | ||||
| 
 | ||||
|         auto& thickness_slider = thickness_container.add<GUI::HorizontalSlider>(); | ||||
|         thickness_slider.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|         thickness_slider.set_preferred_size(0, 20); | ||||
|         thickness_slider.set_fixed_height(20); | ||||
|         thickness_slider.set_range(1, 20); | ||||
|         thickness_slider.set_value(m_thickness); | ||||
|         thickness_slider.on_value_changed = [this](int value) { | ||||
|  | @ -157,18 +154,15 @@ GUI::Widget* SprayTool::get_properties_widget() | |||
|         }; | ||||
| 
 | ||||
|         auto& density_container = m_properties_widget->add<GUI::Widget>(); | ||||
|         density_container.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|         density_container.set_preferred_size(0, 20); | ||||
|         density_container.set_fixed_height(20); | ||||
|         density_container.set_layout<GUI::HorizontalBoxLayout>(); | ||||
| 
 | ||||
|         auto& density_label = density_container.add<GUI::Label>("Density:"); | ||||
|         density_label.set_text_alignment(Gfx::TextAlignment::CenterLeft); | ||||
|         density_label.set_size_policy(GUI::SizePolicy::Fixed, GUI::SizePolicy::Fixed); | ||||
|         density_label.set_preferred_size(80, 20); | ||||
|         density_label.set_fixed_size(80, 20); | ||||
| 
 | ||||
|         auto& density_slider = density_container.add<GUI::HorizontalSlider>(); | ||||
|         density_slider.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|         density_slider.set_preferred_size(0, 30); | ||||
|         density_slider.set_fixed_height(30); | ||||
|         density_slider.set_range(1, 100); | ||||
|         density_slider.set_value(m_density); | ||||
|         density_slider.on_value_changed = [this](int value) { | ||||
|  |  | |||
|  | @ -96,8 +96,7 @@ ToolboxWidget::ToolboxWidget() | |||
|     set_frame_shape(Gfx::FrameShape::Panel); | ||||
|     set_frame_shadow(Gfx::FrameShadow::Raised); | ||||
| 
 | ||||
|     set_size_policy(GUI::SizePolicy::Fixed, GUI::SizePolicy::Fill); | ||||
|     set_preferred_size(48, 0); | ||||
|     set_fixed_width(48); | ||||
| 
 | ||||
|     set_layout<GUI::VerticalBoxLayout>(); | ||||
|     layout()->set_margins({ 4, 4, 4, 4 }); | ||||
|  | @ -119,8 +118,7 @@ void ToolboxWidget::setup_tools() | |||
|     auto add_tool = [&](const StringView& name, const StringView& icon_name, const GUI::Shortcut& shortcut, NonnullOwnPtr<Tool> tool) -> ToolButton& { | ||||
|         m_tools.append(tool.ptr()); | ||||
|         auto& button = add<ToolButton>(*this, name, shortcut, move(tool)); | ||||
|         button.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|         button.set_preferred_size(0, 32); | ||||
|         button.set_fixed_height(32); | ||||
|         button.set_checkable(true); | ||||
|         button.set_icon(Gfx::Bitmap::load_from_file(String::formatted("/res/icons/pixelpaint/{}.png", icon_name))); | ||||
|         return button; | ||||
|  |  | |||
|  | @ -90,8 +90,7 @@ int main(int argc, char** argv) | |||
| 
 | ||||
|     auto& right_panel = horizontal_container.add<GUI::Widget>(); | ||||
|     right_panel.set_fill_with_background_color(true); | ||||
|     right_panel.set_size_policy(GUI::SizePolicy::Fixed, GUI::SizePolicy::Fill); | ||||
|     right_panel.set_preferred_size(230, 0); | ||||
|     right_panel.set_fixed_width(230); | ||||
|     right_panel.set_layout<GUI::VerticalBoxLayout>(); | ||||
| 
 | ||||
|     auto& layer_list_widget = right_panel.add<PixelPaint::LayerListWidget>(); | ||||
|  |  | |||
|  | @ -50,12 +50,10 @@ SoundPlayerWidget::SoundPlayerWidget(GUI::Window& window, NonnullRefPtr<Audio::C | |||
|     m_elapsed->set_frame_shape(Gfx::FrameShape::Container); | ||||
|     m_elapsed->set_frame_shadow(Gfx::FrameShadow::Sunken); | ||||
|     m_elapsed->set_frame_thickness(2); | ||||
|     m_elapsed->set_size_policy(GUI::SizePolicy::Fixed, GUI::SizePolicy::Fill); | ||||
|     m_elapsed->set_preferred_size(80, 0); | ||||
|     m_elapsed->set_fixed_width(80); | ||||
| 
 | ||||
|     auto& sample_widget_container = status_widget.add<GUI::Widget>(); | ||||
|     sample_widget_container.set_layout<GUI::HorizontalBoxLayout>(); | ||||
|     sample_widget_container.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fill); | ||||
| 
 | ||||
|     m_sample_widget = sample_widget_container.add<SampleWidget>(); | ||||
| 
 | ||||
|  | @ -63,8 +61,7 @@ SoundPlayerWidget::SoundPlayerWidget(GUI::Window& window, NonnullRefPtr<Audio::C | |||
|     m_remaining->set_frame_shape(Gfx::FrameShape::Container); | ||||
|     m_remaining->set_frame_shadow(Gfx::FrameShadow::Sunken); | ||||
|     m_remaining->set_frame_thickness(2); | ||||
|     m_remaining->set_size_policy(GUI::SizePolicy::Fixed, GUI::SizePolicy::Fill); | ||||
|     m_remaining->set_preferred_size(80, 0); | ||||
|     m_remaining->set_fixed_width(80); | ||||
| 
 | ||||
|     m_slider = add<Slider>(Orientation::Horizontal); | ||||
|     m_slider->set_min(0); | ||||
|  | @ -74,8 +71,7 @@ SoundPlayerWidget::SoundPlayerWidget(GUI::Window& window, NonnullRefPtr<Audio::C | |||
|     auto& control_widget = add<GUI::Widget>(); | ||||
|     control_widget.set_fill_with_background_color(true); | ||||
|     control_widget.set_layout<GUI::HorizontalBoxLayout>(); | ||||
|     control_widget.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|     control_widget.set_preferred_size(0, 30); | ||||
|     control_widget.set_fixed_height(30); | ||||
|     control_widget.layout()->set_margins({ 10, 2, 10, 2 }); | ||||
|     control_widget.layout()->set_spacing(10); | ||||
| 
 | ||||
|  | @ -96,8 +92,7 @@ SoundPlayerWidget::SoundPlayerWidget(GUI::Window& window, NonnullRefPtr<Audio::C | |||
|     m_status->set_frame_shadow(Gfx::FrameShadow::Raised); | ||||
|     m_status->set_frame_thickness(4); | ||||
|     m_status->set_text_alignment(Gfx::TextAlignment::CenterLeft); | ||||
|     m_status->set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|     m_status->set_preferred_size(0, 18); | ||||
|     m_status->set_fixed_height(18); | ||||
|     m_status->set_text("No file open!"); | ||||
| 
 | ||||
|     update_position(0); | ||||
|  |  | |||
|  | @ -72,14 +72,12 @@ CellTypeDialog::CellTypeDialog(const Vector<Position>& positions, Sheet& sheet, | |||
|     setup_tabs(tab_widget, positions, sheet); | ||||
| 
 | ||||
|     auto& buttonbox = main_widget.add<GUI::Widget>(); | ||||
|     buttonbox.set_preferred_size({ 0, 20 }); | ||||
|     buttonbox.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|     buttonbox.set_fixed_height(20); | ||||
|     auto& button_layout = buttonbox.set_layout<GUI::HorizontalBoxLayout>(); | ||||
|     button_layout.set_spacing(10); | ||||
|     button_layout.add_spacer(); | ||||
|     auto& ok_button = buttonbox.add<GUI::Button>("OK"); | ||||
|     ok_button.set_preferred_size({ 80, 0 }); | ||||
|     ok_button.set_size_policy(GUI::SizePolicy::Fixed, GUI::SizePolicy::Fill); | ||||
|     ok_button.set_fixed_width(80); | ||||
|     ok_button.on_click = [&](auto) { done(ExecOK); }; | ||||
| } | ||||
| 
 | ||||
|  | @ -155,8 +153,7 @@ void CellTypeDialog::setup_tabs(GUI::TabWidget& tabs, const Vector<Position>& po | |||
|         left_side.set_layout<GUI::VerticalBoxLayout>(); | ||||
|         auto& right_side = type_tab.add<GUI::Widget>(); | ||||
|         right_side.set_layout<GUI::VerticalBoxLayout>(); | ||||
|         right_side.set_preferred_size(170, 0); | ||||
|         right_side.set_size_policy(GUI::SizePolicy::Fixed, GUI::SizePolicy::Fill); | ||||
|         right_side.set_fixed_width(170); | ||||
| 
 | ||||
|         auto& type_list = left_side.add<GUI::ListView>(); | ||||
|         type_list.set_model(*GUI::ItemListModel<String>::create(g_types)); | ||||
|  | @ -179,10 +176,8 @@ void CellTypeDialog::setup_tabs(GUI::TabWidget& tabs, const Vector<Position>& po | |||
|             if (m_length > -1) | ||||
|                 spinbox.set_value(m_length); | ||||
| 
 | ||||
|             checkbox.set_preferred_size(0, 20); | ||||
|             spinbox.set_preferred_size(0, 20); | ||||
|             checkbox.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|             spinbox.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|             checkbox.set_fixed_height(20); | ||||
|             spinbox.set_fixed_height(20); | ||||
| 
 | ||||
|             checkbox.on_checked = [&](auto checked) { | ||||
|                 spinbox.set_enabled(checked); | ||||
|  | @ -203,10 +198,8 @@ void CellTypeDialog::setup_tabs(GUI::TabWidget& tabs, const Vector<Position>& po | |||
|             editor.set_enabled(!m_format.is_empty()); | ||||
|             editor.set_text(m_format); | ||||
| 
 | ||||
|             checkbox.set_preferred_size(0, 20); | ||||
|             editor.set_preferred_size(0, 20); | ||||
|             checkbox.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|             editor.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|             checkbox.set_fixed_height(20); | ||||
|             editor.set_fixed_height(20); | ||||
| 
 | ||||
|             checkbox.on_checked = [&](auto checked) { | ||||
|                 editor.set_enabled(checked); | ||||
|  | @ -229,16 +222,14 @@ void CellTypeDialog::setup_tabs(GUI::TabWidget& tabs, const Vector<Position>& po | |||
|             auto& horizontal_alignment_selection_container = alignment_tab.add<GUI::Widget>(); | ||||
|             horizontal_alignment_selection_container.set_layout<GUI::HorizontalBoxLayout>(); | ||||
|             horizontal_alignment_selection_container.layout()->set_margins({ 0, 4, 0, 0 }); | ||||
|             horizontal_alignment_selection_container.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|             horizontal_alignment_selection_container.set_preferred_size(0, 22); | ||||
|             horizontal_alignment_selection_container.set_fixed_height(22); | ||||
| 
 | ||||
|             auto& horizontal_alignment_label = horizontal_alignment_selection_container.add<GUI::Label>(); | ||||
|             horizontal_alignment_label.set_text_alignment(Gfx::TextAlignment::CenterLeft); | ||||
|             horizontal_alignment_label.set_text("Horizontal Text Alignment"); | ||||
| 
 | ||||
|             auto& horizontal_combobox = alignment_tab.add<GUI::ComboBox>(); | ||||
|             horizontal_combobox.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|             horizontal_combobox.set_preferred_size(0, 22); | ||||
|             horizontal_combobox.set_fixed_height(22); | ||||
|             horizontal_combobox.set_only_allow_values_from_model(true); | ||||
|             horizontal_combobox.set_model(*GUI::ItemListModel<String>::create(g_horizontal_alignments)); | ||||
|             horizontal_combobox.set_selected_index((int)m_horizontal_alignment); | ||||
|  | @ -264,16 +255,14 @@ void CellTypeDialog::setup_tabs(GUI::TabWidget& tabs, const Vector<Position>& po | |||
|             auto& vertical_alignment_container = alignment_tab.add<GUI::Widget>(); | ||||
|             vertical_alignment_container.set_layout<GUI::HorizontalBoxLayout>(); | ||||
|             vertical_alignment_container.layout()->set_margins({ 0, 4, 0, 0 }); | ||||
|             vertical_alignment_container.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|             vertical_alignment_container.set_preferred_size(0, 22); | ||||
|             vertical_alignment_container.set_fixed_height(22); | ||||
| 
 | ||||
|             auto& vertical_alignment_label = vertical_alignment_container.add<GUI::Label>(); | ||||
|             vertical_alignment_label.set_text_alignment(Gfx::TextAlignment::CenterLeft); | ||||
|             vertical_alignment_label.set_text("Vertical Text Alignment"); | ||||
| 
 | ||||
|             auto& vertical_combobox = alignment_tab.add<GUI::ComboBox>(); | ||||
|             vertical_combobox.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|             vertical_combobox.set_preferred_size(0, 22); | ||||
|             vertical_combobox.set_fixed_height(22); | ||||
|             vertical_combobox.set_only_allow_values_from_model(true); | ||||
|             vertical_combobox.set_model(*GUI::ItemListModel<String>::create(g_vertical_alignments)); | ||||
|             vertical_combobox.set_selected_index((int)m_vertical_alignment); | ||||
|  | @ -303,8 +292,7 @@ void CellTypeDialog::setup_tabs(GUI::TabWidget& tabs, const Vector<Position>& po | |||
|             auto& static_formatting_container = colors_tab.add<GUI::Widget>(); | ||||
|             static_formatting_container.set_layout<GUI::VerticalBoxLayout>(); | ||||
|             static_formatting_container.layout()->set_margins({ 0, 0, 0, 0 }); | ||||
|             static_formatting_container.set_preferred_size(0, 44); | ||||
|             static_formatting_container.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|             static_formatting_container.set_fixed_height(44); | ||||
| 
 | ||||
|             // Foreground
 | ||||
|             { | ||||
|  | @ -312,16 +300,14 @@ void CellTypeDialog::setup_tabs(GUI::TabWidget& tabs, const Vector<Position>& po | |||
|                 auto& foreground_container = static_formatting_container.add<GUI::Widget>(); | ||||
|                 foreground_container.set_layout<GUI::HorizontalBoxLayout>(); | ||||
|                 foreground_container.layout()->set_margins({ 0, 4, 0, 0 }); | ||||
|                 foreground_container.set_preferred_size(0, 22); | ||||
|                 foreground_container.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|                 foreground_container.set_fixed_height(22); | ||||
| 
 | ||||
|                 auto& foreground_label = foreground_container.add<GUI::Label>(); | ||||
|                 foreground_label.set_text_alignment(Gfx::TextAlignment::CenterLeft); | ||||
|                 foreground_label.set_text("Static Foreground Color"); | ||||
| 
 | ||||
|                 auto& foreground_selector = foreground_container.add<GUI::ColorInput>(); | ||||
|                 foreground_selector.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|                 foreground_selector.set_preferred_size(0, 22); | ||||
|                 foreground_selector.set_fixed_height(22); | ||||
|                 if (m_static_format.foreground_color.has_value()) | ||||
|                     foreground_selector.set_color(m_static_format.foreground_color.value()); | ||||
|                 foreground_selector.on_change = [&]() { | ||||
|  | @ -335,16 +321,14 @@ void CellTypeDialog::setup_tabs(GUI::TabWidget& tabs, const Vector<Position>& po | |||
|                 auto& background_container = static_formatting_container.add<GUI::Widget>(); | ||||
|                 background_container.set_layout<GUI::HorizontalBoxLayout>(); | ||||
|                 background_container.layout()->set_margins({ 0, 4, 0, 0 }); | ||||
|                 background_container.set_preferred_size(0, 22); | ||||
|                 background_container.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|                 background_container.set_fixed_height(22); | ||||
| 
 | ||||
|                 auto& background_label = background_container.add<GUI::Label>(); | ||||
|                 background_label.set_text_alignment(Gfx::TextAlignment::CenterLeft); | ||||
|                 background_label.set_text("Static Background Color"); | ||||
| 
 | ||||
|                 auto& background_selector = background_container.add<GUI::ColorInput>(); | ||||
|                 background_selector.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|                 background_selector.set_preferred_size(0, 22); | ||||
|                 background_selector.set_fixed_height(22); | ||||
|                 if (m_static_format.background_color.has_value()) | ||||
|                     background_selector.set_color(m_static_format.background_color.value()); | ||||
|                 background_selector.on_change = [&]() { | ||||
|  |  | |||
|  | @ -11,10 +11,7 @@ | |||
|     } | ||||
| 
 | ||||
|     @GUI::Widget { | ||||
|         vertical_size_policy: "Fixed" | ||||
|         horizontal_size_policy: "Fill" | ||||
|         preferred_width: 0 | ||||
|         preferred_height: 20 | ||||
|         fixed_height: 20 | ||||
| 
 | ||||
|         layout: @GUI::HorizontalBoxLayout { | ||||
|             spacing: 10 | ||||
|  | @ -23,19 +20,15 @@ | |||
|         @GUI::Button { | ||||
|             name: "add_button" | ||||
|             text: "Add" | ||||
|             horizontal_size_policy: "Fixed" | ||||
|             vertical_size_policy: "Fixed" | ||||
|             preferred_width: 100 | ||||
|             preferred_height: 20 | ||||
|             fixed_width: 100 | ||||
|             fixed_height: 20 | ||||
|         } | ||||
| 
 | ||||
|         @GUI::Button { | ||||
|             name: "remove_button" | ||||
|             text: "Remove" | ||||
|             horizontal_size_policy: "Fixed" | ||||
|             vertical_size_policy: "Fixed" | ||||
|             preferred_width: 100 | ||||
|             preferred_height: 20 | ||||
|             fixed_width: 100 | ||||
|             fixed_height: 20 | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  |  | |||
|  | @ -8,22 +8,17 @@ | |||
|             spacing: 10 | ||||
|         } | ||||
| 
 | ||||
|         vertical_size_policy: "Fixed" | ||||
|         preferred_height: 25 | ||||
|         fixed_height: 25 | ||||
| 
 | ||||
|         @GUI::Label { | ||||
|             text: "if..." | ||||
|             horizontal_size_policy: "Fixed" | ||||
|             vertical_size_policy: "Fixed" | ||||
|             preferred_width: 40 | ||||
|             preferred_height: 25 | ||||
|             fixed_width: 40 | ||||
|             fixed_height: 25 | ||||
|         } | ||||
| 
 | ||||
|         @GUI::TextEditor { | ||||
|             name: "formula_editor" | ||||
|             horizontal_size_policy: "Fill" | ||||
|             vertical_size_policy: "Fixed" | ||||
|             preferred_height: 25 | ||||
|             fixed_height: 25 | ||||
|             tooltip: "Use 'value' to refer to the current cell's value" | ||||
|         } | ||||
|     } | ||||
|  | @ -33,21 +28,17 @@ | |||
|             spacing: 10 | ||||
|         } | ||||
| 
 | ||||
|         vertical_size_policy: "Fixed" | ||||
|         preferred_height: 25 | ||||
|         fixed_height: 25 | ||||
| 
 | ||||
|         @GUI::Label { | ||||
|             text: "Foreground..." | ||||
|             horizontal_size_policy: "Fixed" | ||||
|             vertical_size_policy: "Fixed" | ||||
|             preferred_width: 150 | ||||
|             preferred_height: 25 | ||||
|             fixed_width: 150 | ||||
|             fixed_height: 25 | ||||
|         } | ||||
| 
 | ||||
|         @GUI::ColorInput { | ||||
|             name: "foreground_input" | ||||
|             vertical_size_policy: "Fixed" | ||||
|             preferred_height: 25 | ||||
|             fixed_height: 25 | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|  | @ -56,21 +47,17 @@ | |||
|             spacing: 10 | ||||
|         } | ||||
| 
 | ||||
|         vertical_size_policy: "Fixed" | ||||
|         preferred_height: 25 | ||||
|         fixed_height: 25 | ||||
| 
 | ||||
|         @GUI::Label { | ||||
|             text: "Background..." | ||||
|             horizontal_size_policy: "Fixed" | ||||
|             vertical_size_policy: "Fixed" | ||||
|             preferred_width: 150 | ||||
|             preferred_height: 25 | ||||
|             fixed_width: 150 | ||||
|             fixed_height: 25 | ||||
|         } | ||||
| 
 | ||||
|         @GUI::ColorInput { | ||||
|             name: "background_input" | ||||
|             vertical_size_policy: "Fixed" | ||||
|             preferred_height: 25 | ||||
|             fixed_height: 25 | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  |  | |||
|  | @ -93,8 +93,7 @@ HelpWindow::HelpWindow(GUI::Window* parent) | |||
|     auto& splitter = widget.add<GUI::HorizontalSplitter>(); | ||||
|     auto& left_frame = splitter.add<GUI::Frame>(); | ||||
|     left_frame.set_layout<GUI::VerticalBoxLayout>().set_margins({ 0, 0, 0, 0 }); | ||||
|     left_frame.set_preferred_size(100, 0); | ||||
|     left_frame.set_size_policy(GUI::SizePolicy::Fixed, GUI::SizePolicy::Fill); | ||||
|     left_frame.set_fixed_width(100); | ||||
|     m_listview = left_frame.add<GUI::ListView>(); | ||||
|     m_listview->set_activates_on_selection(true); | ||||
|     m_listview->set_model(HelpListModel::create()); | ||||
|  |  | |||
|  | @ -51,15 +51,12 @@ SpreadsheetWidget::SpreadsheetWidget(NonnullRefPtrVector<Sheet>&& sheets, bool s | |||
| 
 | ||||
|     auto& top_bar = container.add<GUI::Frame>(); | ||||
|     top_bar.set_layout<GUI::HorizontalBoxLayout>().set_spacing(1); | ||||
|     top_bar.set_preferred_size(0, 26); | ||||
|     top_bar.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|     top_bar.set_fixed_height(26); | ||||
|     auto& current_cell_label = top_bar.add<GUI::Label>(""); | ||||
|     current_cell_label.set_preferred_size(50, 0); | ||||
|     current_cell_label.set_size_policy(GUI::SizePolicy::Fixed, GUI::SizePolicy::Fill); | ||||
|     current_cell_label.set_fixed_width(50); | ||||
| 
 | ||||
|     auto& help_button = top_bar.add<GUI::Button>("🛈"); | ||||
|     help_button.set_preferred_size(20, 20); | ||||
|     help_button.set_size_policy(GUI::SizePolicy::Fixed, GUI::SizePolicy::Fixed); | ||||
|     help_button.set_fixed_size(20, 20); | ||||
|     help_button.on_click = [&](auto) { | ||||
|         auto docs = m_selected_view->sheet().gather_documentation(); | ||||
|         auto help_window = HelpWindow::the(); | ||||
|  | @ -89,7 +86,6 @@ SpreadsheetWidget::SpreadsheetWidget(NonnullRefPtrVector<Sheet>&& sheets, bool s | |||
|     inline_widget.set_layout<GUI::VerticalBoxLayout>().set_margins({ 4, 4, 4, 4 }); | ||||
|     inline_widget.set_frame_shape(Gfx::FrameShape::Box); | ||||
|     m_inline_documentation_label = inline_widget.add<GUI::Label>(); | ||||
|     m_inline_documentation_label->set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fill); | ||||
|     m_inline_documentation_label->set_fill_with_background_color(true); | ||||
|     m_inline_documentation_label->set_autosize(false); | ||||
|     m_inline_documentation_label->set_text_alignment(Gfx::TextAlignment::CenterLeft); | ||||
|  |  | |||
|  | @ -192,8 +192,7 @@ static RefPtr<GUI::Window> create_settings_window(TerminalWidget& terminal) | |||
|     auto& radio_container = settings.add<GUI::GroupBox>("Bell Mode"); | ||||
|     radio_container.set_layout<GUI::VerticalBoxLayout>(); | ||||
|     radio_container.layout()->set_margins({ 6, 16, 6, 6 }); | ||||
|     radio_container.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|     radio_container.set_preferred_size(100, 80); | ||||
|     radio_container.set_fixed_height(80); | ||||
| 
 | ||||
|     auto& sysbell_radio = radio_container.add<GUI::RadioButton>("Use (Audible) System Bell"); | ||||
|     auto& visbell_radio = radio_container.add<GUI::RadioButton>("Use (Visual) Terminal Bell"); | ||||
|  | @ -224,8 +223,7 @@ static RefPtr<GUI::Window> create_settings_window(TerminalWidget& terminal) | |||
|     auto& slider_container = settings.add<GUI::GroupBox>("Background Opacity"); | ||||
|     slider_container.set_layout<GUI::VerticalBoxLayout>(); | ||||
|     slider_container.layout()->set_margins({ 6, 16, 6, 6 }); | ||||
|     slider_container.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|     slider_container.set_preferred_size(100, 50); | ||||
|     slider_container.set_fixed_height(50); | ||||
|     auto& slider = slider_container.add<GUI::HorizontalSlider>(); | ||||
| 
 | ||||
|     slider.on_value_changed = [&terminal](int value) { | ||||
|  | @ -238,8 +236,7 @@ static RefPtr<GUI::Window> create_settings_window(TerminalWidget& terminal) | |||
|     auto& spinbox_container = settings.add<GUI::GroupBox>("Scroll Length"); | ||||
|     spinbox_container.set_layout<GUI::VerticalBoxLayout>(); | ||||
|     spinbox_container.layout()->set_margins({ 6, 16, 6, 6 }); | ||||
|     spinbox_container.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|     spinbox_container.set_preferred_size(100, 46); | ||||
|     spinbox_container.set_fixed_height(46); | ||||
| 
 | ||||
|     auto& spinbox = spinbox_container.add<GUI::SpinBox>(); | ||||
|     spinbox.set_min(1); | ||||
|  | @ -251,8 +248,7 @@ static RefPtr<GUI::Window> create_settings_window(TerminalWidget& terminal) | |||
|     auto& history_size_spinbox_container = settings.add<GUI::GroupBox>("Maximum scrollback history lines"); | ||||
|     history_size_spinbox_container.set_layout<GUI::VerticalBoxLayout>(); | ||||
|     history_size_spinbox_container.layout()->set_margins({ 6, 16, 6, 6 }); | ||||
|     history_size_spinbox_container.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|     history_size_spinbox_container.set_preferred_size(100, 46); | ||||
|     history_size_spinbox_container.set_fixed_height(46); | ||||
| 
 | ||||
|     auto& history_size_spinbox = history_size_spinbox_container.add<GUI::SpinBox>(); | ||||
|     history_size_spinbox.set_range(0, 40960); | ||||
|  | @ -281,12 +277,10 @@ static RefPtr<GUI::Window> create_find_window(TerminalWidget& terminal) | |||
|     auto& find = search.add<GUI::Widget>(); | ||||
|     find.set_layout<GUI::HorizontalBoxLayout>(); | ||||
|     find.layout()->set_margins({ 4, 4, 4, 4 }); | ||||
|     find.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|     find.set_preferred_height(30); | ||||
|     find.set_fixed_height(30); | ||||
| 
 | ||||
|     auto& find_textbox = find.add<GUI::TextBox>(); | ||||
|     find_textbox.set_horizontal_size_policy(GUI::SizePolicy::Fixed); | ||||
|     find_textbox.set_preferred_width(230); | ||||
|     find_textbox.set_fixed_width(230); | ||||
|     find_textbox.set_focus(true); | ||||
|     if (terminal.has_selection()) { | ||||
|         String selected_text = terminal.selected_text(); | ||||
|  | @ -294,12 +288,10 @@ static RefPtr<GUI::Window> create_find_window(TerminalWidget& terminal) | |||
|         find_textbox.set_text(selected_text); | ||||
|     } | ||||
|     auto& find_backwards = find.add<GUI::Button>(); | ||||
|     find_backwards.set_horizontal_size_policy(GUI::SizePolicy::Fixed); | ||||
|     find_backwards.set_preferred_width(25); | ||||
|     find_backwards.set_fixed_width(25); | ||||
|     find_backwards.set_icon(Gfx::Bitmap::load_from_file("/res/icons/16x16/upward-triangle.png")); | ||||
|     auto& find_forwards = find.add<GUI::Button>(); | ||||
|     find_forwards.set_horizontal_size_policy(GUI::SizePolicy::Fixed); | ||||
|     find_forwards.set_preferred_width(25); | ||||
|     find_forwards.set_fixed_width(25); | ||||
|     find_forwards.set_icon(Gfx::Bitmap::load_from_file("/res/icons/16x16/downward-triangle.png")); | ||||
| 
 | ||||
|     find_textbox.on_return_pressed = [&]() { | ||||
|  | @ -307,11 +299,9 @@ static RefPtr<GUI::Window> create_find_window(TerminalWidget& terminal) | |||
|     }; | ||||
| 
 | ||||
|     auto& match_case = search.add<GUI::CheckBox>("Case sensitive"); | ||||
|     match_case.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|     match_case.set_preferred_size(0, 22); | ||||
|     match_case.set_fixed_height(22); | ||||
|     auto& wrap_around = search.add<GUI::CheckBox>("Wrap around"); | ||||
|     wrap_around.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|     wrap_around.set_preferred_size(0, 22); | ||||
|     wrap_around.set_fixed_height(22); | ||||
| 
 | ||||
|     find_backwards.on_click = [&](auto) { | ||||
|         auto needle = find_textbox.text(); | ||||
|  |  | |||
|  | @ -246,8 +246,7 @@ TextEditorWidget::TextEditorWidget() | |||
|     }; | ||||
| 
 | ||||
|     m_find_regex_button = m_find_widget->add<GUI::Button>(".*"); | ||||
|     m_find_regex_button->set_size_policy(GUI::SizePolicy::Fixed, GUI::SizePolicy::Fill); | ||||
|     m_find_regex_button->set_preferred_size(20, 0); | ||||
|     m_find_regex_button->set_fixed_width(20); | ||||
|     m_find_regex_button->set_action(*m_find_regex_action); | ||||
| 
 | ||||
|     m_find_textbox->on_escape_pressed = [this] { | ||||
|  |  | |||
|  | @ -27,9 +27,7 @@ | |||
|         name: "find_replace_widget" | ||||
|         visible: false | ||||
|         fill_with_background_color: true | ||||
|         horizontal_size_policy: "Fill" | ||||
|         vertical_size_policy: "Fixed" | ||||
|         preferred_height: 48 | ||||
|         fixed_height: 48 | ||||
| 
 | ||||
|         layout: @GUI::VerticalBoxLayout { | ||||
|             margins: [2, 2, 2, 4] | ||||
|  | @ -38,9 +36,7 @@ | |||
|         @GUI::Widget { | ||||
|             name: "find_widget" | ||||
|             fill_with_background_color: true | ||||
|             horizontal_size_policy: "Fill" | ||||
|             vertical_size_policy: "Fixed" | ||||
|             preferred_height: 22 | ||||
|             fixed_height: 22 | ||||
| 
 | ||||
|             layout: @GUI::HorizontalBoxLayout { | ||||
|             } | ||||
|  | @ -48,26 +44,20 @@ | |||
|             @GUI::Button { | ||||
|                 name: "find_previous_button" | ||||
|                 text: "Find previous" | ||||
|                 horizontal_size_policy: "Fixed" | ||||
|                 vertical_size_policy: "Fill" | ||||
|                 preferred_width: 150 | ||||
|                 fixed_width: 150 | ||||
|             } | ||||
| 
 | ||||
|             @GUI::Button { | ||||
|                 name: "find_next_button" | ||||
|                 text: "Find next" | ||||
|                 horizontal_size_policy: "Fixed" | ||||
|                 vertical_size_policy: "Fill" | ||||
|                 preferred_width: 150 | ||||
|                 fixed_width: 150 | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         @GUI::Widget { | ||||
|             name: "replace_widget" | ||||
|             fill_with_background_color: true | ||||
|             horizontal_size_policy: "Fill" | ||||
|             vertical_size_policy: "Fixed" | ||||
|             preferred_height: 22 | ||||
|             fixed_height: 22 | ||||
| 
 | ||||
|             layout: @GUI::HorizontalBoxLayout { | ||||
|             } | ||||
|  | @ -75,25 +65,19 @@ | |||
|             @GUI::Button { | ||||
|                 name: "replace_previous_button" | ||||
|                 text: "Replace previous" | ||||
|                 horizontal_size_policy: "Fixed" | ||||
|                 vertical_size_policy: "Fill" | ||||
|                 preferred_width: 100 | ||||
|                 fixed_width: 100 | ||||
|             } | ||||
| 
 | ||||
|             @GUI::Button { | ||||
|                 name: "replace_next_button" | ||||
|                 text: "Replace next" | ||||
|                 horizontal_size_policy: "Fixed" | ||||
|                 vertical_size_policy: "Fill" | ||||
|                 preferred_width: 100 | ||||
|                 fixed_width: 100 | ||||
|             } | ||||
| 
 | ||||
|             @GUI::Button { | ||||
|                 name: "replace_all_button" | ||||
|                 text: "Replace all" | ||||
|                 horizontal_size_policy: "Fixed" | ||||
|                 vertical_size_policy: "Fill" | ||||
|                 preferred_width: 100 | ||||
|                 fixed_width: 100 | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  |  | |||
|  | @ -99,13 +99,11 @@ int main(int argc, char** argv) | |||
|     main_widget.set_layout<GUI::VerticalBoxLayout>(); | ||||
| 
 | ||||
|     auto& preview_widget = main_widget.add<ThemeEditor::PreviewWidget>(app->palette()); | ||||
|     preview_widget.set_preferred_size(480, 360); | ||||
|     preview_widget.set_size_policy(GUI::SizePolicy::Fixed, GUI::SizePolicy::Fixed); | ||||
|     preview_widget.set_fixed_size(480, 360); | ||||
| 
 | ||||
|     auto& horizontal_container = main_widget.add<GUI::Widget>(); | ||||
|     horizontal_container.set_layout<GUI::HorizontalBoxLayout>(); | ||||
|     horizontal_container.set_preferred_size(480, 20); | ||||
|     horizontal_container.set_size_policy(GUI::SizePolicy::Fixed, GUI::SizePolicy::Fixed); | ||||
|     horizontal_container.set_fixed_size(480, 20); | ||||
| 
 | ||||
|     auto& combo_box = horizontal_container.add<GUI::ComboBox>(); | ||||
|     auto& color_input = horizontal_container.add<GUI::ColorInput>(); | ||||
|  |  | |||
|  | @ -136,6 +136,5 @@ void TextWidget::wrap_and_set_height() | |||
| 
 | ||||
|     m_lines = lines; | ||||
| 
 | ||||
|     set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|     set_preferred_size(0, m_lines.size() * m_line_height + frame_thickness() * 2); | ||||
|     set_fixed_height(m_lines.size() * m_line_height + frame_thickness() * 2); | ||||
| } | ||||
|  |  | |||
|  | @ -148,7 +148,6 @@ int main(int argc, char** argv) | |||
|     background.set_layout<GUI::VerticalBoxLayout>(); | ||||
|     background.layout()->set_margins({ 16, 8, 16, 8 }); | ||||
|     background.layout()->set_spacing(8); | ||||
|     background.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fill); | ||||
| 
 | ||||
|     //
 | ||||
|     // header
 | ||||
|  | @ -158,8 +157,7 @@ int main(int argc, char** argv) | |||
|     header.set_font(Gfx::Font::load_from_file("/res/fonts/PebbletonBold14.font")); | ||||
|     header.set_text("Welcome to SerenityOS!"); | ||||
|     header.set_text_alignment(Gfx::TextAlignment::CenterLeft); | ||||
|     header.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|     header.set_preferred_size(0, 30); | ||||
|     header.set_fixed_height(30); | ||||
| 
 | ||||
|     //
 | ||||
|     // main section
 | ||||
|  | @ -169,17 +167,14 @@ int main(int argc, char** argv) | |||
|     main_section.set_layout<GUI::HorizontalBoxLayout>(); | ||||
|     main_section.layout()->set_margins({ 0, 0, 0, 0 }); | ||||
|     main_section.layout()->set_spacing(8); | ||||
|     main_section.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fill); | ||||
| 
 | ||||
|     auto& menu = main_section.add<GUI::Widget>(); | ||||
|     menu.set_layout<GUI::VerticalBoxLayout>(); | ||||
|     menu.layout()->set_margins({ 0, 0, 0, 0 }); | ||||
|     menu.layout()->set_spacing(4); | ||||
|     menu.set_size_policy(GUI::SizePolicy::Fixed, GUI::SizePolicy::Fill); | ||||
|     menu.set_preferred_size(100, 0); | ||||
|     menu.set_fixed_width(100); | ||||
| 
 | ||||
|     auto& stack = main_section.add<GUI::StackWidget>(); | ||||
|     stack.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fill); | ||||
| 
 | ||||
|     bool first = true; | ||||
|     for (auto& page : pages) { | ||||
|  | @ -187,18 +182,15 @@ int main(int argc, char** argv) | |||
|         content.set_layout<GUI::VerticalBoxLayout>(); | ||||
|         content.layout()->set_margins({ 0, 0, 0, 0 }); | ||||
|         content.layout()->set_spacing(8); | ||||
|         content.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fill); | ||||
| 
 | ||||
|         auto& title_box = content.add<GUI::Widget>(); | ||||
|         title_box.set_layout<GUI::HorizontalBoxLayout>(); | ||||
|         title_box.layout()->set_spacing(4); | ||||
|         title_box.set_preferred_size(0, 16); | ||||
|         title_box.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|         title_box.set_fixed_height(16); | ||||
| 
 | ||||
|         if (!page.icon.is_empty()) { | ||||
|             auto& icon = title_box.add<GUI::ImageWidget>(); | ||||
|             icon.set_preferred_size(16, 16); | ||||
|             icon.set_size_policy(GUI::SizePolicy::Fixed, GUI::SizePolicy::Fixed); | ||||
|             icon.set_fixed_size(16, 16); | ||||
|             icon.load_from_file(page.icon); | ||||
|         } | ||||
| 
 | ||||
|  | @ -206,8 +198,7 @@ int main(int argc, char** argv) | |||
|         content_title.set_font(Gfx::Font::default_bold_font()); | ||||
|         content_title.set_text(page.title); | ||||
|         content_title.set_text_alignment(Gfx::TextAlignment::CenterLeft); | ||||
|         content_title.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|         content_title.set_preferred_size(0, 10); | ||||
|         content_title.set_fixed_height(10); | ||||
| 
 | ||||
|         for (auto& paragraph : page.content) { | ||||
|             auto& content_text = content.add<TextWidget>(); | ||||
|  | @ -222,8 +213,7 @@ int main(int argc, char** argv) | |||
|         menu_option.set_font(Gfx::Font::default_font()); | ||||
|         menu_option.set_text(page.menu_name); | ||||
|         menu_option.set_text_alignment(Gfx::TextAlignment::CenterLeft); | ||||
|         menu_option.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|         menu_option.set_preferred_size(0, 20); | ||||
|         menu_option.set_fixed_height(20); | ||||
|         menu_option.set_checkable(true); | ||||
|         menu_option.set_exclusive(true); | ||||
| 
 | ||||
|  |  | |||
|  | @ -68,8 +68,7 @@ int main([[maybe_unused]] int argc, [[maybe_unused]] char** argv, [[maybe_unused | |||
| 
 | ||||
|     auto& button = main_widget.add<GUI::Button>(); | ||||
|     button.set_text("Good-bye"); | ||||
|     button.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|     button.set_preferred_size(0, 20); | ||||
|     button.set_fixed_height(20); | ||||
|     button.on_click = [&](auto) { | ||||
|         app->quit(); | ||||
|     }; | ||||
|  |  | |||
|  | @ -68,8 +68,7 @@ int main(int argc, char** argv) | |||
| 
 | ||||
|     auto& button = main_widget.add<GUI::Button>(); | ||||
|     button.set_text("Good-bye"); | ||||
|     button.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|     button.set_preferred_size(0, 20); | ||||
|     button.set_fixed_height(20); | ||||
|     button.on_click = [&](auto) { | ||||
|         app->quit(); | ||||
|     }; | ||||
|  |  | |||
|  | @ -125,23 +125,19 @@ int main(int argc, char** argv) | |||
|     auto& tab_widget = root_widget.add<GUI::TabWidget>(); | ||||
| 
 | ||||
|     auto& tab_basic = tab_widget.add_tab<GUI::Widget>("Basic"); | ||||
|     tab_basic.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fill); | ||||
|     tab_basic.set_layout<GUI::VerticalBoxLayout>(); | ||||
|     tab_basic.layout()->set_margins({ 8, 8, 8, 8 }); | ||||
|     tab_basic.layout()->set_spacing(8); | ||||
| 
 | ||||
|     auto& radio_group_box = tab_basic.add<GUI::GroupBox>(); | ||||
|     radio_group_box.set_layout<GUI::HorizontalBoxLayout>(); | ||||
|     radio_group_box.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fill); | ||||
|     radio_group_box.layout()->set_margins({ 4, 4, 4, 4 }); | ||||
| 
 | ||||
|     auto& radio_button_vert_container = radio_group_box.add<GUI::Widget>(); | ||||
|     radio_button_vert_container.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fill); | ||||
|     radio_button_vert_container.set_layout<GUI::VerticalBoxLayout>(); | ||||
|     radio_button_vert_container.layout()->set_margins({ 4, 9, 4, 4 }); | ||||
| 
 | ||||
|     auto& radio_button_container = radio_button_vert_container.add<GUI::Widget>(); | ||||
|     radio_button_container.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fill); | ||||
|     radio_button_container.set_layout<GUI::HorizontalBoxLayout>(); | ||||
| 
 | ||||
|     auto& radio1 = radio_button_container.add<GUI::RadioButton>("RadioButton 1"); | ||||
|  | @ -151,32 +147,26 @@ int main(int argc, char** argv) | |||
|     radio3.set_enabled(false); | ||||
| 
 | ||||
|     auto& checklabelspin_container = tab_basic.add<GUI::Widget>(); | ||||
|     checklabelspin_container.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fill); | ||||
|     checklabelspin_container.set_layout<GUI::HorizontalBoxLayout>(); | ||||
| 
 | ||||
|     auto& check_group_box = checklabelspin_container.add<GUI::GroupBox>(); | ||||
|     check_group_box.set_layout<GUI::HorizontalBoxLayout>(); | ||||
|     check_group_box.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fill); | ||||
|     check_group_box.layout()->set_margins({ 4, 12, 4, 4 }); | ||||
| 
 | ||||
|     auto& checkbox_container = check_group_box.add<GUI::Widget>(); | ||||
|     checkbox_container.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fill); | ||||
|     checkbox_container.set_layout<GUI::VerticalBoxLayout>(); | ||||
|     checkbox_container.layout()->set_margins({ 4, 4, 4, 4 }); | ||||
| 
 | ||||
|     auto& label_container = check_group_box.add<GUI::Widget>(); | ||||
|     label_container.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fill); | ||||
|     label_container.set_layout<GUI::VerticalBoxLayout>(); | ||||
|     label_container.layout()->set_margins({ 4, 4, 4, 4 }); | ||||
| 
 | ||||
|     auto& spin_group_box = checklabelspin_container.add<GUI::GroupBox>(); | ||||
|     spin_group_box.set_layout<GUI::HorizontalBoxLayout>(); | ||||
|     spin_group_box.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fill); | ||||
|     spin_group_box.layout()->set_margins({ 4, 4, 4, 4 }); | ||||
|     spin_group_box.set_title("Spin boxes"); | ||||
| 
 | ||||
|     auto& spin_container = spin_group_box.add<GUI::Widget>(); | ||||
|     spin_container.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fill); | ||||
|     spin_container.set_layout<GUI::VerticalBoxLayout>(); | ||||
|     spin_container.layout()->set_margins({ 4, 12, 4, 4 }); | ||||
| 
 | ||||
|  | @ -194,15 +184,12 @@ int main(int argc, char** argv) | |||
|     spinbox2.set_enabled(false); | ||||
| 
 | ||||
|     auto& button_container = tab_basic.add<GUI::Widget>(); | ||||
|     button_container.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fill); | ||||
|     button_container.set_layout<GUI::HorizontalBoxLayout>(); | ||||
| 
 | ||||
|     auto& button_vert1_container = button_container.add<GUI::Widget>(); | ||||
|     button_vert1_container.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fill); | ||||
|     button_vert1_container.set_layout<GUI::VerticalBoxLayout>(); | ||||
| 
 | ||||
|     auto& button_vert2_container = button_container.add<GUI::Widget>(); | ||||
|     button_vert2_container.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fill); | ||||
|     button_vert2_container.set_layout<GUI::VerticalBoxLayout>(); | ||||
| 
 | ||||
|     auto& button1 = button_vert1_container.add<GUI::Button>("Button 1"); | ||||
|  | @ -216,17 +203,14 @@ int main(int argc, char** argv) | |||
| 
 | ||||
|     auto& text_group_box = tab_basic.add<GUI::GroupBox>(); | ||||
|     text_group_box.set_layout<GUI::HorizontalBoxLayout>(); | ||||
|     text_group_box.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fill); | ||||
|     text_group_box.set_title("Text boxes"); | ||||
|     text_group_box.layout()->set_margins({ 8, 4, 8, 4 }); | ||||
| 
 | ||||
|     auto& textbox_vert1_container = text_group_box.add<GUI::Widget>(); | ||||
|     textbox_vert1_container.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fill); | ||||
|     textbox_vert1_container.set_layout<GUI::VerticalBoxLayout>(); | ||||
|     textbox_vert1_container.layout()->set_margins({ 1, 12, 1, 4 }); | ||||
| 
 | ||||
|     auto& textbox_vert2_container = text_group_box.add<GUI::Widget>(); | ||||
|     textbox_vert2_container.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fill); | ||||
|     textbox_vert2_container.set_layout<GUI::VerticalBoxLayout>(); | ||||
|     textbox_vert2_container.layout()->set_margins({ 1, 12, 1, 4 }); | ||||
| 
 | ||||
|  | @ -243,28 +227,23 @@ int main(int argc, char** argv) | |||
|     textbox4.set_mode(GUI::TextEditor::DisplayOnly); | ||||
| 
 | ||||
|     auto& combocolor_container = tab_basic.add<GUI::Widget>(); | ||||
|     combocolor_container.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fill); | ||||
|     combocolor_container.set_layout<GUI::HorizontalBoxLayout>(); | ||||
| 
 | ||||
|     auto& combo_group_box = combocolor_container.add<GUI::GroupBox>(); | ||||
|     combo_group_box.set_layout<GUI::HorizontalBoxLayout>(); | ||||
|     combo_group_box.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fill); | ||||
|     combo_group_box.layout()->set_margins({ 4, 4, 4, 4 }); | ||||
|     combo_group_box.set_title("Combo boxes"); | ||||
| 
 | ||||
|     auto& color_group_box = combocolor_container.add<GUI::GroupBox>(); | ||||
|     color_group_box.set_layout<GUI::HorizontalBoxLayout>(); | ||||
|     color_group_box.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fill); | ||||
|     color_group_box.layout()->set_margins({ 4, 4, 4, 4 }); | ||||
|     color_group_box.set_title("Color pickers"); | ||||
| 
 | ||||
|     auto& combo_container = combo_group_box.add<GUI::Widget>(); | ||||
|     combo_container.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fill); | ||||
|     combo_container.set_layout<GUI::VerticalBoxLayout>(); | ||||
|     combo_container.layout()->set_margins({ 4, 12, 4, 4 }); | ||||
| 
 | ||||
|     auto& color_container = color_group_box.add<GUI::Widget>(); | ||||
|     color_container.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fill); | ||||
|     color_container.set_layout<GUI::VerticalBoxLayout>(); | ||||
|     color_container.layout()->set_margins({ 4, 12, 4, 4 }); | ||||
| 
 | ||||
|  | @ -283,23 +262,19 @@ int main(int argc, char** argv) | |||
|     combobox2.set_enabled(false); | ||||
| 
 | ||||
|     auto& color_input_enabled = color_container.add<GUI::ColorInput>(); | ||||
|     color_input_enabled.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fill); | ||||
|     color_input_enabled.set_color(Color::from_string("#961605ff").value()); | ||||
|     color_input_enabled.set_color_picker_title("Select color for desktop"); | ||||
| 
 | ||||
|     auto& color_input_disabled = color_container.add<GUI::ColorInput>(); | ||||
|     color_input_disabled.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fill); | ||||
|     color_input_disabled.set_color(Color::from_string("#961605ff").value()); | ||||
|     color_input_disabled.set_enabled(false); | ||||
| 
 | ||||
|     auto& tab_others = tab_widget.add_tab<GUI::Widget>("Sliders"); | ||||
|     tab_others.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fill); | ||||
|     tab_others.set_layout<GUI::VerticalBoxLayout>(); | ||||
|     tab_others.layout()->set_margins({ 8, 8, 8, 8 }); | ||||
|     tab_others.layout()->set_spacing(8); | ||||
| 
 | ||||
|     auto& vert_slider_group_box = tab_others.add<GUI::GroupBox>(); | ||||
|     vert_slider_group_box.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fill); | ||||
|     vert_slider_group_box.set_layout<GUI::HorizontalBoxLayout>(); | ||||
|     vert_slider_group_box.layout()->set_margins({ 4, 28, 4, 4 }); | ||||
|     vert_slider_group_box.set_title("Vertical sliders"); | ||||
|  | @ -315,18 +290,15 @@ int main(int argc, char** argv) | |||
|     vslider3.set_tooltip("Proportional"); | ||||
| 
 | ||||
|     auto& horizontal_slider_group_box = tab_others.add<GUI::GroupBox>(); | ||||
|     horizontal_slider_group_box.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fill); | ||||
|     horizontal_slider_group_box.set_layout<GUI::VerticalBoxLayout>(); | ||||
|     horizontal_slider_group_box.layout()->set_margins({ 4, 12, 4, 4 }); | ||||
|     horizontal_slider_group_box.set_title("Horizontal sliders"); | ||||
| 
 | ||||
|     auto& horizontal_slider_container = horizontal_slider_group_box.add<GUI::Widget>(); | ||||
|     horizontal_slider_container.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fill); | ||||
|     horizontal_slider_container.set_layout<GUI::HorizontalBoxLayout>(); | ||||
|     horizontal_slider_container.layout()->set_margins({ 4, 4, 4, 4 }); | ||||
| 
 | ||||
|     auto& horizontal_slider_container2 = horizontal_slider_group_box.add<GUI::Widget>(); | ||||
|     horizontal_slider_container2.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fill); | ||||
|     horizontal_slider_container2.set_layout<GUI::HorizontalBoxLayout>(); | ||||
|     horizontal_slider_container2.layout()->set_margins({ 4, 4, 4, 4 }); | ||||
| 
 | ||||
|  | @ -339,8 +311,7 @@ int main(int argc, char** argv) | |||
|     slider3.set_knob_size_mode(GUI::Slider::KnobSizeMode::Proportional); | ||||
| 
 | ||||
|     auto& progress1 = horizontal_slider_container2.add<GUI::ProgressBar>(); | ||||
|     progress1.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|     progress1.set_preferred_size(0, 28); | ||||
|     progress1.set_fixed_height(28); | ||||
| 
 | ||||
|     slider1.on_value_changed = [&](int value) { | ||||
|         progress1.set_value(value); | ||||
|  | @ -354,7 +325,6 @@ int main(int argc, char** argv) | |||
|     }; | ||||
| 
 | ||||
|     auto& scroll_group_box = tab_others.add<GUI::GroupBox>(); | ||||
|     scroll_group_box.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fill); | ||||
|     scroll_group_box.set_layout<GUI::VerticalBoxLayout>(); | ||||
|     scroll_group_box.layout()->set_margins({ 12, 12, 12, 12 }); | ||||
|     scroll_group_box.set_title("Scrollbars"); | ||||
|  | @ -362,8 +332,7 @@ int main(int argc, char** argv) | |||
|     scroll_group_box.layout()->add_spacer(); | ||||
| 
 | ||||
|     auto& scrollbar1 = scroll_group_box.add<GUI::ScrollBar>(Orientation::Horizontal); | ||||
|     scrollbar1.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|     scrollbar1.set_preferred_size(0, 16); | ||||
|     scrollbar1.set_fixed_height(16); | ||||
|     scrollbar1.set_min(0); | ||||
|     scrollbar1.set_max(100); | ||||
|     scrollbar1.set_value(50); | ||||
|  | @ -371,14 +340,12 @@ int main(int argc, char** argv) | |||
|     scroll_group_box.layout()->add_spacer(); | ||||
| 
 | ||||
|     auto& scrollbar2 = scroll_group_box.add<GUI::ScrollBar>(Orientation::Horizontal); | ||||
|     scrollbar2.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|     scrollbar2.set_preferred_size(0, 16); | ||||
|     scrollbar2.set_fixed_height(16); | ||||
|     scrollbar2.set_enabled(false); | ||||
| 
 | ||||
|     scroll_group_box.layout()->add_spacer(); | ||||
| 
 | ||||
|     auto& tab_modals = tab_widget.add_tab<GUI::Widget>("Modals"); | ||||
|     tab_modals.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fill); | ||||
|     tab_modals.set_layout<GUI::VerticalBoxLayout>(); | ||||
|     tab_modals.layout()->set_margins({ 8, 8, 8, 8 }); | ||||
|     tab_modals.layout()->set_spacing(8); | ||||
|  | @ -386,19 +353,16 @@ int main(int argc, char** argv) | |||
|     GUI::MessageBox::Type msg_box_type = GUI::MessageBox::Type::Error; | ||||
| 
 | ||||
|     auto& msgbox_group_container = tab_modals.add<GUI::GroupBox>("Message boxes"); | ||||
|     msgbox_group_container.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fill); | ||||
|     msgbox_group_container.set_layout<GUI::VerticalBoxLayout>(); | ||||
|     msgbox_group_container.layout()->set_margins({ 4, 12, 4, 2 }); | ||||
| 
 | ||||
|     auto& msgbox_radio_container = msgbox_group_container.add<GUI::Widget>(); | ||||
|     msgbox_radio_container.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fill); | ||||
|     msgbox_radio_container.set_layout<GUI::HorizontalBoxLayout>(); | ||||
|     msgbox_radio_container.layout()->set_margins({ 4, 12, 4, 4 }); | ||||
| 
 | ||||
|     auto& icon_group_box = msgbox_radio_container.add<GUI::GroupBox>("Icon"); | ||||
|     icon_group_box.set_layout<GUI::VerticalBoxLayout>(); | ||||
|     icon_group_box.layout()->set_margins({ 4, 16, 4, 4 }); | ||||
|     icon_group_box.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fill); | ||||
| 
 | ||||
|     auto& radio_none = icon_group_box.add<GUI::RadioButton>("None"); | ||||
|     radio_none.on_checked = [&](bool) { | ||||
|  | @ -425,7 +389,6 @@ int main(int argc, char** argv) | |||
|     auto& button_group_box = msgbox_radio_container.add<GUI::GroupBox>("Buttons"); | ||||
|     button_group_box.set_layout<GUI::VerticalBoxLayout>(); | ||||
|     button_group_box.layout()->set_margins({ 4, 16, 4, 4 }); | ||||
|     button_group_box.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fill); | ||||
| 
 | ||||
|     GUI::MessageBox::InputType msg_box_input_type = GUI::MessageBox::InputType::OKCancel; | ||||
| 
 | ||||
|  | @ -448,24 +411,20 @@ int main(int argc, char** argv) | |||
|     }; | ||||
| 
 | ||||
|     auto& msgbox_text_container = msgbox_group_container.add<GUI::Widget>(); | ||||
|     msgbox_text_container.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|     msgbox_text_container.set_layout<GUI::VerticalBoxLayout>(); | ||||
|     msgbox_text_container.set_preferred_size(0, 100); | ||||
|     msgbox_text_container.set_fixed_height(100); | ||||
|     msgbox_text_container.layout()->set_margins({ 4, 8, 4, 8 }); | ||||
| 
 | ||||
|     auto& title_textbox = msgbox_text_container.add<GUI::TextBox>(); | ||||
|     title_textbox.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|     title_textbox.set_preferred_size(0, 24); | ||||
|     title_textbox.set_fixed_height(24); | ||||
|     title_textbox.set_text("Demo Title"); | ||||
| 
 | ||||
|     auto& content_textbox = msgbox_text_container.add<GUI::TextBox>(); | ||||
|     content_textbox.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|     content_textbox.set_preferred_size(0, 24); | ||||
|     content_textbox.set_fixed_height(24); | ||||
|     content_textbox.set_text("Demo text for message box."); | ||||
| 
 | ||||
|     auto& msgbox_button = msgbox_text_container.add<GUI::Button>("Create"); | ||||
|     msgbox_button.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|     msgbox_button.set_preferred_size(0, 30); | ||||
|     msgbox_button.set_fixed_height(30); | ||||
|     msgbox_button.on_click = [&](auto) { | ||||
|         GUI::MessageBox::show(window, content_textbox.text(), title_textbox.text(), msg_box_type, msg_box_input_type); | ||||
|     }; | ||||
|  | @ -473,8 +432,7 @@ int main(int argc, char** argv) | |||
|     auto& input_group_box = tab_modals.add<GUI::GroupBox>("Input boxes"); | ||||
|     input_group_box.set_layout<GUI::VerticalBoxLayout>(); | ||||
|     input_group_box.layout()->set_margins({ 4, 12, 4, 4 }); | ||||
|     input_group_box.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|     input_group_box.set_preferred_size(0, 160); | ||||
|     input_group_box.set_fixed_height(160); | ||||
| 
 | ||||
|     input_group_box.layout()->add_spacer(); | ||||
| 
 | ||||
|  | @ -484,13 +442,11 @@ int main(int argc, char** argv) | |||
|     input_group_box.layout()->add_spacer(); | ||||
| 
 | ||||
|     auto& input_button_container = input_group_box.add<GUI::Widget>(); | ||||
|     input_button_container.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fill); | ||||
|     input_button_container.set_layout<GUI::VerticalBoxLayout>(); | ||||
|     input_button_container.layout()->set_margins({ 4, 0, 4, 0 }); | ||||
| 
 | ||||
|     auto& input_button = input_button_container.add<GUI::Button>("Input..."); | ||||
|     input_button.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|     input_button.set_preferred_size(0, 30); | ||||
|     input_button.set_fixed_height(30); | ||||
|     String value; | ||||
|     input_button.on_click = [&](auto) { | ||||
|         if (GUI::InputBox::show(value, window, "Enter input:", "Input Box") == GUI::InputBox::ExecOK && !value.is_empty()) | ||||
|  | @ -498,7 +454,6 @@ int main(int argc, char** argv) | |||
|     }; | ||||
| 
 | ||||
|     auto& tab_image = tab_widget.add_tab<GUI::Widget>("Images"); | ||||
|     tab_image.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fill); | ||||
|     tab_image.set_layout<GUI::VerticalBoxLayout>(); | ||||
|     tab_image.layout()->set_margins({ 8, 8, 8, 8 }); | ||||
|     tab_image.layout()->set_spacing(8); | ||||
|  | @ -511,14 +466,12 @@ int main(int argc, char** argv) | |||
|     gif_animation_image.load_from_file("/res/graphics/download-animation.gif"); | ||||
| 
 | ||||
|     auto& tab_cursors = tab_widget.add_tab<GUI::Widget>("Cursors"); | ||||
|     tab_cursors.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fill); | ||||
|     tab_cursors.set_layout<GUI::VerticalBoxLayout>(); | ||||
|     tab_cursors.layout()->set_margins({ 8, 8, 8, 8 }); | ||||
|     tab_cursors.layout()->set_spacing(8); | ||||
| 
 | ||||
|     auto& cursor_group_box = tab_cursors.add<GUI::GroupBox>("Cursor"); | ||||
|     cursor_group_box.set_layout<GUI::VerticalBoxLayout>(); | ||||
|     cursor_group_box.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fill); | ||||
|     cursor_group_box.layout()->set_margins({ 4, 12, 4, 4 }); | ||||
| 
 | ||||
|     auto& radio_cursor_none = cursor_group_box.add<GUI::RadioButton>("None"); | ||||
|  |  | |||
|  | @ -48,11 +48,9 @@ DisassemblyWidget::DisassemblyWidget() | |||
| 
 | ||||
|     m_top_container = add<GUI::Widget>(); | ||||
|     m_top_container->set_layout<GUI::HorizontalBoxLayout>(); | ||||
|     m_top_container->set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|     m_top_container->set_preferred_size(0, 20); | ||||
|     m_top_container->set_fixed_height(20); | ||||
| 
 | ||||
|     m_function_name_label = m_top_container->add<GUI::Label>(""); | ||||
|     m_function_name_label->set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fill); | ||||
| 
 | ||||
|     m_disassembly_view = add<GUI::TableView>(); | ||||
| 
 | ||||
|  |  | |||
|  | @ -40,21 +40,18 @@ EditorWrapper::EditorWrapper() | |||
|     set_layout<GUI::VerticalBoxLayout>(); | ||||
| 
 | ||||
|     auto& label_wrapper = add<GUI::Widget>(); | ||||
|     label_wrapper.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|     label_wrapper.set_preferred_size(0, 14); | ||||
|     label_wrapper.set_fixed_height(14); | ||||
|     label_wrapper.set_fill_with_background_color(true); | ||||
|     label_wrapper.set_layout<GUI::HorizontalBoxLayout>(); | ||||
|     label_wrapper.layout()->set_margins({ 2, 0, 2, 0 }); | ||||
| 
 | ||||
|     m_filename_label = label_wrapper.add<GUI::Label>("(Untitled)"); | ||||
|     m_filename_label->set_text_alignment(Gfx::TextAlignment::CenterLeft); | ||||
|     m_filename_label->set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|     m_filename_label->set_preferred_size(0, 14); | ||||
|     m_filename_label->set_fixed_height(14); | ||||
| 
 | ||||
|     m_cursor_label = label_wrapper.add<GUI::Label>("(Cursor)"); | ||||
|     m_cursor_label->set_text_alignment(Gfx::TextAlignment::CenterRight); | ||||
|     m_cursor_label->set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|     m_cursor_label->set_preferred_size(0, 14); | ||||
|     m_cursor_label->set_fixed_height(14); | ||||
| 
 | ||||
|     m_editor = add<Editor>(); | ||||
|     m_editor->set_ruler_visible(true); | ||||
|  |  | |||
|  | @ -138,15 +138,12 @@ FindInFilesWidget::FindInFilesWidget() | |||
| 
 | ||||
|     auto& top_container = add<Widget>(); | ||||
|     top_container.set_layout<GUI::HorizontalBoxLayout>(); | ||||
|     top_container.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|     top_container.set_preferred_size(0, 20); | ||||
|     top_container.set_fixed_height(20); | ||||
| 
 | ||||
|     m_textbox = top_container.add<GUI::TextBox>(); | ||||
|     m_textbox->set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fill); | ||||
| 
 | ||||
|     m_button = top_container.add<GUI::Button>("Find in files"); | ||||
|     m_button->set_size_policy(GUI::SizePolicy::Fixed, GUI::SizePolicy::Fill); | ||||
|     m_button->set_preferred_size(100, 0); | ||||
|     m_button->set_fixed_width(100); | ||||
| 
 | ||||
|     m_result_view = add<GUI::TableView>(); | ||||
| 
 | ||||
|  |  | |||
|  | @ -54,16 +54,14 @@ GitWidget::GitWidget(const LexicalPath& repo_root) | |||
| 
 | ||||
|     auto& refresh_button = unstaged_header.add<GUI::Button>(); | ||||
|     refresh_button.set_icon(Gfx::Bitmap::load_from_file("/res/icons/16x16/reload.png")); | ||||
|     refresh_button.set_preferred_size({ 16, 16 }); | ||||
|     refresh_button.set_size_policy(GUI::SizePolicy::Fixed, GUI::SizePolicy::Fixed); | ||||
|     refresh_button.set_fixed_size(16, 16); | ||||
|     refresh_button.set_tooltip("refresh"); | ||||
|     refresh_button.on_click = [this](int) { refresh(); }; | ||||
| 
 | ||||
|     auto& unstaged_label = unstaged_header.add<GUI::Label>(); | ||||
|     unstaged_label.set_text("Unstaged"); | ||||
| 
 | ||||
|     unstaged_header.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|     unstaged_header.set_preferred_size(0, 20); | ||||
|     unstaged_header.set_fixed_height(20); | ||||
|     m_unstaged_files = unstaged.add<GitFilesView>( | ||||
|         [this](const auto& file) { stage_file(file); }, | ||||
|         Gfx::Bitmap::load_from_file("/res/icons/16x16/plus.png").release_nonnull()); | ||||
|  | @ -80,16 +78,14 @@ GitWidget::GitWidget(const LexicalPath& repo_root) | |||
| 
 | ||||
|     auto& commit_button = staged_header.add<GUI::Button>(); | ||||
|     commit_button.set_icon(Gfx::Bitmap::load_from_file("/res/icons/16x16/commit.png")); | ||||
|     commit_button.set_preferred_size({ 16, 16 }); | ||||
|     commit_button.set_size_policy(GUI::SizePolicy::Fixed, GUI::SizePolicy::Fixed); | ||||
|     commit_button.set_fixed_size(16, 16); | ||||
|     commit_button.set_tooltip("commit"); | ||||
|     commit_button.on_click = [this](int) { commit(); }; | ||||
| 
 | ||||
|     auto& staged_label = staged_header.add<GUI::Label>(); | ||||
|     staged_label.set_text("Staged"); | ||||
| 
 | ||||
|     staged_header.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|     staged_header.set_preferred_size(0, 20); | ||||
|     staged_header.set_fixed_height(20); | ||||
|     m_staged_files = staged.add<GitFilesView>( | ||||
|         [this](const auto& file) { unstage_file(file); }, | ||||
|         Gfx::Bitmap::load_from_file("/res/icons/16x16/minus.png").release_nonnull()); | ||||
|  |  | |||
|  | @ -100,8 +100,7 @@ HackStudioWidget::HackStudioWidget(const String& path_to_project) | |||
|     auto& outer_splitter = add<GUI::HorizontalSplitter>(); | ||||
| 
 | ||||
|     auto& left_hand_splitter = outer_splitter.add<GUI::VerticalSplitter>(); | ||||
|     left_hand_splitter.set_size_policy(GUI::SizePolicy::Fixed, GUI::SizePolicy::Fill); | ||||
|     left_hand_splitter.set_preferred_size(150, 0); | ||||
|     left_hand_splitter.set_fixed_width(150); | ||||
|     create_project_tree_view(left_hand_splitter); | ||||
|     m_project_tree_view_context_menu = create_project_tree_view_context_menu(); | ||||
| 
 | ||||
|  | @ -494,8 +493,8 @@ NonnullRefPtr<GUI::Action> HackStudioWidget::create_add_terminal_action() | |||
| 
 | ||||
| void HackStudioWidget::reveal_action_tab(GUI::Widget& widget) | ||||
| { | ||||
|     if (m_action_tab_widget->preferred_size().height() < 200) | ||||
|         m_action_tab_widget->set_preferred_size(0, 200); | ||||
|     if (m_action_tab_widget->min_height() < 200) | ||||
|         m_action_tab_widget->set_fixed_height(200); | ||||
|     m_action_tab_widget->set_active_widget(&widget); | ||||
| } | ||||
| 
 | ||||
|  | @ -617,7 +616,7 @@ void HackStudioWidget::run(TerminalWrapper& wrapper) | |||
| 
 | ||||
| void HackStudioWidget::hide_action_tabs() | ||||
| { | ||||
|     m_action_tab_widget->set_preferred_size(0, 24); | ||||
|     m_action_tab_widget->set_fixed_height(24); | ||||
| }; | ||||
| 
 | ||||
| Project& HackStudioWidget::project() | ||||
|  | @ -673,7 +672,7 @@ void HackStudioWidget::create_form_editor(GUI::Widget& parent) | |||
|     m_form_inner_container = parent.add<GUI::Widget>(); | ||||
|     m_form_inner_container->set_layout<GUI::HorizontalBoxLayout>(); | ||||
|     auto& form_widgets_toolbar = m_form_inner_container->add<GUI::ToolBar>(Orientation::Vertical, 26); | ||||
|     form_widgets_toolbar.set_preferred_size(38, 0); | ||||
|     form_widgets_toolbar.set_fixed_width(38); | ||||
| 
 | ||||
|     GUI::ActionGroup tool_actions; | ||||
|     tool_actions.set_exclusive(true); | ||||
|  | @ -710,8 +709,7 @@ void HackStudioWidget::create_form_editor(GUI::Widget& parent) | |||
|     m_form_editor_widget = form_editor_inner_splitter.add<FormEditorWidget>(); | ||||
| 
 | ||||
|     auto& form_editing_pane_container = form_editor_inner_splitter.add<GUI::VerticalSplitter>(); | ||||
|     form_editing_pane_container.set_size_policy(GUI::SizePolicy::Fixed, GUI::SizePolicy::Fill); | ||||
|     form_editing_pane_container.set_preferred_size(190, 0); | ||||
|     form_editing_pane_container.set_fixed_width(190); | ||||
|     form_editing_pane_container.set_layout<GUI::VerticalBoxLayout>(); | ||||
| 
 | ||||
|     auto add_properties_pane = [&](auto& text, auto& pane_widget) { | ||||
|  | @ -721,8 +719,7 @@ void HackStudioWidget::create_form_editor(GUI::Widget& parent) | |||
|         label.set_fill_with_background_color(true); | ||||
|         label.set_text_alignment(Gfx::TextAlignment::CenterLeft); | ||||
|         label.set_font(Gfx::Font::default_bold_font()); | ||||
|         label.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|         label.set_preferred_size(0, 16); | ||||
|         label.set_fixed_height(16); | ||||
|         wrapper.add_child(pane_widget); | ||||
|     }; | ||||
| 
 | ||||
|  | @ -803,14 +800,13 @@ void HackStudioWidget::create_action_tab(GUI::Widget& parent) | |||
| { | ||||
|     m_action_tab_widget = parent.add<GUI::TabWidget>(); | ||||
| 
 | ||||
|     m_action_tab_widget->set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|     m_action_tab_widget->set_preferred_size(0, 24); | ||||
|     m_action_tab_widget->set_fixed_height(24); | ||||
|     m_action_tab_widget->on_change = [this](auto&) { | ||||
|         on_action_tab_change(); | ||||
| 
 | ||||
|         static bool first_time = true; | ||||
|         if (!first_time) | ||||
|             m_action_tab_widget->set_preferred_size(0, 200); | ||||
|             m_action_tab_widget->set_fixed_height(200); | ||||
|         first_time = false; | ||||
|     }; | ||||
| 
 | ||||
|  |  | |||
|  | @ -69,8 +69,7 @@ private: | |||
| Locator::Locator() | ||||
| { | ||||
|     set_layout<GUI::VerticalBoxLayout>(); | ||||
|     set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|     set_preferred_size(0, 20); | ||||
|     set_fixed_height(20); | ||||
|     m_textbox = add<GUI::TextBox>(); | ||||
|     m_textbox->on_change = [this] { | ||||
|         update_suggestions(); | ||||
|  |  | |||
|  | @ -128,8 +128,7 @@ int main(int argc, char** argv) | |||
|     auto& tree_view = splitter.add<GUI::TreeView>(); | ||||
|     tree_view.set_model(remote_process.object_graph_model()); | ||||
|     tree_view.set_activates_on_selection(true); | ||||
|     tree_view.set_size_policy(GUI::SizePolicy::Fixed, GUI::SizePolicy::Fill); | ||||
|     tree_view.set_preferred_size(286, 0); | ||||
|     tree_view.set_fixed_width(286); | ||||
| 
 | ||||
|     auto& properties_tree_view = splitter.add<GUI::TreeView>(); | ||||
|     properties_tree_view.set_editable(true); | ||||
|  |  | |||
|  | @ -33,8 +33,7 @@ ProfileTimelineWidget::ProfileTimelineWidget(Profile& profile) | |||
| { | ||||
|     set_background_color(Color::White); | ||||
|     set_fill_with_background_color(true); | ||||
|     set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|     set_preferred_size(0, 80); | ||||
|     set_fixed_height(80); | ||||
| } | ||||
| 
 | ||||
| ProfileTimelineWidget::~ProfileTimelineWidget() | ||||
|  |  | |||
|  | @ -176,8 +176,7 @@ static bool prompt_to_stop_profiling(pid_t pid, const String& process_name) | |||
|     }); | ||||
| 
 | ||||
|     auto& stop_button = widget.add<GUI::Button>("Stop"); | ||||
|     stop_button.set_size_policy(GUI::SizePolicy::Fixed, GUI::SizePolicy::Fixed); | ||||
|     stop_button.set_preferred_size(140, 22); | ||||
|     stop_button.set_fixed_size(140, 22); | ||||
|     stop_button.on_click = [&](auto) { | ||||
|         GUI::Application::the()->quit(); | ||||
|     }; | ||||
|  |  | |||
|  | @ -509,9 +509,9 @@ void Field::set_field_size(size_t rows, size_t columns, size_t mine_count) | |||
|     m_rows = rows; | ||||
|     m_columns = columns; | ||||
|     m_mine_count = mine_count; | ||||
|     set_preferred_size(frame_thickness() * 2 + m_columns * square_size(), frame_thickness() * 2 + m_rows * square_size()); | ||||
|     set_fixed_size(frame_thickness() * 2 + m_columns * square_size(), frame_thickness() * 2 + m_rows * square_size()); | ||||
|     reset(); | ||||
|     m_on_size_changed(preferred_size()); | ||||
|     m_on_size_changed(min_size()); | ||||
| } | ||||
| 
 | ||||
| void Field::set_single_chording(bool enabled) | ||||
|  |  | |||
|  | @ -83,8 +83,7 @@ int main(int argc, char** argv) | |||
| 
 | ||||
|     auto& container = widget.add<GUI::Widget>(); | ||||
|     container.set_fill_with_background_color(true); | ||||
|     container.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|     container.set_preferred_size(0, 36); | ||||
|     container.set_fixed_height(36); | ||||
|     container.set_layout<GUI::HorizontalBoxLayout>(); | ||||
| 
 | ||||
|     auto& flag_image = container.add<GUI::ImageWidget>(); | ||||
|  | @ -93,15 +92,14 @@ int main(int argc, char** argv) | |||
|     auto& flag_label = container.add<GUI::Label>(); | ||||
|     auto& face_button = container.add<GUI::Button>(); | ||||
|     face_button.set_button_style(Gfx::ButtonStyle::CoolBar); | ||||
|     face_button.set_size_policy(GUI::SizePolicy::Fixed, GUI::SizePolicy::Fill); | ||||
|     face_button.set_preferred_size(36, 0); | ||||
|     face_button.set_fixed_width(36); | ||||
| 
 | ||||
|     auto& time_image = container.add<GUI::ImageWidget>(); | ||||
|     time_image.load_from_file("/res/icons/minesweeper/timer.png"); | ||||
| 
 | ||||
|     auto& time_label = container.add<GUI::Label>(); | ||||
|     auto& field = widget.add<Field>(flag_label, time_label, face_button, [&](auto size) { | ||||
|         size.set_height(size.height() + container.preferred_size().height()); | ||||
|         size.set_height(size.height() + container.min_size().height()); | ||||
|         window->resize(size); | ||||
|     }); | ||||
| 
 | ||||
|  |  | |||
|  | @ -57,19 +57,16 @@ AboutDialog::AboutDialog(const StringView& name, const Gfx::Bitmap* icon, Window | |||
|     banner_image.load_from_file("/res/graphics/brand-banner.png"); | ||||
| 
 | ||||
|     auto& content_container = widget.add<Widget>(); | ||||
|     content_container.set_size_policy(SizePolicy::Fill, SizePolicy::Fill); | ||||
|     content_container.set_layout<HorizontalBoxLayout>(); | ||||
| 
 | ||||
|     auto& left_container = content_container.add<Widget>(); | ||||
|     left_container.set_size_policy(SizePolicy::Fixed, SizePolicy::Fill); | ||||
|     left_container.set_preferred_size(60, 0); | ||||
|     left_container.set_fixed_width(60); | ||||
|     left_container.set_layout<VerticalBoxLayout>(); | ||||
|     left_container.layout()->set_margins({ 0, 12, 0, 0 }); | ||||
| 
 | ||||
|     if (icon) { | ||||
|         auto& icon_wrapper = left_container.add<Widget>(); | ||||
|         icon_wrapper.set_size_policy(SizePolicy::Fixed, SizePolicy::Fixed); | ||||
|         icon_wrapper.set_preferred_size(32, 48); | ||||
|         icon_wrapper.set_fixed_size(32, 48); | ||||
|         icon_wrapper.set_layout<VerticalBoxLayout>(); | ||||
| 
 | ||||
|         auto& icon_image = icon_wrapper.add<ImageWidget>(); | ||||
|  | @ -83,8 +80,7 @@ AboutDialog::AboutDialog(const StringView& name, const Gfx::Bitmap* icon, Window | |||
|     auto make_label = [&](const StringView& text, bool bold = false) { | ||||
|         auto& label = right_container.add<Label>(text); | ||||
|         label.set_text_alignment(Gfx::TextAlignment::CenterLeft); | ||||
|         label.set_size_policy(SizePolicy::Fill, SizePolicy::Fixed); | ||||
|         label.set_preferred_size(0, 14); | ||||
|         label.set_fixed_height(14); | ||||
|         if (bold) | ||||
|             label.set_font(Gfx::Font::default_bold_font()); | ||||
|     }; | ||||
|  | @ -98,13 +94,11 @@ AboutDialog::AboutDialog(const StringView& name, const Gfx::Bitmap* icon, Window | |||
|     right_container.layout()->add_spacer(); | ||||
| 
 | ||||
|     auto& button_container = right_container.add<Widget>(); | ||||
|     button_container.set_size_policy(SizePolicy::Fill, SizePolicy::Fixed); | ||||
|     button_container.set_preferred_size(0, 23); | ||||
|     button_container.set_fixed_height(23); | ||||
|     button_container.set_layout<HorizontalBoxLayout>(); | ||||
|     button_container.layout()->add_spacer(); | ||||
|     auto& ok_button = button_container.add<Button>("OK"); | ||||
|     ok_button.set_size_policy(SizePolicy::Fixed, SizePolicy::Fixed); | ||||
|     ok_button.set_preferred_size(80, 23); | ||||
|     ok_button.set_fixed_size(80, 23); | ||||
|     ok_button.on_click = [this](auto) { | ||||
|         done(Dialog::ExecOK); | ||||
|     }; | ||||
|  |  | |||
|  | @ -350,7 +350,7 @@ void AbstractTableView::layout_headers() | |||
|         int y = frame_thickness(); | ||||
|         int width = AK::max(content_width(), rect().width() - frame_thickness() * 2 - row_header_width - vertical_scrollbar_width); | ||||
| 
 | ||||
|         column_header().set_relative_rect(x, y, width, column_header().preferred_size().height()); | ||||
|         column_header().set_relative_rect(x, y, width, column_header().min_size().height()); | ||||
|     } | ||||
| 
 | ||||
|     if (row_header().is_visible()) { | ||||
|  | @ -361,7 +361,7 @@ void AbstractTableView::layout_headers() | |||
|         int y = frame_thickness() + column_header_height - vertical_scrollbar().value(); | ||||
|         int height = AK::max(content_height(), rect().height() - frame_thickness() * 2 - column_header_height - horizontal_scrollbar_height); | ||||
| 
 | ||||
|         row_header().set_relative_rect(x, y, row_header().preferred_size().width(), height); | ||||
|         row_header().set_relative_rect(x, y, row_header().min_size().width(), height); | ||||
|     } | ||||
| 
 | ||||
|     if (row_header().is_visible() && column_header().is_visible()) { | ||||
|  |  | |||
|  | @ -43,169 +43,124 @@ BoxLayout::BoxLayout(Orientation orientation) | |||
| 
 | ||||
| void BoxLayout::run(Widget& widget) | ||||
| { | ||||
|     bool should_log = false; | ||||
| #ifdef GBOXLAYOUT_DEBUG | ||||
|     should_log = true; | ||||
| #endif | ||||
|     if (should_log) | ||||
|         dbgprintf("BoxLayout: running layout on %s{%p}, entry count: %zu\n", widget.class_name(), &widget, m_entries.size()); | ||||
| 
 | ||||
|     if (m_entries.is_empty()) | ||||
|         return; | ||||
| 
 | ||||
|     Gfx::IntSize available_size = widget.size(); | ||||
|     int number_of_entries_with_fixed_size = 0; | ||||
|     struct Item { | ||||
|         Widget* widget { nullptr }; | ||||
|         int min_size { -1 }; | ||||
|         int max_size { -1 }; | ||||
|         int size { 0 }; | ||||
|         bool final { false }; | ||||
|     }; | ||||
| 
 | ||||
|     int number_of_visible_entries = 0; | ||||
| 
 | ||||
|     if (should_log) | ||||
|         dbgprintf("BoxLayout:  Starting with available size: %s\n", available_size.to_string().characters()); | ||||
|     Vector<Item, 32> items; | ||||
| 
 | ||||
|     for (size_t i = 0; i < m_entries.size(); ++i) { | ||||
|         auto& entry = m_entries[i]; | ||||
|         if (entry.type == Entry::Type::Spacer) { | ||||
|             ++number_of_visible_entries; | ||||
|             items.append(Item { nullptr, -1, -1 }); | ||||
|             continue; | ||||
|         } | ||||
|         if (!entry.widget) | ||||
|             continue; | ||||
| 
 | ||||
|         if (!entry.widget->is_visible()) | ||||
|             continue; | ||||
|         ++number_of_visible_entries; | ||||
|         if (entry.widget && entry.widget->size_policy(orientation()) == SizePolicy::Fixed) { | ||||
|             if (should_log) { | ||||
|                 dbgprintf("BoxLayout:   Subtracting for fixed %s{%p}, size: %s\n", entry.widget->class_name(), entry.widget.ptr(), entry.widget->preferred_size().to_string().characters()); | ||||
|                 dbgprintf("BoxLayout:     Available size before: %s\n", available_size.to_string().characters()); | ||||
|         auto min_size = entry.widget->min_size(); | ||||
|         auto max_size = entry.widget->max_size(); | ||||
|         items.append(Item { entry.widget.ptr(), min_size.primary_size_for_orientation(orientation()), max_size.primary_size_for_orientation(orientation()) }); | ||||
|     } | ||||
| 
 | ||||
|     if (items.is_empty()) | ||||
|         return; | ||||
| 
 | ||||
|     int available_size = widget.size().primary_size_for_orientation(orientation()) - spacing() * (items.size() - 1); | ||||
|     int unfinished_items = items.size(); | ||||
| 
 | ||||
|     if (orientation() == Gfx::Orientation::Horizontal) | ||||
|         available_size -= margins().left() + margins().right(); | ||||
|     else | ||||
|         available_size -= margins().top() + margins().bottom(); | ||||
| 
 | ||||
|     // Pass 1: Set all items to their minimum size.
 | ||||
|     for (auto& item : items) { | ||||
|         item.size = 0; | ||||
|         if (item.min_size >= 0) | ||||
|             item.size = item.min_size; | ||||
|         available_size -= item.size; | ||||
| 
 | ||||
|         if (item.min_size >= 0 && item.max_size >= 0 && item.min_size == item.max_size) { | ||||
|             // Fixed-size items finish immediately in the first pass.
 | ||||
|             item.final = true; | ||||
|             --unfinished_items; | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     // Pass 2: Distribute remaining available size evenly, respecting each item's maximum size.
 | ||||
|     while (unfinished_items && available_size > 0) { | ||||
|         int slice = available_size / unfinished_items; | ||||
|         available_size = 0; | ||||
| 
 | ||||
|         for (auto& item : items) { | ||||
|             if (item.final) | ||||
|                 continue; | ||||
| 
 | ||||
|             int item_size_with_full_slice = item.size + slice; | ||||
|             item.size = item_size_with_full_slice; | ||||
| 
 | ||||
|             if (item.max_size >= 0) | ||||
|                 item.size = min(item.max_size, item_size_with_full_slice); | ||||
| 
 | ||||
|             // If the slice was more than we needed, return remained to available_size.
 | ||||
|             int remainder_to_give_back = item_size_with_full_slice - item.size; | ||||
|             available_size += remainder_to_give_back; | ||||
| 
 | ||||
|             if (item.max_size >= 0 && item.size == item.max_size) { | ||||
|                 // We've hit the item's max size. Don't give it any more space.
 | ||||
|                 item.final = true; | ||||
|                 --unfinished_items; | ||||
|             } | ||||
|             available_size -= entry.widget->preferred_size(); | ||||
|             if (should_log) | ||||
|                 dbgprintf("BoxLayout:     Available size  after: %s\n", available_size.to_string().characters()); | ||||
|             ++number_of_entries_with_fixed_size; | ||||
|         } | ||||
|         available_size -= { spacing(), spacing() }; | ||||
|     } | ||||
| 
 | ||||
|     available_size += { spacing(), spacing() }; | ||||
| 
 | ||||
|     available_size -= { margins().left() + margins().right(), margins().top() + margins().bottom() }; | ||||
| 
 | ||||
|     if (should_log) | ||||
|         dbgprintf("BoxLayout:  Number of visible: %d/%zu\n", number_of_visible_entries, m_entries.size()); | ||||
| 
 | ||||
|     int number_of_entries_with_automatic_size = number_of_visible_entries - number_of_entries_with_fixed_size; | ||||
| 
 | ||||
|     if (should_log) | ||||
|         dbgprintf("BoxLayout:   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); | ||||
| 
 | ||||
|     Gfx::IntSize automatic_size; | ||||
| 
 | ||||
|     int remaining_size = 0; | ||||
|     int number_of_entries_with_automatic_size_remaining = number_of_entries_with_automatic_size; | ||||
| 
 | ||||
|     if (number_of_entries_with_automatic_size) { | ||||
|         if (m_orientation == Orientation::Horizontal) { | ||||
|             automatic_size.set_width(available_size.width() / number_of_entries_with_automatic_size); | ||||
|             automatic_size.set_height(widget.height()); | ||||
| 
 | ||||
|             remaining_size = available_size.width(); | ||||
|         } else { | ||||
|             automatic_size.set_width(widget.width()); | ||||
|             automatic_size.set_height(available_size.height() / number_of_entries_with_automatic_size); | ||||
| 
 | ||||
|             remaining_size = available_size.height(); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     if (should_log) | ||||
|         dbgprintf("BoxLayout:   automatic_size=%s\n", automatic_size.to_string().characters()); | ||||
| 
 | ||||
|     // Pass 3: Place the widgets.
 | ||||
|     int current_x = margins().left(); | ||||
|     int current_y = margins().top(); | ||||
| 
 | ||||
|     for (size_t i = 0; i < m_entries.size(); ++i) { | ||||
|         auto& entry = m_entries[i]; | ||||
|         if (entry.type == Entry::Type::Spacer) { | ||||
|             current_x += automatic_size.width(); | ||||
|             current_y += automatic_size.height(); | ||||
|             continue; | ||||
|         } | ||||
|     for (auto& item : items) { | ||||
|         Gfx::IntRect rect { current_x, current_y, 0, 0 }; | ||||
| 
 | ||||
|         if (!entry.widget) | ||||
|             continue; | ||||
|         if (!entry.widget->is_visible()) | ||||
|             continue; | ||||
|         Gfx::IntRect rect(current_x, current_y, 0, 0); | ||||
|         if (entry.layout) { | ||||
|             // FIXME: Implement recursive layout.
 | ||||
|             ASSERT_NOT_REACHED(); | ||||
|         } | ||||
|         ASSERT(entry.widget); | ||||
|         rect.set_primary_size_for_orientation(orientation(), item.size); | ||||
| 
 | ||||
|         if (entry.widget->size_policy(Orientation::Vertical) == SizePolicy::Fixed) { | ||||
|             rect.set_width(widget.width()); | ||||
|             rect.set_height(entry.widget->preferred_size().height()); | ||||
|         } else { | ||||
|             if (orientation() == Orientation::Horizontal) | ||||
|                 rect.set_height(widget.height()); | ||||
|         if (item.widget) { | ||||
|             int secondary = widget.size().secondary_size_for_orientation(orientation()); | ||||
|             if (orientation() == Gfx::Orientation::Horizontal) | ||||
|                 secondary -= margins().top() + margins().bottom(); | ||||
|             else | ||||
|                 rect.set_height(remaining_size / number_of_entries_with_automatic_size_remaining); | ||||
|         } | ||||
|                 secondary -= margins().left() + margins().right(); | ||||
| 
 | ||||
|         if (entry.widget->size_policy(Orientation::Horizontal) == SizePolicy::Fixed) { | ||||
|             rect.set_width(entry.widget->preferred_size().width()); | ||||
|             rect.set_height(widget.height()); | ||||
|         } else { | ||||
|             if (orientation() == Orientation::Horizontal) | ||||
|                 rect.set_width(remaining_size / number_of_entries_with_automatic_size_remaining); | ||||
|             int min_secondary = item.widget->min_size().secondary_size_for_orientation(orientation()); | ||||
|             int max_secondary = item.widget->max_size().secondary_size_for_orientation(orientation()); | ||||
|             if (min_secondary >= 0) | ||||
|                 secondary = max(secondary, min_secondary); | ||||
|             if (max_secondary >= 0) | ||||
|                 secondary = min(secondary, max_secondary); | ||||
| 
 | ||||
|             rect.set_secondary_size_for_orientation(orientation(), secondary); | ||||
| 
 | ||||
|             if (orientation() == Gfx::Orientation::Horizontal) | ||||
|                 rect.center_vertically_within(widget.rect()); | ||||
|             else | ||||
|                 rect.set_width(widget.width()); | ||||
|                 rect.center_horizontally_within(widget.rect()); | ||||
| 
 | ||||
|             item.widget->set_relative_rect(rect); | ||||
|         } | ||||
| 
 | ||||
|         if (orientation() == Orientation::Horizontal) { | ||||
|             if (entry.widget->size_policy(Orientation::Vertical) == SizePolicy::Fill) | ||||
|                 rect.set_height(widget.height() - margins().top() - margins().bottom()); | ||||
|         } else { | ||||
|             if (entry.widget->size_policy(Orientation::Horizontal) == SizePolicy::Fill) | ||||
|                 rect.set_width(widget.width() - margins().left() - margins().right()); | ||||
|         } | ||||
| 
 | ||||
|         // Apply min/max constraints to filled widgets.
 | ||||
|         if (entry.widget->size_policy(Orientation::Horizontal) == SizePolicy::Fill) { | ||||
|             if (entry.widget->min_size().width() >= 0) | ||||
|                 rect.set_width(max(entry.widget->min_size().width(), rect.width())); | ||||
|             if (entry.widget->max_size().width() >= 0) | ||||
|                 rect.set_width(min(entry.widget->max_size().width(), rect.width())); | ||||
|         } | ||||
|         if (entry.widget->size_policy(Orientation::Vertical) == SizePolicy::Fill) { | ||||
|             if (entry.widget->min_size().height() >= 0) | ||||
|                 rect.set_height(max(entry.widget->min_size().height(), rect.height())); | ||||
|             if (entry.widget->max_size().height() >= 0) | ||||
|                 rect.set_height(min(entry.widget->max_size().height(), rect.height())); | ||||
|         } | ||||
| 
 | ||||
|         if (orientation() == Orientation::Horizontal) | ||||
|             rect.center_vertically_within(widget.rect()); | ||||
|         else | ||||
|             rect.center_horizontally_within(widget.rect()); | ||||
| 
 | ||||
|         if (should_log) | ||||
|             dbgprintf("BoxLayout: apply, %s{%p} <- %s\n", entry.widget->class_name(), entry.widget.ptr(), rect.to_string().characters()); | ||||
| 
 | ||||
|         entry.widget->set_relative_rect(rect); | ||||
| 
 | ||||
|         if (orientation() == Orientation::Horizontal) { | ||||
|             if (entry.widget->size_policy(Orientation::Horizontal) == SizePolicy::Fill) { | ||||
|                 remaining_size -= rect.width(); | ||||
|                 --number_of_entries_with_automatic_size_remaining; | ||||
|             } | ||||
|         if (orientation() == Gfx::Orientation::Horizontal) | ||||
|             current_x += rect.width() + spacing(); | ||||
|         } else { | ||||
|             if (entry.widget->size_policy(Orientation::Vertical) == SizePolicy::Fill) { | ||||
|                 remaining_size -= rect.height(); | ||||
|                 --number_of_entries_with_automatic_size_remaining; | ||||
|             } | ||||
|         else | ||||
|             current_y += rect.height() + spacing(); | ||||
|         } | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| } | ||||
|  |  | |||
|  | @ -74,12 +74,10 @@ void BreadcrumbBar::append_segment(const String& text, const Gfx::Bitmap* icon, | |||
|             on_segment_click(index); | ||||
|     }; | ||||
| 
 | ||||
|     button.set_size_policy(SizePolicy::Fixed, SizePolicy::Fixed); | ||||
| 
 | ||||
|     auto button_text_width = button.font().width(text); | ||||
|     auto icon_width = icon ? icon->width() : 0; | ||||
|     auto icon_padding = icon ? 4 : 0; | ||||
|     button.set_preferred_size(button_text_width + icon_width + icon_padding + 16, 16 + 8); | ||||
|     button.set_fixed_size(button_text_width + icon_width + icon_padding + 16, 16 + 8); | ||||
| 
 | ||||
|     Segment segment { icon, text, data, button.make_weak_ptr<GUI::Button>() }; | ||||
| 
 | ||||
|  |  | |||
|  | @ -66,8 +66,7 @@ Calendar::Calendar(Core::DateTime date_time) | |||
| 
 | ||||
|     m_day_name_container = add<GUI::Widget>(); | ||||
|     m_day_name_container->set_layout<GUI::HorizontalBoxLayout>(); | ||||
|     m_day_name_container->set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|     m_day_name_container->set_preferred_size(0, 16); | ||||
|     m_day_name_container->set_fixed_height(16); | ||||
|     m_day_name_container->layout()->set_spacing(0); | ||||
|     m_day_name_container->set_fill_with_background_color(true); | ||||
|     m_day_name_container->set_background_role(Gfx::ColorRole::HoverHighlight); | ||||
|  |  | |||
|  | @ -180,7 +180,6 @@ void ColorPicker::build_ui() | |||
|     auto& tab_widget = root_container.add<GUI::TabWidget>(); | ||||
| 
 | ||||
|     auto& tab_palette = tab_widget.add_tab<Widget>("Palette"); | ||||
|     tab_palette.set_size_policy(SizePolicy::Fill, SizePolicy::Fill); | ||||
|     tab_palette.set_layout<VerticalBoxLayout>(); | ||||
|     tab_palette.layout()->set_margins({ 4, 4, 4, 4 }); | ||||
|     tab_palette.layout()->set_spacing(4); | ||||
|  | @ -188,7 +187,6 @@ void ColorPicker::build_ui() | |||
|     build_ui_palette(tab_palette); | ||||
| 
 | ||||
|     auto& tab_custom_color = tab_widget.add_tab<Widget>("Custom Color"); | ||||
|     tab_custom_color.set_size_policy(SizePolicy::Fill, SizePolicy::Fill); | ||||
|     tab_custom_color.set_layout<VerticalBoxLayout>(); | ||||
|     tab_custom_color.layout()->set_margins({ 4, 4, 4, 4 }); | ||||
|     tab_custom_color.layout()->set_spacing(4); | ||||
|  | @ -196,23 +194,20 @@ void ColorPicker::build_ui() | |||
|     build_ui_custom(tab_custom_color); | ||||
| 
 | ||||
|     auto& button_container = root_container.add<Widget>(); | ||||
|     button_container.set_size_policy(SizePolicy::Fill, SizePolicy::Fixed); | ||||
|     button_container.set_preferred_size(0, 22); | ||||
|     button_container.set_fixed_height(22); | ||||
|     button_container.set_layout<HorizontalBoxLayout>(); | ||||
|     button_container.layout()->set_spacing(4); | ||||
|     button_container.layout()->add_spacer(); | ||||
| 
 | ||||
|     auto& ok_button = button_container.add<Button>(); | ||||
|     ok_button.set_size_policy(SizePolicy::Fixed, SizePolicy::Fill); | ||||
|     ok_button.set_preferred_size(80, 0); | ||||
|     ok_button.set_fixed_width(80); | ||||
|     ok_button.set_text("OK"); | ||||
|     ok_button.on_click = [this](auto) { | ||||
|         done(ExecOK); | ||||
|     }; | ||||
| 
 | ||||
|     auto& cancel_button = button_container.add<Button>(); | ||||
|     cancel_button.set_size_policy(SizePolicy::Fixed, SizePolicy::Fill); | ||||
|     cancel_button.set_preferred_size(80, 0); | ||||
|     cancel_button.set_fixed_width(80); | ||||
|     cancel_button.set_text("Cancel"); | ||||
|     cancel_button.on_click = [this](auto) { | ||||
|         done(ExecCancel); | ||||
|  | @ -231,7 +226,6 @@ void ColorPicker::build_ui_palette(Widget& root_container) | |||
|     for (int r = 0; r < 4; r++) { | ||||
|         auto& colors_row = root_container.add<Widget>(); | ||||
|         colors_row.set_layout<HorizontalBoxLayout>(); | ||||
|         colors_row.set_size_policy(SizePolicy::Fill, SizePolicy::Fill); | ||||
| 
 | ||||
|         for (int i = 0; i < 8; i++) { | ||||
|             create_color_button(colors_row, colors[r][i]); | ||||
|  | @ -254,8 +248,7 @@ void ColorPicker::build_ui_custom(Widget& root_container) | |||
| 
 | ||||
|     // Left Side
 | ||||
|     m_custom_color = horizontal_container.add<CustomColorWidget>(m_color); | ||||
|     m_custom_color->set_size_policy(SizePolicy::Fixed, SizePolicy::Fixed); | ||||
|     m_custom_color->set_preferred_size(299, 260); | ||||
|     m_custom_color->set_fixed_size(299, 260); | ||||
|     m_custom_color->on_pick = [this](Color color) { | ||||
|         if (m_color == color) | ||||
|             return; | ||||
|  | @ -266,17 +259,15 @@ void ColorPicker::build_ui_custom(Widget& root_container) | |||
| 
 | ||||
|     // Right Side
 | ||||
|     auto& vertical_container = horizontal_container.add<Widget>(); | ||||
|     vertical_container.set_size_policy(SizePolicy::Fixed, SizePolicy::Fill); | ||||
|     vertical_container.set_layout<VerticalBoxLayout>(); | ||||
|     vertical_container.layout()->set_margins({ 8, 0, 0, 0 }); | ||||
|     vertical_container.set_preferred_size(128, 0); | ||||
|     vertical_container.set_fixed_width(128); | ||||
| 
 | ||||
|     auto& preview_container = vertical_container.add<Frame>(); | ||||
|     preview_container.set_size_policy(SizePolicy::Fill, SizePolicy::Fixed); | ||||
|     preview_container.set_layout<VerticalBoxLayout>(); | ||||
|     preview_container.layout()->set_margins({ 2, 2, 2, 2 }); | ||||
|     preview_container.layout()->set_spacing(0); | ||||
|     preview_container.set_preferred_size(0, 128); | ||||
|     preview_container.set_fixed_height(128); | ||||
| 
 | ||||
|     // Current color
 | ||||
|     preview_container.add<ColorPreview>(m_color); | ||||
|  | @ -289,17 +280,14 @@ void ColorPicker::build_ui_custom(Widget& root_container) | |||
|     // HTML
 | ||||
|     auto& html_container = vertical_container.add<GUI::Widget>(); | ||||
|     html_container.set_layout<GUI::HorizontalBoxLayout>(); | ||||
|     html_container.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|     html_container.set_preferred_size(0, 22); | ||||
|     html_container.set_fixed_height(22); | ||||
| 
 | ||||
|     auto& html_label = html_container.add<GUI::Label>(); | ||||
|     html_label.set_text_alignment(Gfx::TextAlignment::CenterLeft); | ||||
|     html_label.set_size_policy(GUI::SizePolicy::Fixed, GUI::SizePolicy::Fill); | ||||
|     html_label.set_preferred_size({ 48, 0 }); | ||||
|     html_label.set_fixed_width(48); | ||||
|     html_label.set_text("HTML:"); | ||||
| 
 | ||||
|     m_html_text = html_container.add<GUI::TextBox>(); | ||||
|     m_html_text->set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fill); | ||||
|     m_html_text->set_text(m_color_has_alpha_channel ? m_color.to_string() : m_color.to_string_without_alpha()); | ||||
|     m_html_text->on_change = [this]() { | ||||
|         auto color_name = m_html_text->text(); | ||||
|  | @ -321,17 +309,14 @@ void ColorPicker::build_ui_custom(Widget& root_container) | |||
|     auto make_spinbox = [&](RGBComponent component, int initial_value) { | ||||
|         auto& rgb_container = vertical_container.add<GUI::Widget>(); | ||||
|         rgb_container.set_layout<GUI::HorizontalBoxLayout>(); | ||||
|         rgb_container.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|         rgb_container.set_preferred_size(0, 22); | ||||
|         rgb_container.set_fixed_height(22); | ||||
| 
 | ||||
|         auto& rgb_label = rgb_container.add<GUI::Label>(); | ||||
|         rgb_label.set_text_alignment(Gfx::TextAlignment::CenterLeft); | ||||
|         rgb_label.set_size_policy(GUI::SizePolicy::Fixed, GUI::SizePolicy::Fill); | ||||
|         rgb_label.set_preferred_size({ 48, 0 }); | ||||
|         rgb_label.set_fixed_width(48); | ||||
| 
 | ||||
|         auto& spinbox = rgb_container.add<SpinBox>(); | ||||
|         spinbox.set_size_policy(SizePolicy::Fill, SizePolicy::Fixed); | ||||
|         spinbox.set_preferred_size(0, 20); | ||||
|         spinbox.set_fixed_height(20); | ||||
|         spinbox.set_min(0); | ||||
|         spinbox.set_max(255); | ||||
|         spinbox.set_value(initial_value); | ||||
|  | @ -395,7 +380,6 @@ void ColorPicker::create_color_button(Widget& container, unsigned rgb) | |||
|     Color color = Color::from_rgb(rgb); | ||||
| 
 | ||||
|     auto& widget = container.add<ColorButton>(*this, color); | ||||
|     widget.set_size_policy(SizePolicy::Fill, SizePolicy::Fill); | ||||
|     widget.on_click = [this](Color color) { | ||||
|         for (auto& value : m_color_widgets) { | ||||
|             value->set_selected(false); | ||||
|  | @ -465,18 +449,16 @@ CustomColorWidget::CustomColorWidget(Color color) | |||
|     set_layout<HorizontalBoxLayout>(); | ||||
| 
 | ||||
|     m_color_field = add<ColorField>(color); | ||||
|     m_color_field->set_size_policy(SizePolicy::Fixed, SizePolicy::Fixed); | ||||
|     auto size = 256 + (m_color_field->frame_thickness() * 2); | ||||
|     m_color_field->set_preferred_size(size, size); | ||||
|     m_color_field->set_fixed_size(size, size); | ||||
|     m_color_field->on_pick = [this](Color color) { | ||||
|         if (on_pick) | ||||
|             on_pick(color); | ||||
|     }; | ||||
| 
 | ||||
|     m_color_slider = add<ColorSlider>(color.to_hsv().hue); | ||||
|     m_color_slider->set_size_policy(SizePolicy::Fixed, SizePolicy::Fixed); | ||||
|     auto slider_width = 24 + (m_color_slider->frame_thickness() * 2); | ||||
|     m_color_slider->set_preferred_size(slider_width, size); | ||||
|     m_color_slider->set_fixed_size(slider_width, size); | ||||
|     m_color_slider->on_pick = [this](double value) { | ||||
|         m_color_field->set_hue_from_pick(value); | ||||
|     }; | ||||
|  |  | |||
|  | @ -106,17 +106,14 @@ FilePicker::FilePicker(Window* parent_window, Mode mode, Options options, const | |||
|     auto& upper_container = vertical_container.add<Widget>(); | ||||
|     upper_container.set_layout<HorizontalBoxLayout>(); | ||||
|     upper_container.layout()->set_spacing(2); | ||||
|     upper_container.set_size_policy(SizePolicy::Fill, SizePolicy::Fixed); | ||||
|     upper_container.set_preferred_size(0, 26); | ||||
|     upper_container.set_fixed_height(26); | ||||
| 
 | ||||
|     auto& toolbar = upper_container.add<ToolBar>(); | ||||
|     toolbar.set_size_policy(SizePolicy::Fixed, SizePolicy::Fill); | ||||
|     toolbar.set_preferred_size(165, 0); | ||||
|     toolbar.set_fixed_width(165); | ||||
|     toolbar.set_has_frame(false); | ||||
| 
 | ||||
|     m_location_textbox = upper_container.add<TextBox>(); | ||||
|     m_location_textbox->set_size_policy(SizePolicy::Fill, SizePolicy::Fixed); | ||||
|     m_location_textbox->set_preferred_size(0, 22); | ||||
|     m_location_textbox->set_fixed_height(22); | ||||
|     m_location_textbox->set_text(path); | ||||
| 
 | ||||
|     m_view = vertical_container.add<MultiView>(); | ||||
|  | @ -176,17 +173,14 @@ FilePicker::FilePicker(Window* parent_window, Mode mode, Options options, const | |||
|     auto& lower_container = vertical_container.add<Widget>(); | ||||
|     lower_container.set_layout<VerticalBoxLayout>(); | ||||
|     lower_container.layout()->set_spacing(4); | ||||
|     lower_container.set_size_policy(SizePolicy::Fill, SizePolicy::Fixed); | ||||
|     lower_container.set_preferred_size(0, 48); | ||||
|     lower_container.set_fixed_height(48); | ||||
| 
 | ||||
|     auto& filename_container = lower_container.add<Widget>(); | ||||
|     filename_container.set_size_policy(SizePolicy::Fill, SizePolicy::Fixed); | ||||
|     filename_container.set_preferred_size(0, 22); | ||||
|     filename_container.set_fixed_height(22); | ||||
|     filename_container.set_layout<HorizontalBoxLayout>(); | ||||
|     auto& filename_label = filename_container.add<Label>("File name:"); | ||||
|     filename_label.set_text_alignment(Gfx::TextAlignment::CenterLeft); | ||||
|     filename_label.set_size_policy(SizePolicy::Fixed, SizePolicy::Fill); | ||||
|     filename_label.set_preferred_size(60, 0); | ||||
|     filename_label.set_fixed_width(60); | ||||
|     m_filename_textbox = filename_container.add<TextBox>(); | ||||
|     m_filename_textbox->set_focus(true); | ||||
|     if (m_mode == Mode::Save) { | ||||
|  | @ -214,23 +208,20 @@ FilePicker::FilePicker(Window* parent_window, Mode mode, Options options, const | |||
|     }; | ||||
| 
 | ||||
|     auto& button_container = lower_container.add<Widget>(); | ||||
|     button_container.set_size_policy(SizePolicy::Fill, SizePolicy::Fixed); | ||||
|     button_container.set_preferred_size(0, 22); | ||||
|     button_container.set_fixed_height(22); | ||||
|     button_container.set_layout<HorizontalBoxLayout>(); | ||||
|     button_container.layout()->set_spacing(4); | ||||
|     button_container.layout()->add_spacer(); | ||||
| 
 | ||||
|     auto& cancel_button = button_container.add<Button>(); | ||||
|     cancel_button.set_size_policy(SizePolicy::Fixed, SizePolicy::Fill); | ||||
|     cancel_button.set_preferred_size(80, 0); | ||||
|     cancel_button.set_fixed_width(80); | ||||
|     cancel_button.set_text("Cancel"); | ||||
|     cancel_button.on_click = [this](auto) { | ||||
|         done(ExecCancel); | ||||
|     }; | ||||
| 
 | ||||
|     auto& ok_button = button_container.add<Button>(); | ||||
|     ok_button.set_size_policy(SizePolicy::Fixed, SizePolicy::Fill); | ||||
|     ok_button.set_preferred_size(80, 0); | ||||
|     ok_button.set_fixed_width(80); | ||||
|     ok_button.set_text(ok_button_name(m_mode)); | ||||
|     ok_button.on_click = [this](auto) { | ||||
|         on_file_return(); | ||||
|  | @ -253,24 +244,21 @@ FilePicker::FilePicker(Window* parent_window, Mode mode, Options options, const | |||
|     if (!((unsigned)options & (unsigned)Options::DisablePreview)) { | ||||
|         m_preview_container = horizontal_container.add<Frame>(); | ||||
|         m_preview_container->set_visible(false); | ||||
|         m_preview_container->set_size_policy(SizePolicy::Fixed, SizePolicy::Fill); | ||||
|         m_preview_container->set_preferred_size(180, 0); | ||||
|         m_preview_container->set_fixed_width(180); | ||||
|         m_preview_container->set_layout<VerticalBoxLayout>(); | ||||
|         m_preview_container->layout()->set_margins({ 8, 8, 8, 8 }); | ||||
| 
 | ||||
|         m_preview_image = m_preview_container->add<ImageWidget>(); | ||||
|         m_preview_image->set_should_stretch(true); | ||||
|         m_preview_image->set_auto_resize(false); | ||||
|         m_preview_image->set_preferred_size(160, 160); | ||||
|         m_preview_image->set_fixed_size(160, 160); | ||||
| 
 | ||||
|         m_preview_name_label = m_preview_container->add<Label>(); | ||||
|         m_preview_name_label->set_font(Gfx::Font::default_bold_font()); | ||||
|         m_preview_name_label->set_size_policy(SizePolicy::Fill, SizePolicy::Fixed); | ||||
|         m_preview_name_label->set_preferred_size(0, m_preview_name_label->font().glyph_height()); | ||||
|         m_preview_name_label->set_fixed_height(m_preview_name_label->font().glyph_height()); | ||||
| 
 | ||||
|         m_preview_geometry_label = m_preview_container->add<Label>(); | ||||
|         m_preview_geometry_label->set_size_policy(SizePolicy::Fill, SizePolicy::Fixed); | ||||
|         m_preview_geometry_label->set_preferred_size(0, m_preview_name_label->font().glyph_height()); | ||||
|         m_preview_geometry_label->set_fixed_height(m_preview_name_label->font().glyph_height()); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -45,11 +45,9 @@ HeaderView::HeaderView(AbstractTableView& table_view, Gfx::Orientation orientati | |||
|     set_font(Gfx::Font::default_bold_font()); | ||||
| 
 | ||||
|     if (m_orientation == Gfx::Orientation::Horizontal) { | ||||
|         set_size_policy(SizePolicy::Fill, SizePolicy::Fixed); | ||||
|         set_preferred_size(0, 16); | ||||
|         set_fixed_height(16); | ||||
|     } else { | ||||
|         set_size_policy(SizePolicy::Fixed, SizePolicy::Fill); | ||||
|         set_preferred_size(40, 0); | ||||
|         set_fixed_width(40); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -39,7 +39,6 @@ ImageWidget::ImageWidget(const StringView&) | |||
|     set_frame_thickness(0); | ||||
|     set_frame_shadow(Gfx::FrameShadow::Plain); | ||||
|     set_frame_shape(Gfx::FrameShape::NoFrame); | ||||
|     set_size_policy(GUI::SizePolicy::Fixed, GUI::SizePolicy::Fixed); | ||||
|     set_auto_resize(true); | ||||
| } | ||||
| 
 | ||||
|  | @ -54,7 +53,7 @@ void ImageWidget::set_bitmap(const Gfx::Bitmap* bitmap) | |||
| 
 | ||||
|     m_bitmap = bitmap; | ||||
|     if (m_bitmap && m_auto_resize) | ||||
|         set_preferred_size(m_bitmap->width(), m_bitmap->height()); | ||||
|         set_fixed_size(m_bitmap->size()); | ||||
| 
 | ||||
|     update(); | ||||
| } | ||||
|  | @ -64,7 +63,7 @@ void ImageWidget::set_auto_resize(bool value) | |||
|     m_auto_resize = value; | ||||
| 
 | ||||
|     if (m_bitmap) | ||||
|         set_preferred_size(m_bitmap->width(), m_bitmap->height()); | ||||
|         set_fixed_size(m_bitmap->size()); | ||||
| } | ||||
| 
 | ||||
| void ImageWidget::animate() | ||||
|  |  | |||
|  | @ -74,20 +74,16 @@ void InputBox::build() | |||
|     widget.layout()->set_spacing(6); | ||||
| 
 | ||||
|     auto& label_editor_container = widget.add<Widget>(); | ||||
|     label_editor_container.set_size_policy(SizePolicy::Fill, SizePolicy::Fill); | ||||
|     label_editor_container.set_layout<HorizontalBoxLayout>(); | ||||
| 
 | ||||
|     auto& label = label_editor_container.add<Label>(m_prompt); | ||||
|     label.set_size_policy(SizePolicy::Fixed, SizePolicy::Fixed); | ||||
|     label.set_preferred_size(text_width, 16); | ||||
|     label.set_fixed_size(text_width, 16); | ||||
| 
 | ||||
|     m_text_editor = label_editor_container.add<TextBox>(); | ||||
|     m_text_editor->set_size_policy(SizePolicy::Fill, SizePolicy::Fixed); | ||||
|     m_text_editor->set_preferred_size(0, 19); | ||||
|     m_text_editor->set_fixed_height(19); | ||||
| 
 | ||||
|     auto& button_container_outer = widget.add<Widget>(); | ||||
|     button_container_outer.set_size_policy(SizePolicy::Fill, SizePolicy::Fixed); | ||||
|     button_container_outer.set_preferred_size(0, 20); | ||||
|     button_container_outer.set_fixed_height(20); | ||||
|     button_container_outer.set_layout<VerticalBoxLayout>(); | ||||
| 
 | ||||
|     auto& button_container_inner = button_container_outer.add<Widget>(); | ||||
|  | @ -97,8 +93,7 @@ void InputBox::build() | |||
|     button_container_inner.layout()->add_spacer(); | ||||
| 
 | ||||
|     m_ok_button = button_container_inner.add<Button>(); | ||||
|     m_ok_button->set_size_policy(SizePolicy::Fill, SizePolicy::Fixed); | ||||
|     m_ok_button->set_preferred_size(0, 20); | ||||
|     m_ok_button->set_fixed_height(20); | ||||
|     m_ok_button->set_text("OK"); | ||||
|     m_ok_button->on_click = [this](auto) { | ||||
|         dbgprintf("GUI::InputBox: OK button clicked\n"); | ||||
|  | @ -107,8 +102,7 @@ void InputBox::build() | |||
|     }; | ||||
| 
 | ||||
|     m_cancel_button = button_container_inner.add<Button>(); | ||||
|     m_cancel_button->set_size_policy(SizePolicy::Fill, SizePolicy::Fixed); | ||||
|     m_cancel_button->set_preferred_size(0, 20); | ||||
|     m_cancel_button->set_fixed_height(20); | ||||
|     m_cancel_button->set_text("Cancel"); | ||||
|     m_cancel_button->on_click = [this](auto) { | ||||
|         dbgprintf("GUI::InputBox: Cancel button clicked\n"); | ||||
|  |  | |||
|  | @ -119,8 +119,7 @@ void Label::paint_event(PaintEvent& event) | |||
| 
 | ||||
| void Label::size_to_fit() | ||||
| { | ||||
|     set_size_policy(SizePolicy::Fixed, SizePolicy::Fill); | ||||
|     set_preferred_size(font().width(m_text), 0); | ||||
|     set_fixed_width(font().width(m_text)); | ||||
| } | ||||
| 
 | ||||
| } | ||||
|  |  | |||
|  | @ -123,21 +123,18 @@ void MessageBox::build() | |||
|     } | ||||
| 
 | ||||
|     auto& label = message_container.add<Label>(m_text); | ||||
|     label.set_size_policy(SizePolicy::Fill, SizePolicy::Fixed); | ||||
|     label.set_preferred_size(text_width, 16); | ||||
|     label.set_fixed_height(16); | ||||
|     if (m_type != Type::None) | ||||
|         label.set_text_alignment(Gfx::TextAlignment::CenterLeft); | ||||
| 
 | ||||
|     auto& button_container = widget.add<Widget>(); | ||||
|     button_container.set_layout<HorizontalBoxLayout>(); | ||||
|     button_container.set_size_policy(SizePolicy::Fill, SizePolicy::Fixed); | ||||
|     button_container.set_preferred_size(0, 24); | ||||
|     button_container.set_fixed_height(24); | ||||
|     button_container.layout()->set_spacing(8); | ||||
| 
 | ||||
|     auto add_button = [&](String label, Dialog::ExecResult result) { | ||||
|         auto& button = button_container.add<Button>(); | ||||
|         button.set_size_policy(SizePolicy::Fixed, SizePolicy::Fill); | ||||
|         button.set_preferred_size(96, 0); | ||||
|         button.set_fixed_width(96); | ||||
|         button.set_text(label); | ||||
|         button.on_click = [this, label, result](auto) { | ||||
|             done(result); | ||||
|  |  | |||
|  | @ -64,15 +64,13 @@ ProcessChooser::ProcessChooser(const StringView& window_title, const StringView& | |||
|     m_table_view->on_activation = [this](const ModelIndex& index) { set_pid_from_index_and_close(index); }; | ||||
| 
 | ||||
|     auto& button_container = widget.add<GUI::Widget>(); | ||||
|     button_container.set_preferred_size(0, 30); | ||||
|     button_container.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|     button_container.set_fixed_height(30); | ||||
|     button_container.set_layout<GUI::HorizontalBoxLayout>(); | ||||
|     button_container.layout()->set_margins({ 0, 0, 4, 0 }); | ||||
|     button_container.layout()->add_spacer(); | ||||
| 
 | ||||
|     auto& select_button = button_container.add<GUI::Button>(m_button_label); | ||||
|     select_button.set_size_policy(GUI::SizePolicy::Fixed, GUI::SizePolicy::Fixed); | ||||
|     select_button.set_preferred_size(80, 24); | ||||
|     select_button.set_fixed_size(80, 24); | ||||
|     select_button.on_click = [this](auto) { | ||||
|         if (m_table_view->selection().is_empty()) { | ||||
|             GUI::MessageBox::show(this, "No process selected!", m_window_title, GUI::MessageBox::Type::Error); | ||||
|  | @ -82,8 +80,7 @@ ProcessChooser::ProcessChooser(const StringView& window_title, const StringView& | |||
|         set_pid_from_index_and_close(index); | ||||
|     }; | ||||
|     auto& cancel_button = button_container.add<GUI::Button>("Cancel"); | ||||
|     cancel_button.set_size_policy(GUI::SizePolicy::Fixed, GUI::SizePolicy::Fixed); | ||||
|     cancel_button.set_preferred_size(80, 24); | ||||
|     cancel_button.set_fixed_size(80, 24); | ||||
|     cancel_button.on_click = [this](auto) { | ||||
|         done(ExecCancel); | ||||
|     }; | ||||
|  |  | |||
|  | @ -79,8 +79,7 @@ ResizeCorner::ResizeCorner() | |||
| { | ||||
|     set_override_cursor(Gfx::StandardCursor::ResizeDiagonalTLBR); | ||||
|     set_background_role(ColorRole::Button); | ||||
|     set_size_policy(SizePolicy::Fixed, SizePolicy::Fixed); | ||||
|     set_preferred_size(16, 18); | ||||
|     set_fixed_size(16, 18); | ||||
| } | ||||
| 
 | ||||
| ResizeCorner::~ResizeCorner() | ||||
|  |  | |||
|  | @ -100,9 +100,9 @@ ScrollBar::ScrollBar(Orientation orientation) | |||
|         s_right_arrow_bitmap = &Gfx::CharacterBitmap::create_from_ascii(s_right_arrow_bitmap_data, 9, 9).leak_ref(); | ||||
| 
 | ||||
|     if (m_orientation == Orientation::Vertical) { | ||||
|         set_preferred_size(16, 0); | ||||
|         set_fixed_height(16); | ||||
|     } else { | ||||
|         set_preferred_size(0, 16); | ||||
|         set_fixed_width(16); | ||||
|     } | ||||
| 
 | ||||
|     m_automatic_scrolling_timer->set_interval(100); | ||||
|  |  | |||
|  | @ -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()) { | ||||
|  |  | |||
|  | @ -183,11 +183,14 @@ void Splitter::mousemove_event(MouseEvent& event) | |||
|         new_second_resizee_size.set_primary_size_for_orientation(m_orientation, new_second_resizee_size.primary_size_for_orientation(m_orientation) + correction); | ||||
|         new_first_resizee_size.set_primary_size_for_orientation(m_orientation, new_first_resizee_size.primary_size_for_orientation(m_orientation) - correction); | ||||
|     } | ||||
|     m_first_resizee->set_preferred_size(new_first_resizee_size); | ||||
|     m_second_resizee->set_preferred_size(new_second_resizee_size); | ||||
| 
 | ||||
|     m_first_resizee->set_size_policy(m_orientation, SizePolicy::Fixed); | ||||
|     m_second_resizee->set_size_policy(m_orientation, SizePolicy::Fill); | ||||
|     if (m_orientation == Orientation::Horizontal) { | ||||
|         m_first_resizee->set_fixed_width(new_first_resizee_size.width()); | ||||
|         m_second_resizee->set_fixed_width(-1); | ||||
|     } else { | ||||
|         m_first_resizee->set_fixed_height(new_first_resizee_size.height()); | ||||
|         m_second_resizee->set_fixed_height(-1); | ||||
|     } | ||||
| 
 | ||||
|     invalidate_layout(); | ||||
| } | ||||
|  |  | |||
|  | @ -37,8 +37,7 @@ namespace GUI { | |||
| 
 | ||||
| StatusBar::StatusBar(int label_count) | ||||
| { | ||||
|     set_size_policy(SizePolicy::Fill, SizePolicy::Fixed); | ||||
|     set_preferred_size(0, 18); | ||||
|     set_fixed_height(18); | ||||
|     set_layout<HorizontalBoxLayout>(); | ||||
|     layout()->set_margins({ 0, 0, 0, 0 }); | ||||
|     layout()->set_spacing(2); | ||||
|  |  | |||
|  | @ -40,11 +40,9 @@ ToolBar::ToolBar(Orientation orientation, int button_size) | |||
|     : m_button_size(button_size) | ||||
| { | ||||
|     if (orientation == Orientation::Horizontal) { | ||||
|         set_size_policy(SizePolicy::Fill, SizePolicy::Fixed); | ||||
|         set_preferred_size(0, button_size + 8); | ||||
|         set_fixed_height(button_size + 8); | ||||
|     } else { | ||||
|         set_size_policy(SizePolicy::Fixed, SizePolicy::Fill); | ||||
|         set_preferred_size(button_size + 8, 0); | ||||
|         set_fixed_width(button_size + 8); | ||||
|     } | ||||
|     set_layout<BoxLayout>(orientation); | ||||
|     layout()->set_spacing(0); | ||||
|  | @ -74,7 +72,6 @@ private: | |||
|         else | ||||
|             set_text(action.text()); | ||||
|         set_button_style(Gfx::ButtonStyle::CoolBar); | ||||
|         set_size_policy(SizePolicy::Fixed, SizePolicy::Fixed); | ||||
|     } | ||||
|     String tooltip(const Action& action) const | ||||
|     { | ||||
|  | @ -96,7 +93,7 @@ void ToolBar::add_action(Action& action) | |||
|     item->action = action; | ||||
| 
 | ||||
|     auto& button = add<ToolBarButton>(action); | ||||
|     button.set_preferred_size(m_button_size + 8, m_button_size + 8); | ||||
|     button.set_fixed_size(m_button_size + 8, m_button_size + 8); | ||||
| 
 | ||||
|     m_items.append(move(item)); | ||||
| } | ||||
|  | @ -106,8 +103,7 @@ class SeparatorWidget final : public Widget { | |||
| public: | ||||
|     SeparatorWidget() | ||||
|     { | ||||
|         set_size_policy(SizePolicy::Fixed, SizePolicy::Fixed); | ||||
|         set_preferred_size(8, 18); | ||||
|         set_fixed_size(8, 18); | ||||
|     } | ||||
|     virtual ~SeparatorWidget() override { } | ||||
| 
 | ||||
|  |  | |||
|  | @ -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 }); | ||||
|  |  | |||
|  | @ -132,11 +132,6 @@ Widget::Widget() | |||
|     REGISTER_BOOL_PROPERTY("focused", is_focused, set_focus); | ||||
|     REGISTER_BOOL_PROPERTY("enabled", is_enabled, set_enabled); | ||||
|     REGISTER_STRING_PROPERTY("tooltip", tooltip, set_tooltip); | ||||
|     REGISTER_SIZE_PROPERTY("preferred_size", preferred_size, set_preferred_size); | ||||
|     REGISTER_INT_PROPERTY("preferred_width", preferred_width, set_preferred_width); | ||||
|     REGISTER_INT_PROPERTY("preferred_height", preferred_height, set_preferred_height); | ||||
|     REGISTER_SIZE_POLICY_PROPERTY("horizontal_size_policy", horizontal_size_policy, set_horizontal_size_policy); | ||||
|     REGISTER_SIZE_POLICY_PROPERTY("vertical_size_policy", vertical_size_policy, set_vertical_size_policy); | ||||
| 
 | ||||
|     REGISTER_SIZE_PROPERTY("min_size", min_size, set_min_size); | ||||
|     REGISTER_SIZE_PROPERTY("max_size", max_size, set_max_size); | ||||
|  | @ -686,31 +681,6 @@ void Widget::set_max_size(const Gfx::IntSize& size) | |||
|     invalidate_layout(); | ||||
| } | ||||
| 
 | ||||
| void Widget::set_preferred_size(const Gfx::IntSize& size) | ||||
| { | ||||
|     if (m_preferred_size == size) | ||||
|         return; | ||||
|     m_preferred_size = size; | ||||
|     invalidate_layout(); | ||||
| } | ||||
| 
 | ||||
| void Widget::set_size_policy(Orientation orientation, SizePolicy policy) | ||||
| { | ||||
|     if (orientation == Orientation::Horizontal) | ||||
|         set_size_policy(policy, m_vertical_size_policy); | ||||
|     else | ||||
|         set_size_policy(m_horizontal_size_policy, policy); | ||||
| } | ||||
| 
 | ||||
| void Widget::set_size_policy(SizePolicy horizontal_policy, SizePolicy vertical_policy) | ||||
| { | ||||
|     if (m_horizontal_size_policy == horizontal_policy && m_vertical_size_policy == vertical_policy) | ||||
|         return; | ||||
|     m_horizontal_size_policy = horizontal_policy; | ||||
|     m_vertical_size_policy = vertical_policy; | ||||
|     invalidate_layout(); | ||||
| } | ||||
| 
 | ||||
| void Widget::invalidate_layout() | ||||
| { | ||||
|     if (window()) | ||||
|  |  | |||
|  | @ -112,14 +112,6 @@ public: | |||
|         return layout; | ||||
|     } | ||||
| 
 | ||||
|     SizePolicy horizontal_size_policy() const { return m_horizontal_size_policy; } | ||||
|     SizePolicy vertical_size_policy() const { return m_vertical_size_policy; } | ||||
|     SizePolicy size_policy(Orientation orientation) { return orientation == Orientation::Horizontal ? m_horizontal_size_policy : m_vertical_size_policy; } | ||||
|     void set_size_policy(SizePolicy horizontal_policy, SizePolicy vertical_policy); | ||||
|     void set_size_policy(Orientation, SizePolicy); | ||||
|     void set_horizontal_size_policy(SizePolicy policy) { set_size_policy(policy, vertical_size_policy()); } | ||||
|     void set_vertical_size_policy(SizePolicy policy) { set_size_policy(horizontal_size_policy(), policy); } | ||||
| 
 | ||||
|     Gfx::IntSize min_size() const { return m_min_size; } | ||||
|     void set_min_size(const Gfx::IntSize&); | ||||
|     void set_min_size(int width, int height) { set_min_size({ width, height }); } | ||||
|  | @ -158,15 +150,6 @@ public: | |||
|         set_max_height(height); | ||||
|     } | ||||
| 
 | ||||
|     Gfx::IntSize preferred_size() const { return m_preferred_size; } | ||||
|     void set_preferred_size(const Gfx::IntSize&); | ||||
|     void set_preferred_size(int width, int height) { set_preferred_size({ width, height }); } | ||||
| 
 | ||||
|     int preferred_width() const { return preferred_size().width(); } | ||||
|     int preferred_height() const { return preferred_size().height(); } | ||||
|     void set_preferred_width(int w) { set_preferred_size(w, preferred_height()); } | ||||
|     void set_preferred_height(int h) { set_preferred_size(preferred_width(), h); } | ||||
| 
 | ||||
|     bool has_tooltip() const { return !m_tooltip.is_empty(); } | ||||
|     String tooltip() const { return m_tooltip; } | ||||
|     void set_tooltip(const StringView&); | ||||
|  | @ -405,9 +388,6 @@ private: | |||
|     NonnullRefPtr<Gfx::Font> m_font; | ||||
|     String m_tooltip; | ||||
| 
 | ||||
|     SizePolicy m_horizontal_size_policy { SizePolicy::Fill }; | ||||
|     SizePolicy m_vertical_size_policy { SizePolicy::Fill }; | ||||
|     Gfx::IntSize m_preferred_size; | ||||
|     Gfx::IntSize m_min_size { -1, -1 }; | ||||
|     Gfx::IntSize m_max_size { -1, -1 }; | ||||
|     Margins m_content_margins; | ||||
|  |  | |||
|  | @ -542,10 +542,10 @@ void Window::set_main_widget(Widget* widget) | |||
|     if (m_main_widget) { | ||||
|         add_child(*widget); | ||||
|         auto new_window_rect = rect(); | ||||
|         if (m_main_widget->horizontal_size_policy() == SizePolicy::Fixed) | ||||
|             new_window_rect.set_width(m_main_widget->preferred_size().width()); | ||||
|         if (m_main_widget->vertical_size_policy() == SizePolicy::Fixed) | ||||
|             new_window_rect.set_height(m_main_widget->preferred_size().height()); | ||||
|         if (m_main_widget->min_width() >= 0) | ||||
|             new_window_rect.set_width(max(new_window_rect.width(), m_main_widget->min_width())); | ||||
|         if (m_main_widget->min_height() >= 0) | ||||
|             new_window_rect.set_height(max(new_window_rect.height(), m_main_widget->min_height())); | ||||
|         set_rect(new_window_rect); | ||||
|         m_main_widget->set_relative_rect({ {}, new_window_rect.size() }); | ||||
|         m_main_widget->set_window(this); | ||||
|  |  | |||
|  | @ -908,8 +908,7 @@ void TerminalWidget::terminal_did_resize(u16 columns, u16 rows) | |||
|     m_pixel_height = (frame_thickness() * 2) + (m_inset * 2) + (rows * (font().glyph_height() + m_line_spacing)); | ||||
| 
 | ||||
|     if (m_automatic_size_policy) { | ||||
|         set_size_policy(GUI::SizePolicy::Fixed, GUI::SizePolicy::Fixed); | ||||
|         set_preferred_size(m_pixel_width, m_pixel_height); | ||||
|         set_fixed_size(m_pixel_width, m_pixel_height); | ||||
|     } | ||||
| 
 | ||||
|     m_needs_background_fill = true; | ||||
|  |  | |||
|  | @ -75,7 +75,6 @@ public: | |||
| 
 | ||||
|         m_root_container = m_slider_window->set_main_widget<GUI::Label>(); | ||||
|         m_root_container->set_fill_with_background_color(true); | ||||
|         m_root_container->set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fill); | ||||
|         m_root_container->set_layout<GUI::VerticalBoxLayout>(); | ||||
|         m_root_container->layout()->set_margins({ 0, 4, 0, 4 }); | ||||
|         m_root_container->layout()->set_spacing(0); | ||||
|  | @ -84,8 +83,7 @@ public: | |||
|         m_root_container->set_frame_shadow(Gfx::FrameShadow::Raised); | ||||
| 
 | ||||
|         m_percent_box = m_root_container->add<GUI::CheckBox>("\xE2\x84\xB9"); | ||||
|         m_percent_box->set_size_policy(GUI::SizePolicy::Fixed, GUI::SizePolicy::Fixed); | ||||
|         m_percent_box->set_preferred_size(27, 16); | ||||
|         m_percent_box->set_fixed_size(27, 16); | ||||
|         m_percent_box->set_checked(false); | ||||
|         m_percent_box->set_tooltip("Show percent"); | ||||
|         m_percent_box->on_checked = [&](bool show_percent) { | ||||
|  | @ -105,7 +103,6 @@ public: | |||
|         m_slider->set_max(20); | ||||
|         m_slider->set_value(0); | ||||
|         m_slider->set_knob_size_mode(GUI::Slider::KnobSizeMode::Proportional); | ||||
|         m_slider->set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fill); | ||||
|         m_slider->on_value_changed = [&](int value) { | ||||
|             int volume = clamp((20 - value) * 5, 0, 100); | ||||
|             float volume_log = ((volume / 100.0f) * (volume / 100.0f)) * 100.0f; | ||||
|  | @ -114,8 +111,7 @@ public: | |||
|         }; | ||||
| 
 | ||||
|         m_mute_box = m_root_container->add<GUI::CheckBox>("\xE2\x9D\x8C"); | ||||
|         m_mute_box->set_size_policy(GUI::SizePolicy::Fixed, GUI::SizePolicy::Fixed); | ||||
|         m_mute_box->set_preferred_size(27, 16); | ||||
|         m_mute_box->set_fixed_size(27, 16); | ||||
|         m_mute_box->set_checked(false); | ||||
|         m_mute_box->set_tooltip("Mute"); | ||||
|         m_mute_box->on_checked = [&](bool is_muted) { | ||||
|  |  | |||
|  | @ -69,7 +69,6 @@ public: | |||
| 
 | ||||
|         auto& root_container = m_calendar_window->set_main_widget<GUI::Label>(); | ||||
|         root_container.set_fill_with_background_color(true); | ||||
|         root_container.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fill); | ||||
|         root_container.set_layout<GUI::VerticalBoxLayout>(); | ||||
|         root_container.layout()->set_margins({ 0, 2, 0, 2 }); | ||||
|         root_container.layout()->set_spacing(0); | ||||
|  | @ -78,15 +77,13 @@ public: | |||
|         root_container.set_frame_shadow(Gfx::FrameShadow::Raised); | ||||
| 
 | ||||
|         auto& navigation_container = root_container.add<GUI::Widget>(); | ||||
|         navigation_container.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|         navigation_container.set_preferred_size(0, 24); | ||||
|         navigation_container.set_fixed_height(24); | ||||
|         navigation_container.set_layout<GUI::HorizontalBoxLayout>(); | ||||
|         navigation_container.layout()->set_margins({ 2, 2, 3, 2 }); | ||||
| 
 | ||||
|         m_prev_date = navigation_container.add<GUI::Button>(); | ||||
|         m_prev_date->set_button_style(Gfx::ButtonStyle::CoolBar); | ||||
|         m_prev_date->set_size_policy(GUI::SizePolicy::Fixed, GUI::SizePolicy::Fixed); | ||||
|         m_prev_date->set_preferred_size(24, 24); | ||||
|         m_prev_date->set_fixed_size(24, 24); | ||||
|         m_prev_date->set_icon(Gfx::Bitmap::load_from_file("/res/icons/16x16/go-back.png")); | ||||
|         m_prev_date->on_click = [&](auto) { | ||||
|             unsigned int target_month = m_calendar->selected_month(); | ||||
|  | @ -108,8 +105,7 @@ public: | |||
| 
 | ||||
|         m_selected_calendar_button = navigation_container.add<GUI::Button>(); | ||||
|         m_selected_calendar_button->set_button_style(Gfx::ButtonStyle::CoolBar); | ||||
|         m_selected_calendar_button->set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|         m_selected_calendar_button->set_preferred_size(0, 24); | ||||
|         m_selected_calendar_button->set_fixed_height(24); | ||||
|         m_selected_calendar_button->on_click = [&](auto) { | ||||
|             m_calendar->toggle_mode(); | ||||
|             m_selected_calendar_button->set_text(m_calendar->selected_calendar_text(GUI::Calendar::LongNames)); | ||||
|  | @ -117,8 +113,7 @@ public: | |||
| 
 | ||||
|         m_next_date = navigation_container.add<GUI::Button>(); | ||||
|         m_next_date->set_button_style(Gfx::ButtonStyle::CoolBar); | ||||
|         m_next_date->set_size_policy(GUI::SizePolicy::Fixed, GUI::SizePolicy::Fixed); | ||||
|         m_next_date->set_preferred_size(24, 24); | ||||
|         m_next_date->set_fixed_size(24, 24); | ||||
|         m_next_date->set_icon(Gfx::Bitmap::load_from_file("/res/icons/16x16/go-forward.png")); | ||||
|         m_next_date->on_click = [&](auto) { | ||||
|             unsigned int target_month = m_calendar->selected_month(); | ||||
|  | @ -139,19 +134,16 @@ public: | |||
|         }; | ||||
| 
 | ||||
|         auto& divider1_container = root_container.add<GUI::Widget>(); | ||||
|         divider1_container.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|         divider1_container.set_preferred_size(0, 2); | ||||
|         divider1_container.set_fixed_height(2); | ||||
|         divider1_container.set_layout<GUI::HorizontalBoxLayout>(); | ||||
|         divider1_container.layout()->set_margins({ 2, 0, 3, 0 }); | ||||
| 
 | ||||
|         auto& divider1 = divider1_container.add<GUI::Frame>(); | ||||
|         divider1.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|         divider1.set_preferred_size(0, 2); | ||||
|         divider1.set_fixed_height(2); | ||||
|         divider1.set_frame_shape(Gfx::FrameShape::Panel); | ||||
| 
 | ||||
|         auto& calendar_frame_container = root_container.add<GUI::Widget>(); | ||||
|         calendar_frame_container.set_layout<GUI::HorizontalBoxLayout>(); | ||||
|         calendar_frame_container.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fill); | ||||
|         calendar_frame_container.layout()->set_margins({ 4, 4, 5, 4 }); | ||||
| 
 | ||||
|         auto& calendar_frame = calendar_frame_container.add<GUI::Frame>(); | ||||
|  | @ -170,27 +162,23 @@ public: | |||
|         }; | ||||
| 
 | ||||
|         auto& divider2_container = root_container.add<GUI::Widget>(); | ||||
|         divider2_container.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|         divider2_container.set_preferred_size(0, 2); | ||||
|         divider2_container.set_fixed_height(2); | ||||
|         divider2_container.set_layout<GUI::HorizontalBoxLayout>(); | ||||
|         divider2_container.layout()->set_margins({ 2, 0, 3, 0 }); | ||||
| 
 | ||||
|         auto& divider2 = divider2_container.add<GUI::Frame>(); | ||||
|         divider2.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|         divider2.set_preferred_size(0, 2); | ||||
|         divider2.set_fixed_height(2); | ||||
|         divider2.set_frame_shape(Gfx::FrameShape::Panel); | ||||
| 
 | ||||
|         auto& settings_container = root_container.add<GUI::Widget>(); | ||||
|         settings_container.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|         settings_container.set_preferred_size(0, 24); | ||||
|         settings_container.set_fixed_height(24); | ||||
|         settings_container.set_layout<GUI::HorizontalBoxLayout>(); | ||||
|         settings_container.layout()->set_margins({ 2, 2, 3, 2 }); | ||||
|         settings_container.layout()->add_spacer(); | ||||
| 
 | ||||
|         m_jump_to_button = settings_container.add<GUI::Button>(); | ||||
|         m_jump_to_button->set_button_style(Gfx::ButtonStyle::CoolBar); | ||||
|         m_jump_to_button->set_size_policy(GUI::SizePolicy::Fixed, GUI::SizePolicy::Fixed); | ||||
|         m_jump_to_button->set_preferred_size(24, 24); | ||||
|         m_jump_to_button->set_fixed_size(24, 24); | ||||
|         m_jump_to_button->set_icon(Gfx::Bitmap::load_from_file("/res/icons/16x16/calendar-date.png")); | ||||
|         m_jump_to_button->set_tooltip("Jump to today"); | ||||
|         m_jump_to_button->on_click = [this](auto) { | ||||
|  | @ -199,11 +187,10 @@ public: | |||
| 
 | ||||
|         m_calendar_launcher = settings_container.add<GUI::Button>(); | ||||
|         m_calendar_launcher->set_button_style(Gfx::ButtonStyle::CoolBar); | ||||
|         m_calendar_launcher->set_size_policy(GUI::SizePolicy::Fixed, GUI::SizePolicy::Fixed); | ||||
|         m_calendar_launcher->set_preferred_size(24, 24); | ||||
|         m_calendar_launcher->set_fixed_size(24, 24); | ||||
|         m_calendar_launcher->set_icon(Gfx::Bitmap::load_from_file("/res/icons/16x16/app-calendar.png")); | ||||
|         m_calendar_launcher->set_tooltip("Calendar"); | ||||
|         m_calendar_launcher->on_click = [this](auto) { | ||||
|         m_calendar_launcher->on_click = [](auto) { | ||||
|             pid_t pid; | ||||
|             const char* argv[] = { "Calendar", nullptr }; | ||||
|             if ((errno = posix_spawn(&pid, "/bin/Calendar", nullptr, nullptr, const_cast<char**>(argv), environ))) { | ||||
|  |  | |||
|  | @ -105,8 +105,7 @@ NotificationWindow::NotificationWindow(const String& text, const String& title, | |||
|     text_label.set_text_alignment(Gfx::TextAlignment::CenterLeft); | ||||
| 
 | ||||
|     auto& right_container = widget.add<GUI::Widget>(); | ||||
|     right_container.set_size_policy(GUI::SizePolicy::Fixed, GUI::SizePolicy::Fill); | ||||
|     right_container.set_preferred_size(36, 0); | ||||
|     right_container.set_fixed_width(36); | ||||
|     right_container.set_layout<GUI::HorizontalBoxLayout>(); | ||||
| 
 | ||||
|     on_close_request = [this] { | ||||
|  |  | |||
|  | @ -75,8 +75,7 @@ ShutdownDialog::ShutdownDialog() | |||
| 
 | ||||
|     auto& header = main.add<GUI::Label>(); | ||||
|     header.set_text("What would you like to do?"); | ||||
|     header.set_preferred_size(0, 16); | ||||
|     header.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); | ||||
|     header.set_fixed_height(16); | ||||
|     header.set_font(Gfx::Font::default_bold_font()); | ||||
| 
 | ||||
|     for (size_t i = 0; i < options.size(); i++) { | ||||
|  |  | |||
|  | @ -96,7 +96,6 @@ TaskbarWindow::~TaskbarWindow() | |||
| void TaskbarWindow::create_quick_launch_bar() | ||||
| { | ||||
|     auto& quick_launch_bar = main_widget()->add<GUI::Frame>(); | ||||
|     quick_launch_bar.set_size_policy(GUI::SizePolicy::Fixed, GUI::SizePolicy::Fixed); | ||||
|     quick_launch_bar.set_layout<GUI::HorizontalBoxLayout>(); | ||||
|     quick_launch_bar.layout()->set_spacing(0); | ||||
|     quick_launch_bar.layout()->set_margins({ 3, 0, 3, 0 }); | ||||
|  | @ -116,9 +115,9 @@ void TaskbarWindow::create_quick_launch_bar() | |||
|         if (!af->is_valid()) | ||||
|             continue; | ||||
|         auto app_executable = af->executable(); | ||||
|         const int button_size = 24; | ||||
|         auto& button = quick_launch_bar.add<GUI::Button>(); | ||||
|         button.set_size_policy(GUI::SizePolicy::Fixed, GUI::SizePolicy::Fixed); | ||||
|         button.set_preferred_size(24, 24); | ||||
|         button.set_fixed_size(button_size, button_size); | ||||
|         button.set_button_style(Gfx::ButtonStyle::CoolBar); | ||||
|         button.set_icon(af->icon().bitmap_for_size(16)); | ||||
|         button.set_tooltip(af->name()); | ||||
|  | @ -143,10 +142,10 @@ void TaskbarWindow::create_quick_launch_bar() | |||
|         if (!first) | ||||
|             total_width += quick_launch_bar.layout()->spacing(); | ||||
|         first = false; | ||||
|         total_width += button.preferred_width(); | ||||
|         total_width += button_size; | ||||
|     } | ||||
| 
 | ||||
|     quick_launch_bar.set_preferred_size(total_width, 24); | ||||
|     quick_launch_bar.set_fixed_size(total_width, 24); | ||||
| } | ||||
| 
 | ||||
| void TaskbarWindow::on_screen_rect_change(const Gfx::IntRect& rect) | ||||
|  | @ -158,9 +157,8 @@ void TaskbarWindow::on_screen_rect_change(const Gfx::IntRect& rect) | |||
| NonnullRefPtr<GUI::Button> TaskbarWindow::create_button(const WindowIdentifier& identifier) | ||||
| { | ||||
|     auto& button = main_widget()->add<TaskbarButton>(identifier); | ||||
|     button.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fill); | ||||
|     button.set_min_size({ 20, 22 }); | ||||
|     button.set_max_size({ 140, 22 }); | ||||
|     button.set_min_size(20, 23); | ||||
|     button.set_max_size(140, 23); | ||||
|     button.set_text_alignment(Gfx::TextAlignment::CenterLeft); | ||||
|     button.set_icon(*m_default_icon); | ||||
|     return button; | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Andreas Kling
						Andreas Kling