Standardize bar icon geometry
This commit is contained in:
@@ -0,0 +1,102 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
source "$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)/base-test.sh"
|
||||
|
||||
if ! command -v quickshell >/dev/null 2>&1; then
|
||||
pass "quickshell not installed; skipping bar icon geometry test"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
test_tmp=$(mktemp -d)
|
||||
trap 'rm -rf "$test_tmp"' EXIT
|
||||
|
||||
ln -s "$ROOT/shell/Ui" "$test_tmp/Ui"
|
||||
ln -s "$ROOT/shell/Commons" "$test_tmp/Commons"
|
||||
|
||||
cat >"$test_tmp/shell.qml" <<'QML'
|
||||
import QtQuick
|
||||
import Quickshell
|
||||
import qs.Commons
|
||||
import qs.Ui
|
||||
|
||||
ShellRoot {
|
||||
id: root
|
||||
|
||||
function fail(message) {
|
||||
console.log("RESULT fail " + message)
|
||||
Qt.quit()
|
||||
}
|
||||
|
||||
function checkIcon(icon, name) {
|
||||
if (icon.implicitWidth !== Style.bar.iconSlot) {
|
||||
fail(name + " slot width is " + icon.implicitWidth)
|
||||
return false
|
||||
}
|
||||
if (icon.opticalSize !== Style.bar.iconCanvas) {
|
||||
fail(name + " optical canvas is " + icon.opticalSize)
|
||||
return false
|
||||
}
|
||||
if (Math.abs(icon.opticalCenterErrorX) > 0.5 || Math.abs(icon.opticalCenterErrorY) > 0.5) {
|
||||
fail(name + " painted bounds are over half a pixel off center by " + icon.opticalCenterErrorX + "," + icon.opticalCenterErrorY)
|
||||
return false
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
Component.onCompleted: Qt.callLater(function() {
|
||||
if (!checkIcon(bluetooth, "bluetooth")) return
|
||||
if (!checkIcon(network, "network")) return
|
||||
if (!checkIcon(audio, "audio")) return
|
||||
if (!checkIcon(monitor, "monitor")) return
|
||||
if (!checkIcon(power, "power")) return
|
||||
if (vector.implicitWidth !== Style.bar.iconSlot || vector.opticalSize !== Style.bar.iconCanvas) {
|
||||
fail("vector icon does not share glyph geometry")
|
||||
return
|
||||
}
|
||||
console.log("RESULT pass")
|
||||
Qt.quit()
|
||||
})
|
||||
|
||||
QtObject {
|
||||
id: testBar
|
||||
property bool vertical: false
|
||||
property int barSize: Style.bar.sizeHorizontal
|
||||
property string fontFamily: Style.font.family
|
||||
property color barForeground: "white"
|
||||
property color urgent: "red"
|
||||
property bool foregroundAnimationEnabled: false
|
||||
function registerClickTarget(target) {}
|
||||
function unregisterClickTarget(target) {}
|
||||
function hideTooltip(target) {}
|
||||
function showTooltip(target, text) {}
|
||||
}
|
||||
|
||||
BarIconButton { id: bluetooth; bar: testBar; text: "" }
|
||||
BarIconButton { id: network; bar: testBar; text: "" }
|
||||
BarIconButton { id: audio; bar: testBar; text: "" }
|
||||
BarIconButton { id: monitor; bar: testBar; text: "" }
|
||||
BarIconButton { id: power; bar: testBar; text: "" }
|
||||
BarIconButton {
|
||||
id: vector
|
||||
bar: testBar
|
||||
iconComponent: Component { Rectangle { width: 12; height: 12 } }
|
||||
}
|
||||
}
|
||||
QML
|
||||
|
||||
output=$(timeout 15 env \
|
||||
QML2_IMPORT_PATH="$ROOT/shell${QML2_IMPORT_PATH:+:$QML2_IMPORT_PATH}" \
|
||||
QML_IMPORT_PATH="$ROOT/shell${QML_IMPORT_PATH:+:$QML_IMPORT_PATH}" \
|
||||
quickshell -p "$test_tmp" --no-color 2>&1) || {
|
||||
printf '%s\n' "$output" >&2
|
||||
fail "bar icon geometry fixture exits cleanly"
|
||||
}
|
||||
|
||||
if ! grep -q 'RESULT pass' <<<"$output"; then
|
||||
printf '%s\n' "$output" >&2
|
||||
fail "bar icons share centered optical geometry"
|
||||
fi
|
||||
|
||||
pass "bar icons share centered optical geometry"
|
||||
Reference in New Issue
Block a user