[calligra/calligra/2.9] krita/plugins/tools/tool_transform2: Transform invisible layers if they are part of the group

Dmitry Kazakov dimula73 at gmail.com
Thu Aug 13 17:15:17 UTC 2015


Git commit 360a80602e6b7758338eece6c75dc8d5aba21bcc by Dmitry Kazakov.
Committed on 13/08/2015 at 15:46.
Pushed by dkazakov into branch 'calligra/2.9'.

Transform invisible layers if they are part of the group

When transforming a group recursively, some of the layers may be invisible
so the user may just forget about them. Now we transform the layers even if
they are invisible. The user still can avoid this behavior by
setting the layer as "locked".

Thanks Roman Ilin for suggestion!

Ref T475
CC:kimageshop at kde.org

M  +19   -4    krita/plugins/tools/tool_transform2/kis_tool_transform.cc
M  +1    -1    krita/plugins/tools/tool_transform2/kis_tool_transform.h

http://commits.kde.org/calligra/360a80602e6b7758338eece6c75dc8d5aba21bcc

diff --git a/krita/plugins/tools/tool_transform2/kis_tool_transform.cc b/krita/plugins/tools/tool_transform2/kis_tool_transform.cc
index df42df8..8bff9d8 100644
--- a/krita/plugins/tools/tool_transform2/kis_tool_transform.cc
+++ b/krita/plugins/tools/tool_transform2/kis_tool_transform.cc
@@ -902,7 +902,17 @@ void KisToolTransform::startStroke(ToolTransformArgs::TransformMode mode)
     }
 
     m_strokeData = StrokeData(image()->startStroke(strategy));
-    clearDevices(m_transaction.rootNode(), m_workRecursively);
+
+    bool haveInvisibleNodes = clearDevices(m_transaction.rootNode(), m_workRecursively);
+    if (haveInvisibleNodes) {
+        KisCanvas2 *kisCanvas = dynamic_cast<KisCanvas2*>(canvas());
+        kisCanvas->viewManager()->
+            showFloatingMessage(
+                i18nc("floating message in transformation tool",
+                      "Invisible sublayers will also be transformed. Lock layers if you do not want them to be transformed "),
+                QIcon(), 4000, KisFloatingMessage::Low);
+    }
+
 
     Q_ASSERT(m_changesTracker.isEmpty());
     commitChanges();
@@ -957,15 +967,18 @@ void KisToolTransform::slotTrackerChangedConfig()
     updateOptionWidget();
 }
 
-void KisToolTransform::clearDevices(KisNodeSP node, bool recursive)
+bool KisToolTransform::clearDevices(KisNodeSP node, bool recursive)
 {
-    if (!node->isEditable()) return;
+    bool haveInvisibleNodes = false;
+    if (!node->isEditable(false)) return haveInvisibleNodes;
+
+    haveInvisibleNodes = !node->visible(false);
 
     if (recursive) {
         // simple tail-recursive iteration
         KisNodeSP prevNode = node->lastChild();
         while(prevNode) {
-            clearDevices(prevNode, recursive);
+            haveInvisibleNodes |= clearDevices(prevNode, recursive);
             prevNode = prevNode->prevSibling();
         }
     }
@@ -979,6 +992,8 @@ void KisToolTransform::clearDevices(KisNodeSP node, bool recursive)
      * applicable nodes right in the beginning of the processing
      */
     m_strokeData.addClearedNode(node);
+
+    return haveInvisibleNodes;
 }
 
 void KisToolTransform::transformDevices(KisNodeSP node, bool recursive)
diff --git a/krita/plugins/tools/tool_transform2/kis_tool_transform.h b/krita/plugins/tools/tool_transform2/kis_tool_transform.h
index 567437b..165c230 100644
--- a/krita/plugins/tools/tool_transform2/kis_tool_transform.h
+++ b/krita/plugins/tools/tool_transform2/kis_tool_transform.h
@@ -211,7 +211,7 @@ public Q_SLOTS:
     void imageTooBigRequested(bool value);
 
 private:
-    void clearDevices(KisNodeSP node, bool recursive);
+    bool clearDevices(KisNodeSP node, bool recursive);
     void transformDevices(KisNodeSP node, bool recursive);
 
     void startStroke(ToolTransformArgs::TransformMode mode);



More information about the kimageshop mailing list