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 QML_NAMED_ELEMENT(ShapePath)
238 QML_ADDED_IN_VERSION(1, 0)
239
240public:
241 enum FillRule {
242 OddEvenFill = Qt::OddEvenFill,
243 WindingFill = Qt::WindingFill
244 };
245 Q_ENUM(FillRule)
246
247 enum JoinStyle {
248 MiterJoin = Qt::MiterJoin,
249 BevelJoin = Qt::BevelJoin,
250 RoundJoin = Qt::RoundJoin
251 };
252 Q_ENUM(JoinStyle)
253
254 enum CapStyle {
255 FlatCap = Qt::FlatCap,
256 SquareCap = Qt::SquareCap,
257 RoundCap = Qt::RoundCap
258 };
259 Q_ENUM(CapStyle)
260
261 enum StrokeStyle {
262 SolidLine = Qt::SolidLine,
263 DashLine = Qt::DashLine
264 };
265 Q_ENUM(StrokeStyle)
266
267 enum PathHint {
268 PathLinear = 0x1,
269 PathQuadratic = 0x2,
270 PathConvex = 0x4,
271 PathFillOnRight = 0x8,
272 PathSolid = 0x10,
273 PathNonIntersecting = 0x20,
274 PathNonOverlappingControlPointTriangles = 0x40
275 };
276 Q_DECLARE_FLAGS(PathHints, PathHint)
277 Q_FLAG(PathHints)
278
279 QQuickShapePath(QObject *parent = nullptr);
280 ~QQuickShapePath();
281
282 QColor strokeColor() const;
283 void setStrokeColor(const QColor &color);
284
285 qreal strokeWidth() const;
286 void setStrokeWidth(qreal w);
287
288 QColor fillColor() const;
289 void setFillColor(const QColor &color);
290
291 FillRule fillRule() const;
292 void setFillRule(FillRule fillRule);
293
294 JoinStyle joinStyle() const;
295 void setJoinStyle(JoinStyle style);
296
297 int miterLimit() const;
298 void setMiterLimit(int limit);
299
300 CapStyle capStyle() const;
301 void setCapStyle(CapStyle style);
302
303 StrokeStyle strokeStyle() const;
304 void setStrokeStyle(StrokeStyle style);
305
306 qreal dashOffset() const;
307 void setDashOffset(qreal offset);
308
309 QList<qreal> dashPattern() const;
310 void setDashPattern(const QList<qreal> &array);
311
312 QQuickShapeGradient *fillGradient() const;
313 void setFillGradient(QQuickShapeGradient *gradient);
314 void resetFillGradient();
315
316 PathHints pathHints() const;
317 void setPathHints(PathHints newPathHints);
318
319 QMatrix4x4 fillTransform() const;
320 void setFillTransform(const QMatrix4x4 &matrix);
321
322 QQuickItem *fillItem() const;
323 void setFillItem(QQuickItem *newFillItem);
324
325 QQuickShapeTrim *trim();
326 bool hasTrim() const;
327
328 bool cosmeticStroke() const;
329 void setCosmeticStroke(bool c);
330
331Q_SIGNALS:
332 void shapePathChanged();
333 void strokeColorChanged();
334 void strokeWidthChanged();
335 void fillColorChanged();
336 void fillRuleChanged();
337 void joinStyleChanged();
338 void miterLimitChanged();
339 void capStyleChanged();
340 void strokeStyleChanged();
341 void dashOffsetChanged();
342 void dashPatternChanged();
343 Q_REVISION(6, 11) void fillGradientChanged();
344
345 Q_REVISION(6, 7) void pathHintsChanged();
346 Q_REVISION(6, 8) void fillTransformChanged();
347 Q_REVISION(6, 8) void fillItemChanged();
348 Q_REVISION(6, 11) void cosmeticStrokeChanged();
349
350private:
351 Q_DISABLE_COPY(QQuickShapePath)
352 Q_DECLARE_PRIVATE(QQuickShapePath)
353 Q_PRIVATE_SLOT(d_func(), void _q_fillGradientChanged())
354 Q_PRIVATE_SLOT(d_func(), void _q_fillItemDestroyed())
355};
356
357Q_DECLARE_OPERATORS_FOR_FLAGS(QQuickShapePath::PathHints)
358
359class Q_QUICKSHAPES_EXPORT QQuickShape : public QQuickItem
360{
361 Q_OBJECT
362 Q_PROPERTY(RendererType rendererType READ rendererType NOTIFY rendererChanged)
363 Q_PROPERTY(bool asynchronous READ asynchronous WRITE setAsynchronous NOTIFY asynchronousChanged)
364 Q_PROPERTY(bool vendorExtensionsEnabled READ vendorExtensionsEnabled WRITE setVendorExtensionsEnabled NOTIFY vendorExtensionsEnabledChanged)
365 Q_PROPERTY(RendererType preferredRendererType READ preferredRendererType
366 WRITE setPreferredRendererType NOTIFY preferredRendererTypeChanged REVISION(6, 6) FINAL)
367 Q_PROPERTY(Status status READ status NOTIFY statusChanged)
368 Q_PROPERTY(ContainsMode containsMode READ containsMode WRITE setContainsMode NOTIFY containsModeChanged REVISION(1, 11))
369 Q_PROPERTY(QRectF boundingRect READ boundingRect NOTIFY boundingRectChanged REVISION(6, 6) FINAL)
370 Q_PROPERTY(FillMode fillMode READ fillMode WRITE setFillMode NOTIFY fillModeChanged REVISION(6, 7) FINAL)
371 Q_PROPERTY(HAlignment horizontalAlignment READ horizontalAlignment WRITE setHorizontalAlignment NOTIFY horizontalAlignmentChanged REVISION(6, 7) FINAL)
372 Q_PROPERTY(VAlignment verticalAlignment READ verticalAlignment WRITE setVerticalAlignment NOTIFY verticalAlignmentChanged REVISION(6, 7) FINAL)
374 Q_PROPERTY(QQmlListProperty<QObject> data READ data OVERRIDE)
375 Q_CLASSINFO("DefaultProperty", "data")
376 QML_NAMED_ELEMENT(Shape)
377 QML_ADDED_IN_VERSION(1, 0)
378
379public:
380 enum RendererType {
381 UnknownRenderer,
382 GeometryRenderer,
383 NvprRenderer,
384 SoftwareRenderer,
385 CurveRenderer
386 };
387 Q_ENUM(RendererType)
389 enum Status {
390 Null,
391 Ready,
392 Processing
393 };
394 Q_ENUM(Status)
396 enum ContainsMode {
397 BoundingRectContains,
398 FillContains
399 };
400 Q_ENUM(ContainsMode)
402 enum FillMode {
403 NoResize,
404 PreserveAspectFit,
405 PreserveAspectCrop,
406 Stretch
407 };
408 Q_ENUM(FillMode)
410 enum HAlignment { AlignLeft = Qt::AlignLeft,
411 AlignRight = Qt::AlignRight,
412 AlignHCenter = Qt::AlignHCenter };
413 Q_ENUM(HAlignment)
414 enum VAlignment { AlignTop = Qt::AlignTop,
415 AlignBottom = Qt::AlignBottom,
416 AlignVCenter = Qt::AlignVCenter };
417 Q_ENUM(VAlignment)
418
419 QQuickShape(QQuickItem *parent = nullptr);
420 ~QQuickShape();
421
422 RendererType rendererType() const;
423
424 bool asynchronous() const;
425 void setAsynchronous(bool async);
427 Q_REVISION(6, 6) RendererType preferredRendererType() const;
428 Q_REVISION(6, 6) void setPreferredRendererType(RendererType preferredType);
430 Q_REVISION(6, 6) QRectF boundingRect() const override;
431
432 bool vendorExtensionsEnabled() const;
433 void setVendorExtensionsEnabled(bool enable);
434
435 Status status() const;
436
437 ContainsMode containsMode() const;
438 void setContainsMode(ContainsMode containsMode);
439
440 bool contains(const QPointF &point) const override;
442 QQmlListProperty<QObject> data();
444 Q_REVISION(6, 7) FillMode fillMode() const;
445 Q_REVISION(6, 7) void setFillMode(FillMode newFillMode);
447 Q_REVISION(6, 7) HAlignment horizontalAlignment() const;
448 Q_REVISION(6, 7) void setHorizontalAlignment(HAlignment newHorizontalAlignment);
450 Q_REVISION(6, 7) VAlignment verticalAlignment() const;
451 Q_REVISION(6, 7) void setVerticalAlignment(VAlignment newVerticalAlignment);
452
453protected:
454 QQuickShape(QQuickShapePrivate &dd, QQuickItem *parent);
455
456 QSGNode *updatePaintNode(QSGNode *node, UpdatePaintNodeData *) override;
457 void updatePolish() override;
458 void itemChange(ItemChange change, const ItemChangeData &data) override;
459 void componentComplete() override;
460 void classBegin() override;
461
462Q_SIGNALS:
463 void rendererChanged();
464 void asynchronousChanged();
465 void vendorExtensionsEnabledChanged();
466 void statusChanged();
467 Q_REVISION(6, 6) void preferredRendererTypeChanged();
468 Q_REVISION(6, 6) void boundingRectChanged();
469 Q_REVISION(1, 11) void containsModeChanged();
471 Q_REVISION(6, 7) void fillModeChanged();
472 Q_REVISION(6, 7) void horizontalAlignmentChanged();
473 Q_REVISION(6, 7) void verticalAlignmentChanged();
474
475private:
476 Q_DISABLE_COPY(QQuickShape)
477 Q_DECLARE_PRIVATE(QQuickShape)
478 Q_PRIVATE_SLOT(d_func(), void _q_shapePathChanged())
479};
480
481QT_END_NAMESPACE
482
483#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)