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
37Q_LOGGING_CATEGORY(lcQuickVectorImage, "qt.quick.vectorimage", QtWarningMsg)
38
40{
42 if (sourceFile == source)
43 return;
44
45 sourceFile = source;
46 loadSvg();
47 emit q->sourceChanged();
48}
49
51{
53
56
57 if (localFile.isEmpty())
58 return;
59
61
63 qCWarning(lcQuickVectorImage) << "Unsupported file format";
64 return;
65 }
66
67 if (svgItem)
69
70 svgItem = new QQuickItem(q);
71
72 QQuickVectorImageGenerator::GeneratorFlags flags;
76
78 q->setImplicitWidth(svgItem->width());
79 q->setImplicitHeight(svgItem->height());
80
81 q->updateSvgItemScale();
82
83 q->update();
84}
85
99
116 : QQuickItem(*(new QQuickVectorImagePrivate), parent)
117{
119
120 QObject::connect(this, &QQuickItem::widthChanged, this, &QQuickVectorImage::updateSvgItemScale);
121 QObject::connect(this, &QQuickItem::heightChanged, this, &QQuickVectorImage::updateSvgItemScale);
122 QObject::connect(this, &QQuickVectorImage::fillModeChanged, this, &QQuickVectorImage::updateSvgItemScale);
123}
124
133{
134 Q_D(const QQuickVectorImage);
135 return d->sourceFile;
136}
137
139{
141 d->setSource(source);
142}
143
144void QQuickVectorImage::updateSvgItemScale()
145{
147
148 if (d->svgItem == nullptr
149 || qFuzzyIsNull(d->svgItem->width())
150 || qFuzzyIsNull(d->svgItem->height())) {
151 return;
152 }
153
154 auto xformProp = d->svgItem->transform();
155 QQuickScale *scaleTransform = nullptr;
156 if (xformProp.count(&xformProp) == 0) {
157 scaleTransform = new QQuickScale;
158 scaleTransform->setParent(d->svgItem);
159 xformProp.append(&xformProp, scaleTransform);
160 } else {
161 scaleTransform = qobject_cast<QQuickScale *>(xformProp.at(&xformProp, 0));
162 }
163
164 if (scaleTransform != nullptr) {
165 qreal xScale = width() / d->svgItem->width();
166 qreal yScale = height() / d->svgItem->height();
167
168 switch (d->fillMode) {
170 xScale = yScale = 1.0;
171 break;
173 xScale = yScale = qMin(xScale, yScale);
174 break;
176 xScale = yScale = qMax(xScale, yScale);
177 break;
179 // Already correct
180 break;
181 };
182
183 scaleTransform->setXScale(xScale);
184 scaleTransform->setYScale(yScale);
185 }
186}
187
209{
210 Q_D(const QQuickVectorImage);
211 return d->fillMode;
212}
213
215{
217 if (d->fillMode == newFillMode)
218 return;
219 d->fillMode = newFillMode;
221}
222
224
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(QQuickItem *parent=nullptr)
\qmltype VectorImage \inqmlmodule QtQuick.VectorImage
void setFillMode(FillMode newFillMode)
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:5506
\inmodule QtCore
Definition qurl.h:94
Combined button and popup list for selecting options.
DBusConnection const char DBusError DBusBusType DBusError return DBusConnection DBusHandleMessageFunction void DBusFreeFunction return DBusConnection return DBusConnection return const char DBusError return DBusConnection DBusMessage dbus_uint32_t return DBusConnection dbus_bool_t DBusConnection DBusAddWatchFunction DBusRemoveWatchFunction DBusWatchToggledFunction void DBusFreeFunction return DBusConnection DBusDispatchStatusFunction void DBusFreeFunction DBusTimeout return DBusTimeout return DBusWatch return DBusWatch unsigned int return DBusError const DBusError return const DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessageIter int const void return DBusMessageIter DBusMessageIter return DBusMessageIter void DBusMessageIter void int return DBusMessage DBusMessageIter return DBusMessageIter return DBusMessageIter DBusMessageIter const char const char const char const char return DBusMessage return DBusMessage const char return DBusMessage dbus_bool_t return DBusMessage dbus_uint32_t return DBusMessage void
QMediaFormat::FileFormat fileFormat
bool qFuzzyIsNull(qfloat16 f) noexcept
Definition qfloat16.h:349
@ QtWarningMsg
Definition qlogging.h:31
#define Q_LOGGING_CATEGORY(name,...)
#define qCWarning(category,...)
constexpr const T & qMin(const T &a, const T &b)
Definition qminmax.h:40
constexpr const T & qMax(const T &a, const T &b)
Definition qminmax.h:42
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:75
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)