From b2e4f1485df801a9e7f3812a66e4e7fc6c578980 Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Mon, 3 Mar 2014 13:49:27 +0200 Subject: Enable querying shadow support from graphs Also some example tweaking. Change-Id: If69e9d3617afc37b88fed4fd0e02ae19f0af7f78 Reviewed-by: Mika Salmela --- .../datavisualization/qmlbars/qml/qmlbars/main.qml | 3 ++- .../qmlcustominput/qml/qmlcustominput/main.qml | 3 ++- .../qmllegend/qml/qmllegend/main.qml | 21 ++++++++++++--------- .../qmloscilloscope/qml/qmloscilloscope/main.qml | 2 +- .../qmlscatter/qml/qmlscatter/main.qml | 3 ++- .../qmlsurface/qml/qmlsurface/main.qml | 7 +------ .../qmlsurfacelayers/qml/qmlsurfacelayers/main.qml | 3 ++- ...qtdatavisualization-qml-abstractdeclarative.qdoc | 6 ++++++ .../engine/abstract3dcontroller.cpp | 9 +++++++++ .../engine/abstract3dcontroller_p.h | 1 + src/datavisualization/engine/qabstract3dgraph.cpp | 9 +++++++++ src/datavisualization/engine/qabstract3dgraph.h | 1 + src/datavisualizationqml2/abstractdeclarative.cpp | 5 +++++ src/datavisualizationqml2/abstractdeclarative_p.h | 4 ++++ 14 files changed, 57 insertions(+), 20 deletions(-) diff --git a/examples/datavisualization/qmlbars/qml/qmlbars/main.qml b/examples/datavisualization/qmlbars/qml/qmlbars/main.qml index 3711a504..0df8d8ae 100644 --- a/examples/datavisualization/qmlbars/qml/qmlbars/main.qml +++ b/examples/datavisualization/qmlbars/qml/qmlbars/main.qml @@ -210,8 +210,9 @@ Rectangle { id: shadowToggle Layout.fillWidth: true Layout.fillHeight: true - text: "Hide Shadows" + text: barGraph.shadowsSupported ? "Hide Shadows" : "Shadows not supported" clip: true + enabled: barGraph.shadowsSupported onClicked: { if (barGraph.shadowQuality == AbstractGraph3D.ShadowQualityNone) { barGraph.shadowQuality = AbstractGraph3D.ShadowQualityMedium; diff --git a/examples/datavisualization/qmlcustominput/qml/qmlcustominput/main.qml b/examples/datavisualization/qmlcustominput/qml/qmlcustominput/main.qml index e81dd749..bdabb420 100644 --- a/examples/datavisualization/qmlcustominput/qml/qmlcustominput/main.qml +++ b/examples/datavisualization/qmlcustominput/qml/qmlcustominput/main.qml @@ -190,7 +190,8 @@ Rectangle { id: shadowToggle Layout.fillHeight: true Layout.minimumWidth: parent.width / 3 // 3 buttons divided equally in the layout - text: "Hide Shadows" + text: scatterGraph.shadowsSupported ? "Hide Shadows" : "Shadows not supported" + enabled: scatterGraph.shadowsSupported onClicked: { if (scatterGraph.shadowQuality === AbstractGraph3D.ShadowQualityNone) { diff --git a/examples/datavisualization/qmllegend/qml/qmllegend/main.qml b/examples/datavisualization/qmllegend/qml/qmllegend/main.qml index 6999a67b..f7e2d803 100644 --- a/examples/datavisualization/qmllegend/qml/qmllegend/main.qml +++ b/examples/datavisualization/qmllegend/qml/qmllegend/main.qml @@ -45,10 +45,7 @@ Rectangle { Item { id: dataView - anchors.top: buttonLayout.bottom - anchors.bottom: parent.bottom - anchors.left: parent.left - anchors.right: parent.right + anchors.fill: parent Bars3D { id: barGraph @@ -99,12 +96,18 @@ Rectangle { Rectangle { property int legendLocation: 3 + // Make the height and width fractional of main view height and width. + // Reverse the relation if screen is in portrait - this makes legend look the same + // if the orientation is rotated. + property int fractionalHeight: mainView.width > mainView.height ? mainView.height / 5 : mainView.width / 5 + property int fractionalWidth: mainView.width > mainView.height ? mainView.width / 5 : mainView.height / 5 id: legendPanel - width: 200 - height: 100 + width: fractionalWidth > 150 ? fractionalWidth : 150 + // Adjust legendpanel height to avoid gaps between layouted items. + height: fractionalHeight > 99 ? fractionalHeight - fractionalHeight % 3 : 99 border.color: barGraph.theme.labelTextColor - border.width: 2 + border.width: 3 color: "#00000000" // Transparent //! [0] @@ -152,7 +155,7 @@ Rectangle { when: legendPanel.legendLocation === 1 AnchorChanges { target: legendPanel - anchors.top: dataView.top + anchors.top: buttonLayout.bottom anchors.bottom: undefined anchors.left: dataView.left anchors.right: undefined @@ -163,7 +166,7 @@ Rectangle { when: legendPanel.legendLocation === 2 AnchorChanges { target: legendPanel - anchors.top: dataView.top + anchors.top: buttonLayout.bottom anchors.bottom: undefined anchors.left: undefined anchors.right: dataView.right diff --git a/examples/datavisualization/qmloscilloscope/qml/qmloscilloscope/main.qml b/examples/datavisualization/qmloscilloscope/qml/qmloscilloscope/main.qml index eeaeab40..81884154 100644 --- a/examples/datavisualization/qmloscilloscope/qml/qmloscilloscope/main.qml +++ b/examples/datavisualization/qmloscilloscope/qml/qmloscilloscope/main.qml @@ -239,7 +239,7 @@ Item { Layout.fillHeight: true Layout.fillWidth: true - text: "Show Flat" + text: surfaceSeries.flatShadingSupported ? "Show Flat" : "Flat not supported" enabled: surfaceSeries.flatShadingSupported onClicked: { diff --git a/examples/datavisualization/qmlscatter/qml/qmlscatter/main.qml b/examples/datavisualization/qmlscatter/qml/qmlscatter/main.qml index 69cb2834..6664dcfd 100644 --- a/examples/datavisualization/qmlscatter/qml/qmlscatter/main.qml +++ b/examples/datavisualization/qmlscatter/qml/qmlscatter/main.qml @@ -139,7 +139,8 @@ Rectangle { id: shadowToggle Layout.fillHeight: true Layout.fillWidth: true - text: "Hide Shadows" + text: scatterGraph.shadowsSupported ? "Hide Shadows" : "Shadows not supported" + enabled: scatterGraph.shadowsSupported onClicked: { if (scatterGraph.shadowQuality === AbstractGraph3D.ShadowQualityNone) { scatterGraph.shadowQuality = AbstractGraph3D.ShadowQualitySoftLow; diff --git a/examples/datavisualization/qmlsurface/qml/qmlsurface/main.qml b/examples/datavisualization/qmlsurface/qml/qmlsurface/main.qml index f11d15f3..6eef6cc4 100644 --- a/examples/datavisualization/qmlsurface/qml/qmlsurface/main.qml +++ b/examples/datavisualization/qmlsurface/qml/qmlsurface/main.qml @@ -93,11 +93,6 @@ Rectangle { yPosRole: "height" } //! [6] - - onFlatShadingSupportedChanged: { - flatShadingToggle.text = "Flat not supported" - } - onDrawModeChanged: checkState() } //! [4] @@ -169,7 +164,7 @@ Rectangle { id: flatShadingToggle Layout.fillWidth: true Layout.fillHeight: true - text: "Show Flat" + text: surfaceSeries.flatShadingSupported ? "Show Flat" : "Flat not supported" enabled: surfaceSeries.flatShadingSupported //! [2] onClicked: { diff --git a/examples/datavisualization/qmlsurfacelayers/qml/qmlsurfacelayers/main.qml b/examples/datavisualization/qmlsurfacelayers/qml/qmlsurfacelayers/main.qml index 0be991bc..1c15d919 100644 --- a/examples/datavisualization/qmlsurfacelayers/qml/qmlsurfacelayers/main.qml +++ b/examples/datavisualization/qmlsurfacelayers/qml/qmlsurfacelayers/main.qml @@ -217,9 +217,10 @@ Item { NewButton { id: shadowButton - text: "Show Shadows" Layout.fillWidth: true Layout.minimumHeight: 40 + text: surfaceLayers.shadowsSupported ? "Show Shadows" : "Shadows not supported" + enabled: surfaceLayers.shadowsSupported onClicked: { if (surfaceLayers.shadowQuality === AbstractGraph3D.ShadowQualityNone) { surfaceLayers.shadowQuality = AbstractGraph3D.ShadowQualityLow diff --git a/src/datavisualization/doc/src/qtdatavisualization-qml-abstractdeclarative.qdoc b/src/datavisualization/doc/src/qtdatavisualization-qml-abstractdeclarative.qdoc index 5b251768..891cc5c1 100644 --- a/src/datavisualization/doc/src/qtdatavisualization-qml-abstractdeclarative.qdoc +++ b/src/datavisualization/doc/src/qtdatavisualization-qml-abstractdeclarative.qdoc @@ -44,6 +44,12 @@ Shadow quality. */ +/*! + \qmlproperty bool AbstractGraph3D::shadowsSupported + This read-only property indicates if shadows are supported with the + current configuration or not. OpenGL ES2 configurations do not support shadows. + */ + /*! \qmlproperty Scene3D AbstractGraph3D::scene Read only Q3DScene that can be used to access e.g. camera object. diff --git a/src/datavisualization/engine/abstract3dcontroller.cpp b/src/datavisualization/engine/abstract3dcontroller.cpp index acb63f0a..ec18a850 100644 --- a/src/datavisualization/engine/abstract3dcontroller.cpp +++ b/src/datavisualization/engine/abstract3dcontroller.cpp @@ -730,6 +730,15 @@ QAbstract3DGraph::ShadowQuality Abstract3DController::shadowQuality() const return m_shadowQuality; } +bool Abstract3DController::shadowsSupported() const +{ +#if defined(QT_OPENGL_ES_2) + return false; +#else + return true; +#endif +} + bool Abstract3DController::isSlicingActive() const { return m_scene->isSlicingActive(); diff --git a/src/datavisualization/engine/abstract3dcontroller_p.h b/src/datavisualization/engine/abstract3dcontroller_p.h index 5bae17d6..06be450e 100644 --- a/src/datavisualization/engine/abstract3dcontroller_p.h +++ b/src/datavisualization/engine/abstract3dcontroller_p.h @@ -202,6 +202,7 @@ public: virtual void setShadowQuality(QAbstract3DGraph::ShadowQuality quality); virtual QAbstract3DGraph::ShadowQuality shadowQuality() const; + virtual bool shadowsSupported() const; bool isSlicingActive() const; void setSlicingActive(bool isSlicing); diff --git a/src/datavisualization/engine/qabstract3dgraph.cpp b/src/datavisualization/engine/qabstract3dgraph.cpp index cce2c235..bde5b585 100644 --- a/src/datavisualization/engine/qabstract3dgraph.cpp +++ b/src/datavisualization/engine/qabstract3dgraph.cpp @@ -330,6 +330,15 @@ QAbstract3DGraph::ShadowQuality QAbstract3DGraph::shadowQuality() const return d_ptr->m_visualController->shadowQuality(); } +/*! + * \return true if shadows are supported with the current configuration. + * OpenGL ES2 configurations do not support shadows. + */ +bool QAbstract3DGraph::shadowsSupported() const +{ + return d_ptr->m_visualController->shadowsSupported(); +} + /*! * \property QAbstract3DGraph::scene * diff --git a/src/datavisualization/engine/qabstract3dgraph.h b/src/datavisualization/engine/qabstract3dgraph.h index adf67912..f11bbd90 100644 --- a/src/datavisualization/engine/qabstract3dgraph.h +++ b/src/datavisualization/engine/qabstract3dgraph.h @@ -89,6 +89,7 @@ public: void setShadowQuality(ShadowQuality quality); ShadowQuality shadowQuality() const; + virtual bool shadowsSupported() const; Q3DScene *scene() const; diff --git a/src/datavisualizationqml2/abstractdeclarative.cpp b/src/datavisualizationqml2/abstractdeclarative.cpp index de5aa9aa..d07ea540 100644 --- a/src/datavisualizationqml2/abstractdeclarative.cpp +++ b/src/datavisualizationqml2/abstractdeclarative.cpp @@ -202,6 +202,11 @@ AbstractDeclarative::ShadowQuality AbstractDeclarative::shadowQuality() const return ShadowQuality(m_controller->shadowQuality()); } +bool AbstractDeclarative::shadowsSupported() const +{ + return m_controller->shadowsSupported(); +} + void AbstractDeclarative::setSharedController(Abstract3DController *controller) { Q_ASSERT(controller); diff --git a/src/datavisualizationqml2/abstractdeclarative_p.h b/src/datavisualizationqml2/abstractdeclarative_p.h index cfe62e3c..428ca0b5 100644 --- a/src/datavisualizationqml2/abstractdeclarative_p.h +++ b/src/datavisualizationqml2/abstractdeclarative_p.h @@ -60,6 +60,7 @@ class AbstractDeclarative : public QQuickItem Q_FLAGS(SelectionFlag SelectionFlags) Q_PROPERTY(SelectionFlags selectionMode READ selectionMode WRITE setSelectionMode NOTIFY selectionModeChanged) Q_PROPERTY(ShadowQuality shadowQuality READ shadowQuality WRITE setShadowQuality NOTIFY shadowQualityChanged) + Q_PROPERTY(bool shadowsSupported READ shadowsSupported NOTIFY shadowsSupportedChanged) Q_PROPERTY(int msaaSamples READ msaaSamples WRITE setMsaaSamples NOTIFY msaaSamplesChanged) Q_PROPERTY(Declarative3DScene* scene READ scene NOTIFY sceneChanged) Q_PROPERTY(QAbstract3DInputHandler* inputHandler READ inputHandler WRITE setInputHandler NOTIFY inputHandlerChanged) @@ -110,6 +111,8 @@ public: virtual void setShadowQuality(ShadowQuality quality); virtual AbstractDeclarative::ShadowQuality shadowQuality() const; + virtual bool shadowsSupported() const; + virtual void setMsaaSamples(int samples); virtual int msaaSamples() const; @@ -158,6 +161,7 @@ protected: signals: void selectionModeChanged(SelectionFlags mode); void shadowQualityChanged(ShadowQuality quality); + void shadowsSupportedChanged(bool supported); void msaaSamplesChanged(int samples); void sceneChanged(Q3DScene *scene); void inputHandlerChanged(QAbstract3DInputHandler *inputHandler); -- cgit v1.2.3