summaryrefslogtreecommitdiffstats
path: root/src/datavisualization
diff options
context:
space:
mode:
authorMiikka Heikkinen <miikka.heikkinen@digia.com>2014-06-25 14:45:01 +0300
committerMiikka Heikkinen <miikka.heikkinen@digia.com>2014-06-26 10:43:44 +0300
commitffba0218893cd25b08718d4d6fd0c40c95aecf47 (patch)
treec9663278f30d77862d374edcd4cab8f171b5a663 /src/datavisualization
parent36417dd3660f75c34328c3420bdd512436da86ff (diff)
Add radialLabelOffset property for graphs
This property indicates where radial labels of the polar chart are drawn Task-number: QTRD-3184 Change-Id: I1500e67da5e578b90d679876130c2d56c1d08039 Reviewed-by: Mika Salmela <mika.salmela@digia.com>
Diffstat (limited to 'src/datavisualization')
-rw-r--r--src/datavisualization/doc/src/qtdatavisualization-qml-abstractdeclarative.qdoc15
-rw-r--r--src/datavisualization/doc/src/qtdatavisualization-qml-surface3d.qdoc1
-rw-r--r--src/datavisualization/engine/abstract3dcontroller.cpp21
-rw-r--r--src/datavisualization/engine/abstract3dcontroller_p.h8
-rw-r--r--src/datavisualization/engine/abstract3drenderer.cpp6
-rw-r--r--src/datavisualization/engine/abstract3drenderer_p.h2
-rw-r--r--src/datavisualization/engine/q3dsurface.cpp1
-rw-r--r--src/datavisualization/engine/qabstract3dgraph.cpp26
-rw-r--r--src/datavisualization/engine/qabstract3dgraph.h5
-rw-r--r--src/datavisualization/engine/surface3drenderer.cpp23
10 files changed, 97 insertions, 11 deletions
diff --git a/src/datavisualization/doc/src/qtdatavisualization-qml-abstractdeclarative.qdoc b/src/datavisualization/doc/src/qtdatavisualization-qml-abstractdeclarative.qdoc
index 5afbc8c7..cae9a406 100644
--- a/src/datavisualization/doc/src/qtdatavisualization-qml-abstractdeclarative.qdoc
+++ b/src/datavisualization/doc/src/qtdatavisualization-qml-abstractdeclarative.qdoc
@@ -162,7 +162,20 @@
*
* Defaults to \c{false}.
*
- * \sa orthoProjection, AbstractAxis3D::gridOffset, radialLabelOffset
+ * \sa orthoProjection, radialLabelOffset
+ */
+
+/*!
+ * \qmlproperty real AbstractGraph3D::radialLabelOffset
+ * \since QtDataVisualization 1.2
+ *
+ * This property specifies the normalized horizontal offset for the axis labels of the radial
+ * polar axis. The value 0.0 indicates the labels should be drawn next to the 0-angle angular
+ * axis grid line. The value 1.0 indicates the labels are drawn on their normal place at the edge
+ * of the graph background.
+ * This property is ignored if polar property value is \c{false}. Defaults to 1.0.
+ *
+ * \sa polar
*/
/*!
diff --git a/src/datavisualization/doc/src/qtdatavisualization-qml-surface3d.qdoc b/src/datavisualization/doc/src/qtdatavisualization-qml-surface3d.qdoc
index 4c25cc0a..4188e2b1 100644
--- a/src/datavisualization/doc/src/qtdatavisualization-qml-surface3d.qdoc
+++ b/src/datavisualization/doc/src/qtdatavisualization-qml-surface3d.qdoc
@@ -87,6 +87,7 @@
/*!
* \qmlproperty bool Surface3D::flipHorizontalGrid
+ * \since QtDataVisualization 1.2
*
* If \c{false}, the horizontal axis grid and labels are drawn on the horizontal background
* of the graph.
diff --git a/src/datavisualization/engine/abstract3dcontroller.cpp b/src/datavisualization/engine/abstract3dcontroller.cpp
index e4fd0003..6b090fcd 100644
--- a/src/datavisualization/engine/abstract3dcontroller.cpp
+++ b/src/datavisualization/engine/abstract3dcontroller.cpp
@@ -51,6 +51,7 @@ Abstract3DController::Abstract3DController(QRect initialViewport, Q3DScene *scen
m_isSeriesVisualsDirty(true),
m_renderPending(false),
m_isPolar(false),
+ m_radialLabelOffset(1.0f),
m_measureFps(false),
m_numFrames(0),
m_currentFps(0.0)
@@ -182,6 +183,11 @@ void Abstract3DController::synchDataToRenderer()
m_changeTracker.polarChanged = false;
}
+ if (m_changeTracker.radialLabelOffsetChanged) {
+ m_renderer->updateRadialLabelOffset(m_radialLabelOffset);
+ m_changeTracker.radialLabelOffsetChanged = false;
+ }
+
if (m_changeTracker.shadowQualityChanged) {
m_renderer->updateShadowQuality(m_shadowQuality);
m_changeTracker.shadowQualityChanged = false;
@@ -1543,4 +1549,19 @@ bool Abstract3DController::isPolar() const
return m_isPolar;
}
+void Abstract3DController::setRadialLabelOffset(float offset)
+{
+ if (m_radialLabelOffset != offset) {
+ m_radialLabelOffset = offset;
+ m_changeTracker.radialLabelOffsetChanged = true;
+ emit radialLabelOffsetChanged(m_radialLabelOffset);
+ emitNeedRender();
+ }
+}
+
+float Abstract3DController::radialLabelOffset() const
+{
+ return m_radialLabelOffset;
+}
+
QT_END_NAMESPACE_DATAVISUALIZATION
diff --git a/src/datavisualization/engine/abstract3dcontroller_p.h b/src/datavisualization/engine/abstract3dcontroller_p.h
index 7d721b0c..6394da1e 100644
--- a/src/datavisualization/engine/abstract3dcontroller_p.h
+++ b/src/datavisualization/engine/abstract3dcontroller_p.h
@@ -91,6 +91,7 @@ struct Abstract3DChangeBitField {
bool axisYTitleFixedChanged : 1;
bool axisZTitleFixedChanged : 1;
bool polarChanged : 1;
+ bool radialLabelOffsetChanged : 1;
Abstract3DChangeBitField() :
themeChanged(true),
@@ -135,7 +136,8 @@ struct Abstract3DChangeBitField {
axisXTitleFixedChanged(true),
axisYTitleFixedChanged(true),
axisZTitleFixedChanged(true),
- polarChanged(true)
+ polarChanged(true),
+ radialLabelOffsetChanged(true)
{
}
};
@@ -178,6 +180,7 @@ protected:
bool m_isSeriesVisualsDirty;
bool m_renderPending;
bool m_isPolar;
+ float m_radialLabelOffset;
QList<QAbstract3DSeries *> m_seriesList;
@@ -274,6 +277,8 @@ public:
float aspectRatio();
void setPolar(bool enable);
bool isPolar() const;
+ void setRadialLabelOffset(float offset);
+ float radialLabelOffset() const;
void emitNeedRender();
@@ -352,6 +357,7 @@ signals:
void aspectRatioChanged(float ratio);
void optimizationHintsChanged(QAbstract3DGraph::OptimizationHints hints);
void polarChanged(bool enabled);
+ void radialLabelOffsetChanged(float offset);
protected:
virtual QAbstract3DAxis *createDefaultAxis(QAbstract3DAxis::AxisOrientation orientation);
diff --git a/src/datavisualization/engine/abstract3drenderer.cpp b/src/datavisualization/engine/abstract3drenderer.cpp
index f7cb5499..f520e279 100644
--- a/src/datavisualization/engine/abstract3drenderer.cpp
+++ b/src/datavisualization/engine/abstract3drenderer.cpp
@@ -67,6 +67,7 @@ Abstract3DRenderer::Abstract3DRenderer(Abstract3DController *controller)
m_labelObj(0),
m_graphAspectRatio(2.0f),
m_polarGraph(false),
+ m_radialLabelOffset(1.0f),
m_xRightAngleRotation(QQuaternion::fromAxisAndAngle(1.0f, 0.0f, 0.0f, 90.0f)),
m_yRightAngleRotation(QQuaternion::fromAxisAndAngle(0.0f, 1.0f, 0.0f, 90.0f)),
m_zRightAngleRotation(QQuaternion::fromAxisAndAngle(0.0f, 0.0f, 1.0f, 90.0f)),
@@ -316,6 +317,11 @@ void Abstract3DRenderer::updatePolar(bool enable)
updateCustomItemPositions();
}
+void Abstract3DRenderer::updateRadialLabelOffset(float offset)
+{
+ m_radialLabelOffset = offset;
+}
+
void Abstract3DRenderer::updateOptimizationHint(QAbstract3DGraph::OptimizationHints hint)
{
m_cachedOptimizationHint = hint;
diff --git a/src/datavisualization/engine/abstract3drenderer_p.h b/src/datavisualization/engine/abstract3drenderer_p.h
index 10e88f3f..ed26a4ec 100644
--- a/src/datavisualization/engine/abstract3drenderer_p.h
+++ b/src/datavisualization/engine/abstract3drenderer_p.h
@@ -126,6 +126,7 @@ public:
virtual void updateAspectRatio(float ratio);
virtual void updatePolar(bool enable);
+ virtual void updateRadialLabelOffset(float offset);
virtual QVector3D convertPositionToTranslation(const QVector3D &position,
bool isAbsolute) = 0;
@@ -254,6 +255,7 @@ protected:
float m_graphAspectRatio;
bool m_polarGraph;
+ float m_radialLabelOffset;
QQuaternion m_xRightAngleRotation;
QQuaternion m_yRightAngleRotation;
diff --git a/src/datavisualization/engine/q3dsurface.cpp b/src/datavisualization/engine/q3dsurface.cpp
index c9af656f..90b336df 100644
--- a/src/datavisualization/engine/q3dsurface.cpp
+++ b/src/datavisualization/engine/q3dsurface.cpp
@@ -233,6 +233,7 @@ QSurface3DSeries *Q3DSurface::selectedSeries() const
/*!
* \property Q3DSurface::flipHorizontalGrid
+ * \since QtDataVisualization 1.2
*
* If \c{false}, the horizontal axis grid and labels are drawn on the horizontal background
* of the graph.
diff --git a/src/datavisualization/engine/qabstract3dgraph.cpp b/src/datavisualization/engine/qabstract3dgraph.cpp
index 6240f714..af809100 100644
--- a/src/datavisualization/engine/qabstract3dgraph.cpp
+++ b/src/datavisualization/engine/qabstract3dgraph.cpp
@@ -662,7 +662,7 @@ QAbstract3DGraph::OptimizationHints QAbstract3DGraph::optimizationHints() const
*
* Defaults to \c{false}.
*
- * \sa orthoProjection, QAbstract3DAxis::gridOffset, radialLabelOffset
+ * \sa orthoProjection, radialLabelOffset
*/
void QAbstract3DGraph::setPolar(bool enable)
{
@@ -675,6 +675,28 @@ bool QAbstract3DGraph::isPolar() const
}
/*!
+ * \property QAbstract3DGraph::radialLabelOffset
+ * \since QtDataVisualization 1.2
+ *
+ * This property specifies the normalized horizontal offset for the axis labels of the radial
+ * polar axis. The value 0.0 indicates the labels should be drawn next to the 0-angle angular
+ * axis grid line. The value 1.0 indicates the labels are drawn on their normal place at the edge
+ * of the graph background.
+ * This property is ignored if polar property value is \c{false}. Defaults to 1.0.
+ *
+ * \sa polar
+ */
+void QAbstract3DGraph::setRadialLabelOffset(float offset)
+{
+ d_ptr->m_visualController->setRadialLabelOffset(offset);
+}
+
+float QAbstract3DGraph::radialLabelOffset() const
+{
+ return d_ptr->m_visualController->radialLabelOffset();
+}
+
+/*!
* \internal
*/
bool QAbstract3DGraph::event(QEvent *event)
@@ -826,6 +848,8 @@ void QAbstract3DGraphPrivate::setVisualController(Abstract3DController *controll
&QAbstract3DGraph::aspectRatioChanged);
QObject::connect(m_visualController, &Abstract3DController::polarChanged, q_ptr,
&QAbstract3DGraph::polarChanged);
+ QObject::connect(m_visualController, &Abstract3DController::radialLabelOffsetChanged, q_ptr,
+ &QAbstract3DGraph::radialLabelOffsetChanged);
}
void QAbstract3DGraphPrivate::handleDevicePixelRatioChange()
diff --git a/src/datavisualization/engine/qabstract3dgraph.h b/src/datavisualization/engine/qabstract3dgraph.h
index ca673358..e6ebc42b 100644
--- a/src/datavisualization/engine/qabstract3dgraph.h
+++ b/src/datavisualization/engine/qabstract3dgraph.h
@@ -51,6 +51,7 @@ class QT_DATAVISUALIZATION_EXPORT QAbstract3DGraph : public QWindow, protected Q
Q_PROPERTY(qreal aspectRatio READ aspectRatio WRITE setAspectRatio NOTIFY aspectRatioChanged)
Q_PROPERTY(OptimizationHints optimizationHints READ optimizationHints WRITE setOptimizationHints NOTIFY optimizationHintsChanged)
Q_PROPERTY(bool polar READ isPolar WRITE setPolar NOTIFY polarChanged)
+ Q_PROPERTY(float radialLabelOffset READ radialLabelOffset WRITE setRadialLabelOffset NOTIFY radialLabelOffsetChanged)
protected:
explicit QAbstract3DGraph(QAbstract3DGraphPrivate *d, const QSurfaceFormat *format,
@@ -154,6 +155,9 @@ public:
void setPolar(bool enable);
bool isPolar() const;
+ void setRadialLabelOffset(float offset);
+ float radialLabelOffset() const;
+
protected:
bool event(QEvent *event);
void resizeEvent(QResizeEvent *event);
@@ -178,6 +182,7 @@ signals:
void aspectRatioChanged(qreal ratio);
void optimizationHintsChanged(QAbstract3DGraph::OptimizationHints hints);
void polarChanged(bool enabled);
+ void radialLabelOffsetChanged(float offset);
private:
Q_DISABLE_COPY(QAbstract3DGraph)
diff --git a/src/datavisualization/engine/surface3drenderer.cpp b/src/datavisualization/engine/surface3drenderer.cpp
index 5fd59e5e..6cf335b0 100644
--- a/src/datavisualization/engine/surface3drenderer.cpp
+++ b/src/datavisualization/engine/surface3drenderer.cpp
@@ -1050,15 +1050,19 @@ void Surface3DRenderer::drawScene(GLuint defaultFboHandle)
else
m_xFlipped = true;
+ m_yFlippedForGrid = m_yFlipped;
if (m_flipHorizontalGrid) {
- // Need to determine if camera is below graph top
- float distanceToCenter = activeCamera->position().length()
- / activeCamera->zoomLevel() / m_autoScaleAdjustment * 100.0f;
- qreal cameraAngle = qreal(activeCamera->yRotation()) / 180.0 * M_PI;
- float cameraYPos = float(qSin(cameraAngle)) * distanceToCenter;
- m_yFlippedForGrid = cameraYPos < backgroundMargin;
- } else {
- m_yFlippedForGrid = m_yFlipped;
+ if (!m_useOrthoProjection) {
+ // Need to determine if camera is below graph top
+ float distanceToCenter = activeCamera->position().length()
+ / activeCamera->zoomLevel() / m_autoScaleAdjustment * 100.0f;
+ qreal cameraAngle = qreal(activeCamera->yRotation()) / 180.0 * M_PI;
+ float cameraYPos = float(qSin(cameraAngle)) * distanceToCenter;
+ m_yFlippedForGrid = cameraYPos < backgroundMargin;
+ } else if (m_useOrthoProjection && activeCamera->yRotation() == 0.0f) {
+ // With ortho we only need to flip at angle zero, to fix label autorotation angles
+ m_yFlippedForGrid = !m_yFlipped;
+ }
}
// calculate background rotation based on view matrix rotation
@@ -1937,6 +1941,9 @@ void Surface3DRenderer::drawLabels(bool drawSelection, const Q3DCamera *activeCa
labelYTrans,
0.0f);
+ if (m_polarGraph)
+ labelTrans.setX(labelTrans.x() * m_radialLabelOffset);
+
if (m_zFlipped) {
startIndex = 0;
endIndex = labelCount;