summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/datavisualization/engine/abstract3drenderer.cpp19
-rw-r--r--src/datavisualization/engine/abstract3drenderer_p.h1
-rw-r--r--src/datavisualizationqml2/abstractdeclarative.cpp21
-rw-r--r--src/datavisualizationqml2/abstractdeclarative_p.h1
4 files changed, 23 insertions, 19 deletions
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<SeriesRenderCache> 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 <QThread>
#include <QGuiApplication>
+#include <QSGSimpleRectNode>
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