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

List:       kde-commits
Subject:    koffice/krita
From:       Dmitry Kazakov <dimula73 () gmail ! com>
Date:       2010-11-21 8:46:34
Message-ID: 20101121084634.A9C14AC8A0 () svn ! kde ! org
[Download RAW message or body]

SVN commit 1199240 by dkazakov:

Fix Clone Layer loading

The link to the source layer should be initialized.


 M  +1 -2      image/kis_clone_layer.cpp  
 M  +1 -1      image/kis_clone_layer.h  
 M  +26 -0     ui/kra/kis_kra_load_visitor.cpp  
 M  +3 -1      ui/kra/kis_kra_load_visitor.h  


--- trunk/koffice/krita/image/kis_clone_layer.cpp #1199239:1199240
@@ -163,9 +163,8 @@
     return v.visit(this);
 }
 
-void KisCloneLayer::setCopyFrom(KisLayerSP fromLayer, CopyLayerType type)
+void KisCloneLayer::setCopyFrom(KisLayerSP fromLayer)
 {
-    m_d->type = type;
     m_d->copyFrom = fromLayer;
 }
 
--- trunk/koffice/krita/image/kis_clone_layer.h #1199239:1199240
@@ -93,7 +93,7 @@
     void setCopyFromName(const QString& layerName);
     QString copyFromName() const;
 
-    void setCopyFrom(KisLayerSP layer, CopyLayerType type);
+    void setCopyFrom(KisLayerSP layer);
     KisLayerSP copyFrom() const;
 
     void setCopyType(CopyLayerType type);
--- trunk/koffice/krita/ui/kra/kis_kra_load_visitor.cpp #1199239:1199240
@@ -208,11 +208,37 @@
 }
 
 
+KisNodeSP KisKraLoadVisitor::findNodeByName(const QString &name,
+                                            KisNodeSP rootNode)
+{
+    if(rootNode->name() == name)
+        return rootNode;
+
+    KisNodeSP result;
+    KisNodeSP child = rootNode->firstChild();
+    while(child) {
+        result = findNodeByName(name, child);
+        if(result) break;
+
+        child = child->nextSibling();
+    }
+
+    return result;
+}
+
 bool KisKraLoadVisitor::visit(KisCloneLayer *layer)
 {
     if (!loadMetaData(layer)) {
         return false;
     }
+
+    KisNodeSP srcNode = findNodeByName(layer->copyFromName(),
+                                        m_image->rootLayer());
+    KisLayerSP srcLayer = dynamic_cast<KisLayer*>(srcNode.data());
+    Q_ASSERT(srcLayer);
+
+    layer->setCopyFrom(srcLayer);
+
     // Clone layers have no data except for their masks
     bool result = visitAll(layer);
 
--- trunk/koffice/krita/ui/kra/kis_kra_load_visitor.h #1199239:1199240
@@ -57,7 +57,6 @@
     bool visit(KisTransformationMask *mask);
     bool visit(KisSelectionMask *mask);
 
-
 private:
 
     bool loadPaintDevice(KisPaintDeviceSP device, const QString& location);
@@ -67,6 +66,9 @@
     KisSelectionSP loadSelection(const QString& location);
     QString getLocation(KisNode* node, const QString& suffix = "");
 
+    static KisNodeSP findNodeByName(const QString &name,
+                                    KisNodeSP rootNode);
+
 private:
     KisImageWSP m_image;
     KoStore *m_store;
[prev in list] [next in list] [prev in thread] [next in thread] 

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