diff options
author | Sakaria Pouke <[email protected]> | 2025-05-21 12:22:43 +0300 |
---|---|---|
committer | Sami Varanka <[email protected]> | 2025-06-01 09:19:10 +0300 |
commit | 52a361988d84ed893ac4cea36fe11e49d2c58fa5 (patch) | |
tree | df1f384507d2700ce4ffcff7babe57cbc5e6883f /src/graphs3d/qml | |
parent | 65f74386ef747a1ac6c0d223191cc20aa2feb718 (diff) |
Fixes: QTBUG-136978
Change-Id: I57dc414e28742b5cce2ed6facae745ce90881a99
Reviewed-by: Sami Varanka <[email protected]>
Diffstat (limited to 'src/graphs3d/qml')
-rw-r--r-- | src/graphs3d/qml/qquickgraphsbars.cpp | 12 | ||||
-rw-r--r-- | src/graphs3d/qml/qquickgraphsbars_p.h | 1 | ||||
-rw-r--r-- | src/graphs3d/qml/qquickgraphsitem.cpp | 8 | ||||
-rw-r--r-- | src/graphs3d/qml/qquickgraphsitem_p.h | 1 | ||||
-rw-r--r-- | src/graphs3d/qml/qquickgraphsscatter.cpp | 31 | ||||
-rw-r--r-- | src/graphs3d/qml/qquickgraphsscatter_p.h | 5 | ||||
-rw-r--r-- | src/graphs3d/qml/qquickgraphssurface.cpp | 15 | ||||
-rw-r--r-- | src/graphs3d/qml/qquickgraphssurface_p.h | 2 | ||||
-rw-r--r-- | src/graphs3d/qml/resources/BarsMaterial.qml | 2 | ||||
-rw-r--r-- | src/graphs3d/qml/resources/BarsMaterialInstancing.qml | 2 | ||||
-rw-r--r-- | src/graphs3d/qml/resources/ScatterMaterial.qml | 2 | ||||
-rw-r--r-- | src/graphs3d/qml/resources/ScatterMaterialInstancing.qml | 2 | ||||
-rw-r--r-- | src/graphs3d/qml/resources/SurfaceMaterial.qml | 2 |
13 files changed, 78 insertions, 7 deletions
diff --git a/src/graphs3d/qml/qquickgraphsbars.cpp b/src/graphs3d/qml/qquickgraphsbars.cpp index f893339f..63ad8acc 100644 --- a/src/graphs3d/qml/qquickgraphsbars.cpp +++ b/src/graphs3d/qml/qquickgraphsbars.cpp @@ -1525,6 +1525,12 @@ void QQuickGraphsBars::handleValueColoringChanged() emitNeedRender(); } +void QQuickGraphsBars::handleLightingModeChanged() +{ + setSeriesVisualsDirty(true); + emitNeedRender(); +} + void QQuickGraphsBars::connectSeries(QBar3DSeries *series) { m_meshType = series->mesh(); @@ -2005,6 +2011,9 @@ void QQuickGraphsBars::updateBarVisuals(QBar3DSeries *series) auto customMaterial = qobject_cast<QQuick3DCustomMaterial *>(materialsRef.at(0)); customMaterial->setProperty("valueColoring", series->isValueColoringEnabled()); customMaterial->setProperty("heightValue", barList.at(i)->heightValue); + customMaterial->setProperty("shaded", + series->lightingMode() + == QAbstract3DSeries::LightingMode::Shaded); } } else if (optimizationHint() == QtGraphs3D::OptimizationHint::Default) { for (int i = 0; i < barList.count(); i++) { @@ -2039,6 +2048,9 @@ void QQuickGraphsBars::updateBarVisuals(QBar3DSeries *series) auto customMaterial = qobject_cast<QQuick3DCustomMaterial *>(materialsRef.at(0)); customMaterial->setProperty("valueColoring", series->isValueColoringEnabled()); customMaterial->setProperty("rootScale", rootNode()->scale().y()); + customMaterial->setProperty("shaded", + series->lightingMode() + == QAbstract3DSeries::LightingMode::Shaded); } } } diff --git a/src/graphs3d/qml/qquickgraphsbars_p.h b/src/graphs3d/qml/qquickgraphsbars_p.h index 8d7502e3..281f8a7f 100644 --- a/src/graphs3d/qml/qquickgraphsbars_p.h +++ b/src/graphs3d/qml/qquickgraphsbars_p.h @@ -139,6 +139,7 @@ public: void handleAxisRangeChangedBySender(QObject *sender) override; void adjustAxisRanges() override; + void handleLightingModeChanged() override; void setSelectedBar(QPoint coord, QBar3DSeries *series, bool enterSlice); diff --git a/src/graphs3d/qml/qquickgraphsitem.cpp b/src/graphs3d/qml/qquickgraphsitem.cpp index f84c1ba1..b6d63c3f 100644 --- a/src/graphs3d/qml/qquickgraphsitem.cpp +++ b/src/graphs3d/qml/qquickgraphsitem.cpp @@ -1558,6 +1558,10 @@ void QQuickGraphsItem::insertSeries(qsizetype index, QAbstract3DSeries *series) &QAbstract3DSeries::visibleChanged, this, &QQuickGraphsItem::handleSeriesVisibilityChanged); + QObject::connect(series, + &QAbstract3DSeries::lightingModeChanged, + this, + &QQuickGraphsItem::handleLightingModeChanged); series->d_func()->resetToTheme(*theme(), oldSize, false); qCDebug(lcSeries3D) << __FUNCTION__ << "insert" << series << "at index of:" << index; @@ -1575,6 +1579,10 @@ void QQuickGraphsItem::removeSeriesInternal(QAbstract3DSeries *series) &QAbstract3DSeries::visibleChanged, this, &QQuickGraphsItem::handleSeriesVisibilityChanged); + QObject::disconnect(series, + &QAbstract3DSeries::lightingModeChanged, + this, + &QQuickGraphsItem::handleLightingModeChanged); series->d_func()->setGraph(0); m_isDataDirty = true; m_isSeriesVisualsDirty = true; diff --git a/src/graphs3d/qml/qquickgraphsitem_p.h b/src/graphs3d/qml/qquickgraphsitem_p.h index 7f929d1f..c42177b9 100644 --- a/src/graphs3d/qml/qquickgraphsitem_p.h +++ b/src/graphs3d/qml/qquickgraphsitem_p.h @@ -271,6 +271,7 @@ public: virtual void handleAxisTitleFixedChangedBySender(QObject *sender); virtual void handleAxisTitleOffsetChangedBySender(QObject *sender); virtual void handleSeriesVisibilityChangedBySender(QObject *sender); + virtual void handleLightingModeChanged() = 0; virtual void adjustAxisRanges() = 0; bool graphPositionQueryPending() const { return m_graphPositionQueryPending; } diff --git a/src/graphs3d/qml/qquickgraphsscatter.cpp b/src/graphs3d/qml/qquickgraphsscatter.cpp index 5aa007bc..d0fe3545 100644 --- a/src/graphs3d/qml/qquickgraphsscatter.cpp +++ b/src/graphs3d/qml/qquickgraphsscatter.cpp @@ -400,6 +400,8 @@ void QQuickGraphsScatter::updateScatterGraphItemVisuals(ScatterModel *graphModel ? true : false; + const bool shaded = graphModel->series->lightingMode() + == QAbstract3DSeries::LightingMode::Shaded; if (optimizationHint() == QtGraphs3D::OptimizationHint::Legacy) { // Release resources that might not have been deleted even though deleteLater had been set if (m_customView) @@ -450,11 +452,13 @@ void QQuickGraphsScatter::updateScatterGraphItemVisuals(ScatterModel *graphModel updateMaterialProperties(graphModel->baseRef, graphModel->seriesTexture, graphModel->series->baseColor(), - transparency); + transparency, + shaded); updateMaterialProperties(graphModel->selectionRef, graphModel->highlightTexture, - graphModel->series->singleHighlightColor()); + graphModel->series->singleHighlightColor(), + shaded); } else if (optimizationHint() == QtGraphs3D::OptimizationHint::Default) { graphModel->instancingRootItem->setVisible(true); @@ -481,7 +485,8 @@ void QQuickGraphsScatter::updateScatterGraphItemVisuals(ScatterModel *graphModel updateMaterialProperties(graphModel->instancingRootItem, graphModel->seriesTexture, graphModel->series->baseColor(), - transparency); + transparency, + shaded); } else { auto textureData = static_cast<QQuickGraphsTextureData *>( graphModel->seriesTexture->textureData()); @@ -526,7 +531,8 @@ void QQuickGraphsScatter::updateScatterGraphItemVisuals(ScatterModel *graphModel QStringLiteral(":/materials/ScatterMaterial")); updateMaterialProperties(graphModel->selectionIndicator, graphModel->highlightTexture, - graphModel->series->singleHighlightColor()); + graphModel->series->singleHighlightColor(), + shaded); graphModel->selectionIndicator->setCastsShadows(!usePoint); } else { // Rangegradient @@ -639,6 +645,9 @@ void QQuickGraphsScatter::updateInstancedMaterialProperties(ScatterModel *graphM auto customMaterial = static_cast<QQuick3DCustomMaterial *>(materialsRef.at(0)); customMaterial->setProperty("transparency", transparency); + customMaterial->setProperty("shaded", + graphModel->series->lightingMode() + == QAbstract3DSeries::LightingMode::Shaded); QVariant textureInputAsVariant = customMaterial->property("custex"); QQuick3DShaderUtilsTextureInput *textureInput = textureInputAsVariant @@ -659,12 +668,14 @@ void QQuickGraphsScatter::updateInstancedMaterialProperties(ScatterModel *graphM void QQuickGraphsScatter::updateMaterialProperties(QQuick3DModel *item, QQuick3DTexture *texture, QColor color, - const bool transparency) + const bool transparency, + const bool shaded) { QQmlListReference materialsRef(item, "materials"); auto customMaterial = static_cast<QQuick3DCustomMaterial *>(materialsRef.at(0)); customMaterial->setProperty("transparency", transparency); customMaterial->setProperty("rootScale", rootNode()->scale().y()); + customMaterial->setProperty("shaded", shaded); int style = customMaterial->property("colorStyle").value<int>(); if (style == 0) { @@ -1001,6 +1012,16 @@ void QQuickGraphsScatter::handleAxisRangeChangedBySender(QObject *sender) setSelectedItem(m_selectedItem, m_selectedItemSeries); } +void QQuickGraphsScatter::handleLightingModeChanged() { + auto series = static_cast<QScatter3DSeries *>(QObject::sender()); + for (auto model : m_scatterGraphs) { + if (model->series == series) { + updateScatterGraphItemVisuals(model); + break; + } + } +} + QQmlListProperty<QScatter3DSeries> QQuickGraphsScatter::seriesList() { return QQmlListProperty<QScatter3DSeries>(this, diff --git a/src/graphs3d/qml/qquickgraphsscatter_p.h b/src/graphs3d/qml/qquickgraphsscatter_p.h index 97287a04..1018eca8 100644 --- a/src/graphs3d/qml/qquickgraphsscatter_p.h +++ b/src/graphs3d/qml/qquickgraphsscatter_p.h @@ -93,6 +93,8 @@ public: void setSeriesVisualsDirty() { m_isSeriesVisualsDirty = true; } bool isDataDirty() const { return m_isDataDirty; } + void handleLightingModeChanged() override; + public Q_SLOTS: void handleAxisXChanged(QAbstract3DAxis *axis) override; void handleAxisYChanged(QAbstract3DAxis *axis) override; @@ -218,7 +220,8 @@ private: void updateMaterialProperties(QQuick3DModel *item, QQuick3DTexture *texture, QColor color = Qt::white, - const bool transparency = false); + const bool transparency = false, + const bool shaded = true); QQuick3DTexture *createTexture(); QQuick3DModel *createDataItemModel(QAbstract3DSeries::Mesh meshType); QQuick3DNode *createSeriesRoot(); diff --git a/src/graphs3d/qml/qquickgraphssurface.cpp b/src/graphs3d/qml/qquickgraphssurface.cpp index 518d109b..04657c81 100644 --- a/src/graphs3d/qml/qquickgraphssurface.cpp +++ b/src/graphs3d/qml/qquickgraphssurface.cpp @@ -265,6 +265,17 @@ void QQuickGraphsSurface::changeSlicePointerMeshTypeForSeries(QAbstract3DSeries: changeSlicePointerForSeries(getMeshFileName(mesh, series), series); } +void QQuickGraphsSurface::handleLightingModeChanged() +{ + auto series = static_cast<QSurface3DSeries *>(QObject::sender()); + for (auto model : m_model) { + if (model->series == series) { + updateMaterial(model); + break; + } + } +} + QString QQuickGraphsSurface::getMeshFileName(QAbstract3DSeries::Mesh mesh, QSurface3DSeries *series) const { @@ -1980,7 +1991,9 @@ void QQuickGraphsSurface::updateMaterial(SurfaceModel *model) material->setParentItem(model->model); material->setCullMode(QQuick3DMaterial::NoCulling); material->setProperty("flatShading", flatShading); - + material->setProperty("shaded", + model->series->lightingMode() + == QAbstract3DSeries::LightingMode::Shaded); } if (textured) { diff --git a/src/graphs3d/qml/qquickgraphssurface_p.h b/src/graphs3d/qml/qquickgraphssurface_p.h index db8cff67..81fa789c 100644 --- a/src/graphs3d/qml/qquickgraphssurface_p.h +++ b/src/graphs3d/qml/qquickgraphssurface_p.h @@ -144,6 +144,8 @@ public: void handleSeriesVisibilityChangedBySender(QObject *sender) override; void adjustAxisRanges() override; + void handleLightingModeChanged() override; + QSharedPointer<QQuickItemGrabResult> renderSliceToImage(int index, int requestedIndex, QtGraphs3D::SliceType sliceType); Q_REVISION(6, 10) Q_INVOKABLE void renderSliceToImage(int index, int requestedIndex, diff --git a/src/graphs3d/qml/resources/BarsMaterial.qml b/src/graphs3d/qml/resources/BarsMaterial.qml index d08c4f11..f038d729 100644 --- a/src/graphs3d/qml/resources/BarsMaterial.qml +++ b/src/graphs3d/qml/resources/BarsMaterial.qml @@ -18,6 +18,8 @@ CustomMaterial { property real specularBrightness: 0.25 readonly property real shininess: (1.0 - specularBrightness) * 100 + property bool shaded: false + shadingMode: CustomMaterial.Shaded sourceBlend: !transparency ? CustomMaterial.NoBlend : CustomMaterial.SrcAlpha destinationBlend: !transparency ? CustomMaterial.NoBlend : CustomMaterial.OneMinusSrcAlpha diff --git a/src/graphs3d/qml/resources/BarsMaterialInstancing.qml b/src/graphs3d/qml/resources/BarsMaterialInstancing.qml index 4424009e..66187083 100644 --- a/src/graphs3d/qml/resources/BarsMaterialInstancing.qml +++ b/src/graphs3d/qml/resources/BarsMaterialInstancing.qml @@ -18,6 +18,8 @@ CustomMaterial { property real specularBrightness: 0.25 readonly property real shininess: (1.0 - specularBrightness) * 100 + property bool shaded: false + shadingMode: CustomMaterial.Shaded sourceBlend: !transparency ? CustomMaterial.NoBlend : CustomMaterial.SrcAlpha destinationBlend: !transparency ? CustomMaterial.NoBlend : CustomMaterial.OneMinusSrcAlpha diff --git a/src/graphs3d/qml/resources/ScatterMaterial.qml b/src/graphs3d/qml/resources/ScatterMaterial.qml index 53873249..ef37f2a2 100644 --- a/src/graphs3d/qml/resources/ScatterMaterial.qml +++ b/src/graphs3d/qml/resources/ScatterMaterial.qml @@ -16,6 +16,8 @@ CustomMaterial { property real specularBrightness: 0.25 readonly property real shininess: (1.0 - specularBrightness) * 100 + property bool shaded: false + shadingMode: CustomMaterial.Shaded sourceBlend: !transparency ? CustomMaterial.NoBlend : CustomMaterial.SrcAlpha destinationBlend: !transparency ? CustomMaterial.NoBlend : CustomMaterial.OneMinusSrcAlpha diff --git a/src/graphs3d/qml/resources/ScatterMaterialInstancing.qml b/src/graphs3d/qml/resources/ScatterMaterialInstancing.qml index 9db1674d..fa14da18 100644 --- a/src/graphs3d/qml/resources/ScatterMaterialInstancing.qml +++ b/src/graphs3d/qml/resources/ScatterMaterialInstancing.qml @@ -16,6 +16,8 @@ CustomMaterial { property real specularBrightness: 0.25 readonly property real shininess: (1.0 - specularBrightness) * 100 + property bool shaded: false + shadingMode: CustomMaterial.Shaded sourceBlend: !transparency ? CustomMaterial.NoBlend : CustomMaterial.SrcAlpha destinationBlend: !transparency ? CustomMaterial.NoBlend : CustomMaterial.OneMinusSrcAlpha diff --git a/src/graphs3d/qml/resources/SurfaceMaterial.qml b/src/graphs3d/qml/resources/SurfaceMaterial.qml index 0d2ac4e3..f96eeeea 100644 --- a/src/graphs3d/qml/resources/SurfaceMaterial.qml +++ b/src/graphs3d/qml/resources/SurfaceMaterial.qml @@ -35,6 +35,8 @@ CustomMaterial { property real specularBrightness: 0.25 readonly property real shininess: (1.0 - specularBrightness) * 100 + property bool shaded: false + shadingMode: CustomMaterial.Shaded vertexShader: "qrc:/shaders/surfacevert" fragmentShader: "qrc:/shaders/surfacefrag" |