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 + src/datavisualizationqml2/abstractdeclarative.cpp | 21 ++++++++++----------- src/datavisualizationqml2/abstractdeclarative_p.h | 1 - 4 files changed, 23 insertions(+), 19 deletions(-) (limited to 'src') 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; diff --git a/src/datavisualizationqml2/abstractdeclarative.cpp b/src/datavisualizationqml2/abstractdeclarative.cpp index 148612cd..587ea879 100644 --- a/src/datavisualizationqml2/abstractdeclarative.cpp +++ b/src/datavisualizationqml2/abstractdeclarative.cpp @@ -20,13 +20,13 @@ #include "q3dvalueaxis.h" #include #include +#include QT_DATAVISUALIZATION_BEGIN_NAMESPACE AbstractDeclarative::AbstractDeclarative(QQuickItem *parent) : QQuickItem(parent), - m_controller(0), - m_isFirstRender(true) + m_controller(0) { connect(this, &QQuickItem::windowChanged, this, &AbstractDeclarative::handleWindowChanged); setAntialiasing(true); @@ -121,7 +121,6 @@ void AbstractDeclarative::geometryChanged(const QRectF &newGeometry, const QRect void AbstractDeclarative::itemChange(ItemChange change, const ItemChangeData & value) { QQuickItem::itemChange(change, value); - updateWindowParameters(); } @@ -131,11 +130,15 @@ void AbstractDeclarative::updateWindowParameters() QQuickWindow *win = window(); Q3DScene *scene = m_controller->scene(); if (win) { - if (win->devicePixelRatio() != scene->devicePixelRatio()) + if (win->devicePixelRatio() != scene->devicePixelRatio()) { scene->setDevicePixelRatio(win->devicePixelRatio()); + win->update(); + } - if (win->size() != scene->d_ptr->windowSize()) + if (win->size() != scene->d_ptr->windowSize()) { scene->d_ptr->setWindowSize(QSize(win->width(), win->height())); + win->update(); + } QPointF point = QQuickItem::mapToScene(QPointF(m_cachedGeometry.x(), m_cachedGeometry.y())); if (m_controller) { @@ -146,11 +149,7 @@ void AbstractDeclarative::updateWindowParameters() void AbstractDeclarative::render() { - // Needed to catch the window size change upon first render call - if (m_isFirstRender) { - m_isFirstRender = false; - updateWindowParameters(); - } + updateWindowParameters(); // Clear the background as that is not done by default glViewport(0, 0, window()->width(), window()->height()); @@ -189,7 +188,7 @@ void AbstractDeclarative::mouseDoubleClickEvent(QMouseEvent *event) void AbstractDeclarative::touchEvent(QTouchEvent *event) { m_controller->touchEvent(event); - update(); + window()->update(); } void AbstractDeclarative::mousePressEvent(QMouseEvent *event) diff --git a/src/datavisualizationqml2/abstractdeclarative_p.h b/src/datavisualizationqml2/abstractdeclarative_p.h index 65017b05..42cf13a4 100644 --- a/src/datavisualizationqml2/abstractdeclarative_p.h +++ b/src/datavisualizationqml2/abstractdeclarative_p.h @@ -97,7 +97,6 @@ signals: private: Abstract3DController *m_controller; QRectF m_cachedGeometry; - bool m_isFirstRender; }; QT_DATAVISUALIZATION_END_NAMESPACE -- cgit v1.2.3