diff --git a/plugins/tools/tool_transform2/kis_tool_transform.h b/plugins/tools/tool_transform2/kis_tool_transform.h --- a/plugins/tools/tool_transform2/kis_tool_transform.h +++ b/plugins/tools/tool_transform2/kis_tool_transform.h @@ -42,6 +42,8 @@ #include #include #include +#include + #include "tool_transform_args.h" #include "tool_transform_changes_tracker.h" @@ -145,6 +147,8 @@ void beginActionImpl(KoPointerEvent *event, bool usePrimaryAction, KisTool::AlternateAction action); void continueActionImpl(KoPointerEvent *event, bool usePrimaryAction, KisTool::AlternateAction action); void endActionImpl(KoPointerEvent *event, bool usePrimaryAction, KisTool::AlternateAction action); + QMenu* popupActionsMenu() override; + void activatePrimaryAction() override; void deactivatePrimaryAction() override; @@ -227,6 +231,7 @@ private: QList fetchNodesList(ToolTransformArgs::TransformMode mode, KisNodeSP root, bool recursive); + QScopedPointer m_contextMenu; bool clearDevices(const QList &nodes); void transformClearedDevices(); @@ -292,6 +297,17 @@ TransformTransactionProperties m_transaction; TransformChangesTracker m_changesTracker; + + /// actions for the context click menu + KisAction* warpAction; + KisAction* liquifyAction; + KisAction* cageAction; + KisAction* freeTransformAction; + KisAction* perspectiveAction; + + + + /** * This artificial rect is used to store the image to flake * transformation. We check against this rect to get to know @@ -315,6 +331,15 @@ void slotResetTransform(); void slotRestartTransform(); void slotEditingFinished(); + + + // context menu options for updating the transform type + // this is to help with discoverability since come people can't find the tool options + void slotUpdateToWarpType(); + void slotUpdateToPerspectiveType(); + void slotUpdateToFreeTransformType(); + void slotUpdateToLiquifyType(); + void slotUpdateToCageType(); }; class KisToolTransformFactory : public KoToolFactoryBase diff --git a/plugins/tools/tool_transform2/kis_tool_transform.cc b/plugins/tools/tool_transform2/kis_tool_transform.cc --- a/plugins/tools/tool_transform2/kis_tool_transform.cc +++ b/plugins/tools/tool_transform2/kis_tool_transform.cc @@ -35,6 +35,7 @@ #include #include #include +#include #include #include @@ -120,6 +121,21 @@ useCursor(KisCursor::selectCursor()); m_optionsWidget = 0; + warpAction = new KisAction(i18n("Warp")); + liquifyAction = new KisAction(i18n("Liquify"));; + cageAction = new KisAction(i18n("Cage"));; + freeTransformAction = new KisAction(i18n("Free"));; + perspectiveAction = new KisAction(i18n("Perspective")); + + m_contextMenu.reset(new QMenu()); + + connect(warpAction, SIGNAL(triggered(bool)), this, SLOT(slotUpdateToWarpType())); + connect(perspectiveAction, SIGNAL(triggered(bool)), this, SLOT(slotUpdateToPerspectiveType())); + connect(freeTransformAction, SIGNAL(triggered(bool)), this, SLOT(slotUpdateToFreeTransformType())); + connect(liquifyAction, SIGNAL(triggered(bool)), this, SLOT(slotUpdateToLiquifyType())); + connect(cageAction, SIGNAL(triggered(bool)), this, SLOT(slotUpdateToCageType())); + + connect(m_warpStrategy.data(), SIGNAL(requestCanvasUpdate()), SLOT(canvasUpdateRequested())); connect(m_cageStrategy.data(), SIGNAL(requestCanvasUpdate()), SLOT(canvasUpdateRequested())); connect(m_liquifyStrategy.data(), SIGNAL(requestCanvasUpdate()), SLOT(canvasUpdateRequested())); @@ -323,6 +339,22 @@ updateApplyResetAvailability(); } +QMenu* KisToolTransform::popupActionsMenu() +{ + if (m_contextMenu) { + m_contextMenu->clear(); + + // add a quick switch to different transform types + m_contextMenu->addAction(freeTransformAction); + m_contextMenu->addAction(perspectiveAction); + m_contextMenu->addAction(warpAction); + m_contextMenu->addAction(cageAction); + m_contextMenu->addAction(liquifyAction); + } + + return m_contextMenu.data(); +} + void KisToolTransform::beginPrimaryAction(KoPointerEvent *event) { beginActionImpl(event, true, KisTool::NONE); @@ -1138,6 +1170,7 @@ startStroke(savedArgs.mode(), true); } + void KisToolTransform::forceRepaintDelayedLayers(KisNodeSP root) { KIS_SAFE_ASSERT_RECOVER_RETURN(root); @@ -1146,12 +1179,36 @@ image()->waitForDone(); } - void KisToolTransform::slotEditingFinished() { commitChanges(); } +void KisToolTransform::slotUpdateToWarpType() +{ + setTransformMode(KisToolTransform::TransformToolMode::WarpTransformMode); +} + +void KisToolTransform::slotUpdateToPerspectiveType() +{ + setTransformMode(KisToolTransform::TransformToolMode::PerspectiveTransformMode); +} + +void KisToolTransform::slotUpdateToFreeTransformType() +{ + setTransformMode(KisToolTransform::TransformToolMode::FreeTransformMode); +} + +void KisToolTransform::slotUpdateToLiquifyType() +{ + setTransformMode(KisToolTransform::TransformToolMode::LiquifyTransformMode); +} + +void KisToolTransform::slotUpdateToCageType() +{ + setTransformMode(KisToolTransform::TransformToolMode::CageTransformMode); +} + void KisToolTransform::setShearY(double shear) { m_optionsWidget->slotSetShearY(shear);