summaryrefslogtreecommitdiffstats
path: root/src/datavisualization/engine/abstract3drenderer.cpp
diff options
context:
space:
mode:
authorTomi Korpipää <tomi.korpipaa@digia.com>2014-05-26 09:57:25 +0300
committerTomi Korpipää <tomi.korpipaa@digia.com>2014-05-26 10:00:29 +0300
commit5611563234ac7edd47ad9df3a8bf0a293718d8f8 (patch)
treecf86ae40fdc51e9df7197fc5756438b1023858c6 /src/datavisualization/engine/abstract3drenderer.cpp
parent039a4b04c5207e869fed958baefcd74fe9423426 (diff)
Added API for changing data aspect ratio
Task-number: QTRD-3144 Change-Id: I9acd1be13083d7fbbed840882260a60f46c5f698 Reviewed-by: Miikka Heikkinen <miikka.heikkinen@digia.com>
Diffstat (limited to 'src/datavisualization/engine/abstract3drenderer.cpp')
-rw-r--r--src/datavisualization/engine/abstract3drenderer.cpp33
1 files changed, 25 insertions, 8 deletions
diff --git a/src/datavisualization/engine/abstract3drenderer.cpp b/src/datavisualization/engine/abstract3drenderer.cpp
index da839e2d..adba857b 100644
--- a/src/datavisualization/engine/abstract3drenderer.cpp
+++ b/src/datavisualization/engine/abstract3drenderer.cpp
@@ -52,7 +52,8 @@ Abstract3DRenderer::Abstract3DRenderer(Abstract3DController *controller)
m_selectionLabelItem(0),
m_visibleSeriesCount(0),
m_customItemShader(0),
- m_useOrthoProjection(false)
+ m_useOrthoProjection(false),
+ m_graphAspectRatio(2.0f)
{
QObject::connect(m_drawer, &Drawer::drawerChanged, this, &Abstract3DRenderer::updateTextures);
@@ -271,18 +272,23 @@ void Abstract3DRenderer::updateSelectionMode(QAbstract3DGraph::SelectionFlags mo
m_selectionDirty = true;
}
+void Abstract3DRenderer::updateAspectRatio(float ratio)
+{
+ m_graphAspectRatio = ratio;
+ calculateZoomLevel();
+ m_cachedScene->activeCamera()->d_ptr->updateViewMatrix(m_autoScaleAdjustment);
+ foreach (SeriesRenderCache *cache, m_renderCacheList)
+ cache->setDataDirty(true);
+ updateCustomItemPositions();
+}
+
void Abstract3DRenderer::handleResize()
{
if (m_primarySubViewport.width() == 0 || m_primarySubViewport.height() == 0)
return;
- // Calculate zoom level based on aspect ratio
- GLfloat div;
- GLfloat zoomAdjustment;
- div = qMin(m_primarySubViewport.width(), m_primarySubViewport.height());
- zoomAdjustment = defaultRatio * ((m_primarySubViewport.width() / div)
- / (m_primarySubViewport.height() / div));
- m_autoScaleAdjustment = qMin(zoomAdjustment, 1.0f); // clamp to 1.0f
+ // Recalculate zoom
+ calculateZoomLevel();
// Re-init selection buffer
initSelectionBuffer();
@@ -293,6 +299,17 @@ void Abstract3DRenderer::handleResize()
#endif
}
+void Abstract3DRenderer::calculateZoomLevel()
+{
+ // Calculate zoom level based on aspect ratio
+ GLfloat div;
+ GLfloat zoomAdjustment;
+ div = qMin(m_primarySubViewport.width(), m_primarySubViewport.height());
+ zoomAdjustment = 2.0f * defaultRatio * ((m_primarySubViewport.width() / div)
+ / (m_primarySubViewport.height() / div)) / m_graphAspectRatio;
+ m_autoScaleAdjustment = qMin(zoomAdjustment, 1.0f); // clamp to 1.0f
+}
+
void Abstract3DRenderer::updateAxisType(QAbstract3DAxis::AxisOrientation orientation,
QAbstract3DAxis::AxisType type)
{