diff options
author | Miikka Heikkinen <miikka.heikkinen@digia.com> | 2014-01-10 09:41:52 +0200 |
---|---|---|
committer | Miikka Heikkinen <miikka.heikkinen@digia.com> | 2014-01-10 09:48:54 +0200 |
commit | 9a8ef3afd23bfe1ab7f4669a470b38b7927a8b0f (patch) | |
tree | cdf8108e39473d54f50184921bae067c6fe1130b | |
parent | b0fa490532581411a63796c9fed5d27e157ba5e8 (diff) |
Cache scatter series item size
Task-number: QTRD-2689
Change-Id: I8cd73a74f1ede49ce35c742712fbf3a5357f152e
Reviewed-by: Pasi Keränen <pasi.keranen@digia.com>
-rw-r--r-- | src/datavisualization/engine/scatter3drenderer.cpp | 10 | ||||
-rw-r--r-- | src/datavisualization/engine/scatter3drenderer_p.h | 1 | ||||
-rw-r--r-- | tests/scattertest/scatterchart.cpp | 3 |
3 files changed, 10 insertions, 4 deletions
diff --git a/src/datavisualization/engine/scatter3drenderer.cpp b/src/datavisualization/engine/scatter3drenderer.cpp index 85863519..6a08c934 100644 --- a/src/datavisualization/engine/scatter3drenderer.cpp +++ b/src/datavisualization/engine/scatter3drenderer.cpp @@ -160,10 +160,15 @@ void Scatter3DRenderer::updateSeries(const QList<QAbstract3DSeries *> &seriesLis float maxItemSize = 0.0f; float itemSize = 0.0f; + if (m_cachedItemSize.size() != seriesCount) + m_cachedItemSize.resize(seriesCount); + for (int series = 0; series < seriesCount; series++) { itemSize = static_cast<QScatter3DSeries *>(m_visibleSeriesList.at(series).series())->itemSize(); if (maxItemSize < itemSize) maxItemSize = itemSize; + if (m_cachedItemSize.at(series) != itemSize) + m_cachedItemSize[series] = itemSize; } m_backgroundMargin = defaultMargin; m_maxItemSize = maxItemSize; @@ -364,10 +369,7 @@ void Scatter3DRenderer::drawScene(const GLuint defaultFboHandle) ObjectHelper *dotObj = m_visibleSeriesList.at(series).object(); bool drawingPoints = (m_visibleSeriesList.at(series).mesh() == QAbstract3DSeries::MeshPoint); - // TODO: Accessing series directly during rendering - float itemSize = - static_cast<QScatter3DSeries *>(m_visibleSeriesList.at(series).series())->itemSize() - / itemScaler; + float itemSize = m_cachedItemSize.at(series) / itemScaler; if (itemSize == 0.0f) itemSize = m_dotSizeScale; if (drawingPoints) { diff --git a/src/datavisualization/engine/scatter3drenderer_p.h b/src/datavisualization/engine/scatter3drenderer_p.h index 9153d80a..7eb75de9 100644 --- a/src/datavisualization/engine/scatter3drenderer_p.h +++ b/src/datavisualization/engine/scatter3drenderer_p.h @@ -92,6 +92,7 @@ private: QVector<ScatterRenderItemArray> m_renderingArrays; GLfloat m_backgroundMargin; GLfloat m_maxItemSize; + QVector<float> m_cachedItemSize; public: explicit Scatter3DRenderer(Scatter3DController *controller); diff --git a/tests/scattertest/scatterchart.cpp b/tests/scattertest/scatterchart.cpp index 97562861..6b7fd910 100644 --- a/tests/scattertest/scatterchart.cpp +++ b/tests/scattertest/scatterchart.cpp @@ -112,6 +112,8 @@ void ScatterDataModifier::addData() m_chart->seriesList().at(0)->dataProxy()->resetArray(dataArray); m_chart->seriesList().at(1)->dataProxy()->resetArray(dataArray2); + m_chart->seriesList().at(0)->setItemSize(0.0f); + m_chart->seriesList().at(1)->setItemSize(0.0f); } void ScatterDataModifier::changeStyle() @@ -522,6 +524,7 @@ QScatter3DSeries *ScatterDataModifier::createAndAddSeries() series->setMesh(QAbstract3DSeries::MeshSphere); series->setMeshSmooth(true); series->setBaseColor(QColor(rand() % 256, rand() % 256, rand() % 256)); + series->setItemSize(float(rand() % 90 + 10) / 100.0f); QObject::connect(series, &QScatter3DSeries::selectedItemChanged, this, &ScatterDataModifier::handleSelectionChange); |