diff options
Diffstat (limited to 'src/quickcontrols/material/impl/RoundedElevationEffect.qml')
-rw-r--r-- | src/quickcontrols/material/impl/RoundedElevationEffect.qml | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/src/quickcontrols/material/impl/RoundedElevationEffect.qml b/src/quickcontrols/material/impl/RoundedElevationEffect.qml new file mode 100644 index 0000000000..c197823dc6 --- /dev/null +++ b/src/quickcontrols/material/impl/RoundedElevationEffect.qml @@ -0,0 +1,35 @@ +// Copyright (C) 2022 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only + +import QtQuick.Controls.Material +import QtQuick.Controls.Material.impl + +ElevationEffect { + required property int roundedScale + + _shadows: roundedScale === Material.NotRounded ? _defaultShadows : roundedShadows() + + function roundedShadows() { + // Make a deep copy. + let shadows = [..._defaultShadows] + for (let i = 0, strength = 0.95; i < shadows.length; ++i) { + // See comment on BoxShadow's strength property for why we do this. + shadows[i].strength = strength + // We don't want the strength to be too high for the controls with very slightly rounded + // corners, as they are quite close to the non-rounded ones in terms of not needing adjustments. + // This is still not great for the higher elevations for ExtraSmallScale, but it's as good + // as I can get it. + strength = Math.max(0.05, strength - (roundedScale > Material.ExtraSmallScale ? 0.1 : 0.3)) + + // The values at index 0 are already 0, and we don't want our Math.max(1, ...) code to affect them. + if (i > 0) { + // The blur values for e.g. buttons with rounded corners are too large, so we reduce them. + for (let angularShadowIndex = 0; angularShadowIndex < shadows[i].angularValues.length; ++angularShadowIndex) { + shadows[i].angularValues[angularShadowIndex].blur = + Math.max(1, Math.floor(shadows[i].angularValues[angularShadowIndex].blur / 4)) + } + } + } + return shadows + } +} |