mirror of
https://github.com/RGBCube/serenity
synced 2025-07-10 06:07:35 +00:00
QuickShow: Allow panning and zooming the image instead of stretching it.
This needs more work and polish, but it's a step in a more pleasant and useful direction. Also turn QuickShow into a fully-fledged "application". (By that, I really just mean giving it its own Applications/ subdirectory.)
This commit is contained in:
parent
cf0d05d54a
commit
eedb4f6b2f
7 changed files with 157 additions and 13 deletions
74
Applications/QuickShow/main.cpp
Normal file
74
Applications/QuickShow/main.cpp
Normal file
|
@ -0,0 +1,74 @@
|
|||
#include "QSWidget.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 <SharedGraphics/PNGLoader.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(false);
|
||||
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->set_should_exit_event_loop_on_close(true);
|
||||
window->show();
|
||||
|
||||
return app.exec();
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue