From 44601581b3b15bdd6e12c642f8b2a54b223a7ef3 Mon Sep 17 00:00:00 2001 From: manongjohn <19245851+manongjohn@users.noreply.github.com> Date: Thu, 22 Dec 2022 10:11:56 -0500 Subject: [PATCH] Allow tag actions on non-current frame --- toonz/sources/toonz/xsheetcmd.cpp | 6 ++++-- toonz/sources/toonz/xsheetviewer.h | 2 ++ toonz/sources/toonz/xshrowviewer.cpp | 3 +++ toonz/sources/toonz/xshrowviewer.h | 4 ++++ 4 files changed, 13 insertions(+), 2 deletions(-) diff --git a/toonz/sources/toonz/xsheetcmd.cpp b/toonz/sources/toonz/xsheetcmd.cpp index cb04ecca..d54e5493 100644 --- a/toonz/sources/toonz/xsheetcmd.cpp +++ b/toonz/sources/toonz/xsheetcmd.cpp @@ -2755,7 +2755,8 @@ public: ToggleTaggedFrame() : MenuItemHandler(MI_ToggleTaggedFrame) {} void execute() override { TApp *app = TApp::instance(); - int frame = app->getCurrentFrame()->getFrame(); + int frame = app->getCurrentXsheetViewer()->getContextMenuRow(); + if (frame < 0) frame = app->getCurrentFrame()->getFrame(); assert(frame >= 0); TXsheet *xsh = app->getCurrentXsheet()->getXsheet(); @@ -2777,7 +2778,8 @@ public: EditTaggedFrame() : MenuItemHandler(MI_EditTaggedFrame) {} void execute() override { TApp *app = TApp::instance(); - int frame = app->getCurrentFrame()->getFrame(); + int frame = app->getCurrentXsheetViewer()->getContextMenuRow(); + if (frame < 0) frame = app->getCurrentFrame()->getFrame(); assert(frame >= 0); TXsheet *xsh = app->getCurrentXsheet()->getXsheet(); diff --git a/toonz/sources/toonz/xsheetviewer.h b/toonz/sources/toonz/xsheetviewer.h index 487a3ff4..2ed71098 100644 --- a/toonz/sources/toonz/xsheetviewer.h +++ b/toonz/sources/toonz/xsheetviewer.h @@ -1285,6 +1285,8 @@ public: QList availableFramesPerPage(); void zoomToFramesPerPage(int frames); + int getContextMenuRow() { return m_rowArea->getContextMenuRow(); } + protected: void scrollToColumn(int col); void scrollToHorizontalRange(int x0, int x1); diff --git a/toonz/sources/toonz/xshrowviewer.cpp b/toonz/sources/toonz/xshrowviewer.cpp index 52d4ea82..6efbe55f 100644 --- a/toonz/sources/toonz/xshrowviewer.cpp +++ b/toonz/sources/toonz/xshrowviewer.cpp @@ -1297,6 +1297,9 @@ void RowArea::mouseReleaseEvent(QMouseEvent *event) { //----------------------------------------------------------------------------- void RowArea::contextMenuEvent(QContextMenuEvent *event) { + TPoint pos(event->pos().x(), event->pos().y()); + m_contextMenuRow = m_viewer->xyToPosition(pos).frame(); + OnionSkinMask osMask = TApp::instance()->getCurrentOnionSkin()->getOnionSkinMask(); diff --git a/toonz/sources/toonz/xshrowviewer.h b/toonz/sources/toonz/xshrowviewer.h index 19180fc6..3b877159 100644 --- a/toonz/sources/toonz/xshrowviewer.h +++ b/toonz/sources/toonz/xshrowviewer.h @@ -44,6 +44,8 @@ class RowArea final : public QWidget { // panning by middle-drag bool m_isPanning; + int m_contextMenuRow; + void drawRows(QPainter &p, int r0, int r1); void drawPlayRangeBackground(QPainter &p, int r0, int r1); void drawPlayRange(QPainter &p, int r0, int r1); @@ -71,6 +73,8 @@ public: #endif ~RowArea(); + int getContextMenuRow() { return m_contextMenuRow; } + protected: void paintEvent(QPaintEvent *) override;