From 96b8a5a65d0dcb0bc7ba6235bdbfadda68bc62c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kera=CC=88nen=20Pasi?= Date: Tue, 17 Dec 2013 16:25:57 +0200 Subject: Fixes update on move to retina display on Mac OS X and Qt 5.2 Task-id: QTRD-2565 Change-Id: I4c6fdf0b595f44bc83c1f7fa3540ee311a74e17e Reviewed-by: Miikka Heikkinen --- src/datavisualization/engine/abstract3drenderer.cpp | 19 ++++++++++++------- src/datavisualization/engine/abstract3drenderer_p.h | 1 + 2 files changed, 13 insertions(+), 7 deletions(-) (limited to 'src/datavisualization') diff --git a/src/datavisualization/engine/abstract3drenderer.cpp b/src/datavisualization/engine/abstract3drenderer.cpp index ec2b1ecd..74088b7c 100644 --- a/src/datavisualization/engine/abstract3drenderer.cpp +++ b/src/datavisualization/engine/abstract3drenderer.cpp @@ -42,7 +42,8 @@ Abstract3DRenderer::Abstract3DRenderer(Abstract3DController *controller) m_textureHelper(0), m_cachedScene(new Q3DScene()), m_selectionDirty(true), - m_selectionState(SelectNone) + m_selectionState(SelectNone), + m_devicePixelRatio(1.0f) #ifdef DISPLAY_RENDER_SPEED , m_isFirstFrame(true), m_numFrames(0) @@ -166,11 +167,6 @@ void Abstract3DRenderer::updateTheme(Q3DTheme *theme) void Abstract3DRenderer::updateScene(Q3DScene *scene) { - float devicePixelRatio = scene->devicePixelRatio(); - QPoint logicalPixelPosition = scene->selectionQueryPosition(); - updateInputPosition(QPoint(logicalPixelPosition.x() * devicePixelRatio, - logicalPixelPosition.y() * devicePixelRatio)); - m_viewport = scene->d_ptr->glViewport(); m_secondarySubViewport = scene->d_ptr->glSecondarySubViewport(); @@ -180,10 +176,19 @@ void Abstract3DRenderer::updateScene(Q3DScene *scene) handleResize(); } + if (m_devicePixelRatio != scene->devicePixelRatio()) { + m_devicePixelRatio = scene->devicePixelRatio(); + handleResize(); + } + scene->activeCamera()->d_ptr->updateViewMatrix(m_autoScaleAdjustment); - // Set light position (rotate light with m_cachedScene->activeCamera(), a bit above it (as set in defaultLightPos)) + // Set light position (rotate light with activeCamera, a bit above it (as set in defaultLightPos)) scene->setLightPositionRelativeToCamera(defaultLightPos); + QPoint logicalPixelPosition = scene->selectionQueryPosition(); + updateInputPosition(QPoint(logicalPixelPosition.x() * m_devicePixelRatio, + logicalPixelPosition.y() * m_devicePixelRatio)); + if (Q3DScene::invalidSelectionPoint() == logicalPixelPosition) { updateSelectionState(SelectNone); } else { diff --git a/src/datavisualization/engine/abstract3drenderer_p.h b/src/datavisualization/engine/abstract3drenderer_p.h index d888798e..17a55ac9 100644 --- a/src/datavisualization/engine/abstract3drenderer_p.h +++ b/src/datavisualization/engine/abstract3drenderer_p.h @@ -136,6 +136,7 @@ protected: QVector m_visibleSeriesList; QRect m_primarySubViewport; QRect m_secondarySubViewport; + float m_devicePixelRatio; #ifdef DISPLAY_RENDER_SPEED bool m_isFirstFrame; -- cgit v1.2.3