42 QRectF dirtyWidgetRect =
q->
view()->viewConverter()->imageToWidget(dirtyImageRect);
48 QRectF dirtyImageRect =
q->
view()->viewConverter()->widgetToImage(dirtyWidgetRect);
58 qreal devicePixelRatioF =
q->
view()->devicePixelRatioF();
61 const QRectF boundingWidgetRect =
q->
view()->viewConverter()->imageToWidget(boundingImageRect);
62 widgetRect = boundingWidgetRect.intersected(
q->
view()->rect());
64 if (widgetRect.isNull())
return;
69 buffer.
image = QImage((widgetRect.size()*devicePixelRatioF).toSize(), QImage::Format_ARGB32);
70 buffer.
image.setDevicePixelRatio(devicePixelRatioF);
72 imageRect =
q->
view()->viewConverter()->widgetToImage(widgetRect);
79 gc.setTransform(transform,
true);
82 gc.setCompositionMode(QPainter::CompositionMode_Source);
83 gc.fillRect(imageRect, Qt::transparent);
88 gc.setClipRect(QRectF(imageRect.topLeft(), imageRect.size()*devicePixelRatioF));
102 auto referenceImageLayer = document->referenceImagesLayer();
103 if (referenceImageLayer) {
114 view()->canvasBase()->addCommand(cmd);
119 return view()->document()->referenceImagesLayer() !=
nullptr;
129 QSizeF viewSize =
view()->size();
133 d->previousViewSize = viewSize;
134 d->previousTransform = transform;
135 d->buffer.image = QImage();
136 d->updateBufferByWidgetCoordinates(QRectF(QPointF(0,0), viewSize));
139 if (!
d->buffer.image.isNull()) {
140 gc.drawImage(
d->buffer.position,
d->buffer.image);
157 if (referenceImagesLayer) {
167 if (referenceImagesLayer && referenceImagesLayer ==
d->layer) {
177 KisLayerUtils::findNodeByType<KisReferenceImagesLayer>(image->
root());
184 d->updateBufferByImageCoordinates(dirtyRect);
186 QRectF documentRect =
view()->viewConverter()->imageToDocument(dirtyRect);
187 view()->canvasBase()->updateCanvasDecorations(documentRect);
192 if (
d->layer != layer.
data()) {
195 oldLayer->disconnect(
this);
201 connect(layer.
data(), SIGNAL(sigUpdateCanvas(QRectF)),
204 const QRectF dirtyRect = layer->boundingImageRect();
209 if (updateCanvas && !dirtyRect.isEmpty()) {
connect(this, SIGNAL(optionsChanged()), this, SLOT(saveOptions()))
QPointer< KisView > view() const
QTransform imageToWidgetTransform() const
void sigReferenceImagesLayerChanged(KisSharedPtr< KisReferenceImagesLayer > layer)
The KisReferenceImage class represents a single reference image.
The KisReferenceImagesDecoration class draws the reference images on the canvas. The document stores ...
void setReferenceImageLayer(KisSharedPtr< KisReferenceImagesLayer > layer, bool updateCanvas)
void slotNodeRemoved(KisNodeSP)
KisReferenceImagesDecoration(QPointer< KisView > parent, KisDocument *document, bool viewReady=true)
void addReferenceImage(KisReferenceImage *referenceImage)
~KisReferenceImagesDecoration() override
bool documentHasReferenceImages() const
const QScopedPointer< Private > d
void slotReferenceImagesChanged(const QRectF &dirtyRect)
void drawDecoration(QPainter &gc, const QRectF &updateRect, const KisCoordinatesConverter *converter, KisCanvas2 *canvas) override
void slotNodeAdded(KisNodeSP)
void paintReferences(QPainter &painter)
static KUndo2Command * addReferenceImages(KisDocument *document, QList< KoShape * > referenceImages)
QRectF boundingImageRect() const
bool fuzzyMatrixCompare(const QTransform &t1, const QTransform &t2, qreal delta)
QPointF position
Top left corner of the buffer relative to the viewport.
Private(KisReferenceImagesDecoration *q)
QTransform previousTransform
void updateBufferByWidgetCoordinates(const QRectF &dirtyWidgetRect)
KisWeakSharedPtr< KisReferenceImagesLayer > layer
void updateBufferByImageCoordinates(const QRectF &dirtyImageRect)
void updateBuffer(QRectF widgetRect, QRectF imageRect)
KisReferenceImagesDecoration * q