aboutsummaryrefslogtreecommitdiffstats
path: root/appearance/IconsTab.qml
diff options
context:
space:
mode:
Diffstat (limited to 'appearance/IconsTab.qml')
-rw-r--r--appearance/IconsTab.qml225
1 files changed, 0 insertions, 225 deletions
diff --git a/appearance/IconsTab.qml b/appearance/IconsTab.qml
deleted file mode 100644
index c4d82ca..0000000
--- a/appearance/IconsTab.qml
+++ /dev/null
@@ -1,225 +0,0 @@
-// Copyright (C) 2026 Danilo M. <danix@danix.xyz>
-//
-// This program is free software; you can redistribute it and/or modify
-// it under the terms of the GNU General Public License version 2 as
-// published by the Free Software Foundation.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-import Quickshell
-import Quickshell.Widgets
-import QtQuick
-
-Flickable {
- contentHeight: col.implicitHeight
- clip: true
-
- // Clicking a cursor card stages it; Apply commits. There is deliberately no
- // live hover preview: hyprctl setcursor is not a read-only switch, Hyprland
- // persists the theme to org.gnome.desktop.interface cursor-theme, so
- // hovering wrote the setting and a close left the last hovered theme set.
- // The four rendered shapes on each card are the preview.
- property string pendingCursor: ""
-
- Column {
- id: col
- width: parent.width
- spacing: 12
-
- Text {
- text: Icons.scanning ? "scanning…" : `${Icons.iconThemes.length} icon themes · ${Icons.cursorThemes.length} cursor themes`
- color: Theme.overlay
- font { family: Theme.fontFamily; pixelSize: Theme.fontSize - 4 }
- }
-
- Text {
- text: "Icon theme"
- color: Theme.subtext
- font { family: Theme.fontFamily; pixelSize: Theme.fontSize - 2; bold: true }
- }
-
- // Flow, not a horizontal strip: the cards wrap onto further rows rather
- // than running off the right edge, and the tab scrolls vertically.
- Flow {
- width: parent.width
- spacing: 10
- Repeater {
- model: Icons.iconThemes
- Rectangle {
- id: iconCard
- required property string modelData
- readonly property bool current: Icons.currentIcon === modelData
- width: 230; height: 150; radius: 10
- color: current ? Qt.alpha(Theme.accent, 0.2) : Qt.alpha(Theme.surface, 0.35)
- border.width: current ? 2 : 1
- border.color: current ? Theme.accent : "transparent"
-
- MouseArea {
- anchors.fill: parent
- cursorShape: Qt.PointingHandCursor
- onClicked: Icons.applyIcon(modelData)
- }
-
- Column {
- width: parent.width - 16
- anchors.centerIn: parent
- spacing: 10
- Row {
- anchors.horizontalCenter: parent.horizontalCenter
- spacing: 8
- Repeater {
- model: ["folder", "text-x-generic", "image-x-generic", "network-wireless"]
- IconImage {
- required property string modelData
- readonly property string glyph: (Icons.iconPreview[iconCard.modelData] ?? {})[modelData] ?? ""
- // Absolute paths must carry file://, or they
- // resolve against the config's qrc base and
- // fail; Gtk's builtin icons come back as
- // /org/gtk gresource paths Qt cannot open.
- source: glyph.indexOf("/") === 0 && glyph.indexOf("/org/gtk/") !== 0
- ? "file://" + glyph : ""
- implicitSize: 44
- }
- }
- }
- Text {
- width: parent.width
- horizontalAlignment: Text.AlignHCenter
- text: iconCard.current ? modelData + " current" : modelData
- color: Theme.text
- font { family: Theme.fontFamily; pixelSize: Theme.fontSize - 3 }
- wrapMode: Text.WrapAnywhere
- maximumLineCount: 2
- elide: Text.ElideRight
- }
- }
- }
- }
- }
-
- Row {
- spacing: 10
- Text {
- anchors.verticalCenter: parent.verticalCenter
- text: "Cursor theme"
- color: Theme.subtext
- font { family: Theme.fontFamily; pixelSize: Theme.fontSize - 2; bold: true }
- }
- Item { width: 12; height: 1 }
- Text {
- anchors.verticalCenter: parent.verticalCenter
- text: "Size"
- color: Theme.subtext
- font { family: Theme.fontFamily; pixelSize: Theme.fontSize - 3 }
- }
- Repeater {
- model: [16, 24, 32, 48, 64]
- Tab {
- required property var modelData
- anchors.verticalCenter: parent.verticalCenter
- text: String(modelData)
- selected: Icons.cursorSize === modelData
- onClicked: Icons.setCursorSize(modelData)
- }
- }
- }
-
- Flow {
- width: parent.width
- spacing: 10
- Repeater {
- model: Icons.cursorThemes
- Rectangle {
- id: cursorCard
- required property string modelData
- readonly property bool current: Icons.currentCursor === modelData
- readonly property bool staged: pendingCursor === modelData
- width: 230; height: 150; radius: 10
- color: current || staged ? Qt.alpha(Theme.accent, 0.2) : Qt.alpha(Theme.surface, 0.35)
- border.width: current || staged ? 2 : 1
- border.color: staged ? Theme.accent
- : current ? Qt.alpha(Theme.accent, 0.5)
- : "transparent"
-
- MouseArea {
- anchors.fill: parent
- cursorShape: Qt.PointingHandCursor
- onClicked: pendingCursor = modelData
- }
-
- Column {
- width: parent.width - 16
- anchors.centerIn: parent
- spacing: 10
- Row {
- anchors.horizontalCenter: parent.horizontalCenter
- spacing: 8
- Repeater {
- // The cases that tell themes apart: arrow, hand,
- // text and horizontal resize.
- model: ["left_ptr", "hand2", "xterm", "resize"]
- Image {
- required property string modelData
- readonly property string p: (Icons.cursorPreview[cursorCard.modelData] ?? {})[modelData] ?? ""
- width: 44; height: 44
- asynchronous: true
- source: p !== "" ? "file://" + p : ""
- fillMode: Image.PreserveAspectFit
- }
- }
- }
- Text {
- width: parent.width
- horizontalAlignment: Text.AlignHCenter
- text: cursorCard.staged ? modelData + " staged"
- : cursorCard.current ? modelData + " current"
- : modelData
- color: Theme.text
- font { family: Theme.fontFamily; pixelSize: Theme.fontSize - 3 }
- wrapMode: Text.WrapAnywhere
- maximumLineCount: 2
- elide: Text.ElideRight
- }
- }
- }
- }
- }
-
- Row {
- spacing: 8
- Text {
- anchors.verticalCenter: parent.verticalCenter
- text: pendingCursor !== "" ? "click Apply to set" : "click a cursor theme to stage it"
- color: Theme.overlay
- font { family: Theme.fontFamily; pixelSize: Theme.fontSize - 4 }
- }
- Tab {
- text: "Apply"
- selected: pendingCursor !== ""
- enabled: pendingCursor !== ""
- onClicked: {
- Icons.applyCursor(pendingCursor);
- pendingCursor = "";
- }
- }
- Tab {
- text: "Reset"
- enabled: pendingCursor !== ""
- onClicked: pendingCursor = ""
- }
- }
-
- Text {
- width: parent.width
- wrapMode: Text.Wrap
- visible: Icons.notice !== ""
- text: Icons.notice
- color: Theme.green
- font { family: Theme.fontFamily; pixelSize: Theme.fontSize - 3 }
- }
- }
-
-}