1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 02:57:42 +00:00

LibCore: Make Core::Object::add<ChildType> return a ChildType&

Since the returned object is now owned by the callee object, we can
simply vend a ChildType&. This allows us to use "." instead of "->"
at the call site, which is quite nice. :^)
This commit is contained in:
Andreas Kling 2020-03-04 19:07:55 +01:00
parent fb09b6a8ce
commit 028c011760
46 changed files with 1035 additions and 1039 deletions

View file

@ -51,7 +51,6 @@ int main(int argc, char** argv)
return 1;
}
auto window = GUI::Window::construct();
window->set_resizable(false);
window->set_title("Minesweeper");
@ -61,23 +60,23 @@ int main(int argc, char** argv)
widget.set_layout<GUI::VerticalBoxLayout>();
widget.layout()->set_spacing(0);
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_layout<GUI::HorizontalBoxLayout>();
auto flag_icon_label = container->add<GUI::Label>();
flag_icon_label->set_icon(Gfx::Bitmap::load_from_file("/res/icons/minesweeper/flag.png"));
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);
auto time_icon_label = container->add<GUI::Label>();
time_icon_label->set_icon(Gfx::Bitmap::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());
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_layout<GUI::HorizontalBoxLayout>();
auto& flag_icon_label = container.add<GUI::Label>();
flag_icon_label.set_icon(Gfx::Bitmap::load_from_file("/res/icons/minesweeper/flag.png"));
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);
auto& time_icon_label = container.add<GUI::Label>();
time_icon_label.set_icon(Gfx::Bitmap::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());
window->resize(size);
});
@ -86,20 +85,18 @@ int main(int argc, char** argv)
auto app_menu = GUI::Menu::construct("Minesweeper");
app_menu->add_action(GUI::Action::create("New game", { Mod_None, Key_F2 }, [&](const GUI::Action&) {
field->reset();
field.reset();
}));
app_menu->add_separator();
NonnullRefPtr<GUI::Action> chord_toggler_action = GUI::Action::create("Single-click chording", [&](const GUI::Action&) {
bool toggled = !field->is_single_chording();
field->set_single_chording(toggled);
bool toggled = !field.is_single_chording();
field.set_single_chording(toggled);
chord_toggler_action->set_checked(toggled);
});
chord_toggler_action->set_checkable(true);
chord_toggler_action->set_checked(field->is_single_chording());
chord_toggler_action->set_checked(field.is_single_chording());
app_menu->add_action(*chord_toggler_action);
app_menu->add_separator();
@ -112,16 +109,16 @@ int main(int argc, char** argv)
auto difficulty_menu = GUI::Menu::construct("Difficulty");
difficulty_menu->add_action(GUI::Action::create("Beginner", { Mod_Ctrl, Key_B }, [&](const GUI::Action&) {
field->set_field_size(9, 9, 10);
field.set_field_size(9, 9, 10);
}));
difficulty_menu->add_action(GUI::Action::create("Intermediate", { Mod_Ctrl, Key_I }, [&](const GUI::Action&) {
field->set_field_size(16, 16, 40);
field.set_field_size(16, 16, 40);
}));
difficulty_menu->add_action(GUI::Action::create("Expert", { Mod_Ctrl, Key_E }, [&](const GUI::Action&) {
field->set_field_size(16, 30, 99);
field.set_field_size(16, 30, 99);
}));
difficulty_menu->add_action(GUI::Action::create("Madwoman", { Mod_Ctrl, Key_M }, [&](const GUI::Action&) {
field->set_field_size(32, 60, 350);
field.set_field_size(32, 60, 350);
}));
menubar->add_menu(move(difficulty_menu));