From d4c9a2fb36f44576db2dee76613525623d8b5b06 Mon Sep 17 00:00:00 2001 From: David Czekalla Date: Fri, 6 Sep 2024 00:38:54 +0200 Subject: [PATCH] Add "Reset Symmetry to View Center" option (fix #4638, #4640) Added an option in the ContextBar to reset the symmetry options to the current view center. --- data/strings/en.ini | 3 ++- src/app/ui/context_bar.cpp | 22 ++++++++++++++++++---- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/data/strings/en.ini b/data/strings/en.ini index 320f08290..1156bb282 100644 --- a/data/strings/en.ini +++ b/data/strings/en.ini @@ -1857,4 +1857,5 @@ toggle = Toggle Symmetry toggle_horizontal = Toggle Horizontal Symmetry toggle_vertical = Toggle Vertical Symmetry show_options = Symmetry Options -reset_position = Reset Symmetry to Center +reset_position_to_center = Reset Symmetry to Center +reset_position_to_view_center = Reset Symmetry to View Center diff --git a/src/app/ui/context_bar.cpp b/src/app/ui/context_bar.cpp index 82eae972f..346d11708 100644 --- a/src/app/ui/context_bar.cpp +++ b/src/app/ui/context_bar.cpp @@ -1575,11 +1575,13 @@ private: item->setSelected(false); Menu menu; - MenuItem - reset(Strings::symmetry_reset_position()); - menu.addChild(&reset); + MenuItem resetToCenter(Strings::symmetry_reset_position_to_center()); + MenuItem resetToViewCenter(Strings::symmetry_reset_position_to_view_center()); - reset.Click.connect( + menu.addChild(&resetToCenter); + menu.addChild(&resetToViewCenter); + + resetToCenter.Click.connect( [doc, &docPref]{ docPref.symmetry.xAxis(doc->sprite()->width()/2.0); docPref.symmetry.yAxis(doc->sprite()->height()/2.0); @@ -1587,6 +1589,18 @@ private: doc->notifyGeneralUpdate(); }); + resetToViewCenter.Click.connect( + [doc, &docPref]{ + auto* editor = Editor::activeEditor(); + const gfx::Rect& bounds = editor->getViewportBounds(); + double xViewPosition = bounds.x + bounds.w/2.0; + double yViewPosition = bounds.y + bounds.h/2.0; + docPref.symmetry.xAxis(xViewPosition); + docPref.symmetry.yAxis(yViewPosition); + // Redraw symmetry rules + doc->notifyGeneralUpdate(); + }); + menu.showPopup(gfx::Point(bounds.x, bounds.y2()), display()); }