Krita Source Code Documentation
Loading...
Searching...
No Matches
KisNodeManager::Private Struct Reference

Public Member Functions

bool activateNodeImpl (KisNodeSP node)
 
KisNodeJugglerCompressedlazyGetJuggler (const KUndo2MagicString &actionName)
 
void mergeTransparencyMaskAsAlpha (bool writeToLayers)
 
 Private (KisNodeManager *_q, KisViewManager *v)
 
void saveDeviceAsImage (KisPaintDeviceSP device, const QString &defaultName, const QRect &bounds, qreal xRes, qreal yRes, quint8 opacity)
 

Public Attributes

KisSynchronizedConnection< KisNodeSP, KisNodeListactivateNodeConnection
 
KisNodeCommandsAdapter commandsAdapter
 
QPointer< KisViewimageView
 
bool lastRequestedIsolatedModeStatus {false}
 
KisLayerManager layerManager
 
KisMaskManager maskManager
 
KisSignalMapper nodeConversionSignalMapper
 
KisSignalMapper nodeCreationSignalMapper
 
QScopedPointer< KisNodeDisplayModeAdapternodeDisplayModeAdapter
 
QScopedPointer< KisNodeInsertionAdapternodeInsertionAdapter
 
QPointer< KisNodeJugglerCompressednodeJuggler
 
QScopedPointer< KisNodeSelectionAdapternodeSelectionAdapter
 
KisActionpinToTimeline {nullptr}
 
KisNodeWSP previouslyActiveNode
 
KisNodeManagerq {nullptr}
 
KisNodeList selectedNodes
 
KisViewManagerview {nullptr}
 

Detailed Description

Definition at line 84 of file kis_node_manager.cpp.

Constructor & Destructor Documentation

◆ Private()

KisNodeManager::Private::Private ( KisNodeManager * _q,
KisViewManager * v )
inline

Definition at line 85 of file kis_node_manager.cpp.

86 : q(_q)
87 , view(v)
88 , imageView(0)
90 , maskManager(v)
96 {
97 }
qreal v
QScopedPointer< KisNodeSelectionAdapter > nodeSelectionAdapter
KisNodeCommandsAdapter commandsAdapter
QScopedPointer< KisNodeInsertionAdapter > nodeInsertionAdapter
QPointer< KisView > imageView
QScopedPointer< KisNodeDisplayModeAdapter > nodeDisplayModeAdapter

Member Function Documentation

◆ activateNodeImpl()

bool KisNodeManager::Private::activateNodeImpl ( KisNodeSP node)

Definition at line 135 of file kis_node_manager.cpp.

136{
137 Q_ASSERT(view);
138 Q_ASSERT(view->canvasBase());
139 Q_ASSERT(view->canvasBase()->globalShapeManager());
140 Q_ASSERT(imageView);
141 if (node && node == q->activeNode()) {
142 return false;
143 }
144
145 // Set the selection on the shape manager to the active layer
146 // and set call KoSelection::setActiveLayer( KoShapeLayer* layer )
147 // with the parent of the active layer.
149 Q_ASSERT(selection);
150 selection->deselectAll();
151
152 // Disable all enter-group modes that were active
154
155 if (!node) {
156 selection->setActiveLayer(0);
157 imageView->setCurrentNode(0);
161 } else {
163
164 KoShape * shape = view->document()->shapeForNode(node);
165
167
168 selection->select(shape);
169 KoShapeLayer * shapeLayer = dynamic_cast<KoShapeLayer*>(shape);
170
171 KIS_SAFE_ASSERT_RECOVER_RETURN_VALUE(shapeLayer, false);
172
173 // shapeLayer->setGeometryProtected(node->userLocked());
174 // shapeLayer->setVisible(node->visible());
175 selection->setActiveLayer(shapeLayer);
176
177 imageView->setCurrentNode(node);
178 if (KisLayerSP layer = qobject_cast<KisLayer*>(node.data())) {
181 } else if (KisMaskSP mask = dynamic_cast<KisMask*>(node.data())) {
183 // XXX_NODE: for now, masks cannot be nested.
184 layerManager.activateLayer(static_cast<KisLayer*>(node->parent().data()));
185 }
186 }
187 return true;
188}
void setCurrentShapeManagerOwnerShape(KoShape *source) override
sets the group shape that is supposed to be "entered"
KoShapeManager * globalShapeManager() const
KoShapeLayer * shapeForNode(KisNodeSP layer) const
void activateLayer(KisLayerSP layer)
void activateMask(KisMaskSP mask)
KisNodeSP activeNode()
Convenience function to get the active layer or mask.
KisDocument * document() const
KisCanvas2 * canvasBase() const
Return the canvas base class.
void deselectAll()
clear the selections list
void setActiveLayer(KoShapeLayer *layer)
void select(KoShape *shape)
KoSelection * selection
#define KIS_SAFE_ASSERT_RECOVER_RETURN_VALUE(cond, val)
Definition kis_assert.h:129
KisNodeWSP parent
Definition kis_node.cpp:86

References KisLayerManager::activateLayer(), KisMaskManager::activateMask(), KisNodeManager::activeNode(), KisViewManager::canvasBase(), KisSharedPtr< T >::data(), KisWeakSharedPtr< T >::data(), KoSelection::deselectAll(), KisViewManager::document(), KisCanvas2::globalShapeManager(), imageView, KIS_SAFE_ASSERT_RECOVER_RETURN_VALUE, layerManager, maskManager, KisNode::parent, previouslyActiveNode, q, KoSelection::select(), KoShapeManager::selection, KoSelection::setActiveLayer(), KisCanvas2::setCurrentShapeManagerOwnerShape(), KisDocument::shapeForNode(), and view.

◆ lazyGetJuggler()

KisNodeJugglerCompressed * KisNodeManager::Private::lazyGetJuggler ( const KUndo2MagicString & actionName)

Definition at line 1062 of file kis_node_manager.cpp.

1063{
1064 KisImageWSP image = view->image();
1065
1066 if (!nodeJuggler ||
1067 (nodeJuggler &&
1068 (nodeJuggler->isEnded() ||
1069 !nodeJuggler->canMergeAction(actionName)))) {
1070
1071 nodeJuggler = new KisNodeJugglerCompressed(actionName, image, q, 750);
1072 nodeJuggler->setAutoDelete(true);
1073 }
1074
1075 return nodeJuggler;
1076}
KisImageWSP image() const
Return the image this view is displaying.
QPointer< KisNodeJugglerCompressed > nodeJuggler

References KisViewManager::image(), nodeJuggler, q, and view.

◆ mergeTransparencyMaskAsAlpha()

void KisNodeManager::Private::mergeTransparencyMaskAsAlpha ( bool writeToLayers)

Definition at line 1395 of file kis_node_manager.cpp.

1396{
1397 KisNodeSP node = q->activeNode();
1398 KisNodeSP parentNode = node->parent();
1399
1400 // guaranteed by KisActionManager
1401 KIS_ASSERT_RECOVER_RETURN(node->inherits("KisTransparencyMask"));
1402
1403 if (writeToLayers && (!parentNode->hasEditablePaintDevice() || !node->isEditable(false))) {
1404 QMessageBox::information(view->mainWindowAsQWidget(),
1405 i18nc("@title:window", "Layer %1 is not editable", parentNode->name()),
1406 i18n("Cannot write alpha channel of "
1407 "the parent layer \"%1\".\n"
1408 "The operation will be cancelled.", parentNode->name()));
1409 return;
1410 }
1411
1412 KisPaintDeviceSP dstDevice;
1413 if (writeToLayers) {
1415 dstDevice = parentNode->paintDevice();
1416 } else {
1417 KisPaintDeviceSP copyDevice = parentNode->paintDevice();
1418 if (!copyDevice) {
1419 copyDevice = parentNode->original();
1420 }
1421 dstDevice = new KisPaintDevice(*copyDevice);
1422 }
1423
1424 const KoColorSpace *dstCS = dstDevice->colorSpace();
1425
1426 KisPaintDeviceSP selectionDevice = node->paintDevice();
1427 KIS_ASSERT_RECOVER_RETURN(selectionDevice->colorSpace()->pixelSize() == 1);
1428
1429 const QRect processRect =
1430 selectionDevice->exactBounds() |
1431 dstDevice->exactBounds() |
1432 selectionDevice->defaultBounds()->bounds();
1433
1434 QScopedPointer<KisTransaction> transaction;
1435
1436 if (writeToLayers) {
1437 commandsAdapter.beginMacro(kundo2_i18n("Write Alpha into a Layer"));
1438 transaction.reset(new KisTransaction(kundo2_noi18n("__write_alpha_channel__"), dstDevice));
1439 }
1440
1441 KisSequentialIterator srcIt(selectionDevice, processRect);
1442 KisSequentialIterator dstIt(dstDevice, processRect);
1443
1444 while (srcIt.nextPixel() && dstIt.nextPixel()) {
1445 quint8 *alpha8Ptr = srcIt.rawData();
1446 quint8 *dstPtr = dstIt.rawData();
1447
1448 dstCS->setOpacity(dstPtr, *alpha8Ptr, 1);
1449 }
1450
1451 if (writeToLayers) {
1452 commandsAdapter.addExtraCommand(transaction->endAndTake());
1455 } else {
1456 KisImageWSP image = view->image();
1457 QRect saveRect = image->bounds();
1458
1459 saveDeviceAsImage(dstDevice, parentNode->name(),
1460 saveRect,
1461 image->xRes(), image->yRes(),
1463 }
1464}
const quint8 OPACITY_OPAQUE_U8
virtual QRect bounds() const =0
double xRes() const
double yRes() const
QRect bounds() const override
void addExtraCommand(KUndo2Command *command)
void beginMacro(const KUndo2MagicString &macroName)
QRect exactBounds() const
const KoColorSpace * colorSpace() const
KisDefaultBoundsBaseSP defaultBounds() const
QWidget * mainWindowAsQWidget() const
virtual quint32 pixelSize() const =0
virtual void setOpacity(quint8 *pixels, quint8 alpha, qint32 nPixels) const =0
#define KIS_ASSERT_RECOVER_RETURN(cond)
Definition kis_assert.h:75
KUndo2MagicString kundo2_i18n(const char *text)
KUndo2MagicString kundo2_noi18n(const QString &text)
bool isEditable(bool checkVisibility=true) const
virtual KisPaintDeviceSP original() const =0
virtual KisPaintDeviceSP paintDevice() const =0
QString name() const
bool hasEditablePaintDevice() const
void saveDeviceAsImage(KisPaintDeviceSP device, const QString &defaultName, const QRect &bounds, qreal xRes, qreal yRes, quint8 opacity)

References KisDefaultBoundsBase::bounds(), KisImage::bounds(), KisPaintDevice::colorSpace(), KisPaintDevice::defaultBounds(), KisPaintDevice::exactBounds(), KisBaseNode::hasEditablePaintDevice(), KisBaseNode::isEditable(), KIS_ASSERT_RECOVER_RETURN, kundo2_i18n(), kundo2_noi18n(), KisBaseNode::name(), KisSequentialIteratorBase< IteratorPolicy, SourcePolicy, ProgressPolicy >::nextPixel(), OPACITY_OPAQUE_U8, KisBaseNode::original(), KisBaseNode::paintDevice(), KisNode::parent, KoColorSpace::pixelSize(), KisSequentialIteratorBase< IteratorPolicy, SourcePolicy, ProgressPolicy >::rawData(), KoColorSpace::setOpacity(), KisImage::xRes(), and KisImage::yRes().

◆ saveDeviceAsImage()

void KisNodeManager::Private::saveDeviceAsImage ( KisPaintDeviceSP device,
const QString & defaultName,
const QRect & bounds,
qreal xRes,
qreal yRes,
quint8 opacity )

Definition at line 1283 of file kis_node_manager.cpp.

1289{
1291 dialog.setCaption(i18n("Export \"%1\"", defaultName));
1292 dialog.setDefaultDir(QStandardPaths::writableLocation(QStandardPaths::PicturesLocation));
1294 QString filename = dialog.filename();
1295
1296 if (filename.isEmpty()) return;
1297
1298 QString mimefilter = KisMimeDatabase::mimeTypeForFile(filename, false);
1299
1300 QScopedPointer<KisDocument> doc(KisPart::instance()->createDocument());
1301
1302 KisImageSP dst = new KisImage(doc->createUndoStore(),
1303 bounds.width(),
1304 bounds.height(),
1306 defaultName);
1307 dst->setResolution(xRes, yRes);
1308 doc->setCurrentImage(dst);
1309 KisPaintLayer* paintLayer = new KisPaintLayer(dst, "paint device", opacity);
1310 paintLayer->paintDevice()->makeCloneFrom(device, bounds);
1311 dst->addNode(paintLayer, dst->rootLayer(), KisLayerSP(0));
1312
1313 dst->initialRefreshGraph();
1314
1315 if (!doc->exportDocumentSync(filename, mimefilter.toLatin1())) {
1316 QMessageBox::warning(qApp->activeWindow(),
1317 i18nc("@title:window", "Krita"),
1318 i18n("Could not save the layer. %1", doc->errorMessage().toUtf8().data()),
1319 QMessageBox::Ok);
1320
1321 }
1322}
KisGroupLayerSP rootLayer() const
void initialRefreshGraph()
void setResolution(double xres, double yres)
static QStringList supportedMimeTypes(Direction direction)
static QString mimeTypeForFile(const QString &file, bool checkExistingFiles=true)
Find the mimetype for the given filename. The filename must include a suffix.
virtual const KoColorSpace * compositionSourceColorSpace() const
void makeCloneFrom(KisPaintDeviceSP src, const QRect &rect)
static KisPart * instance()
Definition KisPart.cpp:131
#define bounds(x, a, b)
KisDocument * createDocument(QList< KisNodeSP > nodes, KisImageSP srcImage, const QRect &copiedBounds)
bool addNode(KisNodeSP node, KisNodeSP parent=KisNodeSP(), KisNodeAdditionFlags flags=KisNodeAdditionFlag::None)
KisPaintDeviceSP paintDevice

References KisNodeFacade::addNode(), bounds, KisPaintDevice::compositionSourceColorSpace(), createDocument(), KisImportExportManager::Export, KisImage::initialRefreshGraph(), KisPart::instance(), KisPaintDevice::makeCloneFrom(), KisMimeDatabase::mimeTypeForFile(), KisPaintLayer::paintDevice, KisImage::rootLayer(), KoFileDialog::SaveFile, KisImage::setResolution(), and KisImportExportManager::supportedMimeTypes().

Member Data Documentation

◆ activateNodeConnection

KisSynchronizedConnection<KisNodeSP, KisNodeList> KisNodeManager::Private::activateNodeConnection

Definition at line 122 of file kis_node_manager.cpp.

◆ commandsAdapter

KisNodeCommandsAdapter KisNodeManager::Private::commandsAdapter

Definition at line 104 of file kis_node_manager.cpp.

◆ imageView

QPointer<KisView> KisNodeManager::Private::imageView

Definition at line 101 of file kis_node_manager.cpp.

◆ lastRequestedIsolatedModeStatus

bool KisNodeManager::Private::lastRequestedIsolatedModeStatus {false}

Definition at line 121 of file kis_node_manager.cpp.

121{false};

◆ layerManager

KisLayerManager KisNodeManager::Private::layerManager

Definition at line 102 of file kis_node_manager.cpp.

◆ maskManager

KisMaskManager KisNodeManager::Private::maskManager

Definition at line 103 of file kis_node_manager.cpp.

◆ nodeConversionSignalMapper

KisSignalMapper KisNodeManager::Private::nodeConversionSignalMapper

Definition at line 119 of file kis_node_manager.cpp.

◆ nodeCreationSignalMapper

KisSignalMapper KisNodeManager::Private::nodeCreationSignalMapper

Definition at line 118 of file kis_node_manager.cpp.

◆ nodeDisplayModeAdapter

QScopedPointer<KisNodeDisplayModeAdapter> KisNodeManager::Private::nodeDisplayModeAdapter

Definition at line 107 of file kis_node_manager.cpp.

◆ nodeInsertionAdapter

QScopedPointer<KisNodeInsertionAdapter> KisNodeManager::Private::nodeInsertionAdapter

Definition at line 106 of file kis_node_manager.cpp.

◆ nodeJuggler

QPointer<KisNodeJugglerCompressed> KisNodeManager::Private::nodeJuggler

Definition at line 112 of file kis_node_manager.cpp.

◆ nodeSelectionAdapter

QScopedPointer<KisNodeSelectionAdapter> KisNodeManager::Private::nodeSelectionAdapter

Definition at line 105 of file kis_node_manager.cpp.

◆ pinToTimeline

KisAction* KisNodeManager::Private::pinToTimeline {nullptr}

Definition at line 109 of file kis_node_manager.cpp.

109{nullptr};

◆ previouslyActiveNode

KisNodeWSP KisNodeManager::Private::previouslyActiveNode

Definition at line 114 of file kis_node_manager.cpp.

◆ q

KisNodeManager* KisNodeManager::Private::q {nullptr}

Definition at line 99 of file kis_node_manager.cpp.

99{nullptr};

◆ selectedNodes

KisNodeList KisNodeManager::Private::selectedNodes

Definition at line 111 of file kis_node_manager.cpp.

◆ view

KisViewManager* KisNodeManager::Private::view {nullptr}

Definition at line 100 of file kis_node_manager.cpp.

100{nullptr};

The documentation for this struct was generated from the following file: