summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/datavisualization/engine/abstract3dcontroller.cpp24
-rw-r--r--src/datavisualization/engine/abstract3dcontroller_p.h9
-rw-r--r--src/datavisualization/engine/abstract3drenderer.cpp13
-rw-r--r--src/datavisualization/engine/abstract3drenderer_p.h4
-rw-r--r--src/datavisualization/engine/bars3drenderer.cpp28
-rw-r--r--src/datavisualization/engine/bars3drenderer_p.h2
-rw-r--r--src/datavisualization/engine/scatter3drenderer.cpp27
-rw-r--r--src/datavisualization/engine/scatter3drenderer_p.h5
-rw-r--r--src/datavisualization/engine/surface3drenderer.cpp28
-rw-r--r--src/datavisualization/engine/surface3drenderer_p.h21
-rw-r--r--src/datavisualization/input/qabstract3dinputhandler.h2
11 files changed, 101 insertions, 62 deletions
diff --git a/src/datavisualization/engine/abstract3dcontroller.cpp b/src/datavisualization/engine/abstract3dcontroller.cpp
index 5a9d8a7a..f1e1d27c 100644
--- a/src/datavisualization/engine/abstract3dcontroller.cpp
+++ b/src/datavisualization/engine/abstract3dcontroller.cpp
@@ -64,6 +64,8 @@ Abstract3DController::Abstract3DController(QRect boundRect, QObject *parent) :
setActiveInputHandler(inputHandler);
connect(inputHandler, &QAbstract3DInputHandler::inputStateChanged, this,
&Abstract3DController::handleInputStateChanged);
+ connect(inputHandler, &QAbstract3DInputHandler::positionChanged, this,
+ &Abstract3DController::handleInputPositionChanged);
connect(m_scene, &Q3DScene::needRender, this,
&Abstract3DController::emitNeedRender);
}
@@ -102,6 +104,16 @@ void Abstract3DController::synchDataToRenderer()
m_renderer->updateScene(m_scene);
+ if (m_changeTracker.inputPositionChanged) {
+ m_renderer->updateInputPosition(inputPosition());
+ m_changeTracker.inputPositionChanged = false;
+ }
+
+ if (m_changeTracker.inputStateChanged) {
+ m_renderer->updateInputState(inputState());
+ m_changeTracker.inputStateChanged = false;
+ }
+
if (m_changeTracker.themeChanged) {
m_renderer->updateTheme(m_theme);
m_changeTracker.themeChanged = false;
@@ -794,7 +806,7 @@ QPoint Abstract3DController::inputPosition()
if (m_activeInputHandler)
return m_activeInputHandler->inputPosition();
else
- return QPoint(0,0);
+ return QPoint(0, 0);
}
void Abstract3DController::setMeshFileName(const QString &fileName)
@@ -936,6 +948,16 @@ void Abstract3DController::handleInputStateChanged(QDataVis::InputState state)
&& state == QDataVis::InputStateOnOverview) {
setSlicingActive(false);
}
+
+ m_changeTracker.inputStateChanged = true;
+ emitNeedRender();
+}
+
+void Abstract3DController::handleInputPositionChanged(const QPoint &position)
+{
+ Q_UNUSED(position)
+
+ m_changeTracker.inputPositionChanged = true;
emitNeedRender();
}
diff --git a/src/datavisualization/engine/abstract3dcontroller_p.h b/src/datavisualization/engine/abstract3dcontroller_p.h
index dd5a56ce..e6ea33eb 100644
--- a/src/datavisualization/engine/abstract3dcontroller_p.h
+++ b/src/datavisualization/engine/abstract3dcontroller_p.h
@@ -81,6 +81,8 @@ struct Abstract3DChangeBitField {
bool axisXLabelFormatChanged : 1;
bool axisYLabelFormatChanged : 1;
bool axisZLabelFormatChanged : 1;
+ bool inputStateChanged : 1;
+ bool inputPositionChanged : 1;
Abstract3DChangeBitField() :
positionChanged(true),
@@ -115,7 +117,9 @@ struct Abstract3DChangeBitField {
axisZSubSegmentCountChanged(true),
axisXLabelFormatChanged(true),
axisYLabelFormatChanged(true),
- axisZLabelFormatChanged(true)
+ axisZLabelFormatChanged(true),
+ inputStateChanged(true),
+ inputPositionChanged(true)
{
}
};
@@ -154,7 +158,6 @@ private:
bool m_isBackgroundEnabled;
bool m_isGridEnabled;
QString m_objFile;
-
Q3DScene *m_scene;
protected:
@@ -281,7 +284,6 @@ public:
bool isSlicingActive();
void setSlicingActive(bool isSlicing);
-
// override bar type with own mesh
virtual void setMeshFileName(const QString &fileName);
virtual QString meshFileName();
@@ -313,6 +315,7 @@ public slots:
void handleAxisAutoAdjustRangeChanged(bool autoAdjust);
void handleAxisLabelFormatChanged(const QString &format);
void handleInputStateChanged(QDataVis::InputState state);
+ void handleInputPositionChanged(const QPoint &position);
signals:
void shadowQualityChanged(QDataVis::ShadowQuality quality);
diff --git a/src/datavisualization/engine/abstract3drenderer.cpp b/src/datavisualization/engine/abstract3drenderer.cpp
index a11363a9..27820067 100644
--- a/src/datavisualization/engine/abstract3drenderer.cpp
+++ b/src/datavisualization/engine/abstract3drenderer.cpp
@@ -41,7 +41,8 @@ Abstract3DRenderer::Abstract3DRenderer(Abstract3DController *controller)
m_cachedIsGridEnabled(false),
m_cachedIsBackgroundEnabled(false),
m_cachedScene(new Q3DScene()),
- m_selectionDirty(true)
+ m_selectionDirty(true),
+ m_inputState(QDataVis::InputStateNone)
#ifdef DISPLAY_RENDER_SPEED
, m_isFirstFrame(true),
m_numFrames(0)
@@ -137,6 +138,16 @@ QString Abstract3DRenderer::itemLabelFormat() const
return m_cachedItemLabelFormat;
}
+void Abstract3DRenderer::updateInputState(QDataVis::InputState state)
+{
+ m_inputState = state;
+}
+
+void Abstract3DRenderer::updateInputPosition(const QPoint &position)
+{
+ m_inputPosition = position;
+}
+
void Abstract3DRenderer::updateBoundingRect(const QRect &boundingRect)
{
m_cachedBoundingRect = boundingRect;
diff --git a/src/datavisualization/engine/abstract3drenderer_p.h b/src/datavisualization/engine/abstract3drenderer_p.h
index b3ee6eac..718d318a 100644
--- a/src/datavisualization/engine/abstract3drenderer_p.h
+++ b/src/datavisualization/engine/abstract3drenderer_p.h
@@ -80,6 +80,8 @@ protected:
Q3DScene *m_cachedScene;
bool m_selectionDirty;
+ QDataVis::InputState m_inputState;
+ QPoint m_inputPosition;
#ifdef DISPLAY_RENDER_SPEED
bool m_isFirstFrame;
@@ -110,6 +112,8 @@ public:
virtual QString itemLabelFormat() const;
virtual void updateTextures() = 0;
virtual void initSelectionBuffer() = 0;
+ virtual void updateInputState(QDataVis::InputState state);
+ virtual void updateInputPosition(const QPoint &position);
#if !defined(QT_OPENGL_ES_2)
virtual void updateDepthBuffer() = 0;
diff --git a/src/datavisualization/engine/bars3drenderer.cpp b/src/datavisualization/engine/bars3drenderer.cpp
index 0f24c995..2d018383 100644
--- a/src/datavisualization/engine/bars3drenderer.cpp
+++ b/src/datavisualization/engine/bars3drenderer.cpp
@@ -50,7 +50,6 @@ Bars3DRenderer::Bars3DRenderer(Bars3DController *controller)
m_cachedIsSlicingActivated(false),
m_cachedRowCount(0),
m_cachedColumnCount(0),
- m_cachedInputState(QDataVis::InputStateNone),
m_selectedBar(0),
m_sliceSelection(0),
m_sliceCache(0),
@@ -247,15 +246,6 @@ void Bars3DRenderer::render(GLuint defaultFboHandle)
{
bool slicingChanged = m_cachedIsSlicingActivated != m_cachedScene->isSlicingActive();
- // TODO: Can't call back to controller here! (QTRD-2216)
- // TODO: Needs to be added to synchronization
- QDataVis::InputState currentInputState = m_controller->inputState();
- if (currentInputState != m_cachedInputState) {
- if (currentInputState == QDataVis::InputStateOnScene)
- m_clickedBarColor = invalidColorVector;
- m_cachedInputState = currentInputState;
- }
-
// Handle GL state setup for FBO buffers and clearing of the render surface
Abstract3DRenderer::render(defaultFboHandle);
@@ -355,7 +345,7 @@ void Bars3DRenderer::drawSlicedScene(const LabelItem &xLabel,
if (m_visualSelectedBarPos.x() == item->position().x()
&& m_visualSelectedBarPos.y() == item->position().y()) {
baseColor = barHighlightColor;
- } else if (QDataVis::SelectionSliceRow == m_cachedSelectionMode) {
+ } else if (rowMode) {
baseColor = rowHighlightColor;
} else {
baseColor = columnHighlightColor;
@@ -679,7 +669,7 @@ void Bars3DRenderer::drawScene(GLuint defaultFboHandle)
// TODO: Selection must be enabled currently to support clicked signal. (QTRD-2517)
// Skip selection mode drawing if we're slicing or have no selection mode
if (!m_cachedIsSlicingActivated && m_cachedSelectionMode > QDataVis::SelectionNone
- && m_cachedInputState == QDataVis::InputStateOnScene) {
+ && m_inputState == QDataVis::InputStateOnScene) {
// Bind selection shader
m_selectionShader->bind();
@@ -748,8 +738,7 @@ void Bars3DRenderer::drawScene(GLuint defaultFboHandle)
glEnable(GL_DITHER);
// Read color under cursor
- // TODO: Can't call back to controller here! (QTRD-2216)
- QVector3D clickedColor = Utils::getSelection(m_controller->inputPosition(),
+ QVector3D clickedColor = Utils::getSelection(m_inputPosition,
m_cachedBoundingRect.height());
if (m_clickedBarColor == invalidColorVector) {
m_clickedBarColor = clickedColor;
@@ -1609,6 +1598,17 @@ void Bars3DRenderer::updateSelectedBar(const QPoint &position)
m_selectionDirty = true;
}
+void Bars3DRenderer::updateInputState(QDataVis::InputState state)
+{
+ QDataVis::InputState oldInputState = m_inputState;
+
+ Abstract3DRenderer::updateInputState(state);
+
+ // Clear clicked color on input state change
+ if (oldInputState != m_inputState && m_inputState == QDataVis::InputStateOnScene)
+ m_clickedBarColor = invalidColorVector;
+}
+
void Bars3DRenderer::updateShadowQuality(QDataVis::ShadowQuality quality)
{
m_cachedShadowQuality = quality;
diff --git a/src/datavisualization/engine/bars3drenderer_p.h b/src/datavisualization/engine/bars3drenderer_p.h
index 5d186a7d..1d3d0896 100644
--- a/src/datavisualization/engine/bars3drenderer_p.h
+++ b/src/datavisualization/engine/bars3drenderer_p.h
@@ -60,7 +60,6 @@ private:
bool m_cachedIsSlicingActivated;
int m_cachedRowCount;
int m_cachedColumnCount;
- QDataVis::InputState m_cachedInputState;
// Internal state
BarRenderItem *m_selectedBar; // points to renderitem array
@@ -129,6 +128,7 @@ public slots:
void updateSlicingActive(bool isSlicing);
void updateBackgroundEnabled(bool enable);
void updateSelectedBar(const QPoint &position);
+ void updateInputState(QDataVis::InputState state);
// Overloaded from abstract renderer
virtual void updateAxisRange(Q3DAbstractAxis::AxisOrientation orientation, qreal min, qreal max);
diff --git a/src/datavisualization/engine/scatter3drenderer.cpp b/src/datavisualization/engine/scatter3drenderer.cpp
index 75440cdc..ed69d88d 100644
--- a/src/datavisualization/engine/scatter3drenderer.cpp
+++ b/src/datavisualization/engine/scatter3drenderer.cpp
@@ -80,8 +80,7 @@ Scatter3DRenderer::Scatter3DRenderer(Scatter3DController *controller)
m_clickedColor(invalidColorVector),
m_areaSize(QSizeF(0.0, 0.0)),
m_dotSizeScale(1.0f),
- m_hasHeightAdjustmentChanged(true),
- m_cachedInputState(QDataVis::InputStateNone)
+ m_hasHeightAdjustmentChanged(true)
{
initializeOpenGLFunctions();
initializeOpenGL();
@@ -192,17 +191,19 @@ void Scatter3DRenderer::updateScene(Q3DScene *scene)
Abstract3DRenderer::updateScene(scene);
}
-void Scatter3DRenderer::render(GLuint defaultFboHandle)
+void Scatter3DRenderer::updateInputState(QDataVis::InputState state)
{
- // TODO: Can't call back to controller here! (QTRD-2216)
- // TODO: Needs to be added to synchronization
- QDataVis::InputState currentInputState = m_controller->inputState();
- if (currentInputState != m_cachedInputState) {
- if (currentInputState == QDataVis::InputStateOnScene)
- m_clickedColor = invalidColorVector;
- m_cachedInputState = currentInputState;
- }
+ QDataVis::InputState oldInputState = m_inputState;
+
+ Abstract3DRenderer::updateInputState(state);
+ // Clear clicked color on input state change
+ if (oldInputState != m_inputState && m_inputState == QDataVis::InputStateOnScene)
+ m_clickedColor = invalidColorVector;
+}
+
+void Scatter3DRenderer::render(GLuint defaultFboHandle)
+{
// Handle GL state setup for FBO buffers and clearing of the render surface
Abstract3DRenderer::render(defaultFboHandle);
@@ -386,7 +387,7 @@ void Scatter3DRenderer::drawScene(const GLuint defaultFboHandle)
// Skip selection mode drawing if we have no selection mode
// TODO: Can't call back to controller here! (QTRD-2216)
if (m_cachedSelectionMode > QDataVis::SelectionNone
- && QDataVis::InputStateOnScene == m_controller->inputState()) {
+ && QDataVis::InputStateOnScene == m_inputState) {
// Bind selection shader
m_selectionShader->bind();
@@ -444,7 +445,7 @@ void Scatter3DRenderer::drawScene(const GLuint defaultFboHandle)
// Read color under cursor
// TODO: Can't call back to controller here! (QTRD-2216)
- QVector3D clickedColor = Utils::getSelection(m_controller->inputPosition(),
+ QVector3D clickedColor = Utils::getSelection(m_inputPosition,
m_cachedBoundingRect.height());
if (m_clickedColor == invalidColorVector) {
m_clickedColor = clickedColor;
diff --git a/src/datavisualization/engine/scatter3drenderer_p.h b/src/datavisualization/engine/scatter3drenderer_p.h
index 4a1f0b30..2f98deaf 100644
--- a/src/datavisualization/engine/scatter3drenderer_p.h
+++ b/src/datavisualization/engine/scatter3drenderer_p.h
@@ -91,17 +91,16 @@ private:
bool m_hasHeightAdjustmentChanged;
ScatterRenderItem m_dummyRenderItem;
-
ScatterRenderItemArray m_renderItemArray;
- QDataVis::InputState m_cachedInputState;
-
public:
explicit Scatter3DRenderer(Scatter3DController *controller);
~Scatter3DRenderer();
void updateDataModel(QScatterDataProxy *dataProxy);
void updateScene(Q3DScene *scene);
+ void updateInputState(QDataVis::InputState state);
+
void render(GLuint defaultFboHandle);
QRect mainViewPort();
diff --git a/src/datavisualization/engine/surface3drenderer.cpp b/src/datavisualization/engine/surface3drenderer.cpp
index d79b5677..1ebdac57 100644
--- a/src/datavisualization/engine/surface3drenderer.cpp
+++ b/src/datavisualization/engine/surface3drenderer.cpp
@@ -65,7 +65,6 @@ Surface3DRenderer::Surface3DRenderer(Surface3DController *controller)
m_font(QFont(QStringLiteral("Arial"))),
m_isGridEnabled(true),
m_cachedIsSlicingActivated(false),
- m_cachedInputState(QDataVis::InputStateNone),
m_shader(0),
m_depthShader(0),
m_backgroundShader(0),
@@ -440,19 +439,21 @@ void Surface3DRenderer::updateScene(Q3DScene *scene)
updateSlicingActive(scene->isSlicingActive());
}
+void Surface3DRenderer::updateInputState(QDataVis::InputState state)
+{
+ QDataVis::InputState oldInputState = m_inputState;
+
+ Abstract3DRenderer::updateInputState(state);
+
+ // Clear clicked color on input state change
+ if (oldInputState != m_inputState && m_inputState == QDataVis::InputStateOnScene)
+ m_clickedPointId = invalidSelectionId;
+}
+
void Surface3DRenderer::render(GLuint defaultFboHandle)
{
bool slicingChanged = m_cachedIsSlicingActivated != m_cachedScene->isSlicingActive();
- // TODO: Can't call back to controller here! (QTRD-2216)
- // TODO: Needs to be added to synchronization
- QDataVis::InputState currentInputState = m_controller->inputState();
- if (currentInputState != m_cachedInputState) {
- if (currentInputState == QDataVis::InputStateOnScene)
- m_clickedPointId = invalidSelectionId;
- m_cachedInputState = currentInputState;
- }
-
// Handle GL state setup for FBO buffers and clearing of the render surface
Abstract3DRenderer::render(defaultFboHandle);
@@ -897,7 +898,7 @@ void Surface3DRenderer::drawScene(GLuint defaultFboHandle)
glEnable(GL_TEXTURE_2D);
// Draw selection buffer
- if (!m_cachedIsSlicingActivated && m_surfaceObj && m_cachedInputState == QDataVis::InputStateOnScene
+ if (!m_cachedIsSlicingActivated && m_surfaceObj && m_inputState == QDataVis::InputStateOnScene
&& m_cachedSelectionMode > QDataVis::SelectionNone) {
m_selectionShader->bind();
glBindFramebuffer(GL_FRAMEBUFFER, m_selectionFrameBuffer);
@@ -922,10 +923,9 @@ void Surface3DRenderer::drawScene(GLuint defaultFboHandle)
glEnable(GL_DITHER);
- QPoint point = m_controller->inputPosition();
GLubyte pixel[4] = {0};
- glReadPixels(point.x(), m_cachedBoundingRect.height() - point.y(), 1, 1,
- GL_RGBA, GL_UNSIGNED_BYTE, (void *)pixel);
+ glReadPixels(m_inputPosition.x(), m_cachedBoundingRect.height() - m_inputPosition.y(),
+ 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, (void *)pixel);
glBindFramebuffer(GL_FRAMEBUFFER, defaultFboHandle);
diff --git a/src/datavisualization/engine/surface3drenderer_p.h b/src/datavisualization/engine/surface3drenderer_p.h
index 72a83692..c7d41ac3 100644
--- a/src/datavisualization/engine/surface3drenderer_p.h
+++ b/src/datavisualization/engine/surface3drenderer_p.h
@@ -70,7 +70,6 @@ public:
private:
bool m_cachedIsSlicingActivated;
- QDataVis::InputState m_cachedInputState;
// Internal attributes purely related to how the scene is drawn with GL.
QRect m_mainViewPort;
@@ -135,6 +134,13 @@ public:
void updateDataModel(QSurfaceDataProxy *dataProxy);
void updateScene(Q3DScene *scene);
+ void updateInputState(QDataVis::InputState state);
+ bool updateSmoothStatus(bool enable);
+ void updateSurfaceGridStatus(bool enable);
+ void updateSurfaceGradient(const QLinearGradient &gradient);
+ void updateSlicingActive(bool isSlicing);
+ void updateSelectedPoint(const QPoint &position);
+
void drawSlicedScene();
void render(GLuint defaultFboHandle = 0);
@@ -142,22 +148,15 @@ protected:
void initializeOpenGL();
virtual void loadMeshFile();
-public slots:
- bool updateSmoothStatus(bool enable);
- void updateSurfaceGridStatus(bool enable);
- void updateSurfaceGradient(const QLinearGradient &gradient);
- void updateSlicingActive(bool isSlicing);
- void updateSelectedPoint(const QPoint &position);
-
signals:
void pointClicked(QPoint position);
private:
void setViewPorts();
void updateSliceDataModel(const QPoint &point);
- virtual void updateShadowQuality(QDataVis::ShadowQuality quality);
- virtual void updateTextures();
- virtual void initShaders(const QString &vertexShader, const QString &fragmentShader);
+ void updateShadowQuality(QDataVis::ShadowQuality quality);
+ void updateTextures();
+ void initShaders(const QString &vertexShader, const QString &fragmentShader);
QRect calculateSampleRect(const QSurfaceDataArray &array);
void loadBackgroundMesh();
void loadGridLineMesh();
diff --git a/src/datavisualization/input/qabstract3dinputhandler.h b/src/datavisualization/input/qabstract3dinputhandler.h
index d7bf3aee..fed6e3e0 100644
--- a/src/datavisualization/input/qabstract3dinputhandler.h
+++ b/src/datavisualization/input/qabstract3dinputhandler.h
@@ -58,7 +58,7 @@ public:
void setScene(Q3DScene *scene);
signals:
- void positionChanged(const QPoint &position);
+ void positionChanged(QPoint position);
void inputStateChanged(QDataVis::InputState state);
void sceneChanged(const Q3DScene *scene);