diff options
author | Eirik Aavitsland <eirik.aavitsland@qt.io> | 2024-03-19 10:57:57 +0100 |
---|---|---|
committer | Eirik Aavitsland <eirik.aavitsland@qt.io> | 2024-03-22 18:11:40 +0100 |
commit | 8bbacda0c4915c103847e536e57cf67ae1b049a0 (patch) | |
tree | c6d9332b211f9f0c9dfabb0e59f4bd51dc09091e /src/quick | |
parent | 8a5296453ebcbde6ea570b3f05b9b4adfbfd2855 (diff) |
Curverenderer: Clean up and optimize QQuadPath utility class
Reorganize the data members, and use just a bool instead of a 32bit
enum to store the fill rule. This reduces the memory footprint from 9
to 8 64bit blocks.
Also add the m_ prefix to the two member variables that lacked it.
Pick-to: 6.7
Change-Id: I48d06a3a2ed9e6ab73667aa9f1d874fded74b12b
Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
Diffstat (limited to 'src/quick')
-rw-r--r-- | src/quick/scenegraph/util/qquadpath.cpp | 24 | ||||
-rw-r--r-- | src/quick/scenegraph/util/qquadpath_p.h | 16 |
2 files changed, 20 insertions, 20 deletions
diff --git a/src/quick/scenegraph/util/qquadpath.cpp b/src/quick/scenegraph/util/qquadpath.cpp index 0bc12dfa7c..09286edb78 100644 --- a/src/quick/scenegraph/util/qquadpath.cpp +++ b/src/quick/scenegraph/util/qquadpath.cpp @@ -453,26 +453,26 @@ QQuadPath::Element::FillSide QQuadPath::fillSideOf(int elementIdx, float element void QQuadPath::addElement(const QVector2D &control, const QVector2D &endPoint, bool isLine) { - if (qFuzzyCompare(currentPoint, endPoint)) + if (qFuzzyCompare(m_currentPoint, endPoint)) return; // 0 length element, skip - isLine = isLine || isPointNearLine(control, currentPoint, endPoint); // Turn flat quad into line + isLine = isLine || isPointNearLine(control, m_currentPoint, endPoint); // Turn flat quad into line m_elements.resize(m_elements.size() + 1); Element &elem = m_elements.last(); - elem.sp = currentPoint; - elem.cp = isLine ? (0.5f * (currentPoint + endPoint)) : control; + elem.sp = m_currentPoint; + elem.cp = isLine ? (0.5f * (m_currentPoint + endPoint)) : control; elem.ep = endPoint; elem.m_isLine = isLine; - elem.m_isSubpathStart = subPathToStart; - subPathToStart = false; - currentPoint = endPoint; + elem.m_isSubpathStart = m_subPathToStart; + m_subPathToStart = false; + m_currentPoint = endPoint; } void QQuadPath::addElement(const Element &e) { - subPathToStart = false; - currentPoint = e.endPoint(); + m_subPathToStart = false; + m_currentPoint = e.endPoint(); m_elements.append(e); } @@ -657,7 +657,7 @@ QQuadPath QQuadPath::subPathsClosed(bool *didClose) const Q_ASSERT(m_childElements.isEmpty()); bool closed = false; QQuadPath res = *this; - res.subPathToStart = false; + res.m_subPathToStart = false; res.m_elements = {}; res.m_elements.reserve(elementCount()); int subStart = -1; @@ -666,7 +666,7 @@ QQuadPath QQuadPath::subPathsClosed(bool *didClose) const const auto &element = m_elements.at(i); if (element.m_isSubpathStart) { if (subStart >= 0 && m_elements[i - 1].ep != m_elements[subStart].sp) { - res.currentPoint = m_elements[i - 1].ep; + res.m_currentPoint = m_elements[i - 1].ep; res.lineTo(m_elements[subStart].sp); closed = true; auto &endElement = res.m_elements.last(); @@ -685,7 +685,7 @@ QQuadPath QQuadPath::subPathsClosed(bool *didClose) const } if (subStart >= 0 && m_elements.last().ep != m_elements[subStart].sp) { - res.currentPoint = m_elements.last().ep; + res.m_currentPoint = m_elements.last().ep; res.lineTo(m_elements[subStart].sp); closed = true; } diff --git a/src/quick/scenegraph/util/qquadpath_p.h b/src/quick/scenegraph/util/qquadpath_p.h index aecdf9d069..6037c6e736 100644 --- a/src/quick/scenegraph/util/qquadpath_p.h +++ b/src/quick/scenegraph/util/qquadpath_p.h @@ -187,8 +187,8 @@ public: void moveTo(const QVector2D &to) { - subPathToStart = true; - currentPoint = to; + m_subPathToStart = true; + m_currentPoint = to; } void lineTo(const QVector2D &to) @@ -218,8 +218,8 @@ public: QRectF controlPointRect() const; - Qt::FillRule fillRule() const { return m_fillRule; } - void setFillRule(Qt::FillRule rule) { m_fillRule = rule; } + Qt::FillRule fillRule() const { return m_windingFill ? Qt::WindingFill : Qt::OddEvenFill; } + void setFillRule(Qt::FillRule rule) { m_windingFill = (rule == Qt::WindingFill); } void reserve(int size) { m_elements.reserve(size); } int elementCount() const { return m_elements.size(); } @@ -319,12 +319,12 @@ private: friend Q_QUICK_EXPORT QDebug operator<<(QDebug, const QQuadPath &); - PathHints m_hints; - bool subPathToStart = true; - Qt::FillRule m_fillRule = Qt::OddEvenFill; - QVector2D currentPoint; QList<Element> m_elements; QList<Element> m_childElements; + QVector2D m_currentPoint; + bool m_subPathToStart = true; + bool m_windingFill = false; + PathHints m_hints; friend class QSGCurveProcessor; }; |