1/*
2 SPDX-FileCopyrightText: 2011 Marco Martin <mart@kde.org>
3 SPDX-FileCopyrightText: 2015 Luca Beltrame <lbeltrame@kde.org>
4
5 SPDX-License-Identifier: LGPL-2.0-or-later
6*/
7
8#ifndef QIMAGEITEM_H
9#define QIMAGEITEM_H
10
11#include <QImage>
12#include <QQuickPaintedItem>
13
14/*!
15 * \qmltype QImageItem
16 * \inqmlmodule org.kde.kquickcontrols.addons
17 */
18class QImageItem : public QQuickPaintedItem
19{
20 Q_OBJECT
21 QML_ELEMENT
22
23 /*! \qmlproperty QImage QImageItem::image */
24 Q_PROPERTY(QImage image READ image WRITE setImage NOTIFY imageChanged RESET resetImage)
25 /*! \qmlproperty int QImageItem::nativeWidth */
26 Q_PROPERTY(int nativeWidth READ nativeWidth NOTIFY nativeWidthChanged)
27 /*! \qmlproperty int QImageItem::nativeHeight */
28 Q_PROPERTY(int nativeHeight READ nativeHeight NOTIFY nativeHeightChanged)
29 /*! \qmlproperty int QImageItem::paintedWidth */
30 Q_PROPERTY(int paintedWidth READ paintedWidth NOTIFY paintedWidthChanged)
31 /*! \qmlproperty int QImageItem::paintedHeight */
32 Q_PROPERTY(int paintedHeight READ paintedHeight NOTIFY paintedHeightChanged)
33 /*! \qmlproperty FillMode QImageItem::fillMode
34 *
35 * \value Stretch
36 * The image is scaled to fit.
37 * \value PreserveAspectFit
38 * the image is scaled uniformly to fit without cropping.
39 * \value PreserveAspectCrop
40 * The image is scaled uniformly to fill, cropping if necessary.
41 * \value Tile
42 * The image is duplicated horizontally and vertically.
43 * \value TileVertically
44 * The image is stretched horizontally and tiled vertically.
45 * \value TileHorizontally
46 * The image is stretched vertically and tiled horizontally.
47 * \value [since 5.96] Pad
48 * The image is not transformed.
49 *
50 */
51 Q_PROPERTY(FillMode fillMode READ fillMode WRITE setFillMode NOTIFY fillModeChanged)
52 /*! \qmlproperty bool QImageItem::null */
53 Q_PROPERTY(bool null READ isNull NOTIFY nullChanged)
54
55public:
56 enum FillMode {
57 Stretch,
58 PreserveAspectFit,
59 PreserveAspectCrop,
60 Tile,
61 TileVertically,
62 TileHorizontally,
63 Pad,
64 };
65 Q_ENUM(FillMode)
66
67 explicit QImageItem(QQuickItem *parent = nullptr);
68 ~QImageItem() override;
69
70 void setImage(const QImage &image);
71 QImage image() const;
72 void resetImage();
73
74 int nativeWidth() const;
75 int nativeHeight() const;
76
77 int paintedWidth() const;
78 int paintedHeight() const;
79
80 FillMode fillMode() const;
81 void setFillMode(FillMode mode);
82
83 void paint(QPainter *painter) override;
84
85 bool isNull() const;
86
87Q_SIGNALS:
88 /*! \qmlsignal QImageItem::nativeWidthChanged() */
89 void nativeWidthChanged();
90 /*! \qmlsignal QImageItem::nativeHeightChanged() */
91 void nativeHeightChanged();
92 /*! \qmlsignal QImageItem::fillModeChanged() */
93 void fillModeChanged();
94 /*! \qmlsignal QImageItem::imageChanged() */
95 void imageChanged();
96 /*! \qmlsignal QImageItem::nullChanged() */
97 void nullChanged();
98 /*! \qmlsignal QImageItem::paintedWidthChanged() */
99 void paintedWidthChanged();
100 /*! \qmlsignal QImageItem::paintedHeightChanged() */
101 void paintedHeightChanged();
102
103protected:
104 void geometryChange(const QRectF &newGeometry, const QRectF &oldGeometry) override;
105
106private:
107 QImage m_image;
108 FillMode m_fillMode;
109 QRect m_paintedRect;
110
111private Q_SLOTS:
112 void updatePaintedRect();
113};
114
115#endif
116

source code of kdeclarative/src/qmlcontrols/kquickcontrolsaddons/qimageitem.h