From 648b36f3c53bf3fd83a8dbf5fc788046abe10e29 Mon Sep 17 00:00:00 2001 From: Alec Murphy Date: Sat, 6 Jul 2024 22:50:43 -0400 Subject: [PATCH] PixelPaint: Disable Crop to Selection if empty This PR resolves 2 FIXMEs. --- .../Applications/PixelPaint/MainWidget.cpp | 20 +++++++++++++------ Userland/Applications/PixelPaint/MainWidget.h | 3 +++ 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/Userland/Applications/PixelPaint/MainWidget.cpp b/Userland/Applications/PixelPaint/MainWidget.cpp index dde009249e440e..ef4f298e95c4a4 100644 --- a/Userland/Applications/PixelPaint/MainWidget.cpp +++ b/Userland/Applications/PixelPaint/MainWidget.cpp @@ -677,11 +677,10 @@ ErrorOr MainWidget::initialize_menubar(GUI::Window& window) editor->did_complete_action("Resize Image"sv); } })); - m_image_menu->add_action(GUI::Action::create( + m_crop_image_to_selection_action = GUI::Action::create( "&Crop Image to Selection", g_icon_bag.crop, [&](auto&) { auto* editor = current_image_editor(); VERIFY(editor); - // FIXME: disable this action if there is no selection if (editor->image().selection().is_empty()) return; auto crop_rect = editor->image().rect().intersected(editor->image().selection().bounding_rect()); @@ -696,7 +695,8 @@ ErrorOr MainWidget::initialize_menubar(GUI::Window& window) } editor->image().selection().clear(); editor->did_complete_action("Crop Image to Selection"sv); - })); + }); + m_image_menu->add_action(*m_crop_image_to_selection_action); m_image_menu->add_action(GUI::Action::create( "&Crop Image to Content", g_icon_bag.crop, [&](auto&) { @@ -1104,11 +1104,10 @@ ErrorOr MainWidget::initialize_menubar(GUI::Window& window) })); m_layer_menu->add_separator(); - m_layer_menu->add_action(GUI::Action::create( + m_crop_layer_to_selection_action = GUI::Action::create( "&Crop Layer to Selection", g_icon_bag.crop, [&](auto&) { auto* editor = current_image_editor(); VERIFY(editor); - // FIXME: disable this action if there is no selection auto active_layer = editor->active_layer(); if (!active_layer || editor->image().selection().is_empty()) return; @@ -1122,7 +1121,8 @@ ErrorOr MainWidget::initialize_menubar(GUI::Window& window) active_layer->set_location(intersection.location()); editor->image().selection().clear(); editor->did_complete_action("Crop Layer to Selection"sv); - })); + }); + m_layer_menu->add_action(*m_crop_layer_to_selection_action); m_layer_menu->add_action(GUI::Action::create( "&Crop Layer to Content", g_icon_bag.crop, [&](auto&) { auto* editor = current_image_editor(); @@ -1347,6 +1347,13 @@ ErrorOr MainWidget::create_image_from_clipboard() return {}; } +void MainWidget::refresh_crop_to_selection_menu_actions() +{ + auto enabled = current_image_editor() && !current_image_editor()->image().selection().is_empty(); + m_crop_image_to_selection_action->set_enabled(enabled); + m_crop_layer_to_selection_action->set_enabled(enabled); +} + bool MainWidget::request_close() { while (!m_tab_widget->children().is_empty()) { @@ -1511,6 +1518,7 @@ void MainWidget::drop_event(GUI::DropEvent& event) void MainWidget::update_window_modified() { + refresh_crop_to_selection_menu_actions(); window()->set_modified(m_tab_widget->is_any_tab_modified()); } void MainWidget::update_status_bar(ByteString appended_text) diff --git a/Userland/Applications/PixelPaint/MainWidget.h b/Userland/Applications/PixelPaint/MainWidget.h index ccd4894ce395a9..33fd2b728b2301 100644 --- a/Userland/Applications/PixelPaint/MainWidget.h +++ b/Userland/Applications/PixelPaint/MainWidget.h @@ -44,6 +44,7 @@ class MainWidget : public GUI::Widget { void open_image(FileSystemAccessClient::File); ErrorOr create_default_image(); + void refresh_crop_to_selection_menu_actions(); bool request_close(); private: @@ -120,6 +121,8 @@ class MainWidget : public GUI::Widget { RefPtr m_toggle_mask_visibility_action; RefPtr m_open_luminosity_masking_action; RefPtr m_open_color_masking_action; + RefPtr m_crop_image_to_selection_action; + RefPtr m_crop_layer_to_selection_action; Gfx::IntPoint m_last_image_editor_mouse_position; };