Qt
Internal/Contributor docs for the Qt SDK. <b>Note:</b> These are NOT official API docs; those are found <a href='https://doc.qt.io/'>here</a>.
Loading...
Searching...
No Matches
qquickvectorimage.cpp
Go to the documentation of this file.
1// Copyright (C) 2024 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
6#include <QtQuickVectorImageGenerator/private/qquickitemgenerator_p.h>
7#include <QtQuickVectorImageGenerator/private/qquickvectorimageglobal_p.h>
8#include <QtCore/qloggingcategory.h>
9
10#include <private/qquicktranslate_p.h>
11
13
38{
40 if (sourceFile == source)
41 return;
42
44 loadSvg();
45 emit q->sourceChanged();
46}
47
49{
51
54
55 if (localFile.isEmpty())
56 return;
57
59
61 qCWarning(lcQuickVectorImage) << "Unsupported file format";
62 return;
63 }
64
65 if (svgItem)
67
68 svgItem = new QQuickItem(q);
69
70 QQuickVectorImageGenerator::GeneratorFlags flags;
75
77 q->setImplicitWidth(svgItem->width());
78 q->setImplicitHeight(svgItem->height());
79
80 q->updateSvgItemScale();
81
82 q->update();
83}
84
98
115 : QQuickItem(*(new QQuickVectorImagePrivate), parent)
116{
118
119 QObject::connect(this, &QQuickItem::widthChanged, this, &QQuickVectorImage::updateSvgItemScale);
120 QObject::connect(this, &QQuickItem::heightChanged, this, &QQuickVectorImage::updateSvgItemScale);
121 QObject::connect(this, &QQuickVectorImage::fillModeChanged, this, &QQuickVectorImage::updateSvgItemScale);
122}
123
132{
133 Q_D(const QQuickVectorImage);
134 return d->sourceFile;
135}
136
138{
140 d->setSource(source);
141}
142
143void QQuickVectorImage::updateSvgItemScale()
144{
146
147 if (d->svgItem == nullptr
148 || qFuzzyIsNull(d->svgItem->width())
149 || qFuzzyIsNull(d->svgItem->height())) {
150 return;
151 }
152
153 auto xformProp = d->svgItem->transform();
154 QQuickScale *scaleTransform = nullptr;
155 if (xformProp.count(&xformProp) == 0) {
156 scaleTransform = new QQuickScale;
157 scaleTransform->setParent(d->svgItem);
158 xformProp.append(&xformProp, scaleTransform);
159 } else {
160 scaleTransform = qobject_cast<QQuickScale *>(xformProp.at(&xformProp, 0));
161 }
162
163 if (scaleTransform != nullptr) {
164 qreal xScale = width() / d->svgItem->width();
165 qreal yScale = height() / d->svgItem->height();
166
167 switch (d->fillMode) {
169 xScale = yScale = 1.0;
170 break;
172 xScale = yScale = qMin(xScale, yScale);
173 break;
175 xScale = yScale = qMax(xScale, yScale);
176 break;
178 // Already correct
179 break;
180 };
181
182 scaleTransform->setXScale(xScale);
183 scaleTransform->setYScale(yScale);
184 }
185}
186
208{
209 Q_D(const QQuickVectorImage);
210 return d->fillMode;
211}
212
214{
216 if (d->fillMode == newFillMode)
217 return;
218 d->fillMode = newFillMode;
220}
221
238{
239 Q_D(const QQuickVectorImage);
240 return d->preferredRendererType;
241}
242
244{
246 if (d->preferredRendererType == newPreferredRendererType)
247 return;
248 d->preferredRendererType = newPreferredRendererType;
249 d->loadSvg();
251}
252
static QMetaObject::Connection connect(const QObject *sender, const char *signal, const QObject *receiver, const char *member, Qt::ConnectionType=Qt::AutoConnection)
\threadsafe
Definition qobject.cpp:2960
void setParent(QObject *parent)
Makes the object a child of parent.
Definition qobject.cpp:2195
void deleteLater()
\threadsafe
Definition qobject.cpp:2435
QUrl resolvedUrl(const QUrl &) const
Resolves the URL src relative to the URL of the containing component.
static QString urlToLocalFileOrQrc(const QString &)
If url is a local file returns a path suitable for passing to \l{QFile}.
Definition qqmlfile.cpp:742
The QQuickItem class provides the most basic of all visual items in \l {Qt Quick}.
Definition qquickitem.h:63
void heightChanged()
void setFlag(Flag flag, bool enabled=true)
Enables the specified flag for this item if enabled is true; if enabled is false, the flag is disable...
void widthChanged()
void setParentItem(QQuickItem *parent)
qreal width
This property holds the width of this item.
Definition qquickitem.h:75
qreal height
This property holds the height of this item.
Definition qquickitem.h:76
QQuickVectorImagePrivate::Format formatFromFilePath(const QString &filePath)
QQuickVectorImage::RendererType preferredRendererType
void setSource(const QUrl &source)
\qmlmodule QtQuick.VectorImage \title Qt Quick Vector Image QML Types
void preferredRendererTypeChanged()
QQuickVectorImage(QQuickItem *parent=nullptr)
\qmltype VectorImage \inqmlmodule QtQuick.VectorImage
void setFillMode(FillMode newFillMode)
void setPreferredRendererType(RendererType newPreferredRendererType)
RendererType preferredRendererType
void setSource(const QUrl &source)
quint32 generate()
Generates a 32-bit random quantity and returns it.
Definition qrandom.h:48
\macro QT_RESTRICTED_CAST_FROM_ASCII
Definition qstring.h:129
bool endsWith(const QString &s, Qt::CaseSensitivity cs=Qt::CaseSensitive) const
Returns true if the string ends with s; otherwise returns false.
Definition qstring.cpp:5516
\inmodule QtCore
Definition qurl.h:94
Combined button and popup list for selecting options.
QMediaFormat::FileFormat fileFormat
bool qFuzzyIsNull(qfloat16 f) noexcept
Definition qfloat16.h:349
#define qCWarning(category,...)
QT_BEGIN_NAMESPACE constexpr const T & qMin(const T &a, const T &b)
Definition qminmax.h:19
constexpr const T & qMax(const T &a, const T &b)
Definition qminmax.h:21
GLbitfield flags
GLsizei GLsizei GLchar * source
GLuint res
GLdouble GLdouble GLdouble GLdouble q
Definition qopenglext.h:259
QQmlContext * qmlContext(const QObject *obj)
Definition qqml.cpp:72
static QUrl resolvedUrl(const QUrl &url, const QQmlRefPointer< QQmlContextData > &context)
#define emit
#define Q_UNUSED(x)
double qreal
Definition qtypes.h:187
QRandomGenerator generator(sseq)