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

The KisReferenceImage class represents a single reference image. More...

#include <KisReferenceImage.h>

+ Inheritance diagram for KisReferenceImage:

Classes

struct  Private
 
struct  SetSaturationCommand
 

Public Member Functions

KoShapecloneShape () const override
 creates a deep copy of the shape or shape's subtree
 
QPointF documentToPixel (const QPointF &docPoint)
 
QPoint documentToPixelFloored (const QPointF &docPoint)
 
bool embed ()
 
QString filename () const
 
QImage getCachedImage ()
 
QImage getImage ()
 
KoColor getPixel (QPointF position)
 
bool hasLocalFile ()
 
QString internalFile () const
 
 KisReferenceImage ()
 
 KisReferenceImage (const KisReferenceImage &rhs)
 
bool loadImage (KoStore *store)
 
void paint (QPainter &gc) const override
 Paint the shape fill The class extending this one is responsible for painting itself. painter is expected to be preconfigured to work in "document" pixels.
 
qreal saturation () const
 
bool saveImage (KoStore *store) const
 
void saveXml (QDomDocument &document, QDomElement &parentElement, int id)
 
void setEmbed (bool embed)
 
void setFilename (const QString &filename)
 
void setSaturation (qreal saturation)
 
 ~KisReferenceImage ()
 
- Public Member Functions inherited from KoShape
QRectF absoluteOutlineRect () const
 
QPointF absolutePosition (KoFlake::AnchorPosition anchor=KoFlake::Center) const
 
QTransform absoluteTransformation () const
 
bool addDependee (KoShape *shape)
 
QString additionalAttribute (const QString &name) const
 
void addShapeChangeListener (ShapeChangeListener *listener)
 
KoShapeAnchoranchor () const
 
void applyAbsoluteTransformation (const QTransform &matrix)
 
void applyTransformation (const QTransform &matrix)
 
virtual QSharedPointer< KoShapeBackgroundbackground () const
 
virtual QRectF boundingRect () const
 Get the bounding box of the shape.
 
virtual ChildZOrderPolicy childZOrderPolicy ()
 
KoClipMaskclipMask () const
 Returns the currently set clip mask or 0 if there is no clip mask set.
 
KoClipPathclipPath () const
 Returns the currently set clip path or 0 if there is no clip path set.
 
KoShapecloneShapeAndBakeAbsoluteTransform () const
 creates a deep copy of the shape/shapes tree and bakes the absolute transform of this into the resulting shape.
 
void copySettings (const KoShape *shape)
 
QList< KoShape * > dependees () const
 Returns list of shapes depending on this shape.
 
QPointF documentToShape (const QPointF &point) const
 Transforms point from document coordinates to shape coordinates.
 
QRectF documentToShape (const QRectF &rect) const
 Transform rect from document coordinates to shape coordinates.
 
bool hasAdditionalAttribute (const QString &name) const
 
bool hasCommonParent (const KoShape *shape) const
 
bool hasDependee (KoShape *shape) const
 Returns if the given shape is dependent on this shape.
 
virtual bool hasTransparency () const
 
virtual bool hitTest (const QPointF &position) const
 Check if the shape is hit on position.
 
QString hyperLink () const
 
bool inheritBackground () const
 inheritBackground shows if the shape inherits background from its parent
 
bool inheritPaintOrder () const
 inheritPaintOrder
 
bool inheritsTransformFromAny (const QList< KoShape * > ancestorsInQuestion) const
 inheritsTransformFromAny checks if the shape inherits transformation from any of the shapes listed in ancestorsInQuestion. The inheritance is checked in recursive way.
 
bool inheritStroke () const
 inheritStroke shows if the shape inherits the stroke from its parent
 
bool isContentProtected () const
 
bool isGeometryProtected () const
 
bool isPrintable () const
 
bool isSelectable () const
 
virtual bool isShapeEditable (bool recursive=true) const
 checks recursively if the shape or one of its parents is not visible or locked
 
bool isVisible (bool recursive=true) const
 
bool keepAspectRatio () const
 
 KoShape ()
 Constructor.
 
qreal minimumHeight () const
 
QString name () const
 
void notifyChanged ()
 
virtual QPainterPath outline () const
 
virtual QRectF outlineRect () const
 
virtual void paintMarkers (QPainter &painter) const
 paintStroke paints the shape's markers
 
virtual QVector< PaintOrderpaintOrder () const
 paintOrder
 
virtual void paintStroke (QPainter &painter) const
 paintStroke paints the shape's stroked outline
 
KoShapeContainerparent () const
 
QPointF position () const
 Get the position of the shape in pt.
 
void removeAdditionalAttribute (const QString &name)
 
void removeAdditionalStyleAttribute (const char *name)
 
void removeDependee (KoShape *shape)
 
void removeShapeChangeListener (ShapeChangeListener *listener)
 
void rotate (qreal angle)
 Rotate the shape (relative)
 
qreal rotation () const
 
void scale (qreal sx, qreal sy)
 Scale the shape using the zero-point which is the top-left corner.
 
void setAbsolutePosition (const QPointF &newPosition, KoFlake::AnchorPosition anchor=KoFlake::Center)
 
void setAdditionalAttribute (const QString &name, const QString &value)
 
void setAdditionalStyleAttribute (const char *name, const QString &value)
 
void setAnchor (KoShapeAnchor *anchor)
 
virtual void setBackground (QSharedPointer< KoShapeBackground > background)
 
void setClipMask (KoClipMask *clipMask)
 Sets a new clip mask, removing the old one. The mask is owned by the shape.
 
void setClipPath (KoClipPath *clipPath)
 Sets a new clip path, removing the old one.
 
void setContentProtected (bool protect)
 
void setGeometryProtected (bool on)
 
void setHyperLink (const QString &hyperLink)
 
void setInheritBackground (bool value)
 setInheritBackground marks a shape as inheriting the background from the parent shape. NOTE: The currently selected background is destroyed.
 
void setInheritPaintOrder (bool value)
 setInheritPaintOrder set inherit paint order.
 
void setInheritStroke (bool value)
 setInheritStroke marks a shape as inheriting the stroke from the parent shape. NOTE: The currently selected stroke is destroyed.
 
void setKeepAspectRatio (bool keepAspect)
 
void setMinimumHeight (qreal height)
 
void setName (const QString &name)
 
virtual void setPaintOrder (PaintOrder first, PaintOrder second)
 setPaintOrder set the paint order. As there's only three entries in any given paintorder, you only need to have the first and second entry to set it.
 
void setParent (KoShapeContainer *parent)
 
virtual void setPosition (const QPointF &position)
 Set the position of the shape in pt.
 
void setPrintable (bool on)
 
virtual void setResolution (qreal xRes, qreal yRes)
 
void setSelectable (bool selectable)
 
void setShapeId (const QString &id)
 
virtual void setSize (const QSizeF &size)
 Resize the shape.
 
virtual void setStroke (KoShapeStrokeModelSP stroke)
 
void setToolDelegates (const QSet< KoShape * > &delegates)
 
void setTransformation (const QTransform &matrix)
 
void setTransparency (qreal transparency)
 
void setUserData (KoShapeUserData *userData)
 
void setVisible (bool on)
 
void setZIndex (qint16 zIndex)
 
QString shapeId () const
 
QPointF shapeToDocument (const QPointF &point) const
 Transforms point from shape coordinates to document coordinates.
 
QRectF shapeToDocument (const QRectF &rect) const
 Transforms rect from shape coordinates to document coordinates.
 
void shear (qreal sx, qreal sy)
 Shear the shape The shape will be sheared using the zero-point which is the top-left corner.
 
virtual QSizeF size () const
 Get the size of the shape in pt.
 
virtual KoSnapData snapData () const
 Returns additional snap data the shape wants to have snapping to.
 
virtual KoShapeStrokeModelSP stroke () const
 
KoInsets strokeInsets () const
 
QSet< KoShape * > toolDelegates () const
 
QTransform transformation () const
 Returns the shapes local transformation matrix.
 
qreal transparency (bool recursive=false) const
 
virtual void update () const
 
virtual void updateAbsolute (const QRectF &rect) const
 
KoShapeUserDatauserData () const
 
virtual void waitUntilReady (bool asynchronous=true) const
 
qint16 zIndex () const
 
virtual ~KoShape ()
 Destructor.
 

Static Public Member Functions

static KisReferenceImagefromClipboard (const KisCoordinatesConverter &converter)
 
static KisReferenceImagefromFile (const QString &filename, const KisCoordinatesConverter &converter, QWidget *parent)
 
static KisReferenceImagefromPaintDevice (KisPaintDeviceSP src, const KisCoordinatesConverter &converter, QWidget *parent)
 
static KisReferenceImagefromQImage (const KisCoordinatesConverter &converter, const QImage &img)
 
static KisReferenceImagefromXml (const QDomElement &elem)
 
- Static Public Member Functions inherited from KoShape
static QRectF absoluteOutlineRect (const QList< KoShape * > &shapes)
 
static QRectF boundingRect (const QList< KoShape * > &shapes)
 
static bool compareShapeZIndex (KoShape *s1, KoShape *s2)
 
static KisHandlePainterHelper createHandlePainterHelperDocument (QPainter *painter, KoShape *shape, qreal handleRadius, int decorationThickness)
 
static KisHandlePainterHelper createHandlePainterHelperView (QPainter *painter, KoShape *shape, const KoViewConverter &converter, qreal handleRadius=0.0, int decorationThickness=1)
 
static QVector< PaintOrderdefaultPaintOrder ()
 default paint order as per SVG specification
 
static QList< KoShape * > linearizeSubtree (const QList< KoShape * > &shapes)
 
static QList< KoShape * > linearizeSubtreeSorted (const QList< KoShape * > &shapes)
 

Private Attributes

QSharedDataPointer< Privated
 

Additional Inherited Members

- Public Types inherited from KoShape
enum  ChangeType {
  PositionChanged , RotationChanged , ScaleChanged , ShearChanged ,
  SizeChanged , GenericMatrixChange , KeepAspectRatioChange , ParentChanged ,
  Deleted , StrokeChanged , BackgroundChanged , BorderChanged ,
  ParameterChanged , ContentChanged , TextContourMarginChanged , ChildChanged ,
  ConnectionPointChanged , ClipPathChanged , ClipMaskChanged , TransparencyChanged
}
 Used by shapeChanged() to select which change was made. More...
 
enum  ChildZOrderPolicy { ChildZDefault , ChildZParentChild = ChildZDefault , ChildZPassThrough }
 Used by compareShapeZIndex() to order shapes. More...
 
enum  PaintOrder { Fill , Stroke , Markers }
 
- Static Public Attributes inherited from KoShape
static const qint16 maxZIndex = std::numeric_limits<qint16>::max()
 
static const qint16 minZIndex = std::numeric_limits<qint16>::min()
 
- Protected Member Functions inherited from KoShape
 KoShape (const KoShape &rhs)
 
QList< ShapeChangeListener * > listeners () const
 
void setSizeImpl (const QSizeF &size) const
 
virtual void shapeChanged (ChangeType type, KoShape *shape=0)
 
void shapeChangedPriv (KoShape::ChangeType type)
 
QTransform transform () const
 return the current matrix that contains the rotation/scale/position of this shape
 

Detailed Description

The KisReferenceImage class represents a single reference image.

Definition at line 29 of file KisReferenceImage.h.

Constructor & Destructor Documentation

◆ KisReferenceImage() [1/2]

KisReferenceImage::KisReferenceImage ( )

Definition at line 169 of file KisReferenceImage.cpp.

170 : d(new Private())
171{
172 setKeepAspectRatio(true);
173}
QSharedDataPointer< Private > d
void setKeepAspectRatio(bool keepAspect)
Definition KoShape.cpp:862

References KoShape::setKeepAspectRatio().

◆ KisReferenceImage() [2/2]

KisReferenceImage::KisReferenceImage ( const KisReferenceImage & rhs)

Definition at line 175 of file KisReferenceImage.cpp.

176 : KoShape(rhs)
177 , d(rhs.d)
178{}
KoShape()
Constructor.
Definition KoShape.cpp:136

◆ ~KisReferenceImage()

KisReferenceImage::~KisReferenceImage ( )

Definition at line 180 of file KisReferenceImage.cpp.

181{}

Member Function Documentation

◆ cloneShape()

KoShape * KisReferenceImage::cloneShape ( ) const
overridevirtual

creates a deep copy of the shape or shape's subtree

Returns
a cloned shape

Reimplemented from KoShape.

Definition at line 513 of file KisReferenceImage.cpp.

514{
515 return new KisReferenceImage(*this);
516}

References KisReferenceImage().

◆ documentToPixel()

QPointF KisReferenceImage::documentToPixel ( const QPointF & docPoint)

Definition at line 356 of file KisReferenceImage.cpp.

357{
358 QSizeF shapeSize = size();
359 QTransform scale = QTransform::fromScale(d->image.width() / shapeSize.width(), d->image.height() / shapeSize.height());
360
361 QTransform transform = absoluteTransformation().inverted() * scale;
362 QPointF localPosition = docPoint * transform;
363
364 return localPosition;
365}
virtual QSizeF size() const
Get the size of the shape in pt.
Definition KoShape.cpp:735
QTransform absoluteTransformation() const
Definition KoShape.cpp:330
void scale(qreal sx, qreal sy)
Scale the shape using the zero-point which is the top-left corner.
Definition KoShape.cpp:210
QTransform transform() const
return the current matrix that contains the rotation/scale/position of this shape
Definition KoShape.cpp:945

References KoShape::absoluteTransformation(), d, KoShape::scale(), KoShape::size(), and KoShape::transform().

◆ documentToPixelFloored()

QPoint KisReferenceImage::documentToPixelFloored ( const QPointF & docPoint)

Definition at line 368 of file KisReferenceImage.cpp.

369{
370 QPointF localPoint = documentToPixel(docPoint);
371 return QPoint(qFloor(localPoint.x()), qFloor(localPoint.y()));
372}
QPointF documentToPixel(const QPointF &docPoint)

References documentToPixel().

◆ embed()

bool KisReferenceImage::embed ( )

Definition at line 330 of file KisReferenceImage.cpp.

331{
332 return d->embed;
333}

References d.

◆ filename()

QString KisReferenceImage::filename ( ) const

Definition at line 340 of file KisReferenceImage.cpp.

341{
342 return d->externalFilename;
343}

References d.

◆ fromClipboard()

KisReferenceImage * KisReferenceImage::fromClipboard ( const KisCoordinatesConverter & converter)
static

Definition at line 206 of file KisReferenceImage.cpp.

207{
208 const auto sz = KisClipboard::instance()->clipSize();
209 KisPaintDeviceSP clip = KisClipboard::instance()->clip({0, 0, sz.width(), sz.height()}, true);
210 return fromPaintDevice(clip, converter, nullptr);
211}
static KisClipboard * instance()
QSize clipSize() const
static KisReferenceImage * fromPaintDevice(KisPaintDeviceSP src, const KisCoordinatesConverter &converter, QWidget *parent)

References KisClipboard::clip, KisClipboard::clipSize(), fromPaintDevice(), and KisClipboard::instance().

◆ fromFile()

KisReferenceImage * KisReferenceImage::fromFile ( const QString & filename,
const KisCoordinatesConverter & converter,
QWidget * parent )
static

Load a reference image from specified file. If parent is provided and the image cannot be loaded, a warning message will be displayed to user.

Returns
reference image or null if one could not be loaded

Definition at line 183 of file KisReferenceImage.cpp.

184{
185 KisReferenceImage *reference = new KisReferenceImage();
186 reference->d->externalFilename = filename;
187 bool ok = reference->d->loadFromFile();
188
189 if (ok) {
190 QRect r = QRect(QPoint(), reference->d->image.size());
191 QSizeF shapeSize = converter.imageToDocument(r).size();
192 reference->setSize(shapeSize);
193 } else {
194 delete reference;
195
196 if (parent) {
197 QMessageBox::critical(parent, i18nc("@title:window", "Krita"), i18n("Could not load %1.", filename));
198 }
199
200 return nullptr;
201 }
202
203 return reference;
204}
_Private::Traits< T >::Result imageToDocument(const T &obj) const
The KisReferenceImage class represents a single reference image.
QString filename() const
KoShapeContainer * parent() const
Definition KoShape.cpp:857
virtual void setSize(const QSizeF &size)
Resize the shape.
Definition KoShape.cpp:249

References d, filename(), KisCoordinatesConverter::imageToDocument(), KisReferenceImage(), KoShape::parent(), and KoShape::setSize().

◆ fromPaintDevice()

KisReferenceImage * KisReferenceImage::fromPaintDevice ( KisPaintDeviceSP src,
const KisCoordinatesConverter & converter,
QWidget * parent )
static

Load a reference image from specified paint device.

Returns
reference image or null if one could not be loaded

Definition at line 214 of file KisReferenceImage.cpp.

215{
216 if (!src) {
217 return nullptr;
218 }
219
220 auto *reference = new KisReferenceImage();
221#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
222 if (src->colorSpace()->colorModelId() == RGBAColorModelID) {
223 reference->d->image = src->convertToQImage(src->colorSpace()->profile());
224 reference->d->image.setColorSpace(KoColorSpaceRegistry::instance()->QColorSpaceForProfile(src->colorSpace()->profile()));
225 } else {
226 reference->d->image = src->convertToQImage(KoColorSpaceRegistry::instance()->p709SRGBProfile());
227 }
228#else
229 reference->d->image = src->convertToQImage(KoColorSpaceRegistry::instance()->p709SRGBProfile());
230#endif
231
232 QRect r = QRect(QPoint(), reference->d->image.size());
233 QSizeF size = converter.imageToDocument(r).size();
234 reference->setSize(size);
235
236 return reference;
237}
const KoID RGBAColorModelID("RGBA", ki18n("RGB/Alpha"))
static KoColorSpaceRegistry * instance()

References KisCoordinatesConverter::imageToDocument(), KoColorSpaceRegistry::instance(), KisReferenceImage(), RGBAColorModelID, and KoShape::size().

◆ fromQImage()

KisReferenceImage * KisReferenceImage::fromQImage ( const KisCoordinatesConverter & converter,
const QImage & img )
static

Definition at line 239 of file KisReferenceImage.cpp.

240{
241 KisReferenceImage *reference = new KisReferenceImage();
242 bool ok = reference->d->loadFromQImage(img);
243
244 if (ok) {
245 QRect r = QRect(QPoint(), reference->d->image.size());
246 QSizeF size = converter.imageToDocument(r).size();
247 reference->setSize(size);
248 } else {
249 delete reference;
250 reference = 0;
251 }
252
253 return reference;
254}

References d, KisCoordinatesConverter::imageToDocument(), KisReferenceImage(), KoShape::setSize(), and KoShape::size().

◆ fromXml()

KisReferenceImage * KisReferenceImage::fromXml ( const QDomElement & elem)
static

Definition at line 430 of file KisReferenceImage.cpp.

431{
432 auto *reference = new KisReferenceImage();
433
434 const QString &src = elem.attribute("src");
435
436 if (src.startsWith("file://")) {
437 reference->d->externalFilename = src.mid(7);
438 reference->d->embed = false;
439 } else {
440 reference->d->internalFilename = src;
441 reference->d->embed = true;
442 }
443
444 qreal width = KisDomUtils::toDouble(elem.attribute("width", "100"));
445 qreal height = KisDomUtils::toDouble(elem.attribute("height", "100"));
446 reference->setSize(QSizeF(width, height));
447 reference->setKeepAspectRatio(elem.attribute("keepAspectRatio", "true").toLower() == "true");
448
449 auto transform = SvgTransformParser(elem.attribute("transform")).transform();
450 reference->setTransformation(transform);
451
452 qreal opacity = KisDomUtils::toDouble(elem.attribute("opacity", "1"));
453 reference->setTransparency(1.0 - opacity);
454
455 qreal saturation = KisDomUtils::toDouble(elem.attribute("saturation", "1"));
456 reference->setSaturation(saturation);
457
458 return reference;
459}
QTransform transform() const
double toDouble(const QString &str, bool *ok=nullptr)

References KisReferenceImage(), saturation(), KisDomUtils::toDouble(), KoShape::transform(), and SvgTransformParser::transform().

◆ getCachedImage()

QImage KisReferenceImage::getCachedImage ( )

Definition at line 506 of file KisReferenceImage.cpp.

507{
508 if (d->cachedImage.isNull()) d->updateCache();
509
510 return d->cachedImage;
511}

References d.

◆ getImage()

QImage KisReferenceImage::getImage ( )

Definition at line 501 of file KisReferenceImage.cpp.

502{
503 return d->image;
504}

References d.

◆ getPixel()

KoColor KisReferenceImage::getPixel ( QPointF position)

Definition at line 374 of file KisReferenceImage.cpp.

375{
376 KoColor transparent;
377 transparent.setOpacity(0.0);
378 if (transparency() == 1.0) return transparent;
379
380 const QPoint localPosition = documentToPixelFloored(position);
381
382 if (d->cachedImage.isNull()) {
383 d->updateCache();
384 }
385
386#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
387 const KoColorProfile *profile = KoColorSpaceRegistry::instance()->profileForQColorSpace(d->image.colorSpace());
389#else
391#endif
392
393 KoColor c(cs);
394 QColor pixel = d->cachedImage.pixelColor(localPosition);
395 QVector<float> channels = {
396 static_cast<float>(pixel.blueF()),
397 static_cast<float>(pixel.greenF()),
398 static_cast<float>(pixel.redF()),
399 1.0f};
400 cs->fromNormalisedChannelsValue( c.data(),channels);
401
402 return c;
403}
const KoID Integer16BitsColorDepthID("U16", ki18n("16-bit integer/channel"))
QPoint documentToPixelFloored(const QPointF &docPoint)
virtual void fromNormalisedChannelsValue(quint8 *pixel, const QVector< float > &values) const =0
void setOpacity(quint8 alpha)
Definition KoColor.cpp:333
QString id() const
Definition KoID.cpp:63
qreal transparency(bool recursive=false) const
Definition KoShape.cpp:645
QPointF position() const
Get the position of the shape in pt.
Definition KoShape.cpp:740
const KoColorSpace * colorSpace(const QString &colorModelId, const QString &colorDepthId, const KoColorProfile *profile)
const KoColorSpace * rgb8(const QString &profileName=QString())
const KoColorProfile * profileForQColorSpace(const QColorSpace &space)
profileForQColorSpace Find a KoColorProfile that matches a given QColorSpace. This will use the QColo...

References KoColorSpaceRegistry::colorSpace(), d, KoColor::data(), documentToPixelFloored(), KoColorSpace::fromNormalisedChannelsValue(), KoID::id(), KoColorSpaceRegistry::instance(), Integer16BitsColorDepthID, KoShape::position(), KoColorSpaceRegistry::profileForQColorSpace(), KoColorSpaceRegistry::rgb8(), RGBAColorModelID, KoColor::setOpacity(), and KoShape::transparency().

◆ hasLocalFile()

bool KisReferenceImage::hasLocalFile ( )

Definition at line 335 of file KisReferenceImage.cpp.

336{
337 return !d->externalFilename.isEmpty();
338}

References d.

◆ internalFile()

QString KisReferenceImage::internalFile ( ) const

Definition at line 345 of file KisReferenceImage.cpp.

346{
347 return d->internalFilename;
348}

References d.

◆ loadImage()

bool KisReferenceImage::loadImage ( KoStore * store)

Definition at line 479 of file KisReferenceImage.cpp.

480{
481 if (!d->embed) {
482 return d->loadFromFile();
483 }
484
485 if (!store->open(d->internalFilename)) {
486 return false;
487 }
488
489 KoStoreDevice storeDev(store);
490 if (!storeDev.open(QIODevice::ReadOnly)) {
491 return false;
492 }
493
494 if (!d->image.load(&storeDev, "PNG")) {
495 return false;
496 }
497
498 return store->close();
499}
bool close()
Definition KoStore.cpp:156
bool open(const QString &name)
Definition KoStore.cpp:109

References KoStore::close(), d, KoStore::open(), and KoStoreDevice::open().

◆ paint()

void KisReferenceImage::paint ( QPainter & painter) const
overridevirtual

Paint the shape fill The class extending this one is responsible for painting itself. painter is expected to be preconfigured to work in "document" pixels.

Parameters
painterused for painting the shape

Implements KoShape.

Definition at line 256 of file KisReferenceImage.cpp.

257{
258 if (!parent()) return;
259
260 gc.save();
261
262 QSizeF shapeSize = size();
263 // scale and rotation done by the user (excluding zoom)
264 QTransform transform = QTransform::fromScale(shapeSize.width() / d->image.width(), shapeSize.height() / d->image.height());
265
266 if (d->cachedImage.isNull()) {
267 // detach the data
268 const_cast<KisReferenceImage*>(this)->d->updateCache();
269 }
270
271 qreal scale;
272 // scale from the highDPI display
273 QTransform devicePixelRatioFTransform = QTransform::fromScale(gc.device()->devicePixelRatioF(), gc.device()->devicePixelRatioF());
274 // all three transformations: scale and rotation done by the user, scale from highDPI display, and zoom + rotation of the view
275 // order: zoom/rotation of the view; scale to high res; scale and rotation done by the user
276 QImage prescaled = d->mipmap.getClosestWithoutWorkaroundBorder(transform * devicePixelRatioFTransform * gc.transform(), &scale);
277 transform.scale(1.0 / scale, 1.0 / scale);
278
279 // Color conversion.
280 QImage *targetD = dynamic_cast<QImage*>(gc.device());
281#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
282 const bool getTargetCs = (targetD && targetD->colorSpace().colorModel() == QColorSpace::ColorModel::Rgb);
283
285 const KoColorProfile *sourceP = KoColorSpaceRegistry::instance()->profileForQColorSpace(d->image.colorSpace());
286 if (targetP != sourceP) {
288 dev->convertFromQImage(prescaled, sourceP);
290 prescaled = dev->convertToQImage(targetP);
291 if (getTargetCs) {
292 prescaled.setColorSpace(targetD->colorSpace());
293 } else {
294 prescaled.setColorSpace(QColorSpace(QColorSpace::SRgb));
295 }
296 }
297#endif
298
299 if (scale > 1.0) {
300 // enlarging should be done without smooth transformation
301 // so the user can see pixels just as they are painted
302 gc.setRenderHints(QPainter::Antialiasing);
303 } else {
304 gc.setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform);
305 }
306 gc.setClipRect(QRectF(QPointF(), shapeSize), Qt::IntersectClip);
307 gc.setTransform(transform, true);
308 gc.drawImage(QPoint(), prescaled);
309
310 gc.restore();
311}
const KoID Integer8BitsColorDepthID("U8", ki18n("8-bit integer/channel"))
QImage convertToQImage(const KoColorProfile *dstProfile, qint32 x, qint32 y, qint32 w, qint32 h, KoColorConversionTransformation::Intent renderingIntent=KoColorConversionTransformation::internalRenderingIntent(), KoColorConversionTransformation::ConversionFlags conversionFlags=KoColorConversionTransformation::internalConversionFlags()) const
void convertFromQImage(const QImage &image, const KoColorProfile *profile, qint32 offsetX=0, qint32 offsetY=0)
void convertTo(const KoColorSpace *dstColorSpace, KoColorConversionTransformation::Intent renderingIntent=KoColorConversionTransformation::internalRenderingIntent(), KoColorConversionTransformation::ConversionFlags conversionFlags=KoColorConversionTransformation::internalConversionFlags(), KUndo2Command *parentCommand=nullptr, KoUpdater *progressUpdater=nullptr)
const KoColorProfile * p709SRGBProfile() const

References KisPaintDevice::convertFromQImage(), KisPaintDevice::convertTo(), KisPaintDevice::convertToQImage(), d, KoID::id(), KoColorSpaceRegistry::instance(), Integer8BitsColorDepthID, KoColorSpaceRegistry::p709SRGBProfile(), KoShape::parent(), KoColorSpaceRegistry::profileForQColorSpace(), RGBAColorModelID, KoShape::scale(), KoShape::size(), and KoShape::transform().

◆ saturation()

qreal KisReferenceImage::saturation ( ) const

Definition at line 319 of file KisReferenceImage.cpp.

320{
321 return d->saturation;
322}

References d.

◆ saveImage()

bool KisReferenceImage::saveImage ( KoStore * store) const

Definition at line 461 of file KisReferenceImage.cpp.

462{
463 if (!d->embed) return true;
464
465 if (!store->open(d->internalFilename)) {
466 return false;
467 }
468
469 bool saved = false;
470
471 KoStoreDevice storeDev(store);
472 if (storeDev.open(QIODevice::WriteOnly)) {
473 saved = d->image.save(&storeDev, "PNG");
474 }
475
476 return store->close() && saved;
477}

References KoStore::close(), d, KoStore::open(), and KoStoreDevice::open().

◆ saveXml()

void KisReferenceImage::saveXml ( QDomDocument & document,
QDomElement & parentElement,
int id )

Definition at line 405 of file KisReferenceImage.cpp.

406{
407 d->id = id;
408
409 QDomElement element = document.createElement("referenceimage");
410
411 if (d->embed) {
412 d->internalFilename = QString("reference_images/%1.png").arg(id);
413 }
414
415 const QString src = d->embed ? d->internalFilename : (QString("file://") + d->externalFilename);
416 element.setAttribute("src", src);
417
418 const QSizeF &shapeSize = size();
419 element.setAttribute("width", KisDomUtils::toString(shapeSize.width()));
420 element.setAttribute("height", KisDomUtils::toString(shapeSize.height()));
421 element.setAttribute("keepAspectRatio", keepAspectRatio() ? "true" : "false");
422 element.setAttribute("transform", SvgUtil::transformToString(transform()));
423
424 element.setAttribute("opacity", KisDomUtils::toString(1.0 - transparency()));
425 element.setAttribute("saturation", KisDomUtils::toString(d->saturation));
426
427 parentElement.appendChild(element);
428}
bool keepAspectRatio() const
Definition KoShape.cpp:870
static QString transformToString(const QTransform &transform)
Converts specified transformation to a string.
Definition SvgUtil.cpp:104
QString toString(const QString &value)

References d, KoShape::keepAspectRatio(), KoShape::size(), KisDomUtils::toString(), KoShape::transform(), SvgUtil::transformToString(), and KoShape::transparency().

◆ setEmbed()

void KisReferenceImage::setEmbed ( bool embed)

Definition at line 324 of file KisReferenceImage.cpp.

325{
326 KIS_SAFE_ASSERT_RECOVER_RETURN(embed || !d->externalFilename.isEmpty());
327 d->embed = embed;
328}
#define KIS_SAFE_ASSERT_RECOVER_RETURN(cond)
Definition kis_assert.h:128

References d, embed(), and KIS_SAFE_ASSERT_RECOVER_RETURN.

◆ setFilename()

void KisReferenceImage::setFilename ( const QString & filename)

Definition at line 351 of file KisReferenceImage.cpp.

352{
353 d->externalFilename = filename;
354}

References d, and filename().

◆ setSaturation()

void KisReferenceImage::setSaturation ( qreal saturation)

Definition at line 313 of file KisReferenceImage.cpp.

314{
315 d->saturation = saturation;
316 d->cachedImage = QImage();
317}

References d, and saturation().

Member Data Documentation

◆ d

QSharedDataPointer<Private> KisReferenceImage::d
private

Definition at line 93 of file KisReferenceImage.h.


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