/* SPDX-FileCopyrightText: 2011 Marco Martin SPDX-FileCopyrightText: 2015 Luca Beltrame SPDX-License-Identifier: LGPL-2.0-or-later */ #ifndef QIMAGEITEM_H #define QIMAGEITEM_H #include #include class QImageItem : public QQuickPaintedItem { Q_OBJECT QML_ELEMENT Q_PROPERTY(QImage image READ image WRITE setImage NOTIFY imageChanged RESET resetImage) Q_PROPERTY(int nativeWidth READ nativeWidth NOTIFY nativeWidthChanged) Q_PROPERTY(int nativeHeight READ nativeHeight NOTIFY nativeHeightChanged) Q_PROPERTY(int paintedWidth READ paintedWidth NOTIFY paintedWidthChanged) Q_PROPERTY(int paintedHeight READ paintedHeight NOTIFY paintedHeightChanged) Q_PROPERTY(FillMode fillMode READ fillMode WRITE setFillMode NOTIFY fillModeChanged) Q_PROPERTY(bool null READ isNull NOTIFY nullChanged) public: enum FillMode { Stretch, // the image is scaled to fit PreserveAspectFit, // the image is scaled uniformly to fit without cropping PreserveAspectCrop, // the image is scaled uniformly to fill, cropping if necessary Tile, // the image is duplicated horizontally and vertically TileVertically, // the image is stretched horizontally and tiled vertically TileHorizontally, // the image is stretched vertically and tiled horizontally Pad, /**< the image is not transformed @since 5.96 **/ }; Q_ENUM(FillMode) explicit QImageItem(QQuickItem *parent = nullptr); ~QImageItem() override; void setImage(const QImage &image); QImage image() const; void resetImage(); int nativeWidth() const; int nativeHeight() const; int paintedWidth() const; int paintedHeight() const; FillMode fillMode() const; void setFillMode(FillMode mode); void paint(QPainter *painter) override; bool isNull() const; Q_SIGNALS: void nativeWidthChanged(); void nativeHeightChanged(); void fillModeChanged(); void imageChanged(); void nullChanged(); void paintedWidthChanged(); void paintedHeightChanged(); protected: void geometryChange(const QRectF &newGeometry, const QRectF &oldGeometry) override; private: QImage m_image; FillMode m_fillMode; QRect m_paintedRect; private Q_SLOTS: void updatePaintedRect(); }; #endif