/* * Copyright (c) 2018-2021, Andreas Kling * Copyright (c) 2021, Mustafa Quraish * * SPDX-License-Identifier: BSD-2-Clause */ #include "MainWidget.h" #include #include #include #include #include #include #include #include #include #include #include int main(int argc, char** argv) { if (pledge("stdio thread recvfd sendfd rpath unix wpath cpath", nullptr) < 0) { perror("pledge"); return 1; } auto app = GUI::Application::construct(argc, argv); const char* image_file = nullptr; Core::ArgsParser args_parser; args_parser.add_positional_argument(image_file, "Image file to open", "path", Core::ArgsParser::Required::No); args_parser.parse(argc, argv); String file_to_edit_full_path; if (image_file) { file_to_edit_full_path = Core::File::absolute_path(image_file); VERIFY(!file_to_edit_full_path.is_empty()); if (Core::File::exists(file_to_edit_full_path)) { dbgln("unveil for: {}", file_to_edit_full_path); if (unveil(file_to_edit_full_path.characters(), "r") < 0) { perror("unveil"); return 1; } } } if (unveil("/res", "r") < 0) { perror("unveil"); return 1; } if (unveil("/tmp/portal/clipboard", "rw") < 0) { perror("unveil"); return 1; } if (unveil("/tmp/portal/filesystemaccess", "rw") < 0) { perror("unveil"); return 1; } if (unveil("/tmp/portal/image", "rw") < 0) { perror("unveil"); return 1; } if (unveil(nullptr, nullptr) < 0) { perror("unveil"); return 1; } auto app_icon = GUI::Icon::default_icon("app-pixel-paint"); auto window = GUI::Window::construct(); window->set_title("Pixel Paint"); window->resize(800, 510); window->set_icon(app_icon.bitmap_for_size(16)); auto& main_widget = window->set_main_widget(); main_widget.initialize_menubar(*window); if (Core::File::exists(file_to_edit_full_path)) { main_widget.open_image_file(file_to_edit_full_path); } else { main_widget.create_default_image(); } auto& statusbar = *main_widget.find_descendant_of_type_named("statusbar"); app->on_action_enter = [&statusbar](GUI::Action& action) { auto text = action.status_tip(); if (text.is_empty()) text = Gfx::parse_ampersand_string(action.text()); statusbar.set_override_text(move(text)); }; app->on_action_leave = [&statusbar](GUI::Action&) { statusbar.set_override_text({}); }; window->show(); return app->exec(); }