From 44b410f080c4820cea682c4d1278152d2767595c Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Tue, 29 Apr 2014 14:50:04 +0300 Subject: Bar data item and row changing optimizations MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit No longer reset the entire render item array if single item or row changes, significantly speeding up these operations. Task-number: QTRD-2190 Change-Id: I44b8abd384003e252e4bfc34af5d73ac1dee34bf Reviewed-by: Tomi Korpipää Reviewed-by: Mika Salmela --- src/datavisualization/engine/surface3drenderer.cpp | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) (limited to 'src/datavisualization/engine/surface3drenderer.cpp') diff --git a/src/datavisualization/engine/surface3drenderer.cpp b/src/datavisualization/engine/surface3drenderer.cpp index f04277f7..198a034d 100644 --- a/src/datavisualization/engine/surface3drenderer.cpp +++ b/src/datavisualization/engine/surface3drenderer.cpp @@ -256,9 +256,9 @@ void Surface3DRenderer::updateSeries(const QList &seriesLis SurfaceSeriesRenderCache *cache = static_cast( m_renderCacheList.value(series)); if (noSelection - && surfaceSeries->selectedPoint() != QSurface3DSeries::invalidSelectionPosition() - && selectionLabel() != cache->itemLabel()) { - m_selectionLabelDirty = true; + && surfaceSeries->selectedPoint() != QSurface3DSeries::invalidSelectionPosition()) { + if (selectionLabel() != cache->itemLabel()) + m_selectionLabelDirty = true; noSelection = false; } @@ -346,7 +346,7 @@ void Surface3DRenderer::updateRows(const QVector updateSelectedPoint(m_selectedPoint, m_selectedSeries); } -void Surface3DRenderer::updateItem(const QVector &points) +void Surface3DRenderer::updateItems(const QVector &points) { foreach (Surface3DController::ChangeItem item, points) { SurfaceSeriesRenderCache *cache = @@ -364,14 +364,15 @@ void Surface3DRenderer::updateItem(const QVector= sampleSpace.y() && - point.x() <= sampleSpaceRight && point.x() >= sampleSpace.x()) { + if (point.x() <= sampleSpaceTop && point.x() >= sampleSpace.y() && + point.y() <= sampleSpaceRight && point.y() >= sampleSpace.x()) { updateBuffers = true; - int x = point.x() - sampleSpace.x(); - int y = point.y() - sampleSpace.y(); - (*(dstArray.at(y)))[x] = srcArray->at(point.y())->at(point.x()); + int x = point.y() - sampleSpace.x(); + int y = point.x() - sampleSpace.y(); + (*(dstArray.at(y)))[x] = srcArray->at(point.x())->at(point.y()); if (cache->isFlatShadingEnabled()) cache->surfaceObject()->updateCoarseItem(dstArray, y, x); -- cgit v1.2.3