Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
qquickshape_p.h
Go to the documentation of this file.
1// Copyright (C) 2016 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// Qt-Security score:significant reason:default
4
5#ifndef QQUICKSHAPE_P_H
6#define QQUICKSHAPE_P_H
7
8//
9// W A R N I N G
10// -------------
11//
12// This file is not part of the Qt API. It exists purely as an
13// implementation detail. This header file may change from version to
14// version without notice, or even be removed.
15//
16// We mean it.
17//
18
19#include <QtQuickShapes/private/qquickshapesglobal_p.h>
20#include <QtQuick/qquickitem.h>
21
22#include <private/qtquickglobal_p.h>
23#include <private/qquickpath_p_p.h>
24#include <private/qquickrectangle_p.h>
25
26QT_BEGIN_NAMESPACE
27
28class QQuickShapePathPrivate;
29class QQuickShapePrivate;
30
31void Q_QUICKSHAPES_EXPORT QQuickShapes_initializeModule();
32
33class Q_QUICKSHAPES_EXPORT QQuickShapesModule
34{
35public:
36 static void defineModule();
37};
38
39class Q_QUICKSHAPES_EXPORT QQuickShapeGradient : public QQuickGradient
40{
41 Q_OBJECT
42 Q_PROPERTY(SpreadMode spread READ spread WRITE setSpread NOTIFY spreadChanged)
43 Q_CLASSINFO("DefaultProperty", "stops")
44
45 QML_NAMED_ELEMENT(ShapeGradient)
46 QML_ADDED_IN_VERSION(1, 0)
47 QML_UNCREATABLE("ShapeGradient is an abstract base class.");
48
49public:
50 enum SpreadMode {
51 PadSpread,
52 ReflectSpread,
53 RepeatSpread
54 };
55 Q_ENUM(SpreadMode)
56
57 QQuickShapeGradient(QObject *parent = nullptr);
58
59 SpreadMode spread() const;
60 void setSpread(SpreadMode mode);
61
62Q_SIGNALS:
63 void spreadChanged();
64
65private:
66 SpreadMode m_spread;
67};
68
69class Q_QUICKSHAPES_EXPORT QQuickShapeLinearGradient : public QQuickShapeGradient
70{
71 Q_OBJECT
72 Q_PROPERTY(qreal x1 READ x1 WRITE setX1 NOTIFY x1Changed)
73 Q_PROPERTY(qreal y1 READ y1 WRITE setY1 NOTIFY y1Changed)
74 Q_PROPERTY(qreal x2 READ x2 WRITE setX2 NOTIFY x2Changed)
75 Q_PROPERTY(qreal y2 READ y2 WRITE setY2 NOTIFY y2Changed)
76 Q_CLASSINFO("DefaultProperty", "stops")
77 QML_NAMED_ELEMENT(LinearGradient)
78 QML_ADDED_IN_VERSION(1, 0)
79
80public:
81 QQuickShapeLinearGradient(QObject *parent = nullptr);
82
83 qreal x1() const;
84 void setX1(qreal v);
85 qreal y1() const;
86 void setY1(qreal v);
87 qreal x2() const;
88 void setX2(qreal v);
89 qreal y2() const;
90 void setY2(qreal v);
91
92Q_SIGNALS:
93 void x1Changed();
94 void y1Changed();
95 void x2Changed();
96 void y2Changed();
97
98private:
99 QPointF m_start;
100 QPointF m_end;
101};
102
103class Q_QUICKSHAPES_EXPORT QQuickShapeRadialGradient : public QQuickShapeGradient
104{
105 Q_OBJECT
106 Q_PROPERTY(qreal centerX READ centerX WRITE setCenterX NOTIFY centerXChanged)
107 Q_PROPERTY(qreal centerY READ centerY WRITE setCenterY NOTIFY centerYChanged)
108 Q_PROPERTY(qreal centerRadius READ centerRadius WRITE setCenterRadius NOTIFY centerRadiusChanged)
109 Q_PROPERTY(qreal focalX READ focalX WRITE setFocalX NOTIFY focalXChanged)
110 Q_PROPERTY(qreal focalY READ focalY WRITE setFocalY NOTIFY focalYChanged)
111 Q_PROPERTY(qreal focalRadius READ focalRadius WRITE setFocalRadius NOTIFY focalRadiusChanged)
112 Q_CLASSINFO("DefaultProperty", "stops")
113 QML_NAMED_ELEMENT(RadialGradient)
114 QML_ADDED_IN_VERSION(1, 0)
115
116public:
117 QQuickShapeRadialGradient(QObject *parent = nullptr);
118
119 qreal centerX() const;
120 void setCenterX(qreal v);
121
122 qreal centerY() const;
123 void setCenterY(qreal v);
124
125 qreal centerRadius() const;
126 void setCenterRadius(qreal v);
127
128 qreal focalX() const;
129 void setFocalX(qreal v);
130
131 qreal focalY() const;
132 void setFocalY(qreal v);
133
134 qreal focalRadius() const;
135 void setFocalRadius(qreal v);
136
137Q_SIGNALS:
138 void centerXChanged();
139 void centerYChanged();
140 void focalXChanged();
141 void focalYChanged();
142 void centerRadiusChanged();
143 void focalRadiusChanged();
144
145private:
146 QPointF m_centerPoint;
147 QPointF m_focalPoint;
148 qreal m_centerRadius = 0;
149 qreal m_focalRadius = 0;
150};
151
152class Q_QUICKSHAPES_EXPORT QQuickShapeConicalGradient : public QQuickShapeGradient
153{
154 Q_OBJECT
155 Q_PROPERTY(qreal centerX READ centerX WRITE setCenterX NOTIFY centerXChanged)
156 Q_PROPERTY(qreal centerY READ centerY WRITE setCenterY NOTIFY centerYChanged)
157 Q_PROPERTY(qreal angle READ angle WRITE setAngle NOTIFY angleChanged)
158 Q_CLASSINFO("DefaultProperty", "stops")
159 QML_NAMED_ELEMENT(ConicalGradient)
160 QML_ADDED_IN_VERSION(1, 0)
161
162public:
163 QQuickShapeConicalGradient(QObject *parent = nullptr);
164
165 qreal centerX() const;
166 void setCenterX(qreal v);
167
168 qreal centerY() const;
169 void setCenterY(qreal v);
170
171 qreal angle() const;
172 void setAngle(qreal v);
173
174Q_SIGNALS:
175 void centerXChanged();
176 void centerYChanged();
177 void angleChanged();
178
179private:
180 QPointF m_centerPoint;
181 qreal m_angle = 0;
182};
183
184class Q_QUICKSHAPES_EXPORT QQuickShapeTrim : public QObject
185{
186 Q_OBJECT
187
188 Q_PROPERTY(qreal start READ start WRITE setStart NOTIFY startChanged FINAL)
189 Q_PROPERTY(qreal end READ end WRITE setEnd NOTIFY endChanged FINAL)
190 Q_PROPERTY(qreal offset READ offset WRITE setOffset NOTIFY offsetChanged FINAL)
191 QML_ANONYMOUS
192 QML_ADDED_IN_VERSION(6, 10)
193public:
194 QQuickShapeTrim(QObject *parent = nullptr);
195
196 qreal start() const;
197 void setStart(qreal t);
198
199 qreal end() const;
200 void setEnd(qreal t);
201
202 qreal offset() const;
203 void setOffset(qreal t);
204
205Q_SIGNALS:
206 void startChanged();
207 void endChanged();
208 void offsetChanged();
209
210private:
211 qreal m_start = 0;
212 qreal m_end = 1;
213 qreal m_offset = 0;
214};
215
216class Q_QUICKSHAPES_EXPORT QQuickShapePath : public QQuickPath
217{
218 Q_OBJECT
219
220 Q_PROPERTY(QColor strokeColor READ strokeColor WRITE setStrokeColor NOTIFY strokeColorChanged)
221 Q_PROPERTY(qreal strokeWidth READ strokeWidth WRITE setStrokeWidth NOTIFY strokeWidthChanged)
222 Q_PROPERTY(QColor fillColor READ fillColor WRITE setFillColor NOTIFY fillColorChanged)
223 Q_PROPERTY(FillRule fillRule READ fillRule WRITE setFillRule NOTIFY fillRuleChanged)
224 Q_PROPERTY(JoinStyle joinStyle READ joinStyle WRITE setJoinStyle NOTIFY joinStyleChanged)
225 Q_PROPERTY(int miterLimit READ miterLimit WRITE setMiterLimit NOTIFY miterLimitChanged)
226 Q_PROPERTY(CapStyle capStyle READ capStyle WRITE setCapStyle NOTIFY capStyleChanged)
227 Q_PROPERTY(StrokeStyle strokeStyle READ strokeStyle WRITE setStrokeStyle NOTIFY strokeStyleChanged)
228 Q_PROPERTY(qreal dashOffset READ dashOffset WRITE setDashOffset NOTIFY dashOffsetChanged)
229 Q_PROPERTY(QList<qreal> dashPattern READ dashPattern WRITE setDashPattern NOTIFY dashPatternChanged)
230 Q_PROPERTY(QQuickShapeGradient *fillGradient READ fillGradient WRITE setFillGradient NOTIFY fillGradientChanged RESET resetFillGradient)
231 Q_PROPERTY(QSizeF scale READ scale WRITE setScale NOTIFY scaleChanged OVERRIDE REVISION(1, 14))
232 Q_PROPERTY(PathHints pathHints READ pathHints WRITE setPathHints NOTIFY pathHintsChanged REVISION(6, 7) FINAL)
233 Q_PROPERTY(QMatrix4x4 fillTransform READ fillTransform WRITE setFillTransform NOTIFY fillTransformChanged REVISION(6, 8) FINAL)
234 Q_PROPERTY(QQuickItem *fillItem READ fillItem WRITE setFillItem NOTIFY fillItemChanged REVISION(6, 8) FINAL)
235 Q_PROPERTY(QQuickShapeTrim *trim READ trim CONSTANT REVISION(6, 10) FINAL)
236 Q_PROPERTY(bool cosmeticStroke READ cosmeticStroke WRITE setCosmeticStroke NOTIFY cosmeticStrokeChanged REVISION(6, 11) FINAL)
237 Q_PROPERTY(QQuickShapeGradient *strokeGradient READ strokeGradient WRITE setStrokeGradient NOTIFY strokeGradientChanged RESET resetStrokeGradient REVISION(6, 12) FINAL)
238 QML_NAMED_ELEMENT(ShapePath)
239 QML_ADDED_IN_VERSION(1, 0)
240
241public:
242 enum FillRule {
243 OddEvenFill = Qt::OddEvenFill,
244 WindingFill = Qt::WindingFill
245 };
246 Q_ENUM(FillRule)
247
248 enum JoinStyle {
249 MiterJoin = Qt::MiterJoin,
250 BevelJoin = Qt::BevelJoin,
251 RoundJoin = Qt::RoundJoin
252 };
253 Q_ENUM(JoinStyle)
254
255 enum CapStyle {
256 FlatCap = Qt::FlatCap,
257 SquareCap = Qt::SquareCap,
258 RoundCap = Qt::RoundCap
259 };
260 Q_ENUM(CapStyle)
261
262 enum StrokeStyle {
263 SolidLine = Qt::SolidLine,
264 DashLine = Qt::DashLine
265 };
266 Q_ENUM(StrokeStyle)
267
268 enum PathHint {
269 PathLinear = 0x1,
270 PathQuadratic = 0x2,
271 PathConvex = 0x4,
272 PathFillOnRight = 0x8,
273 PathSolid = 0x10,
274 PathNonIntersecting = 0x20,
275 PathNonOverlappingControlPointTriangles = 0x40
276 };
277 Q_DECLARE_FLAGS(PathHints, PathHint)
278 Q_FLAG(PathHints)
279
280 QQuickShapePath(QObject *parent = nullptr);
281 ~QQuickShapePath();
282
283 QColor strokeColor() const;
284 void setStrokeColor(const QColor &color);
285
286 qreal strokeWidth() const;
287 void setStrokeWidth(qreal w);
288
289 void setStrokeGradient(QQuickShapeGradient *gradient);
290 QQuickShapeGradient *strokeGradient() const;
291 void resetStrokeGradient();
292
293 QColor fillColor() const;
294 void setFillColor(const QColor &color);
295
296 FillRule fillRule() const;
297 void setFillRule(FillRule fillRule);
298
299 JoinStyle joinStyle() const;
300 void setJoinStyle(JoinStyle style);
301
302 int miterLimit() const;
303 void setMiterLimit(int limit);
304
305 CapStyle capStyle() const;
306 void setCapStyle(CapStyle style);
307
308 StrokeStyle strokeStyle() const;
309 void setStrokeStyle(StrokeStyle style);
310
311 qreal dashOffset() const;
312 void setDashOffset(qreal offset);
313
314 QList<qreal> dashPattern() const;
315 void setDashPattern(const QList<qreal> &array);
316
317 QQuickShapeGradient *fillGradient() const;
318 void setFillGradient(QQuickShapeGradient *gradient);
319 void resetFillGradient();
320
321 PathHints pathHints() const;
322 void setPathHints(PathHints newPathHints);
323
324 QMatrix4x4 fillTransform() const;
325 void setFillTransform(const QMatrix4x4 &matrix);
326
327 QQuickItem *fillItem() const;
328 void setFillItem(QQuickItem *newFillItem);
329
330 QQuickShapeTrim *trim();
331 bool hasTrim() const;
332
333 bool cosmeticStroke() const;
334 void setCosmeticStroke(bool c);
335
336Q_SIGNALS:
337 void shapePathChanged();
338 void strokeColorChanged();
339 void strokeWidthChanged();
340 void fillColorChanged();
341 void fillRuleChanged();
342 void joinStyleChanged();
343 void miterLimitChanged();
344 void capStyleChanged();
345 void strokeStyleChanged();
346 void dashOffsetChanged();
347 void dashPatternChanged();
348 Q_REVISION(6, 11) void fillGradientChanged();
349
350 Q_REVISION(6, 7) void pathHintsChanged();
351 Q_REVISION(6, 8) void fillTransformChanged();
352 Q_REVISION(6, 8) void fillItemChanged();
353 Q_REVISION(6, 11) void cosmeticStrokeChanged();
354 Q_REVISION(6, 12) void strokeGradientChanged();
355
356private:
357 Q_DISABLE_COPY(QQuickShapePath)
358 Q_DECLARE_PRIVATE(QQuickShapePath)
359 Q_PRIVATE_SLOT(d_func(), void _q_fillGradientChanged())
360 Q_PRIVATE_SLOT(d_func(), void _q_strokeGradientChanged())
361 Q_PRIVATE_SLOT(d_func(), void _q_fillItemDestroyed())
362};
363
364Q_DECLARE_OPERATORS_FOR_FLAGS(QQuickShapePath::PathHints)
365
366class Q_QUICKSHAPES_EXPORT QQuickShape : public QQuickItem
367{
368 Q_OBJECT
369 Q_PROPERTY(RendererType rendererType READ rendererType NOTIFY rendererChanged)
370 Q_PROPERTY(bool asynchronous READ asynchronous WRITE setAsynchronous NOTIFY asynchronousChanged)
371 Q_PROPERTY(bool vendorExtensionsEnabled READ vendorExtensionsEnabled WRITE setVendorExtensionsEnabled NOTIFY vendorExtensionsEnabledChanged)
372 Q_PROPERTY(RendererType preferredRendererType READ preferredRendererType
373 WRITE setPreferredRendererType NOTIFY preferredRendererTypeChanged REVISION(6, 6) FINAL)
374 Q_PROPERTY(Status status READ status NOTIFY statusChanged)
375 Q_PROPERTY(ContainsMode containsMode READ containsMode WRITE setContainsMode NOTIFY containsModeChanged REVISION(1, 11))
376 Q_PROPERTY(QRectF boundingRect READ boundingRect NOTIFY boundingRectChanged REVISION(6, 6) FINAL)
377 Q_PROPERTY(FillMode fillMode READ fillMode WRITE setFillMode NOTIFY fillModeChanged REVISION(6, 7) FINAL)
378 Q_PROPERTY(HAlignment horizontalAlignment READ horizontalAlignment WRITE setHorizontalAlignment NOTIFY horizontalAlignmentChanged REVISION(6, 7) FINAL)
379 Q_PROPERTY(VAlignment verticalAlignment READ verticalAlignment WRITE setVerticalAlignment NOTIFY verticalAlignmentChanged REVISION(6, 7) FINAL)
381 Q_PROPERTY(QQmlListProperty<QObject> data READ data OVERRIDE)
382 Q_CLASSINFO("DefaultProperty", "data")
383 QML_NAMED_ELEMENT(Shape)
384 QML_ADDED_IN_VERSION(1, 0)
385
386public:
387 enum RendererType {
388 UnknownRenderer,
389 GeometryRenderer,
390 NvprRenderer,
391 SoftwareRenderer,
392 CurveRenderer
393 };
394 Q_ENUM(RendererType)
396 enum Status {
397 Null,
398 Ready,
399 Processing
400 };
401 Q_ENUM(Status)
403 enum ContainsMode {
404 BoundingRectContains,
405 FillContains
406 };
407 Q_ENUM(ContainsMode)
409 enum FillMode {
410 NoResize,
411 PreserveAspectFit,
412 PreserveAspectCrop,
413 Stretch
414 };
415 Q_ENUM(FillMode)
417 enum HAlignment { AlignLeft = Qt::AlignLeft,
418 AlignRight = Qt::AlignRight,
419 AlignHCenter = Qt::AlignHCenter };
420 Q_ENUM(HAlignment)
421 enum VAlignment { AlignTop = Qt::AlignTop,
422 AlignBottom = Qt::AlignBottom,
423 AlignVCenter = Qt::AlignVCenter };
424 Q_ENUM(VAlignment)
425
426 QQuickShape(QQuickItem *parent = nullptr);
427 ~QQuickShape();
428
429 RendererType rendererType() const;
430
431 bool asynchronous() const;
432 void setAsynchronous(bool async);
434 Q_REVISION(6, 6) RendererType preferredRendererType() const;
435 Q_REVISION(6, 6) void setPreferredRendererType(RendererType preferredType);
437 Q_REVISION(6, 6) QRectF boundingRect() const override;
438
439 bool vendorExtensionsEnabled() const;
440 void setVendorExtensionsEnabled(bool enable);
441
442 Status status() const;
443
444 ContainsMode containsMode() const;
445 void setContainsMode(ContainsMode containsMode);
446
447 bool contains(const QPointF &point) const override;
449 QQmlListProperty<QObject> data();
451 Q_REVISION(6, 7) FillMode fillMode() const;
452 Q_REVISION(6, 7) void setFillMode(FillMode newFillMode);
454 Q_REVISION(6, 7) HAlignment horizontalAlignment() const;
455 Q_REVISION(6, 7) void setHorizontalAlignment(HAlignment newHorizontalAlignment);
457 Q_REVISION(6, 7) VAlignment verticalAlignment() const;
458 Q_REVISION(6, 7) void setVerticalAlignment(VAlignment newVerticalAlignment);
459
460protected:
461 QQuickShape(QQuickShapePrivate &dd, QQuickItem *parent);
462
463 QSGNode *updatePaintNode(QSGNode *node, UpdatePaintNodeData *) override;
464 void updatePolish() override;
465 void itemChange(ItemChange change, const ItemChangeData &data) override;
466 void componentComplete() override;
467 void classBegin() override;
468
469Q_SIGNALS:
470 void rendererChanged();
471 void asynchronousChanged();
472 void vendorExtensionsEnabledChanged();
473 void statusChanged();
474 Q_REVISION(6, 6) void preferredRendererTypeChanged();
475 Q_REVISION(6, 6) void boundingRectChanged();
476 Q_REVISION(1, 11) void containsModeChanged();
478 Q_REVISION(6, 7) void fillModeChanged();
479 Q_REVISION(6, 7) void horizontalAlignmentChanged();
480 Q_REVISION(6, 7) void verticalAlignmentChanged();
481
482private:
483 Q_DISABLE_COPY(QQuickShape)
484 Q_DECLARE_PRIVATE(QQuickShape)
485 Q_PRIVATE_SLOT(d_func(), void _q_shapePathChanged())
486};
487
488QT_END_NAMESPACE
489
490#endif // QQUICKSHAPE_P_H
QT_BEGIN_NAMESPACE Q_STATIC_LOGGING_CATEGORY(lcSynthesizedIterableAccess, "qt.iterable.synthesized", QtWarningMsg)
static void initResources()
static void vpe_clear(QQmlListProperty< QObject > *property)
static void vpe_append(QQmlListProperty< QObject > *property, QObject *obj)
Q_GHS_KEEP_REFERENCE(QQuickShapes_initializeModule)