From 34b202cf744bf7a5d076634ae2f64921ed3bc7e8 Mon Sep 17 00:00:00 2001 From: Mika Salmela Date: Tue, 14 Nov 2017 18:22:19 +0200 Subject: Render custom items at insertion order MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Changes the rendering order of custom items to insertion order. Task-number: QTBUG-64312 Change-Id: I1ce865a3492c145ffa269cd12baa15ffff8d6a59 Reviewed-by: Andy Shaw Reviewed-by: Tomi Korpipää --- src/datavisualization/engine/abstract3drenderer.cpp | 6 +++++- src/datavisualization/engine/abstract3drenderer_p.h | 1 + src/datavisualization/engine/qabstract3dgraph.cpp | 3 +++ 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/datavisualization/engine/abstract3drenderer.cpp b/src/datavisualization/engine/abstract3drenderer.cpp index dd3212ac..417be0e8 100644 --- a/src/datavisualization/engine/abstract3drenderer.cpp +++ b/src/datavisualization/engine/abstract3drenderer.cpp @@ -755,6 +755,9 @@ void Abstract3DRenderer::updateCustomData(const QList &customIt delete renderItem; } } + + m_customItemDrawOrder.clear(); + m_customItemDrawOrder = QList(customItems); } void Abstract3DRenderer::updateCustomItems() @@ -1436,7 +1439,8 @@ void Abstract3DRenderer::drawCustomItems(RenderingState state, bool volumeDetected = false; int loopCount = 0; while (loopCount < 2) { - foreach (CustomRenderItem *item, m_customRenderCache) { + for (QCustom3DItem *customItem : qAsConst(m_customItemDrawOrder)) { + CustomRenderItem *item = m_customRenderCache.value(customItem); // Check that the render item is visible, and skip drawing if not // Also check if reflected item is on the "wrong" side, and skip drawing if it is if (!item->isVisible() || ((m_reflectionEnabled && reflection < 0.0f) diff --git a/src/datavisualization/engine/abstract3drenderer_p.h b/src/datavisualization/engine/abstract3drenderer_p.h index bf64bc6d..c312b771 100644 --- a/src/datavisualization/engine/abstract3drenderer_p.h +++ b/src/datavisualization/engine/abstract3drenderer_p.h @@ -267,6 +267,7 @@ protected: QPoint m_inputPosition; QHash m_renderCacheList; CustomRenderItemArray m_customRenderCache; + QList m_customItemDrawOrder; QRect m_primarySubViewport; QRect m_secondarySubViewport; float m_devicePixelRatio; diff --git a/src/datavisualization/engine/qabstract3dgraph.cpp b/src/datavisualization/engine/qabstract3dgraph.cpp index cb09082e..284ab408 100644 --- a/src/datavisualization/engine/qabstract3dgraph.cpp +++ b/src/datavisualization/engine/qabstract3dgraph.cpp @@ -442,6 +442,9 @@ void QAbstract3DGraph::clearSelection() * if trying to add a null item, and the index of the item if trying to add an * already added item. * + * Items are rendered in the order they have been inserted. The rendering order needs to + * be taken into account when having solid and transparent items. + * * \sa removeCustomItems(), removeCustomItem(), removeCustomItemAt(), customItems() * * \since QtDataVisualization 1.1 -- cgit v1.2.3