Krita Source Code Documentation
Loading...
Searching...
No Matches
kis_mimedata.cpp File Reference
#include "kis_mimedata.h"
#include "kis_config.h"
#include "kis_node.h"
#include "kis_paint_device.h"
#include "kis_shared_ptr.h"
#include "kis_image.h"
#include "kis_layer.h"
#include "kis_shape_layer.h"
#include "kis_paint_layer.h"
#include "kis_clone_layer.h"
#include "KisDocument.h"
#include "kis_shape_controller.h"
#include "KisPart.h"
#include "kis_layer_utils.h"
#include "kis_generator_registry.h"
#include "KisGlobalResourcesInterface.h"
#include "kis_filter_configuration.h"
#include "kis_generator_layer.h"
#include "kis_selection.h"
#include "kis_node_insertion_adapter.h"
#include "kis_dummies_facade_base.h"
#include "kis_node_dummies_graph.h"
#include "KisImportExportManager.h"
#include "KisImageBarrierLock.h"
#include <commands/kis_image_layer_add_command.h>
#include <commands/kis_image_layer_move_command.h>
#include <kis_processing_applicator.h>
#include <KoProperties.h>
#include <KoStore.h>
#include <KoColorProfile.h>
#include <KoColorSpaceRegistry.h>
#include <KisDisplayConfig.h>
#include <KisPlatformPluginInterfaceFactory.h>
#include <opengl/KisOpenGLModeProber.h>
#include <QApplication>
#include <QImage>
#include <QByteArray>
#include <QBuffer>
#include <QDomDocument>
#include <QDomElement>
#include <QScreen>
#include <QDir>

Go to the source code of this file.

Functions

bool correctNewNodeLocation (KisNodeList nodes, KisNodeDummy *&parentDummy, KisNodeDummy *&aboveThisDummy)
 
KisDocumentcreateDocument (QList< KisNodeSP > nodes, KisImageSP srcImage, const QRect &copiedBounds)
 
bool nodeAllowsAsChild (KisNodeSP parent, KisNodeList nodes)
 
QByteArray serializeToByteArray (QList< KisNodeSP > nodes, KisImageSP srcImage, const QRect &copiedBounds)
 

Function Documentation

◆ correctNewNodeLocation()

bool correctNewNodeLocation ( KisNodeList nodes,
KisNodeDummy *& parentDummy,
KisNodeDummy *& aboveThisDummy )

Definition at line 427 of file kis_mimedata.cpp.

430{
431 KIS_SAFE_ASSERT_RECOVER_RETURN_VALUE(parentDummy, false);
432
433 KisNodeSP parentNode = parentDummy->node();
434 bool result = true;
435
436 if(!nodeAllowsAsChild(parentDummy->node(), nodes) ||
437 (parentDummy->node()->inherits("KisGroupLayer") && parentDummy->node()->collapsed())) {
438 aboveThisDummy = parentDummy;
439 parentDummy = parentDummy->parent();
440
441 result = (!parentDummy) ? false :
442 correctNewNodeLocation(nodes, parentDummy, aboveThisDummy);
443 }
444
445 return result;
446}
KisNodeSP node() const
KisNodeDummy * parent() const
#define KIS_SAFE_ASSERT_RECOVER_RETURN_VALUE(cond, val)
Definition kis_assert.h:129
bool nodeAllowsAsChild(KisNodeSP parent, KisNodeList nodes)
bool correctNewNodeLocation(KisNodeList nodes, KisNodeDummy *&parentDummy, KisNodeDummy *&aboveThisDummy)

References KisBaseNode::collapsed, correctNewNodeLocation(), KIS_SAFE_ASSERT_RECOVER_RETURN_VALUE, KisNodeDummy::node(), nodeAllowsAsChild(), and KisNodeDummy::parent().

◆ createDocument()

KisDocument * createDocument ( QList< KisNodeSP > nodes,
KisImageSP srcImage,
const QRect & copiedBounds )

HACK ALERT: here we just initialize parent image link and skip initializing shapeController! Ideally, we should call initializeExternalNode() instead.

Definition at line 141 of file kis_mimedata.cpp.

142{
144 QRect rc = copiedBounds;
145
146 QRect offset(0, 0, rc.width(), rc.height());
147 rc |= offset;
148
149 if (rc.isEmpty() && srcImage) {
150 rc = srcImage->bounds();
151 }
152
153 KisImageSP image = new KisImage(0, rc.width(), rc.height(), nodes.first()->colorSpace(), nodes.first()->name());
154 image->setAllowMasksOnRootNode(true);
155
156 if (srcImage) {
157 image->setResolution(srcImage->xRes(), srcImage->yRes());
158 }
159
160 {
161 KisImageReadOnlyBarrierLock lock(srcImage, std::defer_lock);
162 if (srcImage) {
163 lock.lock();
164 }
165
166 Q_FOREACH (KisNodeSP node, nodes) {
167 KisNodeSP clonedNode = safeCopyNode(node);
172 image->addNode(clonedNode);
173 KIS_SAFE_ASSERT_RECOVER(clonedNode->image() == KisImageWSP(image)) {
174 clonedNode->setImage(image);
175 }
176 }
177 }
178
179 doc->setCurrentImage(image);
180
181 return doc;
182}
void setCurrentImage(KisImageSP image, bool forceInitialUpdate=true, KisNodeSP preActivatedNode=nullptr)
void setAllowMasksOnRootNode(bool value)
double xRes() const
double yRes() const
QRect bounds() const override
void setResolution(double xres, double yres)
static KisPart * instance()
Definition KisPart.cpp:131
KisDocument * createTemporaryDocument() const
Definition KisPart.cpp:236
#define KIS_SAFE_ASSERT_RECOVER(cond)
Definition kis_assert.h:126
KisImageWSP image
bool addNode(KisNodeSP node, KisNodeSP parent=KisNodeSP(), KisNodeAdditionFlags flags=KisNodeAdditionFlag::None)
void setImage(KisImageWSP newImage) override
Definition kis_node.cpp:254

References KisNodeFacade::addNode(), KisImage::bounds(), KisPart::createTemporaryDocument(), KisBaseNode::image, KisPart::instance(), KIS_SAFE_ASSERT_RECOVER, KisImage::setAllowMasksOnRootNode(), KisDocument::setCurrentImage(), KisNode::setImage(), KisImage::setResolution(), KisImage::xRes(), and KisImage::yRes().

◆ nodeAllowsAsChild()

bool nodeAllowsAsChild ( KisNodeSP parent,
KisNodeList nodes )

Definition at line 415 of file kis_mimedata.cpp.

416{
417 bool result = true;
418 Q_FOREACH (KisNodeSP node, nodes) {
419 if (!parent->allowAsChild(node) || !parent->isEditable(false)) {
420 result = false;
421 break;
422 }
423 }
424 return result;
425}
ChildIterator< value_type, is_const > parent(const ChildIterator< value_type, is_const > &it)
Definition KisForest.h:327

◆ serializeToByteArray()

QByteArray serializeToByteArray ( QList< KisNodeSP > nodes,
KisImageSP srcImage,
const QRect & copiedBounds )

Definition at line 184 of file kis_mimedata.cpp.

185{
186 QScopedPointer<KisDocument> doc(createDocument(nodes, srcImage, copiedBounds));
187 QByteArray result = doc->serializeToNativeByteArray();
188
189 // avoid a sanity check failure caused by the fact that the image outlives
190 // the document (and it does)
191 doc->setCurrentImage(0);
192
193 return result;
194}
KisDocument * createDocument(QList< KisNodeSP > nodes, KisImageSP srcImage, const QRect &copiedBounds)

References createDocument().