summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/datavisualization/engine/abstract3dcontroller.cpp68
-rw-r--r--src/datavisualization/engine/abstract3dcontroller_p.h9
-rw-r--r--src/datavisualization/engine/abstract3drenderer.cpp11
-rw-r--r--src/datavisualization/engine/bars3drenderer.cpp18
-rw-r--r--src/datavisualization/engine/bars3drenderer_p.h2
-rw-r--r--src/datavisualization/engine/q3dwindow.cpp4
-rw-r--r--src/datavisualization/engine/scatter3drenderer.cpp12
-rw-r--r--src/datavisualization/engine/scatter3drenderer_p.h2
-rw-r--r--src/datavisualization/engine/surface3drenderer.cpp13
9 files changed, 67 insertions, 72 deletions
diff --git a/src/datavisualization/engine/abstract3dcontroller.cpp b/src/datavisualization/engine/abstract3dcontroller.cpp
index 7820cb31..7165ca58 100644
--- a/src/datavisualization/engine/abstract3dcontroller.cpp
+++ b/src/datavisualization/engine/abstract3dcontroller.cpp
@@ -69,6 +69,8 @@ Abstract3DController::Abstract3DController(QRect boundRect, QObject *parent) :
&Abstract3DController::handleInputPositionChanged);
connect(m_scene, &Q3DScene::needRender, this,
&Abstract3DController::emitNeedRender);
+ connect(m_scene, &Q3DScene::devicePixelRatioChanged, this,
+ &Abstract3DController::handlePixelRatioChanged);
}
Abstract3DController::~Abstract3DController()
@@ -401,27 +403,22 @@ void Abstract3DController::wheelEvent(QWheelEvent *event)
void Abstract3DController::setSize(const int width, const int height)
{
- m_boundingRect.setWidth(width);
- m_boundingRect.setHeight(height);
+ float devicePixelRatio = m_scene->devicePixelRatio();
m_scene->setViewportSize(width, height);
+ m_boundingRect.setWidth(width * devicePixelRatio);
+ m_boundingRect.setHeight(height * devicePixelRatio);
m_changeTracker.boundingRectChanged = true;
emitNeedRender();
}
-const QSize Abstract3DController::size()
-{
- return m_boundingRect.size();
-}
-
-const QRect Abstract3DController::boundingRect()
-{
- return m_boundingRect;
-}
-
void Abstract3DController::setBoundingRect(const QRect boundingRect)
{
- m_boundingRect = boundingRect;
+ float devicePixelRatio = m_scene->devicePixelRatio();
+ m_boundingRect = QRect(boundingRect.x() * devicePixelRatio,
+ boundingRect.y() * devicePixelRatio,
+ boundingRect.width() * devicePixelRatio,
+ boundingRect.height() * devicePixelRatio);
m_scene->setViewport(boundingRect);
m_changeTracker.boundingRectChanged = true;
@@ -430,58 +427,46 @@ void Abstract3DController::setBoundingRect(const QRect boundingRect)
void Abstract3DController::setWidth(const int width)
{
- m_boundingRect.setWidth(width);
+ m_boundingRect.setWidth(width * m_scene->devicePixelRatio());
m_scene->setViewportSize(width, m_scene->viewport().height());
m_changeTracker.sizeChanged = true;
emitNeedRender();
}
-int Abstract3DController::width()
-{
- return m_boundingRect.width();
-}
-
void Abstract3DController::setHeight(const int height)
{
- m_boundingRect.setHeight(height);
+ m_boundingRect.setHeight(height * m_scene->devicePixelRatio());
m_scene->setViewportSize(m_scene->viewport().width(), height);
m_changeTracker.sizeChanged = true;
emitNeedRender();
}
-int Abstract3DController::height()
-{
- return m_boundingRect.height();
-}
-
void Abstract3DController::setX(const int x)
{
- m_boundingRect.setX(x);
+ m_boundingRect.setX(x * m_scene->devicePixelRatio());
+ m_scene->setViewport( QRect(x,
+ m_scene->viewport().y(),
+ m_scene->viewport().width(),
+ m_scene->viewport().height()));
m_changeTracker.positionChanged = true;
emitNeedRender();
}
-int Abstract3DController::x()
-{
- return m_boundingRect.x();
-}
-
void Abstract3DController::setY(const int y)
{
- m_boundingRect.setY(y);
+ m_boundingRect.setY(y * m_scene->devicePixelRatio());
+ m_scene->setViewport( QRect(m_scene->viewport().x(),
+ y,
+ m_scene->viewport().width(),
+ m_scene->viewport().height()));
m_changeTracker.positionChanged = true;
emitNeedRender();
}
-int Abstract3DController::y()
-{
- return m_boundingRect.y();
-}
-
QRect Abstract3DController::primarySubViewport() const
{
return m_scene->primarySubViewport();
@@ -502,9 +487,14 @@ void Abstract3DController::setSecondarySubViewport(const QRect &secondarySubView
m_scene->setSecondarySubViewport(secondarySubViewport);
}
-void Abstract3DController::updateDevicePixelRatio(float ratio)
+void Abstract3DController::handlePixelRatioChanged(float ratio)
{
- m_scene->setDevicePixelRatio(ratio);
+ m_boundingRect.setX(ratio * m_scene->viewport().x());
+ m_boundingRect.setY(ratio * m_scene->viewport().y());
+ m_boundingRect.setWidth(ratio * m_scene->viewport().width());
+ m_boundingRect.setHeight(ratio * m_scene->viewport().height());
+ m_changeTracker.boundingRectChanged = true;
+ emitNeedRender();
}
void Abstract3DController::setAxisX(Q3DAbstractAxis *axis)
diff --git a/src/datavisualization/engine/abstract3dcontroller_p.h b/src/datavisualization/engine/abstract3dcontroller_p.h
index 850bd3e5..e1f69053 100644
--- a/src/datavisualization/engine/abstract3dcontroller_p.h
+++ b/src/datavisualization/engine/abstract3dcontroller_p.h
@@ -203,17 +203,11 @@ public:
// Size
virtual void setSize(const int width, const int height);
- virtual const QSize size();
- virtual const QRect boundingRect();
virtual void setBoundingRect(const QRect boundingRect);
virtual void setWidth(const int width);
- virtual int width();
virtual void setHeight(const int height);
- virtual int height();
virtual void setX(const int x);
- virtual int x();
virtual void setY(const int y);
- virtual int y();
virtual QRect primarySubViewport() const;
virtual void setPrimarySubViewport(const QRect &primarySubViewport);
@@ -236,8 +230,6 @@ public:
virtual void setActiveInputHandler(QAbstract3DInputHandler *inputHandler);
virtual QAbstract3DInputHandler *activeInputHandler();
- virtual void updateDevicePixelRatio(float ratio);
-
virtual int zoomLevel();
virtual void setZoomLevel(int zoomLevel);
@@ -305,6 +297,7 @@ public slots:
void handleInputStateChanged(QDataVis::InputState state);
void handleInputPositionChanged(const QPoint &position);
void handleSeriesVisibilityChanged(bool visible);
+ void handlePixelRatioChanged(float ratio);
// Renderer callback handlers
void handleRequestShadowQuality(QDataVis::ShadowQuality quality);
diff --git a/src/datavisualization/engine/abstract3drenderer.cpp b/src/datavisualization/engine/abstract3drenderer.cpp
index 06f13b5d..bafe6727 100644
--- a/src/datavisualization/engine/abstract3drenderer.cpp
+++ b/src/datavisualization/engine/abstract3drenderer.cpp
@@ -179,18 +179,21 @@ void Abstract3DRenderer::updateTheme(Q3DTheme *theme)
void Abstract3DRenderer::updateScene(Q3DScene *scene)
{
- updateInputPosition(scene->selectionQueryPosition());
+ float devicePixelRatio = scene->devicePixelRatio();
+ QPoint logicalPixelPosition = scene->selectionQueryPosition();
+ updateInputPosition(QPoint(logicalPixelPosition.x() * devicePixelRatio,
+ logicalPixelPosition.y() * devicePixelRatio));
- if (Q3DScene::invalidSelectionPoint() == scene->selectionQueryPosition()) {
+ if (Q3DScene::invalidSelectionPoint() == logicalPixelPosition) {
updateSelectionState(SelectNone);
} else {
// Selections are one-shot, reset selection active to false before processing
scene->setSelectionQueryPosition(Q3DScene::invalidSelectionPoint());
if (scene->isSlicingActive()) {
- if (scene->isPointInPrimarySubView(m_inputPosition))
+ if (scene->isPointInPrimarySubView(logicalPixelPosition))
updateSelectionState(SelectOnOverview);
- else if (scene->isPointInSecondarySubView(m_inputPosition))
+ else if (scene->isPointInSecondarySubView(logicalPixelPosition))
updateSelectionState(SelectOnSlice);
else
updateSelectionState(SelectNone);
diff --git a/src/datavisualization/engine/bars3drenderer.cpp b/src/datavisualization/engine/bars3drenderer.cpp
index e665eca1..c3e8bf79 100644
--- a/src/datavisualization/engine/bars3drenderer.cpp
+++ b/src/datavisualization/engine/bars3drenderer.cpp
@@ -254,8 +254,17 @@ void Bars3DRenderer::updateData()
void Bars3DRenderer::updateScene(Q3DScene *scene)
{
// TODO: Move these to more suitable place e.g. controller should be controlling the viewports.
- scene->setSecondarySubViewport(m_sliceViewPort);
- scene->setPrimarySubViewport(m_mainViewPort);
+ float devicePixelRatio = scene->devicePixelRatio();
+ QRect logicalPrimarySubViewport = QRect(m_mainViewPort.x() / devicePixelRatio,
+ m_mainViewPort.y() / devicePixelRatio,
+ m_mainViewPort.width() / devicePixelRatio,
+ m_mainViewPort.height() / devicePixelRatio);
+ QRect logicalSecondarySubViewport = QRect(m_sliceViewPort.x() / devicePixelRatio,
+ m_sliceViewPort.y() / devicePixelRatio,
+ m_sliceViewPort.width() / devicePixelRatio,
+ m_sliceViewPort.height() / devicePixelRatio);
+ scene->setPrimarySubViewport(logicalPrimarySubViewport);
+ scene->setSecondarySubViewport(logicalSecondarySubViewport);
// TODO: See QTRD-2374
if (m_hasNegativeValues)
@@ -2084,11 +2093,6 @@ void Bars3DRenderer::setViewPorts()
}
}
-QRect Bars3DRenderer::mainViewPort()
-{
- return m_mainViewPort;
-}
-
void Bars3DRenderer::initShaders(const QString &vertexShader, const QString &fragmentShader)
{
if (m_barShader)
diff --git a/src/datavisualization/engine/bars3drenderer_p.h b/src/datavisualization/engine/bars3drenderer_p.h
index 47c77537..0707dd6f 100644
--- a/src/datavisualization/engine/bars3drenderer_p.h
+++ b/src/datavisualization/engine/bars3drenderer_p.h
@@ -117,8 +117,6 @@ public:
void updateScene(Q3DScene *scene);
void render(GLuint defaultFboHandle = 0);
- QRect mainViewPort();
-
protected:
virtual void initializeOpenGL();
diff --git a/src/datavisualization/engine/q3dwindow.cpp b/src/datavisualization/engine/q3dwindow.cpp
index 61902323..accac95e 100644
--- a/src/datavisualization/engine/q3dwindow.cpp
+++ b/src/datavisualization/engine/q3dwindow.cpp
@@ -106,9 +106,8 @@ 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);
+ d_ptr->m_visualController->scene()->setDevicePixelRatio(d_ptr->m_devicePixelRatio);
}
/*!
@@ -167,6 +166,7 @@ void Q3DWindow::render()
d_ptr->m_visualController->render();
}
+
/*!
* \internal
*/
diff --git a/src/datavisualization/engine/scatter3drenderer.cpp b/src/datavisualization/engine/scatter3drenderer.cpp
index 627fc88a..74e589fd 100644
--- a/src/datavisualization/engine/scatter3drenderer.cpp
+++ b/src/datavisualization/engine/scatter3drenderer.cpp
@@ -187,7 +187,12 @@ void Scatter3DRenderer::updateData()
void Scatter3DRenderer::updateScene(Q3DScene *scene)
{
// TODO: Move these to more suitable place e.g. controller should be controlling the viewports.
- scene->setPrimarySubViewport(m_mainViewPort);
+ float devicePixelRatio = scene->devicePixelRatio();
+ QRect logicalPrimarySubViewport = QRect(m_mainViewPort.x() / devicePixelRatio,
+ m_mainViewPort.y() / devicePixelRatio,
+ m_mainViewPort.width() / devicePixelRatio,
+ m_mainViewPort.height() / devicePixelRatio);
+ scene->setPrimarySubViewport(logicalPrimarySubViewport);
// TODO: See QTRD-2374
scene->activeCamera()->setMinYRotation(-90.0f);
@@ -1590,11 +1595,6 @@ void Scatter3DRenderer::calculateSceneScalingFactors()
(m_axisCacheZ.max() + m_axisCacheZ.min()) / 2.0f);
}
-QRect Scatter3DRenderer::mainViewPort()
-{
- return m_mainViewPort;
-}
-
void Scatter3DRenderer::initShaders(const QString &vertexShader, const QString &fragmentShader)
{
if (m_dotShader)
diff --git a/src/datavisualization/engine/scatter3drenderer_p.h b/src/datavisualization/engine/scatter3drenderer_p.h
index 104737eb..0eb84c84 100644
--- a/src/datavisualization/engine/scatter3drenderer_p.h
+++ b/src/datavisualization/engine/scatter3drenderer_p.h
@@ -100,8 +100,6 @@ public:
void render(GLuint defaultFboHandle);
- QRect mainViewPort();
-
protected:
virtual void initializeOpenGL();
diff --git a/src/datavisualization/engine/surface3drenderer.cpp b/src/datavisualization/engine/surface3drenderer.cpp
index b0df81d1..46857130 100644
--- a/src/datavisualization/engine/surface3drenderer.cpp
+++ b/src/datavisualization/engine/surface3drenderer.cpp
@@ -456,8 +456,17 @@ QRect Surface3DRenderer::calculateSampleRect(const QSurfaceDataArray &array)
void Surface3DRenderer::updateScene(Q3DScene *scene)
{
// TODO: Move these to more suitable place e.g. controller should be controlling the viewports.
- scene->setSecondarySubViewport(m_sliceViewPort);
- scene->setPrimarySubViewport(m_mainViewPort);
+ float devicePixelRatio = scene->devicePixelRatio();
+ QRect logicalPrimarySubViewport = QRect(m_mainViewPort.x() / devicePixelRatio,
+ m_mainViewPort.y() / devicePixelRatio,
+ m_mainViewPort.width() / devicePixelRatio,
+ m_mainViewPort.height() / devicePixelRatio);
+ QRect logicalSecondarySubViewport = QRect(m_sliceViewPort.x() / devicePixelRatio,
+ m_sliceViewPort.y() / devicePixelRatio,
+ m_sliceViewPort.width() / devicePixelRatio,
+ m_sliceViewPort.height() / devicePixelRatio);
+ scene->setPrimarySubViewport(logicalPrimarySubViewport);
+ scene->setSecondarySubViewport(logicalSecondarySubViewport);
// Set initial camera position
// X must be 0 for rotation to work - we can use "setCameraRotation" for setting it later