Krita Source Code Documentation
Loading...
Searching...
No Matches
KisConvertColorSpaceProcessingVisitor Class Reference

#include <kis_convert_color_space_processing_visitor.h>

+ Inheritance diagram for KisConvertColorSpaceProcessingVisitor:

Public Member Functions

 KisConvertColorSpaceProcessingVisitor (const KoColorSpace *srcColorSpace, const KoColorSpace *dstColorSpace, KoColorConversionTransformation::Intent renderingIntent, KoColorConversionTransformation::ConversionFlags conversionFlags)
 
void visit (KisAdjustmentLayer *layer, KisUndoAdapter *undoAdapter) override
 
void visit (KisAdjustmentLayer *layer, KisUndoAdapter *undoAdapter) override
 
void visit (KisCloneLayer *layer, KisUndoAdapter *undoAdapter) override
 
void visit (KisColorizeMask *mask, KisUndoAdapter *undoAdapter) override
 
void visit (KisExternalLayer *layer, KisUndoAdapter *undoAdapter) override
 
void visit (KisFilterMask *mask, KisUndoAdapter *undoAdapter) override
 
void visit (KisFilterMask *mask, KisUndoAdapter *undoAdapter) override
 
void visit (KisGeneratorLayer *layer, KisUndoAdapter *undoAdapter) override
 
void visit (KisGeneratorLayer *layer, KisUndoAdapter *undoAdapter) override
 
void visit (KisGroupLayer *layer, KisUndoAdapter *undoAdapter) override
 
void visit (KisGroupLayer *layer, KisUndoAdapter *undoAdapter) override
 
void visit (KisNode *node, KisUndoAdapter *undoAdapter) override
 
void visit (KisPaintLayer *layer, KisUndoAdapter *undoAdapter) override
 
void visit (KisSelectionMask *mask, KisUndoAdapter *undoAdapter) override
 
void visit (KisTransformMask *mask, KisUndoAdapter *undoAdapter) override
 
void visit (KisTransformMask *mask, KisUndoAdapter *undoAdapter) override
 
void visit (KisTransparencyMask *mask, KisUndoAdapter *undoAdapter) override
 
void visitColorizeMask (KisColorizeMask *mask, KisUndoAdapter *undoAdapter) override
 
- Public Member Functions inherited from KisSimpleProcessingVisitor
void visit (KisAdjustmentLayer *layer, KisUndoAdapter *undoAdapter) override
 
void visit (KisCloneLayer *layer, KisUndoAdapter *undoAdapter) override
 
void visit (KisColorizeMask *mask, KisUndoAdapter *undoAdapter) override
 
void visit (KisExternalLayer *layer, KisUndoAdapter *undoAdapter) override
 
void visit (KisFilterMask *mask, KisUndoAdapter *undoAdapter) override
 
void visit (KisGeneratorLayer *layer, KisUndoAdapter *undoAdapter) override
 
void visit (KisGroupLayer *layer, KisUndoAdapter *undoAdapter) override
 
void visit (KisNode *node, KisUndoAdapter *undoAdapter) override
 
void visit (KisPaintLayer *layer, KisUndoAdapter *undoAdapter) override
 
void visit (KisSelectionMask *mask, KisUndoAdapter *undoAdapter) override
 
void visit (KisTransformMask *mask, KisUndoAdapter *undoAdapter) override
 
void visit (KisTransparencyMask *mask, KisUndoAdapter *undoAdapter) override
 
 ~KisSimpleProcessingVisitor () override
 
- Public Member Functions inherited from KisProcessingVisitor
virtual KUndo2CommandcreateInitCommand ()
 
virtual ~KisProcessingVisitor ()
 
- Public Member Functions inherited from KisShared
bool deref ()
 
bool ref ()
 
int refCount ()
 
QAtomicInt * sharedWeakReference ()
 

Private Member Functions

void visitExternalLayer (KisExternalLayer *layer, KisUndoAdapter *undoAdapter) override
 
void visitNodeWithPaintDevice (KisNode *node, KisUndoAdapter *undoAdapter) override
 

Private Attributes

KoColorConversionTransformation::ConversionFlags m_conversionFlags
 
const KoColorSpacem_dstColorSpace
 
KoColorConversionTransformation::Intent m_renderingIntent
 
const KoColorSpacem_srcColorSpace
 

Additional Inherited Members

- Protected Member Functions inherited from KisShared
 KisShared ()
 
 ~KisShared ()
 

Detailed Description

Definition at line 16 of file kis_convert_color_space_processing_visitor.h.

Constructor & Destructor Documentation

◆ KisConvertColorSpaceProcessingVisitor()

KisConvertColorSpaceProcessingVisitor::KisConvertColorSpaceProcessingVisitor ( const KoColorSpace * srcColorSpace,
const KoColorSpace * dstColorSpace,
KoColorConversionTransformation::Intent renderingIntent,
KoColorConversionTransformation::ConversionFlags conversionFlags )

Definition at line 32 of file kis_convert_color_space_processing_visitor.cpp.

36 : m_srcColorSpace(srcColorSpace)
37 , m_dstColorSpace(dstColorSpace)
38 , m_renderingIntent(renderingIntent)
39 , m_conversionFlags(conversionFlags)
40{
41}
KoColorConversionTransformation::ConversionFlags m_conversionFlags

Member Function Documentation

◆ visit() [1/17]

void KisConvertColorSpaceProcessingVisitor::visit ( KisAdjustmentLayer * layer,
KisUndoAdapter * undoAdapter )
overridevirtual

◆ visit() [2/17]

void KisSimpleProcessingVisitor::visit ( KisAdjustmentLayer * layer,
KisUndoAdapter * undoAdapter )
overridevirtual

Implements KisProcessingVisitor.

Definition at line 21 of file kis_simple_processing_visitor.cpp.

60{
61 using namespace KisDoSomethingCommandOps;
63 visitNodeWithPaintDevice(layer, undoAdapter);
65}
void visitNodeWithPaintDevice(KisNode *node, KisUndoAdapter *undoAdapter) override

◆ visit() [3/17]

void KisSimpleProcessingVisitor::visit ( KisCloneLayer * layer,
KisUndoAdapter * undoAdapter )
overridevirtual

Implements KisProcessingVisitor.

Definition at line 24 of file kis_simple_processing_visitor.cpp.

37{
38 Q_UNUSED(layer);
39 Q_UNUSED(undoAdapter);
40}

◆ visit() [4/17]

void KisSimpleProcessingVisitor::visit ( KisColorizeMask * mask,
KisUndoAdapter * undoAdapter )
overridevirtual

Implements KisProcessingVisitor.

Definition at line 29 of file kis_simple_processing_visitor.cpp.

100{
101 visitColorizeMask(mask, undoAdapter);
102}
void visitColorizeMask(KisColorizeMask *mask, KisUndoAdapter *undoAdapter) override

◆ visit() [5/17]

void KisSimpleProcessingVisitor::visit ( KisExternalLayer * layer,
KisUndoAdapter * undoAdapter )
overridevirtual

Implements KisProcessingVisitor.

Definition at line 22 of file kis_simple_processing_visitor.cpp.

43{
44 visitExternalLayer(layer, undoAdapter);
45}
void visitExternalLayer(KisExternalLayer *layer, KisUndoAdapter *undoAdapter) override

◆ visit() [6/17]

void KisConvertColorSpaceProcessingVisitor::visit ( KisFilterMask * mask,
KisUndoAdapter * undoAdapter )
overridevirtual

◆ visit() [7/17]

void KisSimpleProcessingVisitor::visit ( KisFilterMask * mask,
KisUndoAdapter * undoAdapter )
overridevirtual

Implements KisProcessingVisitor.

Definition at line 25 of file kis_simple_processing_visitor.cpp.

76{
77 visitNodeWithPaintDevice(mask, undoAdapter);
78}

◆ visit() [8/17]

void KisConvertColorSpaceProcessingVisitor::visit ( KisGeneratorLayer * layer,
KisUndoAdapter * undoAdapter )
overridevirtual

◆ visit() [9/17]

void KisSimpleProcessingVisitor::visit ( KisGeneratorLayer * layer,
KisUndoAdapter * undoAdapter )
overridevirtual

Implements KisProcessingVisitor.

Definition at line 23 of file kis_simple_processing_visitor.cpp.

68{
69 using namespace KisDoSomethingCommandOps;
71 visitNodeWithPaintDevice(layer, undoAdapter);
73}

◆ visit() [10/17]

void KisConvertColorSpaceProcessingVisitor::visit ( KisGroupLayer * layer,
KisUndoAdapter * undoAdapter )
overridevirtual

Implements KisProcessingVisitor.

Definition at line 127 of file kis_convert_color_space_processing_visitor.cpp.

128{
129 // Group Layers determine their color space from their paint device, thus before setting
130 // channel flags, it must be reset to the new CS first.
131
132 bool alphaDisabled = layer->alphaChannelDisabled();
133
134 const KoColorSpace *srcColorSpace = layer->colorSpace();
135 const KoColorSpace *dstColorSpace = m_dstColorSpace;
136
137 // the swap of FINALIZING/INITIALIZING is intentional here, see the comment above
139
140 if (srcColorSpace->colorModelId() != dstColorSpace->colorModelId()) {
141 QBitArray channelFlags;
142
143 if (alphaDisabled) {
144 channelFlags = dstColorSpace->channelFlags(true, false);
145 }
146
147 undoAdapter->addCommand(new KisChangeChannelFlagsCommand(channelFlags, layer));
148 }
149
151}
QBitArray channelFlags(bool color=true, bool alpha=false) const
virtual KoID colorModelId() const =0
const KoColorSpace * colorSpace() const override
bool alphaChannelDisabled() const
Definition kis_layer.cc:334

References KisUndoAdapter::addCommand(), KisLayer::alphaChannelDisabled(), KoColorSpace::channelFlags(), KoColorSpace::colorModelId(), KisGroupLayer::colorSpace(), KisCommandUtils::FlipFlopCommand::FINALIZING, KisCommandUtils::FlipFlopCommand::INITIALIZING, and m_dstColorSpace.

◆ visit() [11/17]

void KisSimpleProcessingVisitor::visit ( KisGroupLayer * layer,
KisUndoAdapter * undoAdapter )
overridevirtual

Implements KisProcessingVisitor.

Definition at line 20 of file kis_simple_processing_visitor.cpp.

53{
54 using namespace KisDoSomethingCommandOps;
55 undoAdapter->addCommand(new KisDoSomethingCommand<ResetOp, KisGroupLayer*>(layer, false));
57}

◆ visit() [12/17]

void KisSimpleProcessingVisitor::visit ( KisNode * node,
KisUndoAdapter * undoAdapter )
overridevirtual

Implements KisProcessingVisitor.

Definition at line 18 of file kis_simple_processing_visitor.cpp.

31{
32 Q_UNUSED(node);
33 Q_UNUSED(undoAdapter);
34}

◆ visit() [13/17]

void KisSimpleProcessingVisitor::visit ( KisPaintLayer * layer,
KisUndoAdapter * undoAdapter )
overridevirtual

Implements KisProcessingVisitor.

Definition at line 19 of file kis_simple_processing_visitor.cpp.

48{
49 visitNodeWithPaintDevice(layer, undoAdapter);
50}

◆ visit() [14/17]

void KisSimpleProcessingVisitor::visit ( KisSelectionMask * mask,
KisUndoAdapter * undoAdapter )
overridevirtual

Implements KisProcessingVisitor.

Definition at line 28 of file kis_simple_processing_visitor.cpp.

95{
96 visitNodeWithPaintDevice(mask, undoAdapter);
97}

◆ visit() [15/17]

void KisConvertColorSpaceProcessingVisitor::visit ( KisTransformMask * mask,
KisUndoAdapter * undoAdapter )
overridevirtual

Implements KisProcessingVisitor.

Definition at line 153 of file kis_convert_color_space_processing_visitor.cpp.

154{
155 node->threadSafeForceStaticImageUpdate();
156 KisSimpleProcessingVisitor::visit(node, undoAdapter);
157}

References KisTransformMask::threadSafeForceStaticImageUpdate(), and KisSimpleProcessingVisitor::visit().

◆ visit() [16/17]

void KisSimpleProcessingVisitor::visit ( KisTransformMask * mask,
KisUndoAdapter * undoAdapter )
overridevirtual

Implements KisProcessingVisitor.

Definition at line 26 of file kis_simple_processing_visitor.cpp.

81{
82 Q_UNUSED(undoAdapter);
83
84 // If (when) it had paint device, we would implement different default
85 // strategy for it. Right now it has neither selection nor a paint device.
86 KIS_ASSERT_RECOVER_NOOP(!mask->selection() && !mask->paintDevice());
87}
#define KIS_ASSERT_RECOVER_NOOP(cond)
Definition kis_assert.h:97
KisSelectionSP selection
Definition kis_mask.cc:44
KisPaintDeviceSP paintDevice() const override

◆ visit() [17/17]

void KisSimpleProcessingVisitor::visit ( KisTransparencyMask * mask,
KisUndoAdapter * undoAdapter )
overridevirtual

Implements KisProcessingVisitor.

Definition at line 27 of file kis_simple_processing_visitor.cpp.

90{
91 visitNodeWithPaintDevice(mask, undoAdapter);
92}

◆ visitColorizeMask()

void KisConvertColorSpaceProcessingVisitor::visitColorizeMask ( KisColorizeMask * mask,
KisUndoAdapter * undoAdapter )
overridevirtual

◆ visitExternalLayer()

void KisConvertColorSpaceProcessingVisitor::visitExternalLayer ( KisExternalLayer * layer,
KisUndoAdapter * undoAdapter )
overrideprivatevirtual

Implements KisSimpleProcessingVisitor.

Definition at line 43 of file kis_convert_color_space_processing_visitor.cpp.

44{
46 KoUpdater *updater = helper.updater();
48 updater->setProgress(100);
49}
virtual KUndo2Command * convertTo(const KoColorSpace *dstColorSpace, KoColorConversionTransformation::Intent renderingIntent=KoColorConversionTransformation::internalRenderingIntent(), KoColorConversionTransformation::ConversionFlags conversionFlags=KoColorConversionTransformation::internalConversionFlags())
void setProgress(int percent)
Definition KoUpdater.cpp:38

References KisUndoAdapter::addCommand(), KisExternalLayer::convertTo(), m_conversionFlags, m_dstColorSpace, m_renderingIntent, KoUpdater::setProgress(), and KisProcessingVisitor::ProgressHelper::updater().

◆ visitNodeWithPaintDevice()

void KisConvertColorSpaceProcessingVisitor::visitNodeWithPaintDevice ( KisNode * node,
KisUndoAdapter * undoAdapter )
overrideprivatevirtual

Implements KisSimpleProcessingVisitor.

Definition at line 75 of file kis_convert_color_space_processing_visitor.cpp.

76{
77 if (!node->projectionLeaf()->isLayer()) return;
78 if (*m_dstColorSpace == *node->colorSpace()) return;
79
80 bool alphaLock = false;
81 bool alphaDisabled = false;
82
83 KisLayer *layer = dynamic_cast<KisLayer*>(node);
85
87
88 KisPaintLayer *paintLayer = 0;
89
90 KUndo2Command *parentConversionCommand = new KUndo2Command();
91
93 alphaDisabled = layer->alphaChannelDisabled();
94 new KisChangeChannelFlagsCommand(QBitArray(), layer, parentConversionCommand);
95 if ((paintLayer = dynamic_cast<KisPaintLayer*>(layer))) {
96 alphaLock = paintLayer->alphaLocked();
97 new KisChangeChannelLockFlagsCommand(QBitArray(), paintLayer, parentConversionCommand);
98 }
99 }
100
101 if (layer->original()) {
102 layer->original()->convertTo(m_dstColorSpace, m_renderingIntent, m_conversionFlags, parentConversionCommand, helper.updater());
103 }
104
105 if (layer->paintDevice() && layer->paintDevice()->colorSpace()->colorModelId() != AlphaColorModelID) {
106 layer->paintDevice()->convertTo(m_dstColorSpace, m_renderingIntent, m_conversionFlags, parentConversionCommand, helper.updater());
107 }
108
109 if (layer->projection()) {
110 layer->projection()->convertTo(m_dstColorSpace, m_renderingIntent, m_conversionFlags, parentConversionCommand, helper.updater());
111 }
112
113 if (alphaDisabled) {
115 layer, parentConversionCommand);
116 }
117
118 if (paintLayer && alphaLock) {
120 paintLayer, parentConversionCommand);
121 }
122
123 undoAdapter->addCommand(parentConversionCommand);
124 layer->invalidateFrames(KisTimeSpan::infinite(0), layer->extent());
125}
const KoID AlphaColorModelID("A", ki18n("Alpha mask"))
const KoColorSpace * colorSpace() const
void convertTo(const KoColorSpace *dstColorSpace, KoColorConversionTransformation::Intent renderingIntent=KoColorConversionTransformation::internalRenderingIntent(), KoColorConversionTransformation::ConversionFlags conversionFlags=KoColorConversionTransformation::internalConversionFlags(), KUndo2Command *parentCommand=nullptr, KoUpdater *progressUpdater=nullptr)
#define KIS_SAFE_ASSERT_RECOVER_RETURN(cond)
Definition kis_assert.h:128
virtual const KoColorSpace * colorSpace() const =0
virtual KisPaintDeviceSP paintDevice() const =0
KisPaintDeviceSP projection() const override
Definition kis_layer.cc:820
QRect extent() const override
KisPaintDeviceSP original() const override=0
KisProjectionLeafSP projectionLeaf
Definition kis_node.cpp:93
void invalidateFrames(const KisTimeSpan &range, const QRect &rect)
Definition kis_node.cpp:616
bool alphaLocked() const

References KisUndoAdapter::addCommand(), KisLayer::alphaChannelDisabled(), AlphaColorModelID, KisPaintLayer::alphaLocked(), KoColorSpace::channelFlags(), KoColorSpace::colorModelId(), KisPaintDevice::colorSpace(), KisBaseNode::colorSpace(), KisPaintDevice::convertTo(), KisLayer::extent(), KisTimeSpan::infinite(), KisNode::invalidateFrames(), KIS_SAFE_ASSERT_RECOVER_RETURN, m_conversionFlags, m_dstColorSpace, m_renderingIntent, m_srcColorSpace, KisLayer::original(), KisBaseNode::paintDevice(), KisLayer::projection(), KisNode::projectionLeaf, and KisProcessingVisitor::ProgressHelper::updater().

Member Data Documentation

◆ m_conversionFlags

KoColorConversionTransformation::ConversionFlags KisConvertColorSpaceProcessingVisitor::m_conversionFlags
private

Definition at line 42 of file kis_convert_color_space_processing_visitor.h.

◆ m_dstColorSpace

const KoColorSpace* KisConvertColorSpaceProcessingVisitor::m_dstColorSpace
private

Definition at line 40 of file kis_convert_color_space_processing_visitor.h.

◆ m_renderingIntent

KoColorConversionTransformation::Intent KisConvertColorSpaceProcessingVisitor::m_renderingIntent
private

Definition at line 41 of file kis_convert_color_space_processing_visitor.h.

◆ m_srcColorSpace

const KoColorSpace* KisConvertColorSpaceProcessingVisitor::m_srcColorSpace
private

Definition at line 39 of file kis_convert_color_space_processing_visitor.h.


The documentation for this class was generated from the following files: