5#ifndef QQUICKSHAPE_P_P_H
6#define QQUICKSHAPE_P_P_H
19#include <QtQuickShapes/private/qquickshapesglobal_p.h>
20#include <QtQuickShapes/private/qquickshape_p.h>
21#include <private/qquickitem_p.h>
22#include <private/qsgtransform_p.h>
23#include <QPainterPath>
26#include <QElapsedTimer>
28# include <private/qopenglcontext_p.h>
41 Q_DECLARE_FLAGS(Flags,
Flag)
47 virtual void beginSync(
int totalCount,
bool *countChanged) = 0;
51 virtual void setPath(
int index,
const QQuickPath *path);
52 virtual void setPath(
int index,
const QPainterPath &path, QQuickShapePath::PathHints pathHints = {}) = 0;
57 virtual void setJoinStyle(
int index, QQuickShapePath::JoinStyle joinStyle,
int miterLimit) = 0;
58 virtual void setCapStyle(
int index, QQuickShapePath::CapStyle capStyle) = 0;
59 virtual void setStrokeStyle(
int index, QQuickShapePath::StrokeStyle strokeStyle,
60 qreal dashOffset,
const QList<qreal> &dashPattern) = 0;
63 virtual void setFillRule(
int index, QQuickShapePath::FillRule fillRule) = 0;
80 QQuickShapePath::PathHints hints;
81 QPainterPath newPath = path ? path->path() : QPainterPath();
82 if (
const auto *shapePath = qobject_cast<
const QQuickShapePath *>(path)) {
83 hints = shapePath->pathHints();
84 if (shapePath->hasTrim()) {
85 const QQuickShapeTrim *trim =
const_cast<QQuickShapePath *>(shapePath)->trim();
86 newPath = path->path().trimmed(trim->start(), trim->end(), trim->offset());
89 setPath(index, newPath, hints);
117 Q_DECLARE_PUBLIC(QQuickShapePath)
122 DirtyStrokeColor = 0x02,
123 DirtyStrokeWidth = 0x04,
124 DirtyFillColor = 0x08,
125 DirtyFillRule = 0x10,
128 DirtyFillGradient = 0x80,
129 DirtyFillTransform = 0x100,
130 DirtyFillItem = 0x200,
132 DirtyStrokeGradient = 0x800,
133 DirtyVisible = 0x1000,
138 QQuickShapePathPrivate();
140 void _q_pathChanged();
141 void _q_fillGradientChanged();
142 void _q_strokeGradientChanged();
143 void _q_fillItemDestroyed();
145 void handleSceneChange();
147 void writeToDebugStream(QDebug &debug)
const override;
149 static QQuickShapePathPrivate *get(QQuickShapePath *p) {
return p->d_func(); }
152 QQuickShapeStrokeFillParams sfp;
153 QQuickShapePath::PathHints pathHints;
158 Q_DECLARE_PUBLIC(QQuickShape)
161 QQuickShapePrivate();
162 ~QQuickShapePrivate();
166 QQuickShape::RendererType selectRendererType();
167 void createRenderer();
168 QSGNode *createNode();
171 void _q_shapePathChanged();
172 void setStatus(QQuickShape::Status newStatus);
173 void handleSceneChange(QQuickWindow *w);
175 static QQuickShapePrivate *get(QQuickShape *item) {
return item->d_func(); }
177 static void asyncShapeReady(
void *data);
179 qreal getImplicitWidth()
const override;
180 qreal getImplicitHeight()
const override;
183 QList<QQuickShapePath *> sp;
184 QElapsedTimer syncTimer;
185 QQuickAbstractPathRenderer *renderer =
nullptr;
186 int syncTimingTotalDirty = 0;
187 int syncTimeCounter = 0;
188 QQuickShape::Status status = QQuickShape::Null;
189 QQuickShape::RendererType rendererType = QQuickShape::UnknownRenderer;
190 QQuickShape::RendererType preferredType = QQuickShape::UnknownRenderer;
191 QQuickShape::ContainsMode containsMode = QQuickShape::BoundingRectContains;
192 QQuickShape::FillMode fillMode = QQuickShape::NoResize;
193 QQuickShape::HAlignment horizontalAlignment = QQuickShape::AlignLeft;
194 QQuickShape::VAlignment verticalAlignment = QQuickShape::AlignTop;
196 bool spChanged =
false;
197 bool rendererChanged =
false;
199 bool enableVendorExts =
false;
200 bool syncTimingActive =
false;
201 qreal triangulationScale = 1.0;
virtual void setVisible(int index, bool visible)=0
virtual void setFillTextureProvider(int index, QQuickItem *textureProviderItem)=0
virtual void beginSync(int totalCount, bool *countChanged)=0
virtual void setStrokeColor(int index, const QColor &color)=0
virtual void setPath(int index, const QPainterPath &path, QQuickShapePath::PathHints pathHints={})=0
virtual void setAsyncCallback(void(*)(void *), void *)
virtual Flags flags() const
virtual void setCapStyle(int index, QQuickShapePath::CapStyle capStyle)=0
virtual void setStrokeStyle(int index, QQuickShapePath::StrokeStyle strokeStyle, qreal dashOffset, const QList< qreal > &dashPattern)=0
virtual void setFillGradient(int index, QQuickShapeGradient *gradient)=0
virtual ~QQuickAbstractPathRenderer()
virtual void setFillColor(int index, const QColor &color)=0
virtual void setCosmeticStroke(int index, bool c)=0
virtual void setPath(int index, const QQuickPath *path)
virtual void setTriangulationScale(int, qreal)
virtual void setFillRule(int index, QQuickShapePath::FillRule fillRule)=0
virtual void setStrokeWidth(int index, qreal w)=0
virtual void setFillTransform(int index, const QSGTransform &transform)=0
virtual void endSync(bool async)=0
virtual void updateNode()=0
virtual void handleSceneChange(QQuickWindow *window)=0
virtual void setStrokeGradient(int index, QQuickShapeGradient *gradient)=0
virtual void setJoinStyle(int index, QQuickShapePath::JoinStyle joinStyle, int miterLimit)=0
Combined button and popup list for selecting options.
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)
QList< qreal > dashPattern
QSGTransform fillTransform
QQuickShapeStrokeFillParams()
QQuickShapeGradient * strokeGradient
QQuickShapeGradient * fillGradient