summaryrefslogtreecommitdiffstats
path: root/src/graphs2d/qsgrenderer
diff options
context:
space:
mode:
authorJere Tuliniemi <[email protected]>2025-05-27 10:38:28 +0300
committerJere Tuliniemi <[email protected]>2025-05-29 01:13:59 +0300
commit1841af2b5b057929f5b8425e59c75f3b8af19b5a (patch)
treeb4df91760cd59bffa15d937c8b44bcf0a72b0204 /src/graphs2d/qsgrenderer
parent756b296cf4cd1520923763c187566a39c756f9b7 (diff)
Add support for series draw orderHEADdev
Adds drawOrder property to each series so that the user can change the order in which the series list is drawn. Task-number: QTBUG-124929 Change-Id: If50aa81268dce11a09687013afe9ab0e5a4749c8 Reviewed-by: Kaj Grönholm <[email protected]>
Diffstat (limited to 'src/graphs2d/qsgrenderer')
-rw-r--r--src/graphs2d/qsgrenderer/arearenderer.cpp10
-rw-r--r--src/graphs2d/qsgrenderer/arearenderer_p.h3
-rw-r--r--src/graphs2d/qsgrenderer/barsrenderer.cpp2
-rw-r--r--src/graphs2d/qsgrenderer/pointrenderer.cpp17
-rw-r--r--src/graphs2d/qsgrenderer/pointrenderer_p.h4
5 files changed, 34 insertions, 2 deletions
diff --git a/src/graphs2d/qsgrenderer/arearenderer.cpp b/src/graphs2d/qsgrenderer/arearenderer.cpp
index 19ffe7e5..a35e64e5 100644
--- a/src/graphs2d/qsgrenderer/arearenderer.cpp
+++ b/src/graphs2d/qsgrenderer/arearenderer.cpp
@@ -34,6 +34,11 @@ AreaRenderer::~AreaRenderer()
qDeleteAll(m_groups);
}
+void AreaRenderer::resetShapePathCount()
+{
+ m_currentShapePathIndex = 0;
+}
+
void AreaRenderer::calculateRenderCoordinates(qreal origX,
qreal origY,
qreal *renderX,
@@ -86,6 +91,11 @@ void AreaRenderer::handlePolish(QAreaSeries *series)
auto group = m_groups.value(series);
+ auto data = m_shape.data();
+ group->shapePath = qobject_cast<QQuickShapePath *>(data.at(&data, m_currentShapePathIndex));
+
+ m_currentShapePathIndex++;
+
if (upper->points().count() < 2 || (lower && lower->points().count() < 2)) {
auto painterPath = group->painterPath;
painterPath.clear();
diff --git a/src/graphs2d/qsgrenderer/arearenderer_p.h b/src/graphs2d/qsgrenderer/arearenderer_p.h
index ce5dd494..5d299e78 100644
--- a/src/graphs2d/qsgrenderer/arearenderer_p.h
+++ b/src/graphs2d/qsgrenderer/arearenderer_p.h
@@ -33,6 +33,8 @@ public:
AreaRenderer(QGraphsView *graph, bool clipPlotArea);
~AreaRenderer() override;
+ void resetShapePathCount();
+
void handlePolish(QAreaSeries *series);
void afterPolish(QList<QAbstractSeries *> &cleanupSeries);
void afterUpdate(QList<QAbstractSeries *> &cleanupSeries);
@@ -59,6 +61,7 @@ private:
QGraphsView *m_graph = nullptr;
QQuickShape m_shape;
QMap<QAreaSeries *, PointGroup *> m_groups;
+ qsizetype m_currentShapePathIndex = 0;
// Render area variables
qreal m_maxVertical = 0;
diff --git a/src/graphs2d/qsgrenderer/barsrenderer.cpp b/src/graphs2d/qsgrenderer/barsrenderer.cpp
index dd86b360..76c00af7 100644
--- a/src/graphs2d/qsgrenderer/barsrenderer.cpp
+++ b/src/graphs2d/qsgrenderer/barsrenderer.cpp
@@ -170,6 +170,7 @@ void BarsRenderer::updateComponents(QBarSeries *series)
auto &barItem = barItems[barIndex];
barItem->setX(d.rect.x());
barItem->setY(d.rect.y());
+ barItem->setZ(series->drawOrder());
barItem->setWidth(d.rect.width());
barItem->setHeight(d.rect.height());
barItem->setVisible(series->isVisible());
@@ -194,6 +195,7 @@ void BarsRenderer::updateComponents(QBarSeries *series)
if (barItem) {
barItem->setX(d.rect.x());
barItem->setY(d.rect.y());
+ barItem->setZ(series->drawOrder());
barItem->setWidth(d.rect.width());
barItem->setHeight(d.rect.height());
barItem->setVisible(series->isVisible());
diff --git a/src/graphs2d/qsgrenderer/pointrenderer.cpp b/src/graphs2d/qsgrenderer/pointrenderer.cpp
index 208b84a2..54bdd4a7 100644
--- a/src/graphs2d/qsgrenderer/pointrenderer.cpp
+++ b/src/graphs2d/qsgrenderer/pointrenderer.cpp
@@ -72,6 +72,11 @@ PointRenderer::~PointRenderer()
qDeleteAll(m_groups);
}
+void PointRenderer::resetShapePathCount()
+{
+ m_currentShapePathIndex = 0;
+}
+
qreal PointRenderer::defaultSize(QXYSeries *series)
{
qreal size = 16.0;
@@ -513,12 +518,19 @@ void PointRenderer::handlePolish(QXYSeries *series)
group->shapePath = new QQuickShapePath(&m_shape);
group->shapePath->setAsynchronous(true);
auto data = m_shape.data();
- data.append(&data, m_groups.value(series)->shapePath);
+ data.append(&data, group->shapePath);
}
}
auto group = m_groups.value(series);
+ if (series->type() != QAbstractSeries::SeriesType::Scatter) {
+ auto data = m_shape.data();
+ group->shapePath = qobject_cast<QQuickShapePath *>(data.at(&data, m_currentShapePathIndex));
+
+ m_currentShapePathIndex++;
+ }
+
qsizetype pointCount = series->points().size();
if ((series->type() == QAbstractSeries::SeriesType::Scatter) && !series->pointDelegate())
@@ -597,6 +609,9 @@ void PointRenderer::handlePolish(QXYSeries *series)
group->markers.clear();
}
+ for (auto &&marker : group->markers)
+ marker->setZ(group->series->drawOrder());
+
if (group->colorIndex < 0) {
group->colorIndex = m_graph->graphSeriesCount();
m_graph->setGraphSeriesCount(group->colorIndex + 1);
diff --git a/src/graphs2d/qsgrenderer/pointrenderer_p.h b/src/graphs2d/qsgrenderer/pointrenderer_p.h
index 34cdbad9..288c007d 100644
--- a/src/graphs2d/qsgrenderer/pointrenderer_p.h
+++ b/src/graphs2d/qsgrenderer/pointrenderer_p.h
@@ -39,6 +39,8 @@ public:
PointRenderer(QGraphsView *graph, bool clipPlotArea);
~PointRenderer() override;
+ void resetShapePathCount();
+
void handlePolish(QXYSeries *series);
void afterPolish(QList<QAbstractSeries *> &cleanupSeries);
void updateSeries(QXYSeries *series);
@@ -67,7 +69,7 @@ private:
QGraphsView *m_graph = nullptr;
QQuickShape m_shape;
QMap<QXYSeries *, PointGroup *> m_groups;
- qsizetype m_currentColorIndex = 0;
+ qsizetype m_currentShapePathIndex = 0;
// Point drag variables
QPoint m_previousDelta;