From e1c0cace95d6ed19dff37a524c7f4b2288d258d7 Mon Sep 17 00:00:00 2001 From: Berthold Stoeger Date: Wed, 13 Jan 2021 16:19:27 +0100 Subject: statistics: add notion of Z-value to chart items The chart items were drawn in order of creation. To control this, add a notion of Z-value. In contrast to QGraphicsScene, make this a small integer value. To controll order of drawing, a plain QSGNode is created for every possible Z-Value and items are added to these nodes. Thus, items are rendered by Z-value and if the Z-value is equal by order of creation. Likewise split the list of chart-items into Z-values, so that items can be quickly unregistered: The items that will be removed individually will usuall be part of Z-levels with only few items (e.g. legend, infobox). Z-levels with many items (notably the series) will always be fully rebuilt. Signed-off-by: Berthold Stoeger --- stats/chartitem.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) (limited to 'stats/chartitem.cpp') diff --git a/stats/chartitem.cpp b/stats/chartitem.cpp index c0fc50841..68e7fa371 100644 --- a/stats/chartitem.cpp +++ b/stats/chartitem.cpp @@ -12,8 +12,8 @@ static int round_up(double f) return static_cast(ceil(f)); } -ChartItem::ChartItem(StatsView &v) : - dirty(false), view(v), positionDirty(false), textureDirty(false) +ChartItem::ChartItem(StatsView &v, ChartZValue z) : + dirty(false), zValue(z), view(v), positionDirty(false), textureDirty(false) { } @@ -46,7 +46,7 @@ void ChartItem::render() return; if (!node) { node.reset(view.w()->createImageNode()); - view.addQSGNode(node.get(), 0); + view.addQSGNode(node.get(), zValue); } if (!img) { resize(QSizeF(1,1)); @@ -85,7 +85,8 @@ QRectF ChartItem::getRect() const return rect; } -ChartRectItem::ChartRectItem(StatsView &v, const QPen &pen, const QBrush &brush, double radius) : ChartItem(v), +ChartRectItem::ChartRectItem(StatsView &v, ChartZValue z, + const QPen &pen, const QBrush &brush, double radius) : ChartItem(v, z), pen(pen), brush(brush), radius(radius) { } -- cgit v1.2.3-70-g09d2