aboutsummaryrefslogtreecommitdiffstats
path: root/keybinds
diff options
context:
space:
mode:
Diffstat (limited to 'keybinds')
-rw-r--r--keybinds/PadPanel.qml75
-rw-r--r--keybinds/README.md3
2 files changed, 57 insertions, 21 deletions
diff --git a/keybinds/PadPanel.qml b/keybinds/PadPanel.qml
index 04c95a5..d9f8941 100644
--- a/keybinds/PadPanel.qml
+++ b/keybinds/PadPanel.qml
@@ -12,7 +12,7 @@
import QtQuick
// The macropad as it sits on the desk: twelve keys in three rows of four,
-// the two encoders to their right. Each key carries its plain action;
+// the two encoders to their right. Each key carries its keycap's legends;
// hovering a key or an encoder lists everything it does underneath. The
// last one hovered stays listed, so moving the pointer off does not blank it.
Item {
@@ -27,10 +27,25 @@ Item {
readonly property int unit: Math.floor(width * 0.85 / 5.56)
readonly property int padWidth: Math.round(unit * 5.56)
- function plain(id) {
- const a = (actions[id] ?? []).find(x => x.how === "Press");
- return a ? a.label : "";
- }
+ // The keycaps, left to right and top to bottom, as printed: icon and
+ // text on top, the shifted (or Alt) legend below, in the palette's
+ // colours nearest the real caps: orange is peach, purple is mauve.
+ // Glyphs are checked by name in Inconsolata Nerd Font (see AGENTS.md,
+ // Theme).
+ readonly property var caps: [
+ { icon: "\u{F0239}", sub: "\u{F05F9}", cap: Theme.red, ink: Theme.base }, // firefox / incognito
+ { icon: "\u{F0174}", sub: "\u{F0354}", cap: Theme.teal, ink: Theme.base }, // code_tags / markdown
+ { icon: "\u{F338}", cap: Theme.yellow, ink: Theme.base }, // gimp
+ { icon: "\u{F0147}", sub: "\u{F0432}", cap: Theme.mauve, ink: Theme.base }, // clipboard / qrcode
+ { icon: "\u{F018D}", text: "SSH", cap: Theme.crust, ink: Theme.green }, // console
+ { icon: "\u{F0BCC}", text: "split", cap: Theme.peach, ink: Theme.base }, // view_split_vertical
+ { icon: "\u{F036C}", cap: Theme.blue, ink: Theme.base }, // microphone
+ { icon: "\u{F02C3}", text: "group", cap: Theme.peach, ink: Theme.base }, // group
+ { text: "1", sub: "\u{F03B0}", cap: Theme.peach, ink: Theme.base }, // numeric_5_box_outline
+ { text: "2", sub: "\u{F03B5}", cap: Theme.peach, ink: Theme.base },
+ { text: "3", sub: "\u{F03B8}", cap: Theme.peach, ink: Theme.base },
+ { text: "4", sub: "\u{F03BB}", cap: Theme.peach, ink: Theme.base },
+ ]
function title(id) {
if (id === "top") return "Top encoder";
@@ -57,27 +72,47 @@ Item {
model: 12
Rectangle {
+ id: keycap
required property int index
readonly property string padId: "k" + (index + 1)
+ readonly property var cap: panel.caps[index]
width: panel.unit
height: panel.unit
radius: panel.unit * 0.12
- color: panel.hovered === padId ? Theme.surfaceAlt : Theme.surface
- border.color: panel.hovered === padId ? Theme.accent : "transparent"
- border.width: 2
-
- Text {
- anchors.fill: parent
- anchors.margins: 4
- text: panel.plain(parent.padId)
- wrapMode: Text.Wrap
- elide: Text.ElideRight
- horizontalAlignment: Text.AlignHCenter
- verticalAlignment: Text.AlignVCenter
- color: Theme.text
- font.family: Theme.fontFamily
- font.pixelSize: Math.max(10, panel.unit * 0.16)
+ color: cap.cap
+ border.color: panel.hovered === padId ? Theme.text : "transparent"
+ border.width: 3
+
+ Column {
+ anchors.centerIn: parent
+
+ Text {
+ anchors.horizontalCenter: parent.horizontalCenter
+ visible: !!keycap.cap.icon
+ text: keycap.cap.icon ?? ""
+ color: keycap.cap.ink
+ font.family: Theme.iconFamily
+ font.pixelSize: panel.unit * 0.34
+ }
+ Text {
+ anchors.horizontalCenter: parent.horizontalCenter
+ visible: !!keycap.cap.text
+ text: keycap.cap.text ?? ""
+ color: keycap.cap.ink
+ font.family: Theme.fontFamily
+ font.bold: true
+ // A lone digit is the cap's main legend.
+ font.pixelSize: panel.unit * (keycap.cap.icon ? 0.16 : 0.34)
+ }
+ Text {
+ anchors.horizontalCenter: parent.horizontalCenter
+ visible: !!keycap.cap.sub
+ text: keycap.cap.sub ?? ""
+ color: keycap.cap.ink
+ font.family: Theme.iconFamily
+ font.pixelSize: panel.unit * 0.26
+ }
}
MouseArea {
diff --git a/keybinds/README.md b/keybinds/README.md
index e933600..11244d5 100644
--- a/keybinds/README.md
+++ b/keybinds/README.md
@@ -21,7 +21,8 @@ Key names are Hyprland's unless `NAMES` in `Binds.js` gives a friendlier one
Win. Add a line there to rename another.
The left fifth of the screen is the macropad, drawn as it sits on the desk:
-twelve keys, each carrying its plain action, and the two encoders. Hovering
+twelve keys wearing their real keycaps' icons and colours, and the two
+encoders. Hovering
a key or an encoder lists everything it does underneath, with what is held
and how an encoder is turned. `PAD` in `Binds.js` maps each combo the pad's
firmware sends to its place, keyed by the combo as displayed, so renaming a