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