diff options
| author | AlexanderCurl <alexc@alexc.hu> | 2026-04-18 17:46:06 +0100 |
|---|---|---|
| committer | AlexanderCurl <alexc@alexc.hu> | 2026-04-18 17:46:06 +0100 |
| commit | 70ca3fef77ee8bdc6e3ac28589a6fa08c024cc69 (patch) | |
| tree | ab1123d4067c1b086dd6faa7ee4ea643236b565a /raveos-hyprland-theme/theme-data/DankMaterialShell/quickshell/Modules/Settings/AboutTab.qml | |
| parent | 5d94c0a7d44a2255b81815a52a7056a94a39842d (diff) | |
| download | RaveOS-PKGBUILD-70ca3fef77ee8bdc6e3ac28589a6fa08c024cc69.tar.gz RaveOS-PKGBUILD-70ca3fef77ee8bdc6e3ac28589a6fa08c024cc69.zip | |
Replaced file structures for themes in the correct format
Diffstat (limited to 'raveos-hyprland-theme/theme-data/DankMaterialShell/quickshell/Modules/Settings/AboutTab.qml')
| -rw-r--r-- | raveos-hyprland-theme/theme-data/DankMaterialShell/quickshell/Modules/Settings/AboutTab.qml | 900 |
1 files changed, 900 insertions, 0 deletions
diff --git a/raveos-hyprland-theme/theme-data/DankMaterialShell/quickshell/Modules/Settings/AboutTab.qml b/raveos-hyprland-theme/theme-data/DankMaterialShell/quickshell/Modules/Settings/AboutTab.qml new file mode 100644 index 0000000..67c2c21 --- /dev/null +++ b/raveos-hyprland-theme/theme-data/DankMaterialShell/quickshell/Modules/Settings/AboutTab.qml @@ -0,0 +1,900 @@ +import QtQuick +import QtQuick.Effects +import qs.Common +import qs.Services +import qs.Widgets + +Item { + id: aboutTab + + LayoutMirroring.enabled: I18n.isRtl + LayoutMirroring.childrenInherit: true + + property bool isHyprland: CompositorService.isHyprland + property bool isNiri: CompositorService.isNiri + property bool isSway: CompositorService.isSway + property bool isScroll: CompositorService.isScroll + property bool isMiracle: CompositorService.isMiracle + property bool isDwl: CompositorService.isDwl + property bool isLabwc: CompositorService.isLabwc + + property string compositorName: { + if (isHyprland) + return "hyprland"; + if (isSway) + return "sway"; + if (isScroll) + return "scroll"; + if (isMiracle) + return "miracle"; + if (isDwl) + return "mangowc"; + if (isLabwc) + return "labwc"; + return "niri"; + } + + property string compositorLogo: { + if (isHyprland) + return "/assets/hyprland.svg"; + if (isSway) + return "/assets/sway.svg"; + if (isScroll) + return "/assets/sway.svg"; + if (isMiracle) + return "/assets/miraclewm.svg"; + if (isDwl) + return "/assets/mango.png"; + if (isLabwc) + return "/assets/labwc.png"; + return "/assets/niri.svg"; + } + + property string compositorUrl: { + if (isHyprland) + return "https://hypr.land"; + if (isSway) + return "https://swaywm.org"; + if (isScroll) + return "https://github.com/dawsers/scroll"; + if (isMiracle) + return "https://github.com/miracle-wm-org/miracle-wm"; + if (isDwl) + return "https://github.com/DreamMaoMao/mangowc"; + if (isLabwc) + return "https://labwc.github.io/"; + return "https://github.com/niri-wm/niri"; + } + + property string compositorTooltip: { + if (isHyprland) + return I18n.tr("Hyprland Website"); + if (isSway) + return I18n.tr("Sway Website"); + if (isScroll) + return I18n.tr("Scroll GitHub"); + if (isMiracle) + return I18n.tr("Scroll GitHub"); + if (isDwl) + return I18n.tr("mangowc GitHub"); + if (isLabwc) + return I18n.tr("LabWC Website"); + return I18n.tr("niri GitHub"); + } + + property string dmsDiscordUrl: "https://discord.gg/ppWTpKmPgT" + property string dmsDiscordTooltip: I18n.tr("niri/dms Discord") + + property string compositorDiscordUrl: { + if (isHyprland) + return "https://discord.com/invite/hQ9XvMUjjr"; + if (isDwl) + return "https://discord.gg/CPjbDxesh5"; + return ""; + } + + property string compositorDiscordTooltip: { + if (isHyprland) + return I18n.tr("Hyprland Discord Server"); + if (isDwl) + return I18n.tr("mangowc Discord Server"); + return ""; + } + + property string redditUrl: "https://reddit.com/r/niri" + property string redditTooltip: I18n.tr("r/niri Subreddit") + + property string ircUrl: "https://web.libera.chat/gamja/?channels=#labwc" + property string ircTooltip: I18n.tr("LabWC IRC Channel") + + property bool showMatrix: isNiri && !isHyprland && !isSway && !isScroll && !isMiracle && !isDwl && !isLabwc + property bool showCompositorDiscord: isHyprland || isDwl + property bool showReddit: isNiri && !isHyprland && !isSway && !isScroll && !isMiracle && !isDwl && !isLabwc + property bool showIrc: isLabwc + + DankFlickable { + anchors.fill: parent + clip: true + contentHeight: mainColumn.height + Theme.spacingXL + contentWidth: width + + Column { + id: mainColumn + topPadding: 4 + + width: Math.min(550, parent.width - Theme.spacingL * 2) + anchors.horizontalCenter: parent.horizontalCenter + spacing: Theme.spacingXL + + // ASCII Art Header + StyledRect { + width: parent.width + height: asciiSection.implicitHeight + Theme.spacingL * 2 + radius: Theme.cornerRadius + color: Theme.surfaceContainerHigh + border.color: Qt.rgba(Theme.outline.r, Theme.outline.g, Theme.outline.b, 0.2) + border.width: 0 + + Column { + id: asciiSection + + anchors.fill: parent + anchors.margins: Theme.spacingL + spacing: Theme.spacingM + + Row { + anchors.horizontalCenter: parent.horizontalCenter + spacing: parent.width < 350 ? Theme.spacingM : Theme.spacingL + + property bool compactLogo: parent.width < 400 + property bool hideLogo: parent.width < 280 + + Image { + id: logoImage + + visible: !parent.hideLogo + anchors.verticalCenter: parent.verticalCenter + width: parent.compactLogo ? 80 : 120 + height: width * (569.94629 / 506.50931) + fillMode: Image.PreserveAspectFit + smooth: true + mipmap: true + asynchronous: true + source: "file://" + Theme.shellDir + "/assets/danklogonormal.svg" + layer.enabled: true + layer.smooth: true + layer.mipmap: true + layer.effect: MultiEffect { + saturation: 0 + colorization: 1 + colorizationColor: Theme.primary + } + } + + Text { + anchors.verticalCenter: parent.verticalCenter + text: "DANK LINUX" + font.pixelSize: parent.compactLogo ? 32 : 48 + font.weight: Font.Bold + font.family: interFont.name + color: Theme.surfaceText + antialiasing: true + + FontLoader { + id: interFont + source: Qt.resolvedUrl("../../assets/fonts/inter/InterVariable.ttf") + } + } + } + + StyledText { + text: { + if (!SystemUpdateService.shellVersion && !DMSService.cliVersion) + return "dms"; + + let version = SystemUpdateService.shellVersion || ""; + let cliVersion = DMSService.cliVersion || ""; + + // Debian/Ubuntu/OpenSUSE git format: 1.0.3+git2264.c5c5ce84 + let match = version.match(/^([\d.]+)\+git(\d+)\./); + if (match) { + return `dms (git) v${match[1]}-${match[2]}`; + } + + // Fedora COPR git format: 0.0.git.2267.d430cae9 + match = version.match(/^[\d.]+\.git\.(\d+)\./); + if (match) { + function extractBaseVersion(value) { + if (!value) + return ""; + let baseMatch = value.match(/(\d+\.\d+\.\d+)/); + if (baseMatch) + return baseMatch[1]; + baseMatch = value.match(/(\d+\.\d+)/); + if (baseMatch) + return baseMatch[1]; + return ""; + } + + let baseVersion = extractBaseVersion(cliVersion); + if (!baseVersion) + baseVersion = extractBaseVersion(SystemUpdateService.semverVersion); + if (baseVersion) { + return `dms (git) v${baseVersion}-${match[1]}`; + } + return `dms (git) v${match[1]}`; + } + + // Stable release format: 1.0.3 + match = version.match(/^([\d.]+)$/); + if (match) { + return `dms v${match[1]}`; + } + + if (!version && cliVersion) { + match = cliVersion.match(/^([\d.]+)\+git(\d+)\./); + if (match) { + return `dms (git) v${match[1]}-${match[2]}`; + } + match = cliVersion.match(/^([\d.]+)$/); + if (match) { + return `dms v${match[1]}`; + } + return `dms ${cliVersion}`; + } + + return `dms ${version}`; + } + font.pixelSize: Theme.fontSizeXLarge + font.weight: Font.Bold + color: Theme.surfaceText + horizontalAlignment: Text.AlignHCenter + width: parent.width + } + + StyledText { + visible: SystemUpdateService.shellCodename.length > 0 + text: `"${SystemUpdateService.shellCodename}"` + font.pixelSize: Theme.fontSizeMedium + font.italic: true + color: Theme.surfaceVariantText + horizontalAlignment: Text.AlignHCenter + width: parent.width + } + + Row { + id: resourceButtonsRow + anchors.horizontalCenter: parent.horizontalCenter + spacing: Theme.spacingS + + property bool compactMode: parent.width < 450 + + DankButton { + id: docsButton + text: resourceButtonsRow.compactMode ? "" : I18n.tr("Docs") + iconName: "menu_book" + iconSize: 18 + backgroundColor: Qt.rgba(Theme.surfaceText.r, Theme.surfaceText.g, Theme.surfaceText.b, 0.08) + textColor: Theme.surfaceText + onClicked: Qt.openUrlExternally("https://danklinux.com/docs") + onHoveredChanged: { + if (hovered) + resourceTooltip.show(resourceButtonsRow.compactMode ? I18n.tr("Docs") + " - danklinux.com/docs" : "danklinux.com/docs", docsButton, 0, 0, "bottom"); + else + resourceTooltip.hide(); + } + } + + DankButton { + id: pluginsButton + text: resourceButtonsRow.compactMode ? "" : I18n.tr("Plugins") + iconName: "extension" + iconSize: 18 + backgroundColor: Qt.rgba(Theme.surfaceText.r, Theme.surfaceText.g, Theme.surfaceText.b, 0.08) + textColor: Theme.surfaceText + onClicked: Qt.openUrlExternally("https://plugins.danklinux.com") + onHoveredChanged: { + if (hovered) + resourceTooltip.show(resourceButtonsRow.compactMode ? I18n.tr("Plugins") + " - plugins.danklinux.com" : "plugins.danklinux.com", pluginsButton, 0, 0, "bottom"); + else + resourceTooltip.hide(); + } + } + + DankButton { + id: githubButton + text: resourceButtonsRow.compactMode ? "" : I18n.tr("GitHub") + iconName: "code" + iconSize: 18 + backgroundColor: Qt.rgba(Theme.surfaceText.r, Theme.surfaceText.g, Theme.surfaceText.b, 0.08) + textColor: Theme.surfaceText + onClicked: Qt.openUrlExternally("https://github.com/AvengeMedia/DankMaterialShell") + onHoveredChanged: { + if (hovered) + resourceTooltip.show(resourceButtonsRow.compactMode ? "GitHub - AvengeMedia/DankMaterialShell" : "github.com/AvengeMedia/DankMaterialShell", githubButton, 0, 0, "bottom"); + else + resourceTooltip.hide(); + } + } + + DankButton { + id: kofiButton + text: resourceButtonsRow.compactMode ? "" : I18n.tr("Ko-fi") + iconName: "favorite" + iconSize: 18 + backgroundColor: Qt.rgba(Theme.primary.r, Theme.primary.g, Theme.primary.b, 0.12) + textColor: Theme.primary + onClicked: Qt.openUrlExternally("https://ko-fi.com/danklinux") + onHoveredChanged: { + if (hovered) + resourceTooltip.show(resourceButtonsRow.compactMode ? I18n.tr("Ko-fi") + " - ko-fi.com/danklinux" : "ko-fi.com/danklinux", kofiButton, 0, 0, "bottom"); + else + resourceTooltip.hide(); + } + } + } + + DankTooltipV2 { + id: resourceTooltip + } + + Item { + id: communityIcons + anchors.horizontalCenter: parent.horizontalCenter + height: 24 + width: { + let baseWidth = compositorButton.width + dmsDiscordButton.width + Theme.spacingM; + if (showMatrix) { + baseWidth += matrixButton.width + 4; + } + if (showIrc) { + baseWidth += ircButton.width + Theme.spacingM; + } + if (showCompositorDiscord) { + baseWidth += compositorDiscordButton.width + Theme.spacingM; + } + if (showReddit) { + baseWidth += redditButton.width + Theme.spacingM; + } + return baseWidth; + } + + Item { + id: compositorButton + width: 24 + height: 24 + anchors.verticalCenter: parent.verticalCenter + anchors.verticalCenterOffset: -2 + x: 0 + + property bool hovered: false + property string tooltipText: compositorTooltip + + Image { + anchors.fill: parent + source: Qt.resolvedUrl(".").toString().replace("file://", "").replace("/Modules/Settings/", "") + compositorLogo + sourceSize: Qt.size(24, 24) + smooth: true + fillMode: Image.PreserveAspectFit + } + + MouseArea { + anchors.fill: parent + cursorShape: Qt.PointingHandCursor + hoverEnabled: true + onEntered: parent.hovered = true + onExited: parent.hovered = false + onClicked: Qt.openUrlExternally(compositorUrl) + } + } + + Item { + id: matrixButton + width: 30 + height: 24 + x: compositorButton.x + compositorButton.width + 4 + visible: showMatrix + + property bool hovered: false + property string tooltipText: I18n.tr("niri Matrix Chat") + + Image { + anchors.fill: parent + source: Qt.resolvedUrl(".").toString().replace("file://", "").replace("/Modules/Settings/", "") + "/assets/matrix-logo-white.svg" + sourceSize: Qt.size(28, 18) + smooth: true + fillMode: Image.PreserveAspectFit + layer.enabled: true + + layer.effect: MultiEffect { + colorization: 1 + colorizationColor: Theme.surfaceText + } + } + + MouseArea { + anchors.fill: parent + cursorShape: Qt.PointingHandCursor + hoverEnabled: true + onEntered: parent.hovered = true + onExited: parent.hovered = false + onClicked: Qt.openUrlExternally("https://matrix.to/#/#niri:matrix.org") + } + } + + Item { + id: ircButton + width: 24 + height: 24 + x: compositorButton.x + compositorButton.width + Theme.spacingM + anchors.verticalCenter: parent.verticalCenter + visible: showIrc + + property bool hovered: false + property string tooltipText: ircTooltip + + DankIcon { + anchors.centerIn: parent + name: "forum" + size: 20 + color: Theme.surfaceText + } + + MouseArea { + anchors.fill: parent + cursorShape: Qt.PointingHandCursor + hoverEnabled: true + onEntered: parent.hovered = true + onExited: parent.hovered = false + onClicked: Qt.openUrlExternally(ircUrl) + } + } + + Item { + id: dmsDiscordButton + width: 20 + height: 20 + x: { + if (showMatrix) + return matrixButton.x + matrixButton.width + Theme.spacingM; + if (showIrc) + return ircButton.x + ircButton.width + Theme.spacingM; + return compositorButton.x + compositorButton.width + Theme.spacingM; + } + anchors.verticalCenter: parent.verticalCenter + + property bool hovered: false + property string tooltipText: dmsDiscordTooltip + + Image { + anchors.fill: parent + source: Qt.resolvedUrl(".").toString().replace("file://", "").replace("/Modules/Settings/", "") + "/assets/discord.svg" + sourceSize: Qt.size(20, 20) + smooth: true + fillMode: Image.PreserveAspectFit + } + + MouseArea { + anchors.fill: parent + cursorShape: Qt.PointingHandCursor + hoverEnabled: true + onEntered: parent.hovered = true + onExited: parent.hovered = false + onClicked: Qt.openUrlExternally(dmsDiscordUrl) + } + } + + Item { + id: compositorDiscordButton + width: 20 + height: 20 + x: dmsDiscordButton.x + dmsDiscordButton.width + Theme.spacingM + anchors.verticalCenter: parent.verticalCenter + visible: showCompositorDiscord + + property bool hovered: false + property string tooltipText: compositorDiscordTooltip + + Image { + anchors.fill: parent + source: Qt.resolvedUrl(".").toString().replace("file://", "").replace("/Modules/Settings/", "") + "/assets/discord.svg" + sourceSize: Qt.size(20, 20) + smooth: true + fillMode: Image.PreserveAspectFit + } + + MouseArea { + anchors.fill: parent + cursorShape: Qt.PointingHandCursor + hoverEnabled: true + onEntered: parent.hovered = true + onExited: parent.hovered = false + onClicked: Qt.openUrlExternally(compositorDiscordUrl) + } + } + + Item { + id: redditButton + width: 20 + height: 20 + x: showCompositorDiscord ? compositorDiscordButton.x + compositorDiscordButton.width + Theme.spacingM : dmsDiscordButton.x + dmsDiscordButton.width + Theme.spacingM + anchors.verticalCenter: parent.verticalCenter + visible: showReddit + + property bool hovered: false + property string tooltipText: redditTooltip + + Image { + anchors.fill: parent + source: Qt.resolvedUrl(".").toString().replace("file://", "").replace("/Modules/Settings/", "") + "/assets/reddit.svg" + sourceSize: Qt.size(20, 20) + smooth: true + fillMode: Image.PreserveAspectFit + } + + MouseArea { + anchors.fill: parent + cursorShape: Qt.PointingHandCursor + hoverEnabled: true + onEntered: parent.hovered = true + onExited: parent.hovered = false + onClicked: Qt.openUrlExternally(redditUrl) + } + } + } + } + } + + // Project Information + StyledRect { + width: parent.width + height: projectSection.implicitHeight + Theme.spacingL * 2 + radius: Theme.cornerRadius + color: Theme.surfaceContainerHigh + border.color: Qt.rgba(Theme.outline.r, Theme.outline.g, Theme.outline.b, 0.2) + border.width: 0 + + Column { + id: projectSection + + anchors.fill: parent + anchors.margins: Theme.spacingL + spacing: Theme.spacingM + + Row { + width: parent.width + spacing: Theme.spacingM + + DankIcon { + name: "info" + size: Theme.iconSize + color: Theme.primary + anchors.verticalCenter: parent.verticalCenter + } + + StyledText { + text: I18n.tr("About") + font.pixelSize: Theme.fontSizeLarge + font.weight: Font.Medium + color: Theme.surfaceText + anchors.verticalCenter: parent.verticalCenter + } + } + + StyledText { + text: I18n.tr('dms is a highly customizable, modern desktop shell with a <a href="https://m3.material.io/" style="text-decoration:none; color:%1;">material 3 inspired</a> design.<br /><br/>It is built with <a href="https://quickshell.org" style="text-decoration:none; color:%1;">Quickshell</a>, a QT6 framework for building desktop shells, and <a href="https://go.dev" style="text-decoration:none; color:%1;">Go</a>, a statically typed, compiled programming language.').arg(Theme.primary) + textFormat: Text.RichText + font.pixelSize: Theme.fontSizeMedium + linkColor: Theme.primary + onLinkActivated: url => Qt.openUrlExternally(url) + color: Theme.surfaceVariantText + width: parent.width + wrapMode: Text.WordWrap + + MouseArea { + anchors.fill: parent + cursorShape: parent.hoveredLink ? Qt.PointingHandCursor : Qt.ArrowCursor + acceptedButtons: Qt.NoButton + propagateComposedEvents: true + } + } + } + } + + StyledRect { + visible: DMSService.isConnected + width: parent.width + height: backendSection.implicitHeight + Theme.spacingL * 2 + radius: Theme.cornerRadius + color: Theme.surfaceContainerHigh + border.color: Qt.rgba(Theme.outline.r, Theme.outline.g, Theme.outline.b, 0.2) + border.width: 0 + + Column { + id: backendSection + + anchors.fill: parent + anchors.margins: Theme.spacingL + spacing: Theme.spacingM + + Row { + width: parent.width + spacing: Theme.spacingM + + DankIcon { + name: "dns" + size: Theme.iconSize + color: Theme.primary + anchors.verticalCenter: parent.verticalCenter + } + + StyledText { + text: I18n.tr("Backend") + font.pixelSize: Theme.fontSizeLarge + font.weight: Font.Medium + color: Theme.surfaceText + anchors.verticalCenter: parent.verticalCenter + } + } + + Row { + anchors.left: parent.left + spacing: Theme.spacingL + + Column { + spacing: 2 + + StyledText { + text: I18n.tr("Version") + font.pixelSize: Theme.fontSizeSmall + color: Theme.surfaceVariantText + horizontalAlignment: Text.AlignLeft + } + + StyledText { + text: DMSService.cliVersion || "—" + font.pixelSize: Theme.fontSizeMedium + font.weight: Font.Medium + color: Theme.surfaceText + horizontalAlignment: Text.AlignLeft + } + } + + Rectangle { + width: 1 + height: 32 + color: Theme.outlineVariant + } + + Column { + spacing: 2 + + StyledText { + text: I18n.tr("API") + font.pixelSize: Theme.fontSizeSmall + color: Theme.surfaceVariantText + horizontalAlignment: Text.AlignLeft + } + + StyledText { + text: `v${DMSService.apiVersion}` + font.pixelSize: Theme.fontSizeMedium + font.weight: Font.Medium + color: Theme.surfaceText + horizontalAlignment: Text.AlignLeft + } + } + + Rectangle { + width: 1 + height: 32 + color: Theme.outlineVariant + } + + Column { + spacing: 2 + + StyledText { + text: I18n.tr("Status") + font.pixelSize: Theme.fontSizeSmall + color: Theme.surfaceVariantText + horizontalAlignment: Text.AlignLeft + } + + Row { + spacing: 4 + + Rectangle { + width: 8 + height: 8 + radius: 4 + color: Theme.success + anchors.verticalCenter: parent.verticalCenter + } + + StyledText { + text: I18n.tr("Connected") + font.pixelSize: Theme.fontSizeMedium + font.weight: Font.Medium + color: Theme.surfaceText + horizontalAlignment: Text.AlignLeft + } + } + } + } + + Column { + width: parent.width + spacing: Theme.spacingS + visible: DMSService.capabilities.length > 0 + + StyledText { + text: I18n.tr("Capabilities") + font.pixelSize: Theme.fontSizeSmall + color: Theme.surfaceVariantText + width: parent.width + horizontalAlignment: Text.AlignLeft + } + + Flow { + width: parent.width + spacing: 6 + + Repeater { + model: DMSService.capabilities + + Rectangle { + width: capText.implicitWidth + 16 + height: 26 + radius: 13 + color: Qt.rgba(Theme.primary.r, Theme.primary.g, Theme.primary.b, 0.12) + + StyledText { + id: capText + anchors.centerIn: parent + text: modelData + font.pixelSize: Theme.fontSizeSmall + color: Theme.primary + } + } + } + } + } + } + } + + StyledRect { + width: parent.width + height: toolsSection.implicitHeight + Theme.spacingL * 2 + radius: Theme.cornerRadius + color: Theme.surfaceContainerHigh + border.color: Qt.rgba(Theme.outline.r, Theme.outline.g, Theme.outline.b, 0.2) + border.width: 0 + + Column { + id: toolsSection + + anchors.fill: parent + anchors.margins: Theme.spacingL + spacing: Theme.spacingM + + Row { + width: parent.width + spacing: Theme.spacingM + + DankIcon { + name: "build" + size: Theme.iconSize + color: Theme.primary + anchors.verticalCenter: parent.verticalCenter + } + + StyledText { + text: I18n.tr("Tools") + font.pixelSize: Theme.fontSizeLarge + font.weight: Font.Medium + color: Theme.surfaceText + anchors.verticalCenter: parent.verticalCenter + } + } + + Row { + anchors.left: parent.left + spacing: Theme.spacingS + + DankButton { + text: I18n.tr("Show Welcome") + iconName: "waving_hand" + backgroundColor: Qt.rgba(Theme.surfaceText.r, Theme.surfaceText.g, Theme.surfaceText.b, 0.08) + textColor: Theme.surfaceText + onClicked: FirstLaunchService.showWelcome() + } + + DankButton { + text: I18n.tr("System Check") + iconName: "vital_signs" + backgroundColor: Qt.rgba(Theme.surfaceText.r, Theme.surfaceText.g, Theme.surfaceText.b, 0.08) + textColor: Theme.surfaceText + onClicked: FirstLaunchService.showDoctor() + } + } + } + } + + StyledText { + anchors.horizontalCenter: parent.horizontalCenter + text: I18n.tr('<a href="https://github.com/AvengeMedia/DankMaterialShell/blob/master/LICENSE" style="text-decoration:none; color:%1;">MIT License</a>').arg(Theme.surfaceVariantText) + font.pixelSize: Theme.fontSizeMedium + color: Theme.surfaceVariantText + textFormat: Text.RichText + wrapMode: Text.NoWrap + onLinkActivated: url => Qt.openUrlExternally(url) + + MouseArea { + anchors.fill: parent + cursorShape: parent.hoveredLink ? Qt.PointingHandCursor : Qt.ArrowCursor + acceptedButtons: Qt.NoButton + propagateComposedEvents: true + } + } + } + } + + // Community tooltip - positioned absolutely above everything + Rectangle { + id: communityTooltip + parent: aboutTab + z: 1000 + + property var hoveredButton: { + if (compositorButton.hovered) + return compositorButton; + if (matrixButton.visible && matrixButton.hovered) + return matrixButton; + if (ircButton.visible && ircButton.hovered) + return ircButton; + if (dmsDiscordButton.hovered) + return dmsDiscordButton; + if (compositorDiscordButton.visible && compositorDiscordButton.hovered) + return compositorDiscordButton; + if (redditButton.visible && redditButton.hovered) + return redditButton; + return null; + } + + property string tooltipText: hoveredButton ? hoveredButton.tooltipText : "" + + visible: hoveredButton !== null && tooltipText !== "" + width: tooltipLabel.implicitWidth + 24 + height: tooltipLabel.implicitHeight + 12 + + color: Theme.surfaceContainer + radius: Theme.cornerRadius + border.width: 0 + border.color: Theme.outlineMedium + + x: hoveredButton ? hoveredButton.mapToItem(aboutTab, hoveredButton.width / 2, 0).x - width / 2 : 0 + y: hoveredButton ? communityIcons.mapToItem(aboutTab, 0, 0).y - height - 8 : 0 + + ElevationShadow { + anchors.fill: parent + z: -1 + level: Theme.elevationLevel1 + fallbackOffset: 1 + targetRadius: communityTooltip.radius + targetColor: communityTooltip.color + borderColor: communityTooltip.border.color + borderWidth: communityTooltip.border.width + shadowOpacity: Theme.elevationLevel1 && Theme.elevationLevel1.alpha !== undefined ? Theme.elevationLevel1.alpha : 0.2 + shadowEnabled: Theme.elevationEnabled + } + + StyledText { + id: tooltipLabel + anchors.centerIn: parent + text: communityTooltip.tooltipText + font.pixelSize: Theme.fontSizeSmall + color: Theme.surfaceText + } + } +} |