summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/datavisualization/engine/abstract3dcontroller.cpp5
-rw-r--r--src/datavisualization/engine/abstract3dcontroller_p.h1
-rw-r--r--src/datavisualization/engine/q3dbars.cpp10
-rw-r--r--src/datavisualization/engine/q3dbars.h1
-rw-r--r--src/datavisualization/engine/q3dscatter.cpp10
-rw-r--r--src/datavisualization/engine/q3dscatter.h1
-rw-r--r--src/datavisualization/engine/q3dscene.cpp24
-rw-r--r--src/datavisualization/engine/q3dscene.h4
-rw-r--r--src/datavisualization/engine/q3dscene_p.h5
-rw-r--r--src/datavisualization/engine/q3dsurface.cpp10
-rw-r--r--src/datavisualization/engine/q3dsurface.h1
-rw-r--r--src/datavisualization/engine/q3dwindow.cpp31
-rw-r--r--src/datavisualization/engine/q3dwindow.h4
-rw-r--r--src/datavisualization/engine/q3dwindow_p.h4
14 files changed, 77 insertions, 34 deletions
diff --git a/src/datavisualization/engine/abstract3dcontroller.cpp b/src/datavisualization/engine/abstract3dcontroller.cpp
index b5bd04d5..4d02fc13 100644
--- a/src/datavisualization/engine/abstract3dcontroller.cpp
+++ b/src/datavisualization/engine/abstract3dcontroller.cpp
@@ -448,6 +448,11 @@ void Abstract3DController::setSecondarySubViewport(const QRect &secondarySubView
m_scene->setSecondarySubViewport(secondarySubViewport);
}
+void Abstract3DController::updateDevicePixelRatio(qreal ratio)
+{
+ m_scene->setDevicePixelRatio(ratio);
+}
+
void Abstract3DController::setAxisX(Q3DAbstractAxis *axis)
{
setAxisHelper(Q3DAbstractAxis::AxisOrientationX, axis, &m_axisX);
diff --git a/src/datavisualization/engine/abstract3dcontroller_p.h b/src/datavisualization/engine/abstract3dcontroller_p.h
index 1ad50f18..2c1867b1 100644
--- a/src/datavisualization/engine/abstract3dcontroller_p.h
+++ b/src/datavisualization/engine/abstract3dcontroller_p.h
@@ -235,6 +235,7 @@ public:
virtual void releaseDataProxy(QAbstractDataProxy *proxy);
virtual QList<QAbstractDataProxy *> dataProxies() const;
virtual void setActiveDataProxy(QAbstractDataProxy *proxy);
+ virtual void updateDevicePixelRatio(qreal ratio);
virtual int zoomLevel();
virtual void setZoomLevel(int zoomLevel);
diff --git a/src/datavisualization/engine/q3dbars.cpp b/src/datavisualization/engine/q3dbars.cpp
index a60fe190..701c82b9 100644
--- a/src/datavisualization/engine/q3dbars.cpp
+++ b/src/datavisualization/engine/q3dbars.cpp
@@ -242,6 +242,7 @@ QT_DATAVISUALIZATION_BEGIN_NAMESPACE
Q3DBars::Q3DBars()
: d_ptr(new Q3DBarsPrivate(this, geometry()))
{
+ setVisualController(d_ptr->m_shared);
d_ptr->m_shared->initializeOpenGL();
QObject::connect(d_ptr->m_shared, &Bars3DController::selectedBarPosChanged, this,
&Q3DBars::selectedBarPosChanged);
@@ -256,15 +257,6 @@ Q3DBars::~Q3DBars()
{
}
-/*!
- * \internal
- */
-void Q3DBars::render()
-{
- d_ptr->m_shared->synchDataToRenderer();
- d_ptr->m_shared->render();
-}
-
#if defined(Q_OS_ANDROID)
/*!
* \internal
diff --git a/src/datavisualization/engine/q3dbars.h b/src/datavisualization/engine/q3dbars.h
index 9a8e97bb..078100a1 100644
--- a/src/datavisualization/engine/q3dbars.h
+++ b/src/datavisualization/engine/q3dbars.h
@@ -124,7 +124,6 @@ signals:
void selectedBarPosChanged(QPoint position);
protected:
- void render();
#if defined(Q_OS_ANDROID)
void mouseDoubleClickEvent(QMouseEvent *event);
diff --git a/src/datavisualization/engine/q3dscatter.cpp b/src/datavisualization/engine/q3dscatter.cpp
index 715f2b18..0940fc71 100644
--- a/src/datavisualization/engine/q3dscatter.cpp
+++ b/src/datavisualization/engine/q3dscatter.cpp
@@ -203,6 +203,7 @@ QT_DATAVISUALIZATION_BEGIN_NAMESPACE
Q3DScatter::Q3DScatter()
: d_ptr(new Q3DScatterPrivate(this, geometry()))
{
+ setVisualController(d_ptr->m_shared);
d_ptr->m_shared->initializeOpenGL();
QObject::connect(d_ptr->m_shared, &Scatter3DController::selectedItemIndexChanged, this,
&Q3DScatter::selectedItemIndexChanged);
@@ -217,15 +218,6 @@ Q3DScatter::~Q3DScatter()
{
}
-/*!
- * \internal
- */
-void Q3DScatter::render()
-{
- d_ptr->m_shared->synchDataToRenderer();
- d_ptr->m_shared->render();
-}
-
#if defined(Q_OS_ANDROID)
/*!
* \internal
diff --git a/src/datavisualization/engine/q3dscatter.h b/src/datavisualization/engine/q3dscatter.h
index 4160b168..8fa3eae4 100644
--- a/src/datavisualization/engine/q3dscatter.h
+++ b/src/datavisualization/engine/q3dscatter.h
@@ -112,7 +112,6 @@ signals:
void selectedItemIndexChanged(int index);
protected:
- void render();
#if defined(Q_OS_ANDROID)
void mouseDoubleClickEvent(QMouseEvent *event);
diff --git a/src/datavisualization/engine/q3dscene.cpp b/src/datavisualization/engine/q3dscene.cpp
index 53bfe480..abf41b19 100644
--- a/src/datavisualization/engine/q3dscene.cpp
+++ b/src/datavisualization/engine/q3dscene.cpp
@@ -242,6 +242,23 @@ void Q3DScene::setActiveLight(Q3DLight *light)
}
/*!
+ * \property Q3DScene::devicePixelRatio
+ *
+ * This property contains the current device pixel ratio that is used when mapping input
+ * coordinates to pixel coordinates.
+ */
+qreal Q3DScene::devicePixelRatio() const
+{
+ return d_ptr->m_devicePixelRatio;
+}
+
+void Q3DScene::setDevicePixelRatio(qreal pixelRatio)
+{
+ d_ptr->m_devicePixelRatio = pixelRatio;
+}
+
+
+/*!
* Calculates and sets the light position relative to the currently active camera using the given parameters.
* \a relativePosition defines the relative 3D offset to the current camera position.
* Optional \a fixedRotation fixes the light rotation around the data visualization area to the given value in degrees.
@@ -272,6 +289,7 @@ void Q3DScene::setUnderSideCameraEnabled(bool isEnabled)
Q3DScenePrivate::Q3DScenePrivate(Q3DScene *q) :
q_ptr(q),
+ m_devicePixelRatio(1.f),
m_camera(),
m_light(),
m_isUnderSideCameraEnabled(false),
@@ -328,6 +346,12 @@ void Q3DScenePrivate::sync(Q3DScenePrivate &other)
m_changeTracker.slicingActivatedChanged = false;
other.m_changeTracker.slicingActivatedChanged = false;
}
+
+ if (m_changeTracker.devicePixelRatioChanged) {
+ other.q_ptr->setDevicePixelRatio(q_ptr->devicePixelRatio());
+ m_changeTracker.devicePixelRatioChanged = false;
+ other.m_changeTracker.devicePixelRatioChanged = false;
+ }
}
QT_DATAVISUALIZATION_END_NAMESPACE
diff --git a/src/datavisualization/engine/q3dscene.h b/src/datavisualization/engine/q3dscene.h
index 483a24b8..8c4f67f8 100644
--- a/src/datavisualization/engine/q3dscene.h
+++ b/src/datavisualization/engine/q3dscene.h
@@ -39,6 +39,7 @@ class QT_DATAVISUALIZATION_EXPORT Q3DScene : public QObject
Q_PROPERTY(bool slicingActive READ isSlicingActive WRITE setSlicingActive)
Q_PROPERTY(Q3DCamera* activeCamera READ activeCamera WRITE setActiveCamera)
Q_PROPERTY(Q3DLight* activeLight READ activeLight WRITE setActiveLight)
+ Q_PROPERTY(qreal devicePixelRatio READ devicePixelRatio WRITE setDevicePixelRatio)
public:
Q3DScene(QObject *parent = 0);
@@ -65,6 +66,9 @@ public:
Q3DLight *activeLight() const;
void setActiveLight(Q3DLight *light);
+ qreal devicePixelRatio() const;
+ void setDevicePixelRatio(qreal pixelRatio);
+
void setLightPositionRelativeToCamera(const QVector3D &relativePosition,
qreal fixedRotation = 0.0,
qreal distanceModifier = 0.0);
diff --git a/src/datavisualization/engine/q3dscene_p.h b/src/datavisualization/engine/q3dscene_p.h
index 63d34e97..20a74467 100644
--- a/src/datavisualization/engine/q3dscene_p.h
+++ b/src/datavisualization/engine/q3dscene_p.h
@@ -46,6 +46,7 @@ struct Q3DSceneChangeBitField {
bool lightChanged : 1;
bool underSideCameraEnabledChanged : 1;
bool slicingActivatedChanged : 1;
+ bool devicePixelRatioChanged : 1;
Q3DSceneChangeBitField()
: viewportChanged(true),
@@ -54,7 +55,8 @@ struct Q3DSceneChangeBitField {
cameraChanged(true),
lightChanged(true),
underSideCameraEnabledChanged(true),
- slicingActivatedChanged(true)
+ slicingActivatedChanged(true),
+ devicePixelRatioChanged(true)
{
}
};
@@ -73,6 +75,7 @@ public:
QRect m_viewport;
QRect m_primarySubViewport;
QRect m_secondarySubViewport;
+ qreal m_devicePixelRatio;
Q3DCamera *m_camera;
Q3DLight *m_light;
bool m_isUnderSideCameraEnabled;
diff --git a/src/datavisualization/engine/q3dsurface.cpp b/src/datavisualization/engine/q3dsurface.cpp
index 23a1b14b..e066f717 100644
--- a/src/datavisualization/engine/q3dsurface.cpp
+++ b/src/datavisualization/engine/q3dsurface.cpp
@@ -203,6 +203,7 @@ QT_DATAVISUALIZATION_BEGIN_NAMESPACE
Q3DSurface::Q3DSurface()
: d_ptr(new Q3DSurfacePrivate(this, geometry()))
{
+ setVisualController(d_ptr->m_shared);
d_ptr->m_shared->initializeOpenGL();
QObject::connect(d_ptr->m_shared, &Abstract3DController::needRender, this,
&Q3DWindow::renderLater);
@@ -215,15 +216,6 @@ Q3DSurface::~Q3DSurface()
{
}
-/*!
- * \internal
- */
-void Q3DSurface::render()
-{
- d_ptr->m_shared->synchDataToRenderer();
- d_ptr->m_shared->render();
-}
-
#if defined(Q_OS_ANDROID)
/*!
* \internal
diff --git a/src/datavisualization/engine/q3dsurface.h b/src/datavisualization/engine/q3dsurface.h
index 82eee7ae..1622def3 100644
--- a/src/datavisualization/engine/q3dsurface.h
+++ b/src/datavisualization/engine/q3dsurface.h
@@ -92,7 +92,6 @@ public:
QDataVis::LabelTransparency labelTransparency() const;
protected:
- void render();
#if defined(Q_OS_ANDROID)
void mouseDoubleClickEvent(QMouseEvent *event);
diff --git a/src/datavisualization/engine/q3dwindow.cpp b/src/datavisualization/engine/q3dwindow.cpp
index 34bbdf05..16202179 100644
--- a/src/datavisualization/engine/q3dwindow.cpp
+++ b/src/datavisualization/engine/q3dwindow.cpp
@@ -18,7 +18,7 @@
#include "q3dwindow.h"
#include "q3dwindow_p.h"
-
+#include "abstract3dcontroller_p.h"
#include <QGuiApplication>
#include <QOpenGLContext>
@@ -93,8 +93,33 @@ Q3DWindow::~Q3DWindow()
/*!
* \internal
*/
+void Q3DWindow::setVisualController(Abstract3DController *controller)
+{
+ d_ptr->m_visualController = controller;
+}
+
+/*!
+ * \internal
+ */
+void Q3DWindow::handleDevicePixelRatioChange()
+{
+ if (QWindow::devicePixelRatio() == d_ptr->m_devicePixelRatio || !d_ptr->m_visualController)
+ return;
+
+ // Device pixel ratio changed, resize accordingly and inform the scene
+ d_ptr->m_devicePixelRatio = QWindow::devicePixelRatio();
+ d_ptr->m_visualController->updateDevicePixelRatio(d_ptr->m_devicePixelRatio);
+
+}
+
+/*!
+ * \internal
+ */
void Q3DWindow::render()
{
+ handleDevicePixelRatioChange();
+ d_ptr->m_visualController->synchDataToRenderer();
+ d_ptr->m_visualController->render();
}
/*!
@@ -153,7 +178,9 @@ void Q3DWindow::renderNow()
Q3DWindowPrivate::Q3DWindowPrivate(Q3DWindow *q)
: q_ptr(q),
m_updatePending(false),
- m_context(new QOpenGLContext(q))
+ m_context(new QOpenGLContext(q)),
+ m_visualController(0),
+ m_devicePixelRatio(1.f)
{
}
diff --git a/src/datavisualization/engine/q3dwindow.h b/src/datavisualization/engine/q3dwindow.h
index c46e293a..1848ff29 100644
--- a/src/datavisualization/engine/q3dwindow.h
+++ b/src/datavisualization/engine/q3dwindow.h
@@ -23,12 +23,14 @@
#include <QWindow>
#include <QOpenGLFunctions>
+#include <QScreen>
class QPainter;
QT_DATAVISUALIZATION_BEGIN_NAMESPACE
class Q3DWindowPrivate;
+class Abstract3DController;
class QT_DATAVISUALIZATION_EXPORT Q3DWindow : public QWindow, protected QOpenGLFunctions
{
@@ -47,6 +49,8 @@ protected:
bool event(QEvent *event);
void exposeEvent(QExposeEvent *event);
+ void setVisualController(Abstract3DController *controller);
+ void handleDevicePixelRatioChange();
private:
QScopedPointer<Q3DWindowPrivate> d_ptr;
diff --git a/src/datavisualization/engine/q3dwindow_p.h b/src/datavisualization/engine/q3dwindow_p.h
index b5ec9e6f..6bef7e10 100644
--- a/src/datavisualization/engine/q3dwindow_p.h
+++ b/src/datavisualization/engine/q3dwindow_p.h
@@ -37,6 +37,7 @@ class QOpenGLPaintDevice;
QT_DATAVISUALIZATION_BEGIN_NAMESPACE
class Q3DWindow;
+class Abstract3DController;
class Q3DWindowPrivate
{
@@ -48,8 +49,9 @@ public:
Q3DWindow *q_ptr;
bool m_updatePending;
-
QOpenGLContext *m_context;
+ Abstract3DController *m_visualController;
+ qreal m_devicePixelRatio;
};
QT_DATAVISUALIZATION_END_NAMESPACE