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");