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

This behavior and API was extremely counter-intuitive since our default behavior was for applications to never exit after you close all of their windows. Now that we exit the event loop by default when the very last GWindow is deleted, we don't have to worry about this.
73 lines
1.9 KiB
C++
73 lines
1.9 KiB
C++
#include "QSWidget.h"
|
|
#include <LibDraw/PNGLoader.h>
|
|
#include <LibGUI/GAction.h>
|
|
#include <LibGUI/GApplication.h>
|
|
#include <LibGUI/GBoxLayout.h>
|
|
#include <LibGUI/GLabel.h>
|
|
#include <LibGUI/GMenu.h>
|
|
#include <LibGUI/GMenuBar.h>
|
|
#include <LibGUI/GWindow.h>
|
|
#include <stdio.h>
|
|
|
|
int main(int argc, char** argv)
|
|
{
|
|
GApplication app(argc, argv);
|
|
|
|
auto menubar = make<GMenuBar>();
|
|
|
|
auto app_menu = make<GMenu>("QuickShow");
|
|
app_menu->add_action(GAction::create("Quit", { Mod_Alt, Key_F4 }, [](const GAction&) {
|
|
GApplication::the().quit(0);
|
|
return;
|
|
}));
|
|
menubar->add_menu(move(app_menu));
|
|
|
|
auto file_menu = make<GMenu>("File");
|
|
menubar->add_menu(move(file_menu));
|
|
|
|
auto help_menu = make<GMenu>("Help");
|
|
help_menu->add_action(GAction::create("About", [](const GAction&) {
|
|
dbgprintf("FIXME: Implement Help/About\n");
|
|
}));
|
|
menubar->add_menu(move(help_menu));
|
|
|
|
app.set_menubar(move(menubar));
|
|
|
|
#if 0
|
|
if (argc != 2) {
|
|
printf("usage: qs <image-file>\n");
|
|
return 0;
|
|
}
|
|
#endif
|
|
|
|
const char* path = "/res/wallpapers/sunset-retro.png";
|
|
if (argc > 1)
|
|
path = argv[1];
|
|
|
|
auto bitmap = load_png(path);
|
|
if (!bitmap) {
|
|
fprintf(stderr, "Failed to load %s\n", path);
|
|
return 1;
|
|
}
|
|
|
|
auto* window = new GWindow;
|
|
|
|
auto update_window_title = [&](int scale) {
|
|
window->set_title(String::format("QuickShow: %s %s %d%%", path, bitmap->size().to_string().characters(), scale));
|
|
};
|
|
|
|
window->set_double_buffering_enabled(true);
|
|
update_window_title(100);
|
|
window->set_rect(200, 200, bitmap->width(), bitmap->height());
|
|
|
|
auto* widget = new QSWidget(nullptr);
|
|
widget->on_scale_change = [&](int scale) {
|
|
update_window_title(scale);
|
|
};
|
|
widget->set_bitmap(*bitmap);
|
|
window->set_main_widget(widget);
|
|
|
|
window->show();
|
|
|
|
return app.exec();
|
|
}
|