17#include <qcolorspace.h>
45 QRectF dirtyWidgetRect =
q->
view()->viewConverter()->imageToWidget(dirtyImageRect);
51 QRectF dirtyImageRect =
q->
view()->viewConverter()->widgetToImage(dirtyWidgetRect);
61 qreal devicePixelRatioF =
q->
view()->devicePixelRatioF();
64 const QRectF boundingWidgetRect =
q->
view()->viewConverter()->imageToWidget(boundingImageRect);
65 widgetRect = boundingWidgetRect.intersected(
q->
view()->rect());
67 if (widgetRect.isNull())
return;
73 buffer.
image = QImage((widgetRect.size()*devicePixelRatioF).toSize(), QImage::Format_ARGB32);
75 buffer.
image.setDevicePixelRatio(devicePixelRatioF);
77 imageRect =
q->
view()->viewConverter()->widgetToImage(widgetRect);
84 gc.setTransform(transform,
true);
87 gc.setCompositionMode(QPainter::CompositionMode_Source);
88 gc.fillRect(imageRect, Qt::transparent);
93 gc.setClipRect(QRectF(imageRect.topLeft(), imageRect.size()*devicePixelRatioF));
102 connect(document->image().data(), SIGNAL(sigNodeAddedAsync(
KisNodeSP, KisNodeAdditionFlags)),
this, SLOT(
slotNodeAdded(
KisNodeSP, KisNodeAdditionFlags)));
104 connect(document->image().data(), SIGNAL(sigLayersChangedAsync()),
this, SLOT(
slotLayersChanged()));
107 auto referenceImageLayer = document->referenceImagesLayer();
108 if (referenceImageLayer) {
119 view()->canvasBase()->addCommand(cmd);
124 return view()->document()->referenceImagesLayer() !=
nullptr;
135 QSizeF viewSize =
view()->size();
139 ||
d->buffer.image.colorSpace() != canvasSpace) {
140 d->previousViewSize = viewSize;
141 d->previousTransform = transform;
143 d->buffer.image = QImage(QSize(1, 1), QImage::Format_ARGB32);
144 d->buffer.image.setColorSpace(canvasSpace);
146 d->updateBufferByWidgetCoordinates(QRectF(QPointF(0,0), viewSize));
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);
171 if (referenceImagesLayer) {
181 if (referenceImagesLayer && referenceImagesLayer ==
d->layer) {
191 KisLayerUtils::findNodeByType<KisReferenceImagesLayer>(image->
root());
198 d->updateBufferByImageCoordinates(dirtyRect);
200 QRectF documentRect =
view()->viewConverter()->imageToDocument(dirtyRect);
201 view()->canvasBase()->updateCanvasDecorations(documentRect);
206 if (
d->layer != layer.
data()) {
209 oldLayer->disconnect(
this);
215 connect(layer.
data(), SIGNAL(sigUpdateCanvas(QRectF)),
218 const QRectF dirtyRect = layer->boundingImageRect();
223 if (updateCanvas && !dirtyRect.isEmpty()) {
KoColorDisplayRendererInterface * displayRendererInterface() const override
displayRendererInterface The display renderer interface has a number of color conversion functions wh...
KisDisplayColorConverter displayColorConverter
QPointer< KisView > view() const
QTransform imageToWidgetTransform() const
KisMultiSurfaceDisplayConfig multiSurfaceDisplayConfig() const
void sigReferenceImagesLayerChanged(KisSharedPtr< KisReferenceImagesLayer > layer)
const KoColorProfile * canvasProfile
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
virtual QImage convertImageToDisplayColorSpace(const QImage source) const =0
convertImageToDisplayColorSpace
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
static KoColorSpaceRegistry * instance()
QColorSpace QColorSpaceForProfile(const KoColorProfile *profile) const
QColorSpaceForProfile Generate a QColorSpace for the given KoColorProfile. Will return sRGB when the ...