mirror of
https://github.com/AvengeMedia/DankMaterialShell.git
synced 2026-10-28 22:17:48 -04:00
48 lines
1.3 KiB
QML
48 lines
1.3 KiB
QML
import QtQuick
|
|
import Quickshell
|
|
import Quickshell.Widgets
|
|
import qs.Common
|
|
import qs.DCommon.Common as DCommon
|
|
import qs.DCommon.Widgets
|
|
|
|
Item {
|
|
id: root
|
|
|
|
property string appId: ""
|
|
property real iconSize: Theme.iconSize
|
|
readonly property int iconRequestSize: DCommon.Style.iconRasterSize(iconSize)
|
|
|
|
implicitWidth: iconSize
|
|
implicitHeight: iconSize
|
|
|
|
IconImage {
|
|
id: image
|
|
|
|
property string paintedFor: ""
|
|
readonly property bool holdsCurrentIcon: paintedFor !== "" && paintedFor === root.appId
|
|
readonly property bool showsFrame: status === Image.Ready || (holdsCurrentIcon && status === Image.Loading)
|
|
|
|
anchors.fill: parent
|
|
source: root.appId ? Paths.getAppIcon(root.appId, DesktopEntries.heuristicLookup(root.appId)) : ""
|
|
backer.sourceSize: Qt.size(root.iconRequestSize, root.iconRequestSize)
|
|
backer.retainWhileLoading: true
|
|
smooth: true
|
|
mipmap: true
|
|
asynchronous: true
|
|
visible: showsFrame
|
|
onStatusChanged: {
|
|
if (status !== Image.Ready)
|
|
return;
|
|
paintedFor = root.appId;
|
|
}
|
|
}
|
|
|
|
DIcon {
|
|
anchors.centerIn: parent
|
|
name: "apps"
|
|
size: root.iconSize
|
|
color: Theme.onSurfaceVariant
|
|
visible: image.status === Image.Error || image.source.toString() === ""
|
|
}
|
|
}
|