diff options
author | electrikmilk <brandonjordan124@gmail.com> | 2022-02-09 13:48:56 -0500 |
---|---|---|
committer | Andreas Kling <kling@serenityos.org> | 2022-02-12 11:24:00 +0100 |
commit | dece108f9ac7074212997e7936b4a7f333846cab (patch) | |
tree | 70f07e3a5d8846cede906a81c034d448715d4171 /Userland | |
parent | 29078d4d53f3434ef83a1868ab91b9038e09a2ab (diff) | |
download | serenity-dece108f9ac7074212997e7936b4a7f333846cab.zip |
PixelPaint: Implement IconBag to organize icons
Implement IconBag method of organizing menubar icons from Browser.
Diffstat (limited to 'Userland')
-rw-r--r-- | Userland/Applications/PixelPaint/CMakeLists.txt | 1 | ||||
-rw-r--r-- | Userland/Applications/PixelPaint/IconBag.cpp | 36 | ||||
-rw-r--r-- | Userland/Applications/PixelPaint/IconBag.h | 35 | ||||
-rw-r--r-- | Userland/Applications/PixelPaint/MainWidget.cpp | 40 | ||||
-rw-r--r-- | Userland/Applications/PixelPaint/MainWidget.h | 3 | ||||
-rw-r--r-- | Userland/Applications/PixelPaint/main.cpp | 2 |
6 files changed, 97 insertions, 20 deletions
diff --git a/Userland/Applications/PixelPaint/CMakeLists.txt b/Userland/Applications/PixelPaint/CMakeLists.txt index 8919cc3695..d3ca024630 100644 --- a/Userland/Applications/PixelPaint/CMakeLists.txt +++ b/Userland/Applications/PixelPaint/CMakeLists.txt @@ -30,6 +30,7 @@ set(SOURCES Filters/LaplaceDiagonal.cpp Filters/Sepia.cpp Filters/Sharpen.cpp + IconBag.cpp Image.cpp ImageEditor.cpp Layer.cpp diff --git a/Userland/Applications/PixelPaint/IconBag.cpp b/Userland/Applications/PixelPaint/IconBag.cpp new file mode 100644 index 0000000000..88017b99e0 --- /dev/null +++ b/Userland/Applications/PixelPaint/IconBag.cpp @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2022, Brandon Jordan <brandonjordan124@gmail.com> + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#include <AK/String.h> +#include <Applications/PixelPaint/IconBag.h> + +namespace PixelPaint { +ErrorOr<IconBag> IconBag::try_create() +{ + IconBag icon_bag; + + icon_bag.filetype_pixelpaint = TRY(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/filetype-pixelpaint.png")); + icon_bag.new_clipboard = TRY(Gfx::Bitmap::try_load_from_file("/res/icons/pixelpaint/new-clipboard.png")); + icon_bag.file_export = TRY(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/file-export.png")); + icon_bag.edit_copy = TRY(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/edit-copy.png")); + icon_bag.clear_selection = TRY(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/clear-selection.png")); + icon_bag.swap_colors = TRY(Gfx::Bitmap::try_load_from_file("/res/icons/pixelpaint/swap-colors.png")); + icon_bag.default_colors = TRY(Gfx::Bitmap::try_load_from_file("/res/icons/pixelpaint/default-colors.png")); + icon_bag.edit_flip_vertical = TRY(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/edit-flip-vertical.png")); + icon_bag.edit_flip_horizontal = TRY(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/edit-flip-horizontal.png")); + icon_bag.new_layer = TRY(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/new-layer.png")); + icon_bag.previous_layer = TRY(Gfx::Bitmap::try_load_from_file("/res/icons/pixelpaint/previous-layer.png")); + icon_bag.next_layer = TRY(Gfx::Bitmap::try_load_from_file("/res/icons/pixelpaint/next-layer.png")); + icon_bag.top_layer = TRY(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/top-layer.png")); + icon_bag.bottom_layer = TRY(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/bottom-layer.png")); + icon_bag.active_layer_up = TRY(Gfx::Bitmap::try_load_from_file("/res/icons/pixelpaint/active-layer-up.png")); + icon_bag.active_layer_down = TRY(Gfx::Bitmap::try_load_from_file("/res/icons/pixelpaint/active-layer-down.png")); + icon_bag.delete_layer = TRY(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/delete.png")); + icon_bag.filter = TRY(Gfx::Bitmap::try_load_from_file("/res/icons/pixelpaint/filter.png")); + + return icon_bag; +} +} diff --git a/Userland/Applications/PixelPaint/IconBag.h b/Userland/Applications/PixelPaint/IconBag.h new file mode 100644 index 0000000000..eab3879073 --- /dev/null +++ b/Userland/Applications/PixelPaint/IconBag.h @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2022, Brandon Jordan <brandonjordan124@gmail.com> + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#pragma once + +#include <AK/Error.h> +#include <LibGfx/Bitmap.h> + +namespace PixelPaint { +struct IconBag final { + static ErrorOr<IconBag> try_create(); + + RefPtr<Gfx::Bitmap> filetype_pixelpaint { nullptr }; + RefPtr<Gfx::Bitmap> new_clipboard { nullptr }; + RefPtr<Gfx::Bitmap> file_export { nullptr }; + RefPtr<Gfx::Bitmap> edit_copy { nullptr }; + RefPtr<Gfx::Bitmap> clear_selection { nullptr }; + RefPtr<Gfx::Bitmap> swap_colors { nullptr }; + RefPtr<Gfx::Bitmap> default_colors { nullptr }; + RefPtr<Gfx::Bitmap> edit_flip_vertical { nullptr }; + RefPtr<Gfx::Bitmap> edit_flip_horizontal { nullptr }; + RefPtr<Gfx::Bitmap> new_layer { nullptr }; + RefPtr<Gfx::Bitmap> previous_layer { nullptr }; + RefPtr<Gfx::Bitmap> next_layer { nullptr }; + RefPtr<Gfx::Bitmap> top_layer { nullptr }; + RefPtr<Gfx::Bitmap> bottom_layer { nullptr }; + RefPtr<Gfx::Bitmap> active_layer_up { nullptr }; + RefPtr<Gfx::Bitmap> active_layer_down { nullptr }; + RefPtr<Gfx::Bitmap> delete_layer { nullptr }; + RefPtr<Gfx::Bitmap> filter { nullptr }; +}; +} diff --git a/Userland/Applications/PixelPaint/MainWidget.cpp b/Userland/Applications/PixelPaint/MainWidget.cpp index c144c0f870..d1509c0326 100644 --- a/Userland/Applications/PixelPaint/MainWidget.cpp +++ b/Userland/Applications/PixelPaint/MainWidget.cpp @@ -25,11 +25,12 @@ #include <LibGUI/MessageBox.h> #include <LibGUI/Toolbar.h> #include <LibGUI/Window.h> -#include <LibGfx/Bitmap.h> #include <LibGfx/Rect.h> namespace PixelPaint { +IconBag g_icon_bag; + MainWidget::MainWidget() : Widget() { @@ -107,7 +108,7 @@ void MainWidget::initialize_menubar(GUI::Window& window) auto& file_menu = window.add_menu("&File"); m_new_image_action = GUI::Action::create( - "&New Image...", { Mod_Ctrl, Key_N }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/filetype-pixelpaint.png").release_value_but_fixme_should_propagate_errors(), [&](auto&) { + "&New Image...", { Mod_Ctrl, Key_N }, g_icon_bag.filetype_pixelpaint, [&](auto&) { auto dialog = PixelPaint::CreateNewImageDialog::construct(&window); if (dialog->exec() == GUI::Dialog::ExecOK) { auto image = PixelPaint::Image::try_create_with_size(dialog->image_size()).release_value_but_fixme_should_propagate_errors(); @@ -126,7 +127,7 @@ void MainWidget::initialize_menubar(GUI::Window& window) }); m_new_image_from_clipboard_action = GUI::Action::create( - "&New Image from Clipboard", { Mod_Ctrl | Mod_Shift, Key_V }, Gfx::Bitmap::try_load_from_file("/res/icons/pixelpaint/new-clipboard.png").release_value_but_fixme_should_propagate_errors(), [&](auto&) { + "&New Image from Clipboard", { Mod_Ctrl | Mod_Shift, Key_V }, g_icon_bag.new_clipboard, [&](auto&) { create_image_from_clipboard(); }); @@ -186,7 +187,7 @@ void MainWidget::initialize_menubar(GUI::Window& window) GUI::MessageBox::show_error(&window, String::formatted("Export to PNG failed: {}", result.error())); })); - m_export_submenu->set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/file-export.png").release_value_but_fixme_should_propagate_errors()); + m_export_submenu->set_icon(g_icon_bag.file_export); file_menu.add_separator(); @@ -222,8 +223,7 @@ void MainWidget::initialize_menubar(GUI::Window& window) }); m_copy_merged_action = GUI::Action::create( - "Copy &Merged", { Mod_Ctrl | Mod_Shift, Key_C }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/edit-copy.png").release_value_but_fixme_should_propagate_errors(), - [&](auto&) { + "Copy &Merged", { Mod_Ctrl | Mod_Shift, Key_C }, g_icon_bag.edit_copy, [&](auto&) { auto* editor = current_image_editor(); VERIFY(editor); @@ -282,7 +282,7 @@ void MainWidget::initialize_menubar(GUI::Window& window) editor->selection().merge(editor->active_layer()->relative_rect(), PixelPaint::Selection::MergeMode::Set); })); m_edit_menu->add_action(GUI::Action::create( - "Clear &Selection", Gfx::Bitmap::try_load_from_file("/res/icons/16x16/clear-selection.png").release_value_but_fixme_should_propagate_errors(), [&](auto&) { + "Clear &Selection", g_icon_bag.clear_selection, [&](auto&) { auto* editor = current_image_editor(); VERIFY(editor); editor->selection().clear(); @@ -290,7 +290,7 @@ void MainWidget::initialize_menubar(GUI::Window& window) m_edit_menu->add_separator(); m_edit_menu->add_action(GUI::Action::create( - "S&wap Colors", { Mod_None, Key_X }, Gfx::Bitmap::try_load_from_file("/res/icons/pixelpaint/swap-colors.png").release_value_but_fixme_should_propagate_errors(), [&](auto&) { + "S&wap Colors", { Mod_None, Key_X }, g_icon_bag.swap_colors, [&](auto&) { auto* editor = current_image_editor(); VERIFY(editor); auto old_primary_color = editor->primary_color(); @@ -298,7 +298,7 @@ void MainWidget::initialize_menubar(GUI::Window& window) editor->set_secondary_color(old_primary_color); })); m_edit_menu->add_action(GUI::Action::create( - "&Default Colors", { Mod_None, Key_D }, Gfx::Bitmap::try_load_from_file("/res/icons/pixelpaint/default-colors.png").release_value_but_fixme_should_propagate_errors(), [&](auto&) { + "&Default Colors", { Mod_None, Key_D }, g_icon_bag.default_colors, [&](auto&) { auto* editor = current_image_editor(); VERIFY(editor); editor->set_primary_color(Color::Black); @@ -434,13 +434,13 @@ void MainWidget::initialize_menubar(GUI::Window& window) m_image_menu = window.add_menu("&Image"); m_image_menu->add_action(GUI::Action::create( - "Flip &Vertically", Gfx::Bitmap::try_load_from_file("/res/icons/16x16/edit-flip-vertical.png").release_value_but_fixme_should_propagate_errors(), [&](auto&) { + "Flip &Vertically", g_icon_bag.edit_flip_vertical, [&](auto&) { auto* editor = current_image_editor(); VERIFY(editor); editor->image().flip(Gfx::Orientation::Vertical); })); m_image_menu->add_action(GUI::Action::create( - "Flip &Horizontally", Gfx::Bitmap::try_load_from_file("/res/icons/16x16/edit-flip-horizontal.png").release_value_but_fixme_should_propagate_errors(), [&](auto&) { + "Flip &Horizontally", g_icon_bag.edit_flip_horizontal, [&](auto&) { auto* editor = current_image_editor(); VERIFY(editor); editor->image().flip(Gfx::Orientation::Horizontal); @@ -475,7 +475,7 @@ void MainWidget::initialize_menubar(GUI::Window& window) m_layer_menu = window.add_menu("&Layer"); m_layer_menu->add_action(GUI::Action::create( - "New &Layer...", { Mod_Ctrl | Mod_Shift, Key_N }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/new-layer.png").release_value_but_fixme_should_propagate_errors(), [&](auto&) { + "New &Layer...", { Mod_Ctrl | Mod_Shift, Key_N }, g_icon_bag.new_layer, [&](auto&) { auto* editor = current_image_editor(); VERIFY(editor); auto dialog = PixelPaint::CreateNewLayerDialog::construct(editor->image().size(), &window); @@ -493,19 +493,19 @@ void MainWidget::initialize_menubar(GUI::Window& window) m_layer_menu->add_separator(); m_layer_menu->add_action(GUI::Action::create( - "Select &Previous Layer", { 0, Key_PageUp }, Gfx::Bitmap::try_load_from_file("/res/icons/pixelpaint/previous-layer.png").release_value_but_fixme_should_propagate_errors(), [&](auto&) { + "Select &Previous Layer", { 0, Key_PageUp }, g_icon_bag.previous_layer, [&](auto&) { m_layer_list_widget->cycle_through_selection(1); })); m_layer_menu->add_action(GUI::Action::create( - "Select &Next Layer", { 0, Key_PageDown }, Gfx::Bitmap::try_load_from_file("/res/icons/pixelpaint/next-layer.png").release_value_but_fixme_should_propagate_errors(), [&](auto&) { + "Select &Next Layer", { 0, Key_PageDown }, g_icon_bag.next_layer, [&](auto&) { m_layer_list_widget->cycle_through_selection(-1); })); m_layer_menu->add_action(GUI::Action::create( - "Select &Top Layer", { 0, Key_Home }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/top-layer.png").release_value_but_fixme_should_propagate_errors(), [&](auto&) { + "Select &Top Layer", { 0, Key_Home }, g_icon_bag.top_layer, [&](auto&) { m_layer_list_widget->select_top_layer(); })); m_layer_menu->add_action(GUI::Action::create( - "Select B&ottom Layer", { 0, Key_End }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/bottom-layer.png").release_value_but_fixme_should_propagate_errors(), [&](auto&) { + "Select B&ottom Layer", { 0, Key_End }, g_icon_bag.bottom_layer, [&](auto&) { m_layer_list_widget->select_bottom_layer(); })); m_layer_menu->add_separator(); @@ -531,7 +531,7 @@ void MainWidget::initialize_menubar(GUI::Window& window) })); m_layer_menu->add_separator(); m_layer_menu->add_action(GUI::Action::create( - "Move Active Layer &Up", { Mod_Ctrl, Key_PageUp }, Gfx::Bitmap::try_load_from_file("/res/icons/pixelpaint/active-layer-up.png").release_value_but_fixme_should_propagate_errors(), [&](auto&) { + "Move Active Layer &Up", { Mod_Ctrl, Key_PageUp }, g_icon_bag.active_layer_up, [&](auto&) { auto* editor = current_image_editor(); VERIFY(editor); auto active_layer = editor->active_layer(); @@ -540,7 +540,7 @@ void MainWidget::initialize_menubar(GUI::Window& window) editor->image().move_layer_up(*active_layer); })); m_layer_menu->add_action(GUI::Action::create( - "Move Active Layer &Down", { Mod_Ctrl, Key_PageDown }, Gfx::Bitmap::try_load_from_file("/res/icons/pixelpaint/active-layer-down.png").release_value_but_fixme_should_propagate_errors(), [&](auto&) { + "Move Active Layer &Down", { Mod_Ctrl, Key_PageDown }, g_icon_bag.active_layer_down, [&](auto&) { auto* editor = current_image_editor(); VERIFY(editor); auto active_layer = editor->active_layer(); @@ -550,7 +550,7 @@ void MainWidget::initialize_menubar(GUI::Window& window) })); m_layer_menu->add_separator(); m_layer_menu->add_action(GUI::Action::create( - "&Remove Active Layer", { Mod_Ctrl, Key_D }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/delete.png").release_value_but_fixme_should_propagate_errors(), [&](auto&) { + "&Remove Active Layer", { Mod_Ctrl, Key_D }, g_icon_bag.delete_layer, [&](auto&) { auto* editor = current_image_editor(); VERIFY(editor); auto active_layer = editor->active_layer(); @@ -604,7 +604,7 @@ void MainWidget::initialize_menubar(GUI::Window& window) m_filter_menu = window.add_menu("&Filter"); - m_filter_menu->add_action(GUI::Action::create("Filter &Gallery", Gfx::Bitmap::try_load_from_file("/res/icons/pixelpaint/filter.png").release_value_but_fixme_should_propagate_errors(), [&](auto&) { + m_filter_menu->add_action(GUI::Action::create("Filter &Gallery", g_icon_bag.filter, [&](auto&) { auto* editor = current_image_editor(); VERIFY(editor); auto dialog = PixelPaint::FilterGallery::construct(&window, editor); diff --git a/Userland/Applications/PixelPaint/MainWidget.h b/Userland/Applications/PixelPaint/MainWidget.h index 88e7e8df25..bf718933a8 100644 --- a/Userland/Applications/PixelPaint/MainWidget.h +++ b/Userland/Applications/PixelPaint/MainWidget.h @@ -7,6 +7,7 @@ #pragma once #include "Guide.h" +#include "IconBag.h" #include "Image.h" #include "ImageEditor.h" #include "Layer.h" @@ -27,6 +28,8 @@ namespace PixelPaint { +extern IconBag g_icon_bag; + class MainWidget : public GUI::Widget { C_OBJECT(MainWidget); diff --git a/Userland/Applications/PixelPaint/main.cpp b/Userland/Applications/PixelPaint/main.cpp index 6369aa921f..e2cebb31b9 100644 --- a/Userland/Applications/PixelPaint/main.cpp +++ b/Userland/Applications/PixelPaint/main.cpp @@ -40,6 +40,8 @@ ErrorOr<int> serenity_main(Main::Arguments arguments) auto app_icon = GUI::Icon::default_icon("app-pixel-paint"); + PixelPaint::g_icon_bag = TRY(PixelPaint::IconBag::try_create()); + auto window = GUI::Window::construct(); window->set_title("Pixel Paint"); window->resize(800, 510); |