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

The KisReferenceImagesDecoration class draws the reference images on the canvas. The document stores the list of reference images. More...

#include <KisReferenceImagesDecoration.h>

+ Inheritance diagram for KisReferenceImagesDecoration:

Classes

struct  Private
 

Public Member Functions

void addReferenceImage (KisReferenceImage *referenceImage)
 
bool documentHasReferenceImages () const
 
 KisReferenceImagesDecoration (QPointer< KisView > parent, KisDocument *document, bool viewReady=true)
 
 ~KisReferenceImagesDecoration () override
 
- Public Member Functions inherited from KisCanvasDecoration
const QString & id () const
 
 KisCanvasDecoration (const QString &id, QPointer< KisView >parent)
 
virtual void notifyWindowMinimized (bool minimized)
 
void paint (QPainter &gc, const QRectF &updateRect, const KisCoordinatesConverter *converter, KisCanvas2 *canvas)
 
int priority () const
 
virtual void setCanvasWidget (KisCanvasWidgetBase *canvas)
 
void setView (QPointer< KisView > imageView)
 
bool visible () const
 
 ~KisCanvasDecoration () override
 
- Public Member Functions inherited from KisShared
bool deref ()
 
bool ref ()
 
int refCount ()
 
QAtomicInt * sharedWeakReference ()
 

Protected Member Functions

void drawDecoration (QPainter &gc, const QRectF &updateRect, const KisCoordinatesConverter *converter, KisCanvas2 *canvas) override
 
- Protected Member Functions inherited from KisCanvasDecoration
int decorationThickness () const
 
void setPriority (int value)
 
QPointer< KisViewview () const
 
- Protected Member Functions inherited from KisShared
 KisShared ()
 
 ~KisShared ()
 

Private Slots

void slotLayersChanged ()
 
void slotNodeAdded (KisNodeSP)
 
void slotNodeAdded (KisNodeSP, KisNodeAdditionFlags)
 
void slotNodeRemoved (KisNodeSP)
 
void slotReferenceImagesChanged (const QRectF &dirtyRect)
 

Private Member Functions

void setReferenceImageLayer (KisSharedPtr< KisReferenceImagesLayer > layer, bool updateCanvas)
 

Private Attributes

const QScopedPointer< Privated
 

Additional Inherited Members

- Public Slots inherited from KisCanvasDecoration
virtual void setVisible (bool v)
 
void toggleVisibility ()
 
- Static Public Member Functions inherited from KisCanvasDecoration
static bool comparePriority (KisCanvasDecorationSP decoration1, KisCanvasDecorationSP decoration2)
 

Detailed Description

The KisReferenceImagesDecoration class draws the reference images on the canvas. The document stores the list of reference images.

Definition at line 28 of file KisReferenceImagesDecoration.h.

Constructor & Destructor Documentation

◆ KisReferenceImagesDecoration()

KisReferenceImagesDecoration::KisReferenceImagesDecoration ( QPointer< KisView > parent,
KisDocument * document,
bool viewReady = true )

Definition at line 98 of file KisReferenceImagesDecoration.cpp.

99 : KisCanvasDecoration("referenceImagesDecoration", parent)
100 , d(new Private(this))
101{
102 connect(document->image().data(), SIGNAL(sigNodeAddedAsync(KisNodeSP, KisNodeAdditionFlags)), this, SLOT(slotNodeAdded(KisNodeSP, KisNodeAdditionFlags)));
103 connect(document->image().data(), SIGNAL(sigRemoveNodeAsync(KisNodeSP)), this, SLOT(slotNodeRemoved(KisNodeSP)));
104 connect(document->image().data(), SIGNAL(sigLayersChangedAsync()), this, SLOT(slotLayersChanged()));
106
107 auto referenceImageLayer = document->referenceImagesLayer();
108 if (referenceImageLayer) {
109 setReferenceImageLayer(referenceImageLayer, /* updateCanvas = */ viewReady);
110 }
111}
KisCanvasDecoration(const QString &id, QPointer< KisView >parent)
void sigReferenceImagesLayerChanged(KisSharedPtr< KisReferenceImagesLayer > layer)
void setReferenceImageLayer(KisSharedPtr< KisReferenceImagesLayer > layer, bool updateCanvas)
const QScopedPointer< Private > d

References setReferenceImageLayer(), KisDocument::sigReferenceImagesLayerChanged(), slotLayersChanged(), slotNodeAdded(), and slotNodeRemoved().

◆ ~KisReferenceImagesDecoration()

KisReferenceImagesDecoration::~KisReferenceImagesDecoration ( )
override

Definition at line 113 of file KisReferenceImagesDecoration.cpp.

114{}

Member Function Documentation

◆ addReferenceImage()

void KisReferenceImagesDecoration::addReferenceImage ( KisReferenceImage * referenceImage)

Definition at line 116 of file KisReferenceImagesDecoration.cpp.

117{
118 KUndo2Command *cmd = KisReferenceImagesLayer::addReferenceImages(view()->document(), {referenceImage});
119 view()->canvasBase()->addCommand(cmd);
120}
QPointer< KisView > view() const
static KUndo2Command * addReferenceImages(KisDocument *document, QList< KoShape * > referenceImages)

References KisReferenceImagesLayer::addReferenceImages(), and KisCanvasDecoration::view().

◆ documentHasReferenceImages()

bool KisReferenceImagesDecoration::documentHasReferenceImages ( ) const

Definition at line 122 of file KisReferenceImagesDecoration.cpp.

123{
124 return view()->document()->referenceImagesLayer() != nullptr;
125}

References KisCanvasDecoration::view().

◆ drawDecoration()

void KisReferenceImagesDecoration::drawDecoration ( QPainter & gc,
const QRectF & updateRect,
const KisCoordinatesConverter * converter,
KisCanvas2 * canvas )
overrideprotectedvirtual

Implements KisCanvasDecoration.

Definition at line 127 of file KisReferenceImagesDecoration.cpp.

128{
129 // TODO: can we use partial updates here?
130
131 KisSharedPtr<KisReferenceImagesLayer> layer = d->layer.toStrongRef();
133
134 if (!layer.isNull()) {
135 QSizeF viewSize = view()->size();
136
137 QTransform transform = converter->imageToWidgetTransform();
138 if (d->previousViewSize != viewSize || !KisAlgebra2D::fuzzyMatrixCompare(transform, d->previousTransform, 1e-4)
139 || d->buffer.image.colorSpace() != canvasSpace) {
140 d->previousViewSize = viewSize;
141 d->previousTransform = transform;
142
143 d->buffer.image = QImage(QSize(1, 1), QImage::Format_ARGB32);
144 d->buffer.image.setColorSpace(canvasSpace);
145
146 d->updateBufferByWidgetCoordinates(QRectF(QPointF(0,0), viewSize));
147 }
148
149 if (!d->buffer.image.isNull()) {
150#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
151 gc.drawImage(d->buffer.position, d->buffer.image);
152#else
153 gc.drawImage(d->buffer.position, canvas->displayRendererInterface()->convertImageToDisplayColorSpace(d->buffer.image));
154#endif
155 }
156 }
157}
KoColorDisplayRendererInterface * displayRendererInterface() const override
displayRendererInterface The display renderer interface has a number of color conversion functions wh...
KisDisplayColorConverter displayColorConverter
KisMultiSurfaceDisplayConfig multiSurfaceDisplayConfig() const
const KoColorProfile * canvasProfile
bool isNull() const
virtual QImage convertImageToDisplayColorSpace(const QImage source) const =0
convertImageToDisplayColorSpace
bool fuzzyMatrixCompare(const QTransform &t1, const QTransform &t2, qreal delta)
static KoColorSpaceRegistry * instance()
QColorSpace QColorSpaceForProfile(const KoColorProfile *profile) const
QColorSpaceForProfile Generate a QColorSpace for the given KoColorProfile. Will return sRGB when the ...

References KisMultiSurfaceDisplayConfig::canvasProfile, KoColorDisplayRendererInterface::convertImageToDisplayColorSpace(), d, KisCanvas2::displayColorConverter, KisCanvas2::displayRendererInterface(), KisAlgebra2D::fuzzyMatrixCompare(), KisCoordinatesConverter::imageToWidgetTransform(), KoColorSpaceRegistry::instance(), KisSharedPtr< T >::isNull(), KisDisplayColorConverter::multiSurfaceDisplayConfig(), KoColorSpaceRegistry::QColorSpaceForProfile(), and KisCanvasDecoration::view().

◆ setReferenceImageLayer()

void KisReferenceImagesDecoration::setReferenceImageLayer ( KisSharedPtr< KisReferenceImagesLayer > layer,
bool updateCanvas )
private

Definition at line 204 of file KisReferenceImagesDecoration.cpp.

205{
206 if (d->layer != layer.data()) {
207 KisSharedPtr<KisReferenceImagesLayer> oldLayer = d->layer.toStrongRef();
208 if (oldLayer) {
209 oldLayer->disconnect(this);
210 }
211
212 d->layer = layer;
213
214 if (layer) {
215 connect(layer.data(), SIGNAL(sigUpdateCanvas(QRectF)),
216 this, SLOT(slotReferenceImagesChanged(QRectF)));
217
218 const QRectF dirtyRect = layer->boundingImageRect();
219
220 // If the view is not ready yet (because this is being constructed
221 // from view.d's ctor and thus view.d is not available now),
222 // do not update canvas because it will lead to a crash.
223 if (updateCanvas && !dirtyRect.isEmpty()) { // in case the reference layer is just being loaded from the .kra file
225 }
226 }
227 }
228}
void slotReferenceImagesChanged(const QRectF &dirtyRect)

References d, KisSharedPtr< T >::data(), and slotReferenceImagesChanged().

◆ slotLayersChanged

void KisReferenceImagesDecoration::slotLayersChanged ( )
privateslot

Definition at line 186 of file KisReferenceImagesDecoration.cpp.

187{
188 KisImageSP image = view()->image();
189
190 KisReferenceImagesLayer *referenceImagesLayer =
191 KisLayerUtils::findNodeByType<KisReferenceImagesLayer>(image->root());
192
193 setReferenceImageLayer(referenceImagesLayer, true);
194}

References KisNodeFacade::root, setReferenceImageLayer(), and KisCanvasDecoration::view().

◆ slotNodeAdded [1/2]

void KisReferenceImagesDecoration::slotNodeAdded ( KisNodeSP node)
privateslot

Definition at line 159 of file KisReferenceImagesDecoration.cpp.

References None, and slotNodeAdded().

◆ slotNodeAdded [2/2]

void KisReferenceImagesDecoration::slotNodeAdded ( KisNodeSP node,
KisNodeAdditionFlags flags )
privateslot

Definition at line 164 of file KisReferenceImagesDecoration.cpp.

165{
166 Q_UNUSED(flags)
167
168 KisReferenceImagesLayer *referenceImagesLayer =
169 dynamic_cast<KisReferenceImagesLayer*>(node.data());
170
171 if (referenceImagesLayer) {
172 setReferenceImageLayer(referenceImagesLayer, /* updateCanvas = */ true);
173 }
174}

References KisSharedPtr< T >::data(), and setReferenceImageLayer().

◆ slotNodeRemoved

void KisReferenceImagesDecoration::slotNodeRemoved ( KisNodeSP node)
privateslot

Definition at line 176 of file KisReferenceImagesDecoration.cpp.

177{
178 KisReferenceImagesLayer *referenceImagesLayer =
179 dynamic_cast<KisReferenceImagesLayer*>(node.data());
180
181 if (referenceImagesLayer && referenceImagesLayer == d->layer) {
182 setReferenceImageLayer(0, true);
183 }
184}

References d, KisSharedPtr< T >::data(), and setReferenceImageLayer().

◆ slotReferenceImagesChanged

void KisReferenceImagesDecoration::slotReferenceImagesChanged ( const QRectF & dirtyRect)
privateslot

Definition at line 196 of file KisReferenceImagesDecoration.cpp.

197{
198 d->updateBufferByImageCoordinates(dirtyRect);
199
200 QRectF documentRect = view()->viewConverter()->imageToDocument(dirtyRect);
201 view()->canvasBase()->updateCanvasDecorations(documentRect);
202}

References d, and KisCanvasDecoration::view().

Member Data Documentation

◆ d

const QScopedPointer<Private> KisReferenceImagesDecoration::d
private

Definition at line 51 of file KisReferenceImagesDecoration.h.


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