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
 
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 93 of file KisReferenceImagesDecoration.cpp.

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

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

◆ ~KisReferenceImagesDecoration()

KisReferenceImagesDecoration::~KisReferenceImagesDecoration ( )
override

Definition at line 108 of file KisReferenceImagesDecoration.cpp.

109{}

Member Function Documentation

◆ addReferenceImage()

void KisReferenceImagesDecoration::addReferenceImage ( KisReferenceImage * referenceImage)

Definition at line 111 of file KisReferenceImagesDecoration.cpp.

112{
113 KUndo2Command *cmd = KisReferenceImagesLayer::addReferenceImages(view()->document(), {referenceImage});
114 view()->canvasBase()->addCommand(cmd);
115}
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 117 of file KisReferenceImagesDecoration.cpp.

118{
119 return view()->document()->referenceImagesLayer() != nullptr;
120}

References KisCanvasDecoration::view().

◆ drawDecoration()

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

Implements KisCanvasDecoration.

Definition at line 122 of file KisReferenceImagesDecoration.cpp.

123{
124 // TODO: can we use partial updates here?
125
126 KisSharedPtr<KisReferenceImagesLayer> layer = d->layer.toStrongRef();
127
128 if (!layer.isNull()) {
129 QSizeF viewSize = view()->size();
130
131 QTransform transform = converter->imageToWidgetTransform();
132 if (d->previousViewSize != viewSize || !KisAlgebra2D::fuzzyMatrixCompare(transform, d->previousTransform, 1e-4)) {
133 d->previousViewSize = viewSize;
134 d->previousTransform = transform;
135 d->buffer.image = QImage();
136 d->updateBufferByWidgetCoordinates(QRectF(QPointF(0,0), viewSize));
137 }
138
139 if (!d->buffer.image.isNull()) {
140 gc.drawImage(d->buffer.position, d->buffer.image);
141 }
142 }
143}
bool isNull() const
bool fuzzyMatrixCompare(const QTransform &t1, const QTransform &t2, qreal delta)

References d, KisAlgebra2D::fuzzyMatrixCompare(), KisCoordinatesConverter::imageToWidgetTransform(), KisSharedPtr< T >::isNull(), and KisCanvasDecoration::view().

◆ setReferenceImageLayer()

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

Definition at line 190 of file KisReferenceImagesDecoration.cpp.

191{
192 if (d->layer != layer.data()) {
193 KisSharedPtr<KisReferenceImagesLayer> oldLayer = d->layer.toStrongRef();
194 if (oldLayer) {
195 oldLayer->disconnect(this);
196 }
197
198 d->layer = layer;
199
200 if (layer) {
201 connect(layer.data(), SIGNAL(sigUpdateCanvas(QRectF)),
202 this, SLOT(slotReferenceImagesChanged(QRectF)));
203
204 const QRectF dirtyRect = layer->boundingImageRect();
205
206 // If the view is not ready yet (because this is being constructed
207 // from view.d's ctor and thus view.d is not available now),
208 // do not update canvas because it will lead to a crash.
209 if (updateCanvas && !dirtyRect.isEmpty()) { // in case the reference layer is just being loaded from the .kra file
211 }
212 }
213 }
214}
void slotReferenceImagesChanged(const QRectF &dirtyRect)

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

◆ slotLayersChanged

void KisReferenceImagesDecoration::slotLayersChanged ( )
privateslot

Definition at line 172 of file KisReferenceImagesDecoration.cpp.

173{
174 KisImageSP image = view()->image();
175
176 KisReferenceImagesLayer *referenceImagesLayer =
177 KisLayerUtils::findNodeByType<KisReferenceImagesLayer>(image->root());
178
179 setReferenceImageLayer(referenceImagesLayer, true);
180}

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

◆ slotNodeAdded [1/2]

void KisReferenceImagesDecoration::slotNodeAdded ( KisNodeSP node)
privateslot

Definition at line 145 of file KisReferenceImagesDecoration.cpp.

References None, and slotNodeAdded().

◆ slotNodeAdded [2/2]

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

Definition at line 150 of file KisReferenceImagesDecoration.cpp.

151{
152 Q_UNUSED(flags)
153
154 KisReferenceImagesLayer *referenceImagesLayer =
155 dynamic_cast<KisReferenceImagesLayer*>(node.data());
156
157 if (referenceImagesLayer) {
158 setReferenceImageLayer(referenceImagesLayer, /* updateCanvas = */ true);
159 }
160}

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

◆ slotNodeRemoved

void KisReferenceImagesDecoration::slotNodeRemoved ( KisNodeSP node)
privateslot

Definition at line 162 of file KisReferenceImagesDecoration.cpp.

163{
164 KisReferenceImagesLayer *referenceImagesLayer =
165 dynamic_cast<KisReferenceImagesLayer*>(node.data());
166
167 if (referenceImagesLayer && referenceImagesLayer == d->layer) {
168 setReferenceImageLayer(0, true);
169 }
170}

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

◆ slotReferenceImagesChanged

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

Definition at line 182 of file KisReferenceImagesDecoration.cpp.

183{
184 d->updateBufferByImageCoordinates(dirtyRect);
185
186 QRectF documentRect = view()->viewConverter()->imageToDocument(dirtyRect);
187 view()->canvasBase()->updateCanvasDecorations(documentRect);
188}

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: