diff options
Diffstat (limited to 'src/quick/util/qquickpath_p.h')
-rw-r--r-- | src/quick/util/qquickpath_p.h | 123 |
1 files changed, 123 insertions, 0 deletions
diff --git a/src/quick/util/qquickpath_p.h b/src/quick/util/qquickpath_p.h index 5987ae8f35..159c46d13c 100644 --- a/src/quick/util/qquickpath_p.h +++ b/src/quick/util/qquickpath_p.h @@ -63,6 +63,7 @@ QT_REQUIRE_CONFIG(quick_path); #include <QtCore/QObject> #include <QtGui/QPainterPath> +#include <QtGui/QFont> QT_BEGIN_NAMESPACE @@ -77,6 +78,7 @@ struct QQuickPathData class Q_QUICK_PRIVATE_EXPORT QQuickPathElement : public QObject { Q_OBJECT + QML_ANONYMOUS public: QQuickPathElement(QObject *parent=nullptr) : QObject(parent) {} Q_SIGNALS: @@ -89,6 +91,7 @@ class Q_QUICK_PRIVATE_EXPORT QQuickPathAttribute : public QQuickPathElement Q_PROPERTY(QString name READ name WRITE setName NOTIFY nameChanged) Q_PROPERTY(qreal value READ value WRITE setValue NOTIFY valueChanged) + QML_NAMED_ELEMENT(PathAttribute) public: QQuickPathAttribute(QObject *parent=nullptr) : QQuickPathElement(parent) {} @@ -116,6 +119,7 @@ class Q_QUICK_PRIVATE_EXPORT QQuickCurve : public QQuickPathElement Q_PROPERTY(qreal y READ y WRITE setY NOTIFY yChanged) Q_PROPERTY(qreal relativeX READ relativeX WRITE setRelativeX NOTIFY relativeXChanged) Q_PROPERTY(qreal relativeY READ relativeY WRITE setRelativeY NOTIFY relativeYChanged) + QML_ANONYMOUS public: QQuickCurve(QObject *parent=nullptr) : QQuickPathElement(parent) {} @@ -153,6 +157,7 @@ private: class Q_QUICK_PRIVATE_EXPORT QQuickPathLine : public QQuickCurve { Q_OBJECT + QML_NAMED_ELEMENT(PathLine) public: QQuickPathLine(QObject *parent=nullptr) : QQuickCurve(parent) {} @@ -162,6 +167,8 @@ public: class Q_QUICK_PRIVATE_EXPORT QQuickPathMove : public QQuickCurve { Q_OBJECT + QML_NAMED_ELEMENT(PathMove) + QML_ADDED_IN_MINOR_VERSION(9) public: QQuickPathMove(QObject *parent=nullptr) : QQuickCurve(parent) {} @@ -176,6 +183,8 @@ class Q_QUICK_PRIVATE_EXPORT QQuickPathQuad : public QQuickCurve Q_PROPERTY(qreal controlY READ controlY WRITE setControlY NOTIFY controlYChanged) Q_PROPERTY(qreal relativeControlX READ relativeControlX WRITE setRelativeControlX NOTIFY relativeControlXChanged) Q_PROPERTY(qreal relativeControlY READ relativeControlY WRITE setRelativeControlY NOTIFY relativeControlYChanged) + + QML_NAMED_ELEMENT(PathQuad) public: QQuickPathQuad(QObject *parent=nullptr) : QQuickCurve(parent) {} @@ -220,6 +229,7 @@ class Q_QUICK_PRIVATE_EXPORT QQuickPathCubic : public QQuickCurve Q_PROPERTY(qreal relativeControl1Y READ relativeControl1Y WRITE setRelativeControl1Y NOTIFY relativeControl1YChanged) Q_PROPERTY(qreal relativeControl2X READ relativeControl2X WRITE setRelativeControl2X NOTIFY relativeControl2XChanged) Q_PROPERTY(qreal relativeControl2Y READ relativeControl2Y WRITE setRelativeControl2Y NOTIFY relativeControl2YChanged) + QML_NAMED_ELEMENT(PathCubic) public: QQuickPathCubic(QObject *parent=nullptr) : QQuickCurve(parent) {} @@ -277,6 +287,7 @@ private: class Q_QUICK_PRIVATE_EXPORT QQuickPathCatmullRomCurve : public QQuickCurve { Q_OBJECT + QML_NAMED_ELEMENT(PathCurve) public: QQuickPathCatmullRomCurve(QObject *parent=nullptr) : QQuickCurve(parent) {} @@ -291,6 +302,7 @@ class Q_QUICK_PRIVATE_EXPORT QQuickPathArc : public QQuickCurve Q_PROPERTY(bool useLargeArc READ useLargeArc WRITE setUseLargeArc NOTIFY useLargeArcChanged) Q_PROPERTY(ArcDirection direction READ direction WRITE setDirection NOTIFY directionChanged) Q_PROPERTY(qreal xAxisRotation READ xAxisRotation WRITE setXAxisRotation NOTIFY xAxisRotationChanged REVISION 9) + QML_NAMED_ELEMENT(PathArc) public: QQuickPathArc(QObject *parent=nullptr) @@ -342,6 +354,9 @@ class Q_QUICK_PRIVATE_EXPORT QQuickPathAngleArc : public QQuickCurve Q_PROPERTY(qreal sweepAngle READ sweepAngle WRITE setSweepAngle NOTIFY sweepAngleChanged) Q_PROPERTY(bool moveToStart READ moveToStart WRITE setMoveToStart NOTIFY moveToStartChanged) + QML_NAMED_ELEMENT(PathAngleArc) + QML_ADDED_IN_MINOR_VERSION(11) + public: QQuickPathAngleArc(QObject *parent=nullptr) : QQuickCurve(parent) {} @@ -392,6 +407,7 @@ class Q_QUICK_PRIVATE_EXPORT QQuickPathSvg : public QQuickCurve { Q_OBJECT Q_PROPERTY(QString path READ path WRITE setPath NOTIFY pathChanged) + QML_NAMED_ELEMENT(PathSvg) public: QQuickPathSvg(QObject *parent=nullptr) : QQuickCurve(parent) {} @@ -411,6 +427,7 @@ class Q_QUICK_PRIVATE_EXPORT QQuickPathPercent : public QQuickPathElement { Q_OBJECT Q_PROPERTY(qreal value READ value WRITE setValue NOTIFY valueChanged) + QML_NAMED_ELEMENT(PathPercent) public: QQuickPathPercent(QObject *parent=nullptr) : QQuickPathElement(parent) {} @@ -429,6 +446,8 @@ class Q_QUICK_PRIVATE_EXPORT QQuickPathPolyline : public QQuickCurve Q_OBJECT Q_PROPERTY(QPointF start READ start NOTIFY startChanged) Q_PROPERTY(QVariant path READ path WRITE setPath NOTIFY pathChanged) + QML_NAMED_ELEMENT(PathPolyline) + QML_ADDED_IN_MINOR_VERSION(14) public: QQuickPathPolyline(QObject *parent=nullptr); @@ -451,6 +470,8 @@ class Q_QUICK_PRIVATE_EXPORT QQuickPathMultiline : public QQuickCurve Q_OBJECT Q_PROPERTY(QPointF start READ start NOTIFY startChanged) Q_PROPERTY(QVariant paths READ paths WRITE setPaths NOTIFY pathsChanged) + QML_NAMED_ELEMENT(PathMultiline) + QML_ADDED_IN_MINOR_VERSION(14) public: QQuickPathMultiline(QObject *parent=nullptr); @@ -493,6 +514,7 @@ class Q_QUICK_PRIVATE_EXPORT QQuickPath : public QObject, public QQmlParserStatu Q_PROPERTY(bool closed READ isClosed NOTIFY changed) Q_PROPERTY(QSizeF scale READ scale WRITE setScale NOTIFY scaleChanged REVISION 14) Q_CLASSINFO("DefaultProperty", "pathElements") + QML_NAMED_ELEMENT(Path) Q_INTERFACES(QQmlParserStatus) public: QQuickPath(QObject *parent=nullptr); @@ -577,6 +599,106 @@ public: static QPointF sequentialPointAt(const QPainterPath &path, const qreal &pathLength, const QList<AttributePoint> &attributePoints, QQuickCachedBezier &prevBez, qreal p, qreal *angle = nullptr); }; +class Q_QUICK_PRIVATE_EXPORT QQuickPathText : public QQuickPathElement +{ + Q_OBJECT + Q_PROPERTY(qreal x READ x WRITE setX NOTIFY xChanged) + Q_PROPERTY(qreal y READ y WRITE setY NOTIFY yChanged) + Q_PROPERTY(qreal width READ width NOTIFY changed) + Q_PROPERTY(qreal height READ height NOTIFY changed) + Q_PROPERTY(QString text READ text WRITE setText NOTIFY textChanged) + Q_PROPERTY(QFont font READ font WRITE setFont NOTIFY fontChanged) + QML_NAMED_ELEMENT(PathText) + QML_ADDED_IN_MINOR_VERSION(15) +public: + QQuickPathText(QObject *parent=nullptr) : QQuickPathElement(parent) + { + connect(this, &QQuickPathText::xChanged, this, &QQuickPathElement::changed); + connect(this, &QQuickPathText::yChanged, this, &QQuickPathElement::changed); + connect(this, &QQuickPathText::textChanged, this, &QQuickPathElement::changed); + connect(this, &QQuickPathText::fontChanged, this, &QQuickPathElement::changed); + + connect(this, &QQuickPathElement::changed, this, &QQuickPathText::invalidate); + } + + void addToPath(QPainterPath &path); + + qreal x() const { return _x; } + qreal y() const { return _y; } + QString text() const { return _text; } + QFont font() const { return _font; } + + void setX(qreal x) + { + if (qFuzzyCompare(_x, x)) + return; + + _x = x; + Q_EMIT xChanged(); + } + + void setY(qreal y) + { + if (qFuzzyCompare(_y, y)) + return; + + _y = y; + Q_EMIT yChanged(); + } + + void setText(const QString &text) + { + if (text == _text) + return; + + _text = text; + Q_EMIT textChanged(); + } + + void setFont(const QFont &font) + { + if (font == _font) + return; + + _font = font; + Q_EMIT fontChanged(); + } + + qreal width() const + { + updatePath(); + return _path.boundingRect().width(); + } + + qreal height() const + { + updatePath(); + return _path.boundingRect().height(); + } + +Q_SIGNALS: + void xChanged(); + void yChanged(); + void textChanged(); + void fontChanged(); + +private Q_SLOTS: + void invalidate() + { + _path.clear(); + } + +private: + void updatePath() const; + + QString _text; + qreal _x = qreal(0.0); + qreal _y = qreal(0.0); + QFont _font; + + mutable QPainterPath _path; +}; + QT_END_NAMESPACE QML_DECLARE_TYPE(QQuickPathElement) @@ -593,5 +715,6 @@ QML_DECLARE_TYPE(QQuickPathSvg) QML_DECLARE_TYPE(QQuickPathPercent) QML_DECLARE_TYPE(QQuickPathPolyline) QML_DECLARE_TYPE(QQuickPath) +QML_DECLARE_TYPE(QQuickPathText) #endif // QQUICKPATH_H |