From a1293a58e0909d56e34654549ba719bacfdda1bb Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Mon, 30 Jun 2014 10:33:33 +0300 Subject: Added horizontal aspect ratio property for abstract graphs Value 0.0 indicates automatic scaling (the default). Task-number: QTRD-3192 Change-Id: I5e4cc1b7a03c0ba811e2ed3916a440906429af57 Reviewed-by: Mika Salmela --- .../qmlspectrogram/qml/qmlspectrogram/main.qml | 1 + ...tdatavisualization-qml-abstractdeclarative.qdoc | 21 +++++++++-- .../engine/abstract3dcontroller.cpp | 30 +++++++++++++--- .../engine/abstract3dcontroller_p.h | 15 +++++--- .../engine/abstract3drenderer.cpp | 9 +++++ .../engine/abstract3drenderer_p.h | 2 ++ src/datavisualization/engine/qabstract3dgraph.cpp | 34 ++++++++++++++++-- src/datavisualization/engine/qabstract3dgraph.h | 5 +++ src/datavisualization/engine/scatter3drenderer.cpp | 41 +++++++++++----------- src/datavisualization/engine/surface3drenderer.cpp | 25 ++++++++----- src/datavisualizationqml2/abstractdeclarative.cpp | 14 +++++++- src/datavisualizationqml2/abstractdeclarative_p.h | 5 +++ tests/scattertest/main.cpp | 15 ++++++-- tests/scattertest/scatterchart.cpp | 8 ++++- tests/scattertest/scatterchart.h | 1 + tests/surfacetest/graphmodifier.cpp | 8 ++++- tests/surfacetest/graphmodifier.h | 1 + tests/surfacetest/main.cpp | 11 +++++- 18 files changed, 199 insertions(+), 47 deletions(-) diff --git a/examples/datavisualization/qmlspectrogram/qml/qmlspectrogram/main.qml b/examples/datavisualization/qmlspectrogram/qml/qmlspectrogram/main.qml index f7e93827..af16539b 100644 --- a/examples/datavisualization/qmlspectrogram/qml/qmlspectrogram/main.qml +++ b/examples/datavisualization/qmlspectrogram/qml/qmlspectrogram/main.qml @@ -109,6 +109,7 @@ Window { orthoProjection: true flipHorizontalGrid: true radialLabelOffset: 0.01 // Add little offset so the labels do not overlap + horizontalAspectRatio: 1 Surface3DSeries { id: surfaceSeries diff --git a/src/datavisualization/doc/src/qtdatavisualization-qml-abstractdeclarative.qdoc b/src/datavisualization/doc/src/qtdatavisualization-qml-abstractdeclarative.qdoc index cae9a406..c83beb74 100644 --- a/src/datavisualization/doc/src/qtdatavisualization-qml-abstractdeclarative.qdoc +++ b/src/datavisualization/doc/src/qtdatavisualization-qml-abstractdeclarative.qdoc @@ -315,10 +315,27 @@ * \qmlproperty real AbstractGraph3D::aspectRatio * \since QtDataVisualization 1.1 * - * Aspect ratio of the graph data. This is the ratio of data scaling between horizontal and - * vertical axes. Defaults to \c{2.0}. + * The aspect ratio is the ratio of the graph scaling between the longest axis on the horizontal + * plane and the Y-axis. Defaults to \c{2.0}. * * \note Has no effect on Bars3D. + * + * \sa horizontalAspectRatio + */ + +/*! + * \qmlproperty real AbstractGraph3D::horizontalAspectRatio + * \since QtDataVisualization 1.2 + * + * The horizontal aspect ratio is the ratio of the graph scaling between the X and Z axes. + * Value of 0.0 indicates automatic scaling according to axis ranges. + * Defaults to \c{0.0}. + * + * \note Has no effect on Bars3D, which handles scaling on the horizontal plane via + * \l{Bars3D::barThickness}{barThickness} and \l{Bars3D::barSpacing}{barSpacing} properties. + * Polar graphs also ignore this property. + * + * \sa aspectRatio, polar, Bars3D::barThickness, Bars3D::barSpacing */ /*! diff --git a/src/datavisualization/engine/abstract3dcontroller.cpp b/src/datavisualization/engine/abstract3dcontroller.cpp index 6b090fcd..1b497490 100644 --- a/src/datavisualization/engine/abstract3dcontroller.cpp +++ b/src/datavisualization/engine/abstract3dcontroller.cpp @@ -37,7 +37,8 @@ Abstract3DController::Abstract3DController(QRect initialViewport, Q3DScene *scen m_selectionMode(QAbstract3DGraph::SelectionItem), m_shadowQuality(QAbstract3DGraph::ShadowQualityMedium), m_useOrthoProjection(false), - m_aspectRatio(2.0f), + m_aspectRatio(2.0), + m_horizontalAspectRatio(0.0), m_optimizationHints(QAbstract3DGraph::OptimizationDefault), m_scene(scene), m_activeInputHandler(0), @@ -204,10 +205,15 @@ void Abstract3DController::synchDataToRenderer() } if (m_changeTracker.aspectRatioChanged) { - m_renderer->updateAspectRatio(m_aspectRatio); + m_renderer->updateAspectRatio(float(m_aspectRatio)); m_changeTracker.aspectRatioChanged = false; } + if (m_changeTracker.horizontalAspectRatioChanged) { + m_renderer->updateHorizontalAspectRatio(float(m_horizontalAspectRatio)); + m_changeTracker.horizontalAspectRatioChanged = false; + } + if (m_changeTracker.optimizationHintChanged) { m_renderer->updateOptimizationHint(m_optimizationHints); m_changeTracker.optimizationHintChanged = false; @@ -1517,7 +1523,7 @@ bool Abstract3DController::isOrthoProjection() const return m_useOrthoProjection; } -void Abstract3DController::setAspectRatio(float ratio) +void Abstract3DController::setAspectRatio(qreal ratio) { if (m_aspectRatio != ratio) { m_aspectRatio = ratio; @@ -1528,11 +1534,27 @@ void Abstract3DController::setAspectRatio(float ratio) } } -float Abstract3DController::aspectRatio() +qreal Abstract3DController::aspectRatio() { return m_aspectRatio; } +void Abstract3DController::setHorizontalAspectRatio(qreal ratio) +{ + if (m_horizontalAspectRatio != ratio) { + m_horizontalAspectRatio = ratio; + m_changeTracker.horizontalAspectRatioChanged = true; + emit horizontalAspectRatioChanged(m_horizontalAspectRatio); + m_isDataDirty = true; + emitNeedRender(); + } +} + +qreal Abstract3DController::horizontalAspectRatio() const +{ + return m_horizontalAspectRatio; +} + void Abstract3DController::setPolar(bool enable) { if (enable != m_isPolar) { diff --git a/src/datavisualization/engine/abstract3dcontroller_p.h b/src/datavisualization/engine/abstract3dcontroller_p.h index 6394da1e..f6cfb057 100644 --- a/src/datavisualization/engine/abstract3dcontroller_p.h +++ b/src/datavisualization/engine/abstract3dcontroller_p.h @@ -84,6 +84,7 @@ struct Abstract3DChangeBitField { bool axisYLabelAutoRotationChanged : 1; bool axisZLabelAutoRotationChanged : 1; bool aspectRatioChanged : 1; + bool horizontalAspectRatioChanged : 1; bool axisXTitleVisibilityChanged : 1; bool axisYTitleVisibilityChanged : 1; bool axisZTitleVisibilityChanged : 1; @@ -130,6 +131,7 @@ struct Abstract3DChangeBitField { axisYLabelAutoRotationChanged(true), axisZLabelAutoRotationChanged(true), aspectRatioChanged(true), + horizontalAspectRatioChanged(true), axisXTitleVisibilityChanged(true), axisYTitleVisibilityChanged(true), axisZTitleVisibilityChanged(true), @@ -160,7 +162,8 @@ private: QAbstract3DGraph::SelectionFlags m_selectionMode; QAbstract3DGraph::ShadowQuality m_shadowQuality; bool m_useOrthoProjection; - float m_aspectRatio; + qreal m_aspectRatio; + qreal m_horizontalAspectRatio; QAbstract3DGraph::OptimizationHints m_optimizationHints; protected: @@ -273,8 +276,11 @@ public: QAbstract3DGraph::ElementType selectedElement() const; - void setAspectRatio(float ratio); - float aspectRatio(); + void setAspectRatio(qreal ratio); + qreal aspectRatio(); + void setHorizontalAspectRatio(qreal ratio); + qreal horizontalAspectRatio() const; + void setPolar(bool enable); bool isPolar() const; void setRadialLabelOffset(float offset); @@ -354,7 +360,8 @@ signals: void measureFpsChanged(bool enabled); void currentFpsChanged(qreal fps); void orthoProjectionChanged(bool enabled); - void aspectRatioChanged(float ratio); + void aspectRatioChanged(qreal ratio); + void horizontalAspectRatioChanged(qreal ratio); void optimizationHintsChanged(QAbstract3DGraph::OptimizationHints hints); void polarChanged(bool enabled); void radialLabelOffsetChanged(float offset); diff --git a/src/datavisualization/engine/abstract3drenderer.cpp b/src/datavisualization/engine/abstract3drenderer.cpp index 19fdf53b..782b1480 100644 --- a/src/datavisualization/engine/abstract3drenderer.cpp +++ b/src/datavisualization/engine/abstract3drenderer.cpp @@ -66,6 +66,7 @@ Abstract3DRenderer::Abstract3DRenderer(Abstract3DController *controller) m_gridLineObj(0), m_labelObj(0), m_graphAspectRatio(2.0f), + m_graphHorizontalAspectRatio(0.0f), m_polarGraph(false), m_radialLabelOffset(1.0f), m_xRightAngleRotation(QQuaternion::fromAxisAndAngle(1.0f, 0.0f, 0.0f, 90.0f)), @@ -319,6 +320,14 @@ void Abstract3DRenderer::updateAspectRatio(float ratio) updateCustomItemPositions(); } +void Abstract3DRenderer::updateHorizontalAspectRatio(float ratio) +{ + m_graphHorizontalAspectRatio = ratio; + foreach (SeriesRenderCache *cache, m_renderCacheList) + cache->setDataDirty(true); + updateCustomItemPositions(); +} + void Abstract3DRenderer::updatePolar(bool enable) { m_polarGraph = enable; diff --git a/src/datavisualization/engine/abstract3drenderer_p.h b/src/datavisualization/engine/abstract3drenderer_p.h index 0c24c41e..f7fa748b 100644 --- a/src/datavisualization/engine/abstract3drenderer_p.h +++ b/src/datavisualization/engine/abstract3drenderer_p.h @@ -125,6 +125,7 @@ public: virtual void updateCustomItem(CustomRenderItem *renderItem); virtual void updateAspectRatio(float ratio); + virtual void updateHorizontalAspectRatio(float ratio); virtual void updatePolar(bool enable); virtual void updateRadialLabelOffset(float offset); @@ -256,6 +257,7 @@ protected: ObjectHelper *m_labelObj; // Shared reference float m_graphAspectRatio; + float m_graphHorizontalAspectRatio; bool m_polarGraph; float m_radialLabelOffset; diff --git a/src/datavisualization/engine/qabstract3dgraph.cpp b/src/datavisualization/engine/qabstract3dgraph.cpp index af809100..23290d69 100644 --- a/src/datavisualization/engine/qabstract3dgraph.cpp +++ b/src/datavisualization/engine/qabstract3dgraph.cpp @@ -615,14 +615,16 @@ bool QAbstract3DGraph::isOrthoProjection() const * \property QAbstract3DGraph::aspectRatio * \since QtDataVisualization 1.1 * - * Aspect ratio of the graph data. This is the ratio of data scaling between horizontal and - * vertical axes. Defaults to \c{2.0}. + * The aspect ratio is the ratio of the graph scaling between the longest axis on the horizontal + * plane and the Y-axis. Defaults to \c{2.0}. * * \note Has no effect on Q3DBars. + * + * \sa horizontalAspectRatio */ void QAbstract3DGraph::setAspectRatio(qreal ratio) { - d_ptr->m_visualController->setAspectRatio(float(ratio)); + d_ptr->m_visualController->setAspectRatio(ratio); } qreal QAbstract3DGraph::aspectRatio() const @@ -696,6 +698,30 @@ float QAbstract3DGraph::radialLabelOffset() const return d_ptr->m_visualController->radialLabelOffset(); } +/*! + * \property QAbstract3DGraph::horizontalAspectRatio + * \since QtDataVisualization 1.2 + * + * The horizontal aspect ratio is the ratio of the graph scaling between the X and Z axes. + * Value of 0.0 indicates automatic scaling according to axis ranges. + * Defaults to \c{0.0}. + * + * \note Has no effect on Q3DBars, which handles scaling on the horizontal plane via + * \l{Q3DBars::barThickness}{barThickness} and \l{Q3DBars::barSpacing}{barSpacing} properties. + * Polar graphs also ignore this property. + * + * \sa aspectRatio, polar, Q3DBars::barThickness, Q3DBars::barSpacing + */ +void QAbstract3DGraph::setHorizontalAspectRatio(qreal ratio) +{ + d_ptr->m_visualController->setHorizontalAspectRatio(ratio); +} + +qreal QAbstract3DGraph::horizontalAspectRatio() const +{ + return d_ptr->m_visualController->horizontalAspectRatio(); +} + /*! * \internal */ @@ -850,6 +876,8 @@ void QAbstract3DGraphPrivate::setVisualController(Abstract3DController *controll &QAbstract3DGraph::polarChanged); QObject::connect(m_visualController, &Abstract3DController::radialLabelOffsetChanged, q_ptr, &QAbstract3DGraph::radialLabelOffsetChanged); + QObject::connect(m_visualController, &Abstract3DController::horizontalAspectRatioChanged, q_ptr, + &QAbstract3DGraph::horizontalAspectRatioChanged); } void QAbstract3DGraphPrivate::handleDevicePixelRatioChange() diff --git a/src/datavisualization/engine/qabstract3dgraph.h b/src/datavisualization/engine/qabstract3dgraph.h index e6ebc42b..ba099395 100644 --- a/src/datavisualization/engine/qabstract3dgraph.h +++ b/src/datavisualization/engine/qabstract3dgraph.h @@ -52,6 +52,7 @@ class QT_DATAVISUALIZATION_EXPORT QAbstract3DGraph : public QWindow, protected Q 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) + Q_PROPERTY(qreal horizontalAspectRatio READ horizontalAspectRatio WRITE setHorizontalAspectRatio NOTIFY horizontalAspectRatioChanged) protected: explicit QAbstract3DGraph(QAbstract3DGraphPrivate *d, const QSurfaceFormat *format, @@ -158,6 +159,9 @@ public: void setRadialLabelOffset(float offset); float radialLabelOffset() const; + void setHorizontalAspectRatio(qreal ratio); + qreal horizontalAspectRatio() const; + protected: bool event(QEvent *event); void resizeEvent(QResizeEvent *event); @@ -183,6 +187,7 @@ signals: void optimizationHintsChanged(QAbstract3DGraph::OptimizationHints hints); void polarChanged(bool enabled); void radialLabelOffsetChanged(float offset); + void horizontalAspectRatioChanged(qreal ratio); private: Q_DISABLE_COPY(QAbstract3DGraph) diff --git a/src/datavisualization/engine/scatter3drenderer.cpp b/src/datavisualization/engine/scatter3drenderer.cpp index 852341a4..56219339 100644 --- a/src/datavisualization/engine/scatter3drenderer.cpp +++ b/src/datavisualization/engine/scatter3drenderer.cpp @@ -33,8 +33,6 @@ QT_BEGIN_NAMESPACE_DATAVISUALIZATION -//#define USE_UNIFORM_SCALING // Scale x and z uniformly, or based on autoscaled values - const GLfloat defaultMinSize = 0.01f; const GLfloat defaultMaxSize = 0.1f; const GLfloat itemScaler = 3.0f; @@ -2025,30 +2023,33 @@ void Scatter3DRenderer::calculateSceneScalingFactors() } m_heightNormalizer = GLfloat(m_axisCacheY.max() - m_axisCacheY.min()) / 2.0f; -#ifndef USE_UNIFORM_SCALING // Use this if we want to use autoscaling for x and z + + float horizontalAspectRatio; + if (m_polarGraph) + horizontalAspectRatio = 1.0f; + else + horizontalAspectRatio = m_graphHorizontalAspectRatio; + QSizeF areaSize; - areaSize.setHeight((m_axisCacheZ.max() - m_axisCacheZ.min())); - areaSize.setWidth((m_axisCacheX.max() - m_axisCacheX.min())); - float scaleFactor = qMax(areaSize.width(), areaSize.height()); - if (m_polarGraph) { - m_scaleX = m_graphAspectRatio; - m_scaleZ = m_graphAspectRatio; + if (horizontalAspectRatio == 0.0f) { + areaSize.setHeight(m_axisCacheZ.max() - m_axisCacheZ.min()); + areaSize.setWidth(m_axisCacheX.max() - m_axisCacheX.min()); } else { - m_scaleX = m_graphAspectRatio * areaSize.width() / scaleFactor; - m_scaleZ = m_graphAspectRatio * areaSize.height() / scaleFactor; + areaSize.setHeight(1.0f); + areaSize.setWidth(horizontalAspectRatio); } - float factorScaler = 2.0f * m_graphAspectRatio / scaleFactor; - m_axisCacheX.setScale(factorScaler * areaSize.width()); - m_axisCacheZ.setScale(-factorScaler * areaSize.height()); -#else // ..and this if we want uniform scaling based on largest dimension - m_scaleX = m_graphAspectRatio; - m_scaleZ = m_graphAspectRatio; - m_axisCacheX.setScale(2.0f * m_graphAspectRatio); - m_axisCacheZ.setScale(-m_axisCacheX.scale()); -#endif + + float scaleFactor = qMax(areaSize.width(), areaSize.height()); + m_scaleX = m_graphAspectRatio * areaSize.width() / scaleFactor; + m_scaleZ = m_graphAspectRatio * areaSize.height() / scaleFactor; + m_scaleXWithBackground = m_scaleX + m_hBackgroundMargin; m_scaleZWithBackground = m_scaleZ + m_hBackgroundMargin; m_scaleYWithBackground = m_vBackgroundMargin + 1.0f; + + float factorScaler = 2.0f * m_graphAspectRatio / scaleFactor; + m_axisCacheX.setScale(factorScaler * areaSize.width()); + m_axisCacheZ.setScale(-factorScaler * areaSize.height()); m_axisCacheX.setTranslate(-m_axisCacheX.scale() / 2.0f); m_axisCacheZ.setTranslate(-m_axisCacheZ.scale() / 2.0f); } diff --git a/src/datavisualization/engine/surface3drenderer.cpp b/src/datavisualization/engine/surface3drenderer.cpp index 50104a93..c1a23493 100644 --- a/src/datavisualization/engine/surface3drenderer.cpp +++ b/src/datavisualization/engine/surface3drenderer.cpp @@ -2399,17 +2399,26 @@ void Surface3DRenderer::calculateSceneScalingFactors() // Calculate scene scaling and translation factors m_heightNormalizer = GLfloat(m_axisCacheY.max() - m_axisCacheY.min()); + + float horizontalAspectRatio; + if (m_polarGraph) + horizontalAspectRatio = 1.0f; + else + horizontalAspectRatio = m_graphHorizontalAspectRatio; + QSizeF areaSize; - areaSize.setHeight(m_axisCacheZ.max() - m_axisCacheZ.min()); - areaSize.setWidth(m_axisCacheX.max() - m_axisCacheX.min()); - float scaleFactor = qMax(areaSize.width(), areaSize.height()); - if (m_polarGraph) { - m_scaleX = m_graphAspectRatio; - m_scaleZ = m_graphAspectRatio; + if (horizontalAspectRatio == 0.0f) { + areaSize.setHeight(m_axisCacheZ.max() - m_axisCacheZ.min()); + areaSize.setWidth(m_axisCacheX.max() - m_axisCacheX.min()); } else { - m_scaleX = m_graphAspectRatio * areaSize.width() / scaleFactor; - m_scaleZ = m_graphAspectRatio * areaSize.height() / scaleFactor; + areaSize.setHeight(1.0f); + areaSize.setWidth(horizontalAspectRatio); } + + float scaleFactor = qMax(areaSize.width(), areaSize.height()); + m_scaleX = m_graphAspectRatio * areaSize.width() / scaleFactor; + m_scaleZ = m_graphAspectRatio * areaSize.height() / scaleFactor; + m_scaleXWithBackground = m_scaleX + m_hBackgroundMargin; m_scaleZWithBackground = m_scaleZ + m_hBackgroundMargin; m_scaleYWithBackground = m_vBackgroundMargin + 1.0f; diff --git a/src/datavisualizationqml2/abstractdeclarative.cpp b/src/datavisualizationqml2/abstractdeclarative.cpp index 5182e96a..8983046b 100644 --- a/src/datavisualizationqml2/abstractdeclarative.cpp +++ b/src/datavisualizationqml2/abstractdeclarative.cpp @@ -333,6 +333,8 @@ void AbstractDeclarative::setSharedController(Abstract3DController *controller) &AbstractDeclarative::polarChanged); QObject::connect(m_controller.data(), &Abstract3DController::radialLabelOffsetChanged, this, &AbstractDeclarative::radialLabelOffsetChanged); + QObject::connect(m_controller.data(), &Abstract3DController::horizontalAspectRatioChanged, this, + &AbstractDeclarative::horizontalAspectRatioChanged); } void AbstractDeclarative::activateOpenGLContext(QQuickWindow *window) @@ -708,7 +710,7 @@ AbstractDeclarative::ElementType AbstractDeclarative::selectedElement() const void AbstractDeclarative::setAspectRatio(qreal ratio) { - m_controller->setAspectRatio(float(ratio)); + m_controller->setAspectRatio(ratio); } qreal AbstractDeclarative::aspectRatio() const @@ -748,6 +750,16 @@ float AbstractDeclarative::radialLabelOffset() const return m_controller->radialLabelOffset(); } +void AbstractDeclarative::setHorizontalAspectRatio(qreal ratio) +{ + m_controller->setHorizontalAspectRatio(ratio); +} + +qreal AbstractDeclarative::horizontalAspectRatio() const +{ + return m_controller->horizontalAspectRatio(); +} + void AbstractDeclarative::windowDestroyed(QObject *obj) { // Remove destroyed window from window lists diff --git a/src/datavisualizationqml2/abstractdeclarative_p.h b/src/datavisualizationqml2/abstractdeclarative_p.h index 379e346f..058cb44a 100644 --- a/src/datavisualizationqml2/abstractdeclarative_p.h +++ b/src/datavisualizationqml2/abstractdeclarative_p.h @@ -74,6 +74,7 @@ class AbstractDeclarative : public QQuickItem Q_PROPERTY(OptimizationHints optimizationHints READ optimizationHints WRITE setOptimizationHints NOTIFY optimizationHintsChanged REVISION 1) Q_PROPERTY(bool polar READ isPolar WRITE setPolar NOTIFY polarChanged REVISION 2) Q_PROPERTY(float radialLabelOffset READ radialLabelOffset WRITE setRadialLabelOffset NOTIFY radialLabelOffsetChanged REVISION 2) + Q_PROPERTY(qreal horizontalAspectRatio READ horizontalAspectRatio WRITE setHorizontalAspectRatio NOTIFY horizontalAspectRatioChanged REVISION 2) public: enum SelectionFlag { @@ -201,6 +202,9 @@ public: void setRadialLabelOffset(float offset); float radialLabelOffset() const; + void setHorizontalAspectRatio(qreal ratio); + qreal horizontalAspectRatio() const; + public slots: virtual void handleAxisXChanged(QAbstract3DAxis *axis) = 0; virtual void handleAxisYChanged(QAbstract3DAxis *axis) = 0; @@ -240,6 +244,7 @@ signals: Q_REVISION(1) void optimizationHintsChanged(AbstractDeclarative::OptimizationHints hints); Q_REVISION(2) void polarChanged(bool enabled); Q_REVISION(2) void radialLabelOffsetChanged(float offset); + Q_REVISION(2) void horizontalAspectRatioChanged(qreal ratio); private: QPointer m_controller; diff --git a/tests/scattertest/main.cpp b/tests/scattertest/main.cpp index 53e94083..55515cb0 100644 --- a/tests/scattertest/main.cpp +++ b/tests/scattertest/main.cpp @@ -235,6 +235,13 @@ int main(int argc, char **argv) aspectRatioSlider->setValue(20); aspectRatioSlider->setMaximum(100); + QSlider *horizontalAspectRatioSlider = new QSlider(Qt::Horizontal, widget); + horizontalAspectRatioSlider->setTickInterval(30); + horizontalAspectRatioSlider->setTickPosition(QSlider::TicksBelow); + horizontalAspectRatioSlider->setMinimum(0); + horizontalAspectRatioSlider->setValue(0); + horizontalAspectRatioSlider->setMaximum(300); + QCheckBox *optimizationStaticCB = new QCheckBox(widget); optimizationStaticCB->setText(QStringLiteral("Static optimization")); optimizationStaticCB->setChecked(false); @@ -315,8 +322,10 @@ int main(int argc, char **argv) vLayout2->addWidget(fontList); vLayout2->addWidget(new QLabel(QStringLiteral("Adjust font size"))); vLayout2->addWidget(fontSizeSlider); - vLayout2->addWidget(new QLabel(QStringLiteral("Adjust aspect ratio"))); - vLayout2->addWidget(aspectRatioSlider, 1, Qt::AlignTop); + vLayout2->addWidget(new QLabel(QStringLiteral("Adjust vertical aspect ratio"))); + vLayout2->addWidget(aspectRatioSlider); + vLayout2->addWidget(new QLabel(QStringLiteral("Adjust horizontal aspect ratio"))); + vLayout2->addWidget(horizontalAspectRatioSlider, 1, Qt::AlignTop); vLayout2->addWidget(optimizationStaticCB); vLayout2->addWidget(orthoCB); vLayout2->addWidget(polarCB); @@ -427,6 +436,8 @@ int main(int argc, char **argv) &ScatterDataModifier::changeLabelRotation); QObject::connect(aspectRatioSlider, &QSlider::valueChanged, modifier, &ScatterDataModifier::setAspectRatio); + QObject::connect(horizontalAspectRatioSlider, &QSlider::valueChanged, modifier, + &ScatterDataModifier::setHorizontalAspectRatio); QObject::connect(radialLabelSlider, &QSlider::valueChanged, modifier, &ScatterDataModifier::changeRadialLabelOffset); diff --git a/tests/scattertest/scatterchart.cpp b/tests/scattertest/scatterchart.cpp index 5a0a5976..5db772b5 100644 --- a/tests/scattertest/scatterchart.cpp +++ b/tests/scattertest/scatterchart.cpp @@ -1042,10 +1042,16 @@ void ScatterDataModifier::setMaxZ(int max) void ScatterDataModifier::setAspectRatio(int ratio) { - float aspectRatio = float(ratio) / 10.0f; + qreal aspectRatio = qreal(ratio) / 10.0; m_chart->setAspectRatio(aspectRatio); } +void ScatterDataModifier::setHorizontalAspectRatio(int ratio) +{ + qreal aspectRatio = qreal(ratio) / 100.0; + m_chart->setHorizontalAspectRatio(aspectRatio); +} + QVector3D ScatterDataModifier::randVector() { QVector3D retvec = QVector3D( diff --git a/tests/scattertest/scatterchart.h b/tests/scattertest/scatterchart.h index e2e979f3..df2494b6 100644 --- a/tests/scattertest/scatterchart.h +++ b/tests/scattertest/scatterchart.h @@ -53,6 +53,7 @@ public: void setMaxY(int max); void setMaxZ(int max); void setAspectRatio(int ratio); + void setHorizontalAspectRatio(int ratio); void start(); void massiveDataTest(); void massiveTestScroll(); diff --git a/tests/surfacetest/graphmodifier.cpp b/tests/surfacetest/graphmodifier.cpp index 56cd23cc..1f5a2f8f 100644 --- a/tests/surfacetest/graphmodifier.cpp +++ b/tests/surfacetest/graphmodifier.cpp @@ -1574,6 +1574,12 @@ void GraphModifier::updateSamples() void GraphModifier::setAspectRatio(int ratio) { - float aspectRatio = float(ratio) / 10.0f; + qreal aspectRatio = qreal(ratio) / 10.0; m_graph->setAspectRatio(aspectRatio); } + +void GraphModifier::setHorizontalAspectRatio(int ratio) +{ + qreal aspectRatio = qreal(ratio) / 100.0; + m_graph->setHorizontalAspectRatio(aspectRatio); +} diff --git a/tests/surfacetest/graphmodifier.h b/tests/surfacetest/graphmodifier.h index e70d35f2..f472c1ec 100644 --- a/tests/surfacetest/graphmodifier.h +++ b/tests/surfacetest/graphmodifier.h @@ -114,6 +114,7 @@ public: void testDataOrdering(); void setAspectRatio(int ratio); + void setHorizontalAspectRatio(int ratio); public slots: void changeShadowQuality(int quality); diff --git a/tests/surfacetest/main.cpp b/tests/surfacetest/main.cpp index 87f009cb..95d4637e 100644 --- a/tests/surfacetest/main.cpp +++ b/tests/surfacetest/main.cpp @@ -223,6 +223,11 @@ int main(int argc, char *argv[]) aspectRatioSlider->setValue(20); aspectRatioSlider->setMaximum(100); + QSlider *horizontalAspectRatioSlider = new QSlider(Qt::Horizontal, widget); + horizontalAspectRatioSlider->setMinimum(0); + horizontalAspectRatioSlider->setValue(0); + horizontalAspectRatioSlider->setMaximum(300); + QLinearGradient gr(0, 0, 100, 1); gr.setColorAt(0.0, Qt::black); gr.setColorAt(0.33, Qt::blue); @@ -435,8 +440,10 @@ int main(int argc, char *argv[]) vLayout->addWidget(gridSliderX); vLayout->addWidget(gridSliderZ); #endif - vLayout->addWidget(new QLabel(QStringLiteral("Adjust aspect ratio"))); + vLayout->addWidget(new QLabel(QStringLiteral("Adjust vertical aspect ratio"))); vLayout->addWidget(aspectRatioSlider); + vLayout->addWidget(new QLabel(QStringLiteral("Adjust horizontal aspect ratio"))); + vLayout->addWidget(horizontalAspectRatioSlider); vLayout->addWidget(new QLabel(QStringLiteral("Adjust axis range"))); vLayout->addWidget(axisRangeSliderX); vLayout->addWidget(axisRangeSliderY); @@ -660,6 +667,8 @@ int main(int argc, char *argv[]) QObject::connect(aspectRatioSlider, &QSlider::valueChanged, modifier, &GraphModifier::setAspectRatio); + QObject::connect(horizontalAspectRatioSlider, &QSlider::valueChanged, + modifier, &GraphModifier::setHorizontalAspectRatio); #ifdef MULTI_SERIES modifier->setSeries1CB(series1CB); -- cgit v1.2.3