[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-kimageshop
Subject:    [krita/krita/3.1] libs/image: Don't merge onion skins when merging two layers
From:       Dmitry Kazakov <dimula73 () gmail ! com>
Date:       2016-11-03 8:23:26
Message-ID: E1c2DJ0-00013g-BU () code ! kde ! org
[Download RAW message or body]

Git commit 4711c1f823cc09d4f35abe70146ae5fdf8662002 by Dmitry Kazakov.
Committed on 03/11/2016 at 08:23.
Pushed by dkazakov into branch 'krita/3.1'.

Don't merge onion skins when merging two layers

That was quite an old bug :)

BUG:363115
CC:kimageshop@kde.org

M  +30   -4    libs/image/kis_layer_utils.cpp

http://commits.kde.org/krita/4711c1f823cc09d4f35abe70146ae5fdf8662002

diff --git a/libs/image/kis_layer_utils.cpp b/libs/image/kis_layer_utils.cpp
index d6af9d3..6a841aa 100644
--- a/libs/image/kis_layer_utils.cpp
+++ b/libs/image/kis_layer_utils.cpp
@@ -172,6 +172,30 @@ namespace KisLayerUtils {
         MergeDownInfoBaseSP m_info;
     };
 
+    struct DisableOnionSkins : public KisCommandUtils::AggregateCommand {
+        DisableOnionSkins(MergeDownInfoBaseSP info) : m_info(info) {}
+
+        void populateChildCommands() override {
+            Q_FOREACH (KisNodeSP node, m_info->allSrcNodes()) {
+                recursiveApplyNodes(node,
+                                    [this] (KisNodeSP node) {
+                                        if \
(KisLayerPropertiesIcons::nodeProperty(node, KisLayerPropertiesIcons::onionSkins, \
false).toBool()) { +
+                                            KisBaseNode::PropertyList props = \
node->sectionModelProperties(); +                                            \
KisLayerPropertiesIcons::setNodeProperty(&props, +                                    \
KisLayerPropertiesIcons::onionSkins, +                                                \
false); +
+                                            addCommand(new \
KisNodePropertyListCommand(node, props)); +                                        }
+                                    });
+            }
+        }
+
+    private:
+        MergeDownInfoBaseSP m_info;
+    };
+
     struct RefreshHiddenAreas : public KUndo2Command {
         RefreshHiddenAreas(MergeDownInfoBaseSP info) : m_info(info) {}
 
@@ -738,9 +762,10 @@ namespace KisLayerUtils {
         if (layer->visible() && prevLayer->visible()) {
             MergeDownInfoSP info(new MergeDownInfo(image, prevLayer, layer));
 
-            // disable key strokes on all colorize masks and wait until
-            // update is finished with a barrier
+            // disable key strokes on all colorize masks, all onion skins on
+            // paint layers and wait until update is finished with a barrier
             applicator.applyCommand(new DisableColorizeKeyStrokes(info));
+            applicator.applyCommand(new DisableOnionSkins(info));
             applicator.applyCommand(new KUndo2Command(), KisStrokeJobData::BARRIER);
 
             applicator.applyCommand(new KeepMergedNodesSelected(info, false));
@@ -1029,9 +1054,10 @@ namespace KisLayerUtils {
         if (mergedNodes.size() > 1 || invisibleNodes.isEmpty()) {
             MergeMultipleInfoSP info(new MergeMultipleInfo(image, mergedNodes));
 
-            // disable key strokes on all colorize masks and wait until
-            // update is finished with a barrier
+            // disable key strokes on all colorize masks, all onion skins on
+            // paint layers and wait until update is finished with a barrier
             applicator.applyCommand(new DisableColorizeKeyStrokes(info));
+            applicator.applyCommand(new DisableOnionSkins(info));
             applicator.applyCommand(new KUndo2Command(), KisStrokeJobData::BARRIER);
 
             applicator.applyCommand(new KeepMergedNodesSelected(info, putAfter, \
false));


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic