Revision control

++ // Copyright (C) 2024 The Qt Company Ltd.
++ // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
++
++ import QtQuick 2.15
++ import QtQuick.Layouts 1.15
++ import HelperWidgets 2.0
++ import StudioTheme 1.0 as StudioTheme
++
++ Section {
++ caption: qsTr("Cascades")
++ width: parent.width
++
++ SectionLayout {
++
++ PropertyLabel {
++ text: qsTr("No. Splits")
++ tooltip: qsTr("The number of cascade splits for this light.")
++ }
++
++ SecondColumnLayout {
++ ComboBox {
++ id: numSplitsComboBox
++ valueType: ComboBox.ValueType.Integer
++ model: [0, 1, 2, 3]
++ backendValue: backendValues.csmNumSplits
++ implicitWidth: StudioTheme.Values.singleControlColumnWidth
++ + StudioTheme.Values.actionIndicatorWidth
++ }
++
++ ExpandingSpacer {}
++ }
++
++ PropertyLabel {
++ visible: numSplitsComboBox.currentIndex > 0
++ text: qsTr("Blend ratio")
++ tooltip: qsTr("Defines how much of the shadow of any cascade should be blended together with the previous one.")
++ }
++
++ SecondColumnLayout {
++ visible: numSplitsComboBox.currentIndex > 0
++ SpinBox {
++ minimumValue: 0
++ maximumValue: 1
++ decimals: 2
++ stepSize: 0.01
++ backendValue: backendValues.csmBlendRatio
++ sliderIndicatorVisible: true
++ implicitWidth: StudioTheme.Values.singleControlColumnWidth
++ + StudioTheme.Values.actionIndicatorWidth
++ }
++
++ ExpandingSpacer {}
++ }
++
++ PropertyLabel {
++ visible: numSplitsComboBox.currentIndex > 0
++ text: qsTr("Split 1")
++ tooltip: qsTr("Defines where the first cascade of the shadow map split will occur.")
++ }
++
++ SecondColumnLayout {
++ visible: numSplitsComboBox.currentIndex > 0
++ SpinBox {
++ minimumValue: 0
++ maximumValue: 1
++ decimals: 2
++ stepSize: 0.01
++ backendValue: backendValues.csmSplit1
++ sliderIndicatorVisible: true
++ implicitWidth: StudioTheme.Values.singleControlColumnWidth
++ + StudioTheme.Values.actionIndicatorWidth
++ }
++
++ ExpandingSpacer {}
++ }
++
++ PropertyLabel {
++ visible: numSplitsComboBox.currentIndex > 1
++ text: qsTr("Split 2")
++ tooltip: qsTr("Defines where the second cascade of the shadow map split will occur.")
++ }
++
++ SecondColumnLayout {
++ visible: numSplitsComboBox.currentIndex > 1
++ SpinBox {
++ minimumValue: 0
++ maximumValue: 1
++ decimals: 2
++ stepSize: 0.01
++ backendValue: backendValues.csmSplit2
++ sliderIndicatorVisible: true
++ implicitWidth: StudioTheme.Values.singleControlColumnWidth
++ + StudioTheme.Values.actionIndicatorWidth
++ }
++
++ ExpandingSpacer {}
++ }
++
++ PropertyLabel {
++ visible: numSplitsComboBox.currentIndex > 2
++ text: qsTr("Split 3")
++ tooltip: qsTr("Defines where the third cascade of the shadow map split will occur.")
++ }
++
++ SecondColumnLayout {
++ visible: numSplitsComboBox.currentIndex > 2
++ SpinBox {
++ minimumValue: 0
++ maximumValue: 1
++ decimals: 2
++ stepSize: 0.01
++ backendValue: backendValues.csmSplit3
++ sliderIndicatorVisible: true
++ implicitWidth: StudioTheme.Values.singleControlColumnWidth
++ + StudioTheme.Values.actionIndicatorWidth
++ }
++
++ ExpandingSpacer {}
++ }
++
++ PropertyLabel {
++ text: qsTr("Lock Shadowmap Texels")
++ tooltip: qsTr("Locks the shadowmap texels for this light to remove shadow edge shimmering.")
++ }
++
++ SecondColumnLayout {
++ CheckBox {
++ id: lockShadowmapTexelsCheckBox
++ text: backendValues.lockShadowmapTexels.valueToString
++ backendValue: backendValues.lockShadowmapTexels
++ implicitWidth: StudioTheme.Values.twoControlColumnWidth
++ + StudioTheme.Values.actionIndicatorWidth
++ }
++ ExpandingSpacer {}
++ }
++ }
++ }