aboutsummaryrefslogtreecommitdiffstats
path: root/src/quick/scenegraph/qsgcurvestrokenode_p.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/quick/scenegraph/qsgcurvestrokenode_p.h')
-rw-r--r--src/quick/scenegraph/qsgcurvestrokenode_p.h116
1 files changed, 116 insertions, 0 deletions
diff --git a/src/quick/scenegraph/qsgcurvestrokenode_p.h b/src/quick/scenegraph/qsgcurvestrokenode_p.h
new file mode 100644
index 0000000000..079414bc16
--- /dev/null
+++ b/src/quick/scenegraph/qsgcurvestrokenode_p.h
@@ -0,0 +1,116 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+#ifndef QSGCURVESTROKENODE_P_H
+#define QSGCURVESTROKENODE_P_H
+
+#include <QtQuick/qtquickexports.h>
+#include <QtQuick/qsgnode.h>
+
+#include "qsgcurveabstractnode_p.h"
+#include "qsgcurvestrokenode_p_p.h"
+
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists for the convenience
+// of a number of Qt sources files. This header file may change from
+// version to version without notice, or even be removed.
+//
+// We mean it.
+//
+
+QT_BEGIN_NAMESPACE
+
+class Q_QUICK_EXPORT QSGCurveStrokeNode : public QSGCurveAbstractNode
+{
+public:
+ QSGCurveStrokeNode();
+
+ void setColor(QColor col) override
+ {
+ m_color = col;
+ }
+
+ QColor color() const
+ {
+ return m_color;
+ }
+
+ void setStrokeWidth(float width)
+ {
+ m_strokeWidth = width;
+ }
+
+ float strokeWidth() const
+ {
+ return m_strokeWidth;
+ }
+
+ void appendTriangle(const std::array<QVector2D, 3> &v, // triangle vertices
+ const std::array<QVector2D, 3> &p, // curve points
+ const std::array<QVector2D, 3> &n); // vertex normals
+ void appendTriangle(const std::array<QVector2D, 3> &v, // triangle vertices
+ const std::array<QVector2D, 2> &p, // line points
+ const std::array<QVector2D, 3> &n); // vertex normals
+
+ void cookGeometry() override;
+
+ static const QSGGeometry::AttributeSet &attributes();
+
+ QVector<quint32> uncookedIndexes() const
+ {
+ return m_uncookedIndexes;
+ }
+
+ float debug() const
+ {
+ return m_debug;
+ }
+
+ void setDebug(float newDebug)
+ {
+ m_debug = newDebug;
+ }
+
+ void setLocalScale(float scale)
+ {
+ m_localScale = scale;
+ }
+
+ float localScale() const
+ {
+ return m_localScale;
+ }
+
+private:
+
+ struct StrokeVertex
+ {
+ float x, y;
+ float ax, ay;
+ float bx, by;
+ float cx, cy;
+ float nx, ny; //normal vector: direction to move vertext to account for AA
+ };
+
+ void updateMaterial();
+
+ static std::array<QVector2D, 3> curveABC(const std::array<QVector2D, 3> &p);
+
+ QColor m_color;
+ float m_strokeWidth = 0.0f;
+ float m_debug = 0.0f;
+ float m_localScale = 1.0f;
+
+protected:
+ QScopedPointer<QSGCurveStrokeMaterial> m_material;
+
+ QVector<StrokeVertex> m_uncookedVertexes;
+ QVector<quint32> m_uncookedIndexes;
+};
+
+QT_END_NAMESPACE
+
+#endif // QSGCURVESTROKENODE_P_H