From 4a933f64abaab41efd9dc2be081a2ce0bd7c66e8 Mon Sep 17 00:00:00 2001 From: HeCorr Date: Sat, 20 Jul 2024 02:09:58 -0300 Subject: [PATCH 1/5] remove last Polyline point with Backspace when there is only one point left, the Polyline is cancelled entirely as if pressing the Escape key. --- core_lib/src/tool/polylinetool.cpp | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/core_lib/src/tool/polylinetool.cpp b/core_lib/src/tool/polylinetool.cpp index 6ba6fb936..b58c7b299 100644 --- a/core_lib/src/tool/polylinetool.cpp +++ b/core_lib/src/tool/polylinetool.cpp @@ -220,6 +220,21 @@ bool PolylineTool::keyPressEvent(QKeyEvent* event) } break; + case Qt::Key_Backspace: + if (mPoints.size() > 1) + { + mPoints.removeLast(); + drawPolyline(mPoints, getCurrentPoint()); + return true; + } + else if (mPoints.size() == 1) + { + cancelPolyline(); + clearToolData(); + return true; + } + break; + default: break; } From 0dc98d74c0c1816a0ca9318553f3a135872effe2 Mon Sep 17 00:00:00 2001 From: HeCorr Date: Tue, 23 Jul 2024 18:02:29 -0300 Subject: [PATCH 2/5] setup Remove Last Polyline Segment shortcut defaults to `Backspace` key --- app/src/mainwindow2.cpp | 2 ++ app/src/shortcutspage.cpp | 1 + app/ui/mainwindow2.ui | 8 ++++++++ core_lib/data/resources/kb.ini | 1 + core_lib/src/interface/editor.cpp | 5 +++++ core_lib/src/interface/editor.h | 3 +++ core_lib/src/tool/polylinetool.cpp | 32 ++++++++++++++++-------------- core_lib/src/tool/polylinetool.h | 1 + core_lib/src/util/pencildef.h | 1 + 9 files changed, 39 insertions(+), 15 deletions(-) diff --git a/app/src/mainwindow2.cpp b/app/src/mainwindow2.cpp index 0426ebe9f..cdd4967a6 100644 --- a/app/src/mainwindow2.cpp +++ b/app/src/mainwindow2.cpp @@ -265,6 +265,7 @@ void MainWindow2::createMenus() //--- Edit Menu --- connect(mEditor, &Editor::updateBackup, this, &MainWindow2::undoActSetText); connect(ui->actionUndo, &QAction::triggered, mEditor, &Editor::undo); + connect(ui->actionRemoveLastPolylineSegment, &QAction::triggered, mEditor, &Editor::removeLastPolylineSegment); connect(ui->actionRedo, &QAction::triggered, mEditor, &Editor::redo); connect(ui->actionCut, &QAction::triggered, mEditor, &Editor::copyAndCut); connect(ui->actionCopy, &QAction::triggered, mEditor, &Editor::copy); @@ -1185,6 +1186,7 @@ void MainWindow2::setupKeyboardShortcuts() // edit menu ui->actionUndo->setShortcut(cmdKeySeq(CMD_UNDO)); ui->actionRedo->setShortcut(cmdKeySeq(CMD_REDO)); + ui->actionRemoveLastPolylineSegment->setShortcut(cmdKeySeq(CMD_REMOVE_LAST_POLYLINE_SEGMENT)); ui->actionCut->setShortcut(cmdKeySeq(CMD_CUT)); ui->actionCopy->setShortcut(cmdKeySeq(CMD_COPY)); ui->actionPaste_Previous->setShortcut(cmdKeySeq(CMD_PASTE_FROM_PREVIOUS)); diff --git a/app/src/shortcutspage.cpp b/app/src/shortcutspage.cpp index 74fd65818..c8724fea1 100644 --- a/app/src/shortcutspage.cpp +++ b/app/src/shortcutspage.cpp @@ -379,6 +379,7 @@ static QString getHumanReadableShortcutName(const QString& cmdName) {CMD_TOOL_SELECT, ShortcutsPage::tr("Select Tool", "Shortcut")}, {CMD_TOOL_SMUDGE, ShortcutsPage::tr("Smudge Tool", "Shortcut")}, {CMD_UNDO, ShortcutsPage::tr("Undo", "Shortcut")}, + {CMD_REMOVE_LAST_POLYLINE_SEGMENT, ShortcutsPage::tr("Remove Last Polyline Segment", "Shortcut")}, {CMD_ZOOM_100, ShortcutsPage::tr("Set Zoom to 100%", "Shortcut")}, {CMD_ZOOM_200, ShortcutsPage::tr("Set Zoom to 200%", "Shortcut")}, {CMD_ZOOM_25, ShortcutsPage::tr("Set Zoom to 25%", "Shortcut")}, diff --git a/app/ui/mainwindow2.ui b/app/ui/mainwindow2.ui index 337b6f42b..57f4f66b2 100644 --- a/app/ui/mainwindow2.ui +++ b/app/ui/mainwindow2.ui @@ -1282,6 +1282,14 @@ 30° + + + Remove Last Polyline Segment + + + Removes the lastest Polyline segment + + diff --git a/core_lib/data/resources/kb.ini b/core_lib/data/resources/kb.ini index d48613335..12f24b2ad 100644 --- a/core_lib/data/resources/kb.ini +++ b/core_lib/data/resources/kb.ini @@ -13,6 +13,7 @@ CmdExportMovie= CmdExportPalette= CmdExportSound=Ctrl+I CmdUndo=Ctrl+Z +CmdRemoveLastPolylineSegment=Backspace CmdRedo=Ctrl+Shift+Z CmdCut=Ctrl+X CmdCopy=Ctrl+C diff --git a/core_lib/src/interface/editor.cpp b/core_lib/src/interface/editor.cpp index b99716899..9fde1ecc4 100644 --- a/core_lib/src/interface/editor.cpp +++ b/core_lib/src/interface/editor.cpp @@ -478,6 +478,11 @@ void Editor::undo() } } +void Editor::removeLastPolylineSegment() +{ + emit shouldRemoveLastPolylineSegment(); +} + void Editor::redo() { if (!mBackupList.empty() && mBackupIndex < mBackupList.size() - 2) diff --git a/core_lib/src/interface/editor.h b/core_lib/src/interface/editor.h index 61bd2a81d..928259715 100644 --- a/core_lib/src/interface/editor.h +++ b/core_lib/src/interface/editor.h @@ -151,6 +151,8 @@ class Editor : public QObject void updateLayerCount(); void updateBackup(); + void shouldRemoveLastPolylineSegment(); + void objectLoaded(); void fpsChanged(int fps); @@ -211,6 +213,7 @@ class Editor : public QObject void onCurrentLayerWillChange(int index); void undo(); + void removeLastPolylineSegment(); void redo(); void copy(); diff --git a/core_lib/src/tool/polylinetool.cpp b/core_lib/src/tool/polylinetool.cpp index b58c7b299..80f66d44f 100644 --- a/core_lib/src/tool/polylinetool.cpp +++ b/core_lib/src/tool/polylinetool.cpp @@ -43,6 +43,8 @@ void PolylineTool::loadSettings() { StrokeTool::loadSettings(); + connect(mEditor, &Editor::shouldRemoveLastPolylineSegment, this, &PolylineTool::removeLastSegment); + mPropertyEnabled[WIDTH] = true; mPropertyEnabled[BEZIER] = true; mPropertyEnabled[ANTI_ALIASING] = true; @@ -198,6 +200,21 @@ void PolylineTool::pointerDoubleClickEvent(PointerEvent* event) endPolyline(mPoints); } +void PolylineTool::removeLastSegment() +{ + if (!isActive()) return; + + if (mPoints.size() > 1) + { + mPoints.removeLast(); + drawPolyline(mPoints, getCurrentPoint()); + } + else if (mPoints.size() == 1) + { + cancelPolyline(); + clearToolData(); + } +} bool PolylineTool::keyPressEvent(QKeyEvent* event) { @@ -220,21 +237,6 @@ bool PolylineTool::keyPressEvent(QKeyEvent* event) } break; - case Qt::Key_Backspace: - if (mPoints.size() > 1) - { - mPoints.removeLast(); - drawPolyline(mPoints, getCurrentPoint()); - return true; - } - else if (mPoints.size() == 1) - { - cancelPolyline(); - clearToolData(); - return true; - } - break; - default: break; } diff --git a/core_lib/src/tool/polylinetool.h b/core_lib/src/tool/polylinetool.h index 02b63d863..b23482ae7 100644 --- a/core_lib/src/tool/polylinetool.h +++ b/core_lib/src/tool/polylinetool.h @@ -52,6 +52,7 @@ class PolylineTool : public StrokeTool private: QList mPoints; + void removeLastSegment(); void drawPolyline(QList points, QPointF endPoint); void cancelPolyline(); void endPolyline(QList points); diff --git a/core_lib/src/util/pencildef.h b/core_lib/src/util/pencildef.h index 3ca2c6fdd..1d1f1ba3e 100644 --- a/core_lib/src/util/pencildef.h +++ b/core_lib/src/util/pencildef.h @@ -134,6 +134,7 @@ const static int MaxFramesBound = 9999; #define CMD_EXPORT_PALETTE "CmdExportPalette" #define CMD_EXPORT_SOUND "CmdExportSound" #define CMD_UNDO "CmdUndo" +#define CMD_REMOVE_LAST_POLYLINE_SEGMENT "CmdRemoveLastPolylineSegment" #define CMD_REDO "CmdRedo" #define CMD_CUT "CmdCut" #define CMD_COPY "CmdCopy" From e1b04a4cf8cfde0df4215f648c6cae9a5242f8db Mon Sep 17 00:00:00 2001 From: HeCorr Date: Thu, 25 Jul 2024 16:01:15 -0300 Subject: [PATCH 3/5] fix actionRemoveLastPolylineSegment not activating apparently actions that are not in a menu still need to be added to some widget in order for their shortcut to work. --- app/src/mainwindow2.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/src/mainwindow2.cpp b/app/src/mainwindow2.cpp index cdd4967a6..b6a32aeef 100644 --- a/app/src/mainwindow2.cpp +++ b/app/src/mainwindow2.cpp @@ -1286,6 +1286,9 @@ void MainWindow2::setupKeyboardShortcuts() ui->actionHelp->setShortcut(cmdKeySeq(CMD_HELP)); ui->actionExit->setShortcut(cmdKeySeq(CMD_EXIT)); + + // Actions not in a menu won't work unless added to a widget + addAction(ui->actionRemoveLastPolylineSegment); } void MainWindow2::clearKeyboardShortcuts() From 2b3cddfdeb6a6a3f46f07bd14ac6a5b6dcf4fc6b Mon Sep 17 00:00:00 2001 From: MrStevns Date: Sun, 18 Aug 2024 10:59:20 +0200 Subject: [PATCH 4/5] Connect remove last polyline directly from mainWindow2 --- app/src/mainwindow2.cpp | 2 +- core_lib/src/interface/editor.cpp | 5 ----- core_lib/src/interface/editor.h | 3 --- core_lib/src/tool/basetool.cpp | 4 ++++ core_lib/src/tool/basetool.h | 1 + core_lib/src/tool/polylinetool.cpp | 4 +--- core_lib/src/tool/polylinetool.h | 2 +- 7 files changed, 8 insertions(+), 13 deletions(-) diff --git a/app/src/mainwindow2.cpp b/app/src/mainwindow2.cpp index b6a32aeef..f15d98919 100644 --- a/app/src/mainwindow2.cpp +++ b/app/src/mainwindow2.cpp @@ -265,7 +265,7 @@ void MainWindow2::createMenus() //--- Edit Menu --- connect(mEditor, &Editor::updateBackup, this, &MainWindow2::undoActSetText); connect(ui->actionUndo, &QAction::triggered, mEditor, &Editor::undo); - connect(ui->actionRemoveLastPolylineSegment, &QAction::triggered, mEditor, &Editor::removeLastPolylineSegment); + connect(ui->actionRemoveLastPolylineSegment, &QAction::triggered, mEditor->tools()->getTool(POLYLINE), &BaseTool::removeLastPolylineSegment); connect(ui->actionRedo, &QAction::triggered, mEditor, &Editor::redo); connect(ui->actionCut, &QAction::triggered, mEditor, &Editor::copyAndCut); connect(ui->actionCopy, &QAction::triggered, mEditor, &Editor::copy); diff --git a/core_lib/src/interface/editor.cpp b/core_lib/src/interface/editor.cpp index 9fde1ecc4..b99716899 100644 --- a/core_lib/src/interface/editor.cpp +++ b/core_lib/src/interface/editor.cpp @@ -478,11 +478,6 @@ void Editor::undo() } } -void Editor::removeLastPolylineSegment() -{ - emit shouldRemoveLastPolylineSegment(); -} - void Editor::redo() { if (!mBackupList.empty() && mBackupIndex < mBackupList.size() - 2) diff --git a/core_lib/src/interface/editor.h b/core_lib/src/interface/editor.h index 928259715..61bd2a81d 100644 --- a/core_lib/src/interface/editor.h +++ b/core_lib/src/interface/editor.h @@ -151,8 +151,6 @@ class Editor : public QObject void updateLayerCount(); void updateBackup(); - void shouldRemoveLastPolylineSegment(); - void objectLoaded(); void fpsChanged(int fps); @@ -213,7 +211,6 @@ class Editor : public QObject void onCurrentLayerWillChange(int index); void undo(); - void removeLastPolylineSegment(); void redo(); void copy(); diff --git a/core_lib/src/tool/basetool.cpp b/core_lib/src/tool/basetool.cpp index 7ae8cb062..e8a3f92de 100644 --- a/core_lib/src/tool/basetool.cpp +++ b/core_lib/src/tool/basetool.cpp @@ -226,3 +226,7 @@ void BaseTool::setPathDotColorType(const DotColorType dotColorType) void BaseTool::resetCameraPath() { } + +void BaseTool::removeLastPolylineSegment() +{ +} diff --git a/core_lib/src/tool/basetool.h b/core_lib/src/tool/basetool.h index 272435479..95ec749a3 100644 --- a/core_lib/src/tool/basetool.h +++ b/core_lib/src/tool/basetool.h @@ -126,6 +126,7 @@ class BaseTool : public QObject virtual void setShowCameraPath(const bool showCameraPath); virtual void setPathDotColorType(const DotColorType dotColorType); virtual void resetCameraPath(); + virtual void removeLastPolylineSegment(); virtual void paint(QPainter& painter, const QRect& blitRect) { Q_UNUSED(painter) Q_UNUSED(blitRect) } diff --git a/core_lib/src/tool/polylinetool.cpp b/core_lib/src/tool/polylinetool.cpp index 80f66d44f..744919963 100644 --- a/core_lib/src/tool/polylinetool.cpp +++ b/core_lib/src/tool/polylinetool.cpp @@ -43,8 +43,6 @@ void PolylineTool::loadSettings() { StrokeTool::loadSettings(); - connect(mEditor, &Editor::shouldRemoveLastPolylineSegment, this, &PolylineTool::removeLastSegment); - mPropertyEnabled[WIDTH] = true; mPropertyEnabled[BEZIER] = true; mPropertyEnabled[ANTI_ALIASING] = true; @@ -200,7 +198,7 @@ void PolylineTool::pointerDoubleClickEvent(PointerEvent* event) endPolyline(mPoints); } -void PolylineTool::removeLastSegment() +void PolylineTool::removeLastPolylineSegment() { if (!isActive()) return; diff --git a/core_lib/src/tool/polylinetool.h b/core_lib/src/tool/polylinetool.h index b23482ae7..2cab04663 100644 --- a/core_lib/src/tool/polylinetool.h +++ b/core_lib/src/tool/polylinetool.h @@ -44,6 +44,7 @@ class PolylineTool : public StrokeTool void setWidth(const qreal width) override; void setFeather(const qreal feather) override; void setAA(const int AA) override; + void removeLastPolylineSegment() override; bool leavingThisTool() override; @@ -52,7 +53,6 @@ class PolylineTool : public StrokeTool private: QList mPoints; - void removeLastSegment(); void drawPolyline(QList points, QPointF endPoint); void cancelPolyline(); void endPolyline(QList points); From 07ef1a648eb9e271dfb2499d37a6f1f5771c6239 Mon Sep 17 00:00:00 2001 From: Jakob Gahde Date: Sun, 18 Aug 2024 17:23:40 +0200 Subject: [PATCH 5/5] Remove polyline-specific member from BaseTool --- app/src/mainwindow2.cpp | 3 ++- core_lib/src/tool/basetool.cpp | 4 ---- core_lib/src/tool/basetool.h | 1 - core_lib/src/tool/polylinetool.h | 4 ++-- 4 files changed, 4 insertions(+), 8 deletions(-) diff --git a/app/src/mainwindow2.cpp b/app/src/mainwindow2.cpp index b4302e651..8c138faf5 100644 --- a/app/src/mainwindow2.cpp +++ b/app/src/mainwindow2.cpp @@ -40,6 +40,7 @@ GNU General Public License for more details. #include "pencilsettings.h" #include "object.h" #include "editor.h" +#include "polylinetool.h" #include "filemanager.h" #include "colormanager.h" @@ -264,7 +265,7 @@ void MainWindow2::createMenus() //--- Edit Menu --- connect(mEditor, &Editor::updateBackup, this, &MainWindow2::undoActSetText); connect(ui->actionUndo, &QAction::triggered, mEditor, &Editor::undo); - connect(ui->actionRemoveLastPolylineSegment, &QAction::triggered, mEditor->tools()->getTool(POLYLINE), &BaseTool::removeLastPolylineSegment); + connect(ui->actionRemoveLastPolylineSegment, &QAction::triggered, static_cast(mEditor->tools()->getTool(POLYLINE)), &PolylineTool::removeLastPolylineSegment); connect(ui->actionRedo, &QAction::triggered, mEditor, &Editor::redo); connect(ui->actionCut, &QAction::triggered, mEditor, &Editor::copyAndCut); connect(ui->actionCopy, &QAction::triggered, mEditor, &Editor::copy); diff --git a/core_lib/src/tool/basetool.cpp b/core_lib/src/tool/basetool.cpp index 7abd7f482..18980e079 100644 --- a/core_lib/src/tool/basetool.cpp +++ b/core_lib/src/tool/basetool.cpp @@ -232,7 +232,3 @@ void BaseTool::setPathDotColorType(const DotColorType dotColorType) void BaseTool::resetCameraPath() { } - -void BaseTool::removeLastPolylineSegment() -{ -} diff --git a/core_lib/src/tool/basetool.h b/core_lib/src/tool/basetool.h index bebb118ed..1c773bf6f 100644 --- a/core_lib/src/tool/basetool.h +++ b/core_lib/src/tool/basetool.h @@ -129,7 +129,6 @@ class BaseTool : public QObject virtual void setShowCameraPath(const bool showCameraPath); virtual void setPathDotColorType(const DotColorType dotColorType); virtual void resetCameraPath(); - virtual void removeLastPolylineSegment(); virtual void paint(QPainter& painter, const QRect& blitRect) { Q_UNUSED(painter) Q_UNUSED(blitRect) } diff --git a/core_lib/src/tool/polylinetool.h b/core_lib/src/tool/polylinetool.h index 20699a341..da4b87606 100644 --- a/core_lib/src/tool/polylinetool.h +++ b/core_lib/src/tool/polylinetool.h @@ -46,8 +46,8 @@ class PolylineTool : public StrokeTool void setFeather(const qreal feather) override; void setAA(const int AA) override; void setClosedPath(const bool closed) override; - - void removeLastPolylineSegment() override; + + void removeLastPolylineSegment(); bool leavingThisTool() override;