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 // In qt5, don't bother trying to fix the buffer cs, as this slows things down too much.
154 gc.drawImage(d->buffer.position, d->buffer.image);
155#endif
156 }
157 }
158}
KisDisplayColorConverter displayColorConverter
KisMultiSurfaceDisplayConfig multiSurfaceDisplayConfig() const
const KoColorProfile * canvasProfile
bool isNull() const
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, d, KisCanvas2::displayColorConverter, 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 205 of file KisReferenceImagesDecoration.cpp.

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

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

◆ slotLayersChanged

void KisReferenceImagesDecoration::slotLayersChanged ( )
privateslot

Definition at line 187 of file KisReferenceImagesDecoration.cpp.

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

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

◆ slotNodeAdded [1/2]

void KisReferenceImagesDecoration::slotNodeAdded ( KisNodeSP node)
privateslot

Definition at line 160 of file KisReferenceImagesDecoration.cpp.

References None, and slotNodeAdded().

◆ slotNodeAdded [2/2]

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

Definition at line 165 of file KisReferenceImagesDecoration.cpp.

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

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

◆ slotNodeRemoved

void KisReferenceImagesDecoration::slotNodeRemoved ( KisNodeSP node)
privateslot

Definition at line 177 of file KisReferenceImagesDecoration.cpp.

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

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

◆ slotReferenceImagesChanged

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

Definition at line 197 of file KisReferenceImagesDecoration.cpp.

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

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: