aboutsummaryrefslogtreecommitdiffstats
path: root/src/quick
diff options
context:
space:
mode:
authorEirik Aavitsland <eirik.aavitsland@qt.io>2024-03-19 10:57:57 +0100
committerEirik Aavitsland <eirik.aavitsland@qt.io>2024-03-22 18:11:40 +0100
commit8bbacda0c4915c103847e536e57cf67ae1b049a0 (patch)
treec6d9332b211f9f0c9dfabb0e59f4bd51dc09091e /src/quick
parent8a5296453ebcbde6ea570b3f05b9b4adfbfd2855 (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.cpp24
-rw-r--r--src/quick/scenegraph/util/qquadpath_p.h16
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;
};