mirror of
https://github.com/RGBCube/serenity
synced 2025-05-31 17:28:11 +00:00

This is just a bit nicer than owning a separate timer in the Solitaire application because LibCore will prevent timer events from firing when e.g. the window is not visible. Therefore SolitaireWidget doesn't need need to check for such conditions.
65 lines
1.7 KiB
C++
65 lines
1.7 KiB
C++
/*
|
|
* Copyright (c) 2020, Till Mayer <till.mayer@web.de>
|
|
*
|
|
* SPDX-License-Identifier: BSD-2-Clause
|
|
*/
|
|
|
|
#include "SolitaireWidget.h"
|
|
#include <LibGUI/Action.h>
|
|
#include <LibGUI/Application.h>
|
|
#include <LibGUI/Icon.h>
|
|
#include <LibGUI/Menu.h>
|
|
#include <LibGUI/Menubar.h>
|
|
#include <LibGUI/Window.h>
|
|
#include <stdio.h>
|
|
#include <unistd.h>
|
|
|
|
int main(int argc, char** argv)
|
|
{
|
|
auto app = GUI::Application::construct(argc, argv);
|
|
auto app_icon = GUI::Icon::default_icon("app-solitaire");
|
|
|
|
if (pledge("stdio recvfd sendfd rpath", nullptr) < 0) {
|
|
perror("pledge");
|
|
return 1;
|
|
}
|
|
|
|
if (unveil("/res", "r") < 0) {
|
|
perror("unveil");
|
|
return 1;
|
|
}
|
|
|
|
if (unveil(nullptr, nullptr) < 0) {
|
|
perror("unveil");
|
|
return 1;
|
|
}
|
|
|
|
auto window = GUI::Window::construct();
|
|
|
|
window->set_resizable(false);
|
|
window->resize(SolitaireWidget::width, SolitaireWidget::height);
|
|
|
|
auto widget = SolitaireWidget::construct([&](uint32_t score) {
|
|
window->set_title(String::formatted("Score: {} - Solitaire", score));
|
|
});
|
|
|
|
auto menubar = GUI::Menubar::construct();
|
|
auto& game_menu = menubar->add_menu("&Game");
|
|
|
|
game_menu.add_action(GUI::Action::create("&New Game", { Mod_None, Key_F2 }, [&](auto&) {
|
|
widget->setup();
|
|
}));
|
|
game_menu.add_separator();
|
|
game_menu.add_action(GUI::CommonActions::make_quit_action([&](auto&) { app->quit(); }));
|
|
|
|
auto& help_menu = menubar->add_menu("Help");
|
|
help_menu.add_action(GUI::CommonActions::make_about_action("Solitaire", app_icon, window));
|
|
|
|
window->set_menubar(move(menubar));
|
|
window->set_main_widget(widget);
|
|
window->set_icon(app_icon.bitmap_for_size(16));
|
|
window->show();
|
|
widget->setup();
|
|
|
|
return app->exec();
|
|
}
|