summaryrefslogtreecommitdiff
path: root/raveos-theme/hyprland/theme-data/DankMaterialShell/quickshell/Common/ElevationShadow.qml
blob: dab80cdb8f86982d43fae819f1bc8793294ef136 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
pragma ComponentBehavior: Bound

import QtQuick
import QtQuick.Effects
import qs.Common

Item {
    id: root

    property var level: Theme.elevationLevel2
    property string direction: Theme.elevationLightDirection
    property real fallbackOffset: 4

    property color targetColor: "white"
    property real targetRadius: Theme.cornerRadius
    property color borderColor: "transparent"
    property real borderWidth: 0

    property bool shadowEnabled: Theme.elevationEnabled
    property real shadowBlurPx: level && level.blurPx !== undefined ? level.blurPx : 0
    property real shadowSpreadPx: level && level.spreadPx !== undefined ? level.spreadPx : 0
    property real shadowOffsetX: Theme.elevationOffsetXFor(level, direction, fallbackOffset)
    property real shadowOffsetY: Theme.elevationOffsetYFor(level, direction, fallbackOffset)
    property color shadowColor: Theme.elevationShadowColor(level)
    property real shadowOpacity: 1
    property real blurMax: Theme.elevationBlurMax

    property alias sourceRect: sourceRect

    layer.enabled: shadowEnabled

    layer.effect: MultiEffect {
        autoPaddingEnabled: true
        shadowEnabled: true
        blurEnabled: false
        maskEnabled: false
        shadowBlur: Math.max(0, Math.min(1, root.shadowBlurPx / Math.max(1, root.blurMax)))
        shadowScale: 1 + (2 * root.shadowSpreadPx) / Math.max(1, Math.min(root.width, root.height))
        shadowHorizontalOffset: root.shadowOffsetX
        shadowVerticalOffset: root.shadowOffsetY
        blurMax: root.blurMax
        shadowColor: root.shadowColor
        shadowOpacity: root.shadowOpacity
    }

    Rectangle {
        id: sourceRect
        anchors.fill: parent
        radius: root.targetRadius
        color: root.targetColor
        border.color: root.borderColor
        border.width: root.borderWidth
    }
}