From b529b4a3e6c239ba4eef8b30bebc6b1ddaca26eb Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Tue, 25 Jun 2019 20:27:32 +0200 Subject: [PATCH] PaintBrush: Add support for opening files. Obviously this only supports whatever PNG files that load_png() can decode at the moment. --- Applications/PaintBrush/PaintableWidget.cpp | 6 ++++++ Applications/PaintBrush/PaintableWidget.h | 2 ++ Applications/PaintBrush/main.cpp | 16 ++++++++++++++++ 3 files changed, 24 insertions(+) diff --git a/Applications/PaintBrush/PaintableWidget.cpp b/Applications/PaintBrush/PaintableWidget.cpp index 900c03f1ca..fee2171fcb 100644 --- a/Applications/PaintBrush/PaintableWidget.cpp +++ b/Applications/PaintBrush/PaintableWidget.cpp @@ -90,3 +90,9 @@ void PaintableWidget::set_secondary_color(Color color) if (on_secondary_color_change) on_secondary_color_change(color); } + +void PaintableWidget::set_bitmap(const GraphicsBitmap& bitmap) +{ + m_bitmap = bitmap; + update(); +} diff --git a/Applications/PaintBrush/PaintableWidget.h b/Applications/PaintBrush/PaintableWidget.h index 26b5a70d91..1ee6985bba 100644 --- a/Applications/PaintBrush/PaintableWidget.h +++ b/Applications/PaintBrush/PaintableWidget.h @@ -23,6 +23,8 @@ public: Color color_for(const GMouseEvent&); + void set_bitmap(const GraphicsBitmap&); + GraphicsBitmap& bitmap() { return *m_bitmap; } const GraphicsBitmap& bitmap() const { return *m_bitmap; } diff --git a/Applications/PaintBrush/main.cpp b/Applications/PaintBrush/main.cpp index 6d885e6ad5..6eedffd752 100644 --- a/Applications/PaintBrush/main.cpp +++ b/Applications/PaintBrush/main.cpp @@ -4,9 +4,12 @@ #include #include #include +#include #include #include +#include #include +#include int main(int argc, char** argv) { @@ -41,6 +44,19 @@ int main(int argc, char** argv) menubar->add_menu(move(app_menu)); auto file_menu = make("File"); + file_menu->add_action(GAction::create("Open...", { Mod_Ctrl, Key_O }, [&](auto&) { + GFilePicker picker; + if (picker.exec() == GFilePicker::ExecOK) { + auto filename = picker.selected_file().string(); + auto bitmap = load_png(filename); + if (!bitmap) { + GMessageBox msgbox(String::format("Failed to load '%s'", filename.characters()), "Open failed", GMessageBox::Type::Error, window); + msgbox.exec(); + return; + } + paintable_widget->set_bitmap(*bitmap); + } + })); menubar->add_menu(move(file_menu)); auto edit_menu = make("Edit");