34 void setColor(QColor col) override
37 markDirty(DirtyMaterial);
45 void setCosmeticStroke(
bool c)
48 markDirty(DirtyMaterial);
51 void setStrokeWidth(
float width)
53 m_strokeWidth = width;
54 markDirty(DirtyMaterial);
57 QGradient::Type gradientType()
const
59 return m_gradientType;
62 void setGradientType(QGradient::Type type)
64 m_gradientType = type;
65 markDirty(DirtyMaterial);
68 const QSGGradientCache::GradientDesc *strokeGradient()
const
70 return &m_strokeGradient;
73 void setStrokeGradient(
const QSGGradientCache::GradientDesc &strokeGradient)
75 m_strokeGradient = strokeGradient;
76 markDirty(DirtyMaterial);
79 float strokeWidth()
const
83 return (m_cosmetic ? -1.0 : 1.0) * qAbs(m_strokeWidth);
86 enum class TriangleFlag {
90 Q_DECLARE_FLAGS(TriangleFlags, TriangleFlag)
92 static constexpr std::array<
float, 3> defaultExtrusions() {
return {1.0f, 1.0f, 1.0f}; }
94 void appendTriangle(
const std::array<QVector2D, 3> &vtx,
95 const std::array<QVector2D, 3> &ctl,
96 const std::array<QVector2D, 3> &normal,
97 const std::array<
float, 3> &extrusions = defaultExtrusions());
98 void appendTriangle(
const std::array<QVector2D, 3> &vtx,
99 const std::array<QVector2D, 2> &ctl,
100 const std::array<QVector2D, 3> &normal,
101 const std::array<
float, 3> &extrusions = defaultExtrusions());
103 void cookGeometry() override;
105 static const QSGGeometry::AttributeSet &attributes();
107 static bool expandingStrokeEnabled();
109 QList<quint32> uncookedIndexes()
const
111 return m_uncookedIndexes;
119 void setDebug(
float newDebug)
124 void setLocalScale(
float scale)
126 m_localScale = scale;
129 float localScale()
const
134 bool useStandardDerivatives()
const
136 return m_useStandardDerivatives;
139 void setUseStandardDerivatives(
bool useStandardDerivatives) override
141 m_useStandardDerivatives = useStandardDerivatives;
156 void updateMaterial();
158 static std::array<QVector2D, 3> curveABC(
const std::array<QVector2D, 3> &p);
160 static const bool envStrokeExpanding;
162 ushort m_cosmetic =
false;
163 float m_strokeWidth = 0.0f;
164 float m_debug = 0.0f;
165 float m_localScale = 1.0f;
166 bool m_useStandardDerivatives =
false;
167 QSGGradientCache::GradientDesc m_strokeGradient;
168 QGradient::Type m_gradientType = QGradient::NoGradient;
171 QScopedPointer<QSGCurveStrokeMaterial> m_material;
173 QList<StrokeVertex> m_uncookedVertexes;
174 QList<quint32> m_uncookedIndexes;