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 if (!node) {
153 selection->setActiveLayer(0);
154 imageView->setCurrentNode(0);
158 } else {
160
161 KoShape * shape = view->document()->shapeForNode(node);
162
164
165 selection->select(shape);
166 KoShapeLayer * shapeLayer = dynamic_cast<KoShapeLayer*>(shape);
167
168 KIS_SAFE_ASSERT_RECOVER_RETURN_VALUE(shapeLayer, false);
169
170 // shapeLayer->setGeometryProtected(node->userLocked());
171 // shapeLayer->setVisible(node->visible());
172 selection->setActiveLayer(shapeLayer);
173
174 imageView->setCurrentNode(node);
175 if (KisLayerSP layer = qobject_cast<KisLayer*>(node.data())) {
178 } else if (KisMaskSP mask = dynamic_cast<KisMask*>(node.data())) {
180 // XXX_NODE: for now, masks cannot be nested.
181 layerManager.activateLayer(static_cast<KisLayer*>(node->parent().data()));
182 }
183 }
184 return true;
185}
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(), KisDocument::shapeForNode(), and view.

◆ lazyGetJuggler()

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

Definition at line 1059 of file kis_node_manager.cpp.

1060{
1061 KisImageWSP image = view->image();
1062
1063 if (!nodeJuggler ||
1064 (nodeJuggler &&
1065 (nodeJuggler->isEnded() ||
1066 !nodeJuggler->canMergeAction(actionName)))) {
1067
1068 nodeJuggler = new KisNodeJugglerCompressed(actionName, image, q, 750);
1069 nodeJuggler->setAutoDelete(true);
1070 }
1071
1072 return nodeJuggler;
1073}
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 1392 of file kis_node_manager.cpp.

1393{
1394 KisNodeSP node = q->activeNode();
1395 KisNodeSP parentNode = node->parent();
1396
1397 // guaranteed by KisActionManager
1398 KIS_ASSERT_RECOVER_RETURN(node->inherits("KisTransparencyMask"));
1399
1400 if (writeToLayers && (!parentNode->hasEditablePaintDevice() || !node->isEditable(false))) {
1401 QMessageBox::information(view->mainWindowAsQWidget(),
1402 i18nc("@title:window", "Layer %1 is not editable", parentNode->name()),
1403 i18n("Cannot write alpha channel of "
1404 "the parent layer \"%1\".\n"
1405 "The operation will be cancelled.", parentNode->name()));
1406 return;
1407 }
1408
1409 KisPaintDeviceSP dstDevice;
1410 if (writeToLayers) {
1412 dstDevice = parentNode->paintDevice();
1413 } else {
1414 KisPaintDeviceSP copyDevice = parentNode->paintDevice();
1415 if (!copyDevice) {
1416 copyDevice = parentNode->original();
1417 }
1418 dstDevice = new KisPaintDevice(*copyDevice);
1419 }
1420
1421 const KoColorSpace *dstCS = dstDevice->colorSpace();
1422
1423 KisPaintDeviceSP selectionDevice = node->paintDevice();
1424 KIS_ASSERT_RECOVER_RETURN(selectionDevice->colorSpace()->pixelSize() == 1);
1425
1426 const QRect processRect =
1427 selectionDevice->exactBounds() |
1428 dstDevice->exactBounds() |
1429 selectionDevice->defaultBounds()->bounds();
1430
1431 QScopedPointer<KisTransaction> transaction;
1432
1433 if (writeToLayers) {
1434 commandsAdapter.beginMacro(kundo2_i18n("Write Alpha into a Layer"));
1435 transaction.reset(new KisTransaction(kundo2_noi18n("__write_alpha_channel__"), dstDevice));
1436 }
1437
1438 KisSequentialIterator srcIt(selectionDevice, processRect);
1439 KisSequentialIterator dstIt(dstDevice, processRect);
1440
1441 while (srcIt.nextPixel() && dstIt.nextPixel()) {
1442 quint8 *alpha8Ptr = srcIt.rawData();
1443 quint8 *dstPtr = dstIt.rawData();
1444
1445 dstCS->setOpacity(dstPtr, *alpha8Ptr, 1);
1446 }
1447
1448 if (writeToLayers) {
1449 commandsAdapter.addExtraCommand(transaction->endAndTake());
1452 } else {
1453 KisImageWSP image = view->image();
1454 QRect saveRect = image->bounds();
1455
1456 saveDeviceAsImage(dstDevice, parentNode->name(),
1457 saveRect,
1458 image->xRes(), image->yRes(),
1460 }
1461}
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 1280 of file kis_node_manager.cpp.

1286{
1288 dialog.setCaption(i18n("Export \"%1\"", defaultName));
1289 dialog.setDefaultDir(QStandardPaths::writableLocation(QStandardPaths::PicturesLocation));
1291 QString filename = dialog.filename();
1292
1293 if (filename.isEmpty()) return;
1294
1295 QString mimefilter = KisMimeDatabase::mimeTypeForFile(filename, false);
1296
1297 QScopedPointer<KisDocument> doc(KisPart::instance()->createDocument());
1298
1299 KisImageSP dst = new KisImage(doc->createUndoStore(),
1300 bounds.width(),
1301 bounds.height(),
1303 defaultName);
1304 dst->setResolution(xRes, yRes);
1305 doc->setCurrentImage(dst);
1306 KisPaintLayer* paintLayer = new KisPaintLayer(dst, "paint device", opacity);
1307 paintLayer->paintDevice()->makeCloneFrom(device, bounds);
1308 dst->addNode(paintLayer, dst->rootLayer(), KisLayerSP(0));
1309
1310 dst->initialRefreshGraph();
1311
1312 if (!doc->exportDocumentSync(filename, mimefilter.toLatin1())) {
1313 QMessageBox::warning(qApp->activeWindow(),
1314 i18nc("@title:window", "Krita"),
1315 i18n("Could not save the layer. %1", doc->errorMessage().toUtf8().data()),
1316 QMessageBox::Ok);
1317
1318 }
1319}
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: