diff options
Diffstat (limited to 'raveos-theme/hyprland/theme-data/DankMaterialShell/quickshell/Widgets/DankSVGIcon.qml')
| -rw-r--r-- | raveos-theme/hyprland/theme-data/DankMaterialShell/quickshell/Widgets/DankSVGIcon.qml | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/raveos-theme/hyprland/theme-data/DankMaterialShell/quickshell/Widgets/DankSVGIcon.qml b/raveos-theme/hyprland/theme-data/DankMaterialShell/quickshell/Widgets/DankSVGIcon.qml new file mode 100644 index 0000000..0cf11bc --- /dev/null +++ b/raveos-theme/hyprland/theme-data/DankMaterialShell/quickshell/Widgets/DankSVGIcon.qml @@ -0,0 +1,81 @@ +import QtQuick +import QtQuick.Effects +import Quickshell.Widgets +import qs.Common + +Item { + id: root + + required property string source + property int size: 24 + property string cornerIcon: "" + property int cornerIconSize: Math.max(10, size * 0.4) + property color cornerIconColor: Theme.surfaceText + property color cornerIconBackground: Theme.surface + property color colorOverride: "transparent" + property real brightnessOverride: 0.0 + property real contrastOverride: 0.0 + property real saturationOverride: 0.0 + + readonly property bool hasCornerIcon: cornerIcon !== "" + readonly property bool hasColorOverride: colorOverride.a > 0 + readonly property bool hasColorEffect: hasColorOverride || brightnessOverride !== 0.0 || contrastOverride !== 0.0 || saturationOverride !== 0.0 + readonly property string resolvedSource: { + if (!source) + return ""; + if (source.startsWith("file://")) + return source; + if (source.startsWith("/")) + return "file://" + source; + if (source.startsWith("qrc:")) + return source; + return source; + } + + implicitWidth: size + implicitHeight: size + + IconImage { + id: iconImage + anchors.fill: parent + source: root.resolvedSource + smooth: true + mipmap: true + asynchronous: true + implicitSize: root.size * 2 + backer.sourceSize.width: root.size * 2 + backer.sourceSize.height: root.size * 2 + backer.cache: true + layer.enabled: root.hasColorEffect + layer.smooth: true + layer.mipmap: true + layer.effect: MultiEffect { + saturation: root.saturationOverride + colorization: root.hasColorOverride ? 1 : 0 + colorizationColor: root.colorOverride + brightness: root.brightnessOverride + contrast: root.contrastOverride + } + } + + Rectangle { + visible: root.hasCornerIcon + anchors.right: parent.right + anchors.bottom: parent.bottom + anchors.rightMargin: -2 + anchors.bottomMargin: -2 + width: root.cornerIconSize + 4 + height: root.cornerIconSize + 4 + radius: width / 2 + color: root.cornerIconBackground + border.width: 1 + border.color: Theme.surfaceLight + + DankIcon { + anchors.centerIn: parent + name: root.cornerIcon + size: root.cornerIconSize + color: root.cornerIconColor + } + } +} |