From 2d203e48be2621493d1ff2ff1d02dd132e252d1c Mon Sep 17 00:00:00 2001 From: m1ga Date: Sat, 7 Nov 2026 15:45:43 +0100 Subject: [PATCH] Linux: add a Qt port for KDE Plasma The port lives in linux/ and reuses the hand images and tap sounds from assets/. It draws the hand on a layer-shell surface per screen, registers Ctrl+Alt+H and Ctrl+Alt+X with KGlobalAccel, shows a tray icon with a menu, and has a settings window that runs as its own process. A right-click makes the hand step aside for a few seconds, because Wayland does not forward clicks. Install with sh linux/install.sh, remove with --uninstall. Co-Authored-By: Claude Fable 5.1 --- .gitignore | 2 + README.md | 6 +- linux/README.md | 116 ++++++ linux/data/icons/tinyhand-tray-dark.svg | 6 + linux/data/icons/tinyhand-tray-light.svg | 6 + linux/data/icons/tinyhand-tray-on-dark.svg | 6 + linux/data/icons/tinyhand-tray-on-light.svg | 6 + linux/data/icons/tinyhand.png | Bin 0 -> 321640 bytes linux/data/tinyhand.desktop | 28 ++ linux/install.sh | 68 +++ linux/run.py | 12 + linux/tinyhand/__init__.py | 7 + linux/tinyhand/__main__.py | 86 ++++ linux/tinyhand/app.py | 389 +++++++++++++++++ linux/tinyhand/arm.py | 263 ++++++++++++ linux/tinyhand/ink.py | 133 ++++++ linux/tinyhand/layershell.py | 88 ++++ linux/tinyhand/overlay.py | 314 ++++++++++++++ linux/tinyhand/paths.py | 62 +++ linux/tinyhand/prefs.py | 220 ++++++++++ linux/tinyhand/settings_ui.py | 322 +++++++++++++++ linux/tinyhand/shortcuts.py | 136 ++++++ linux/tinyhand/sound.py | 50 +++ linux/tinyhand/styles.py | 332 +++++++++++++++ linux/tinyhand/toolbar.py | 436 ++++++++++++++++++++ 25 files changed, 3093 insertions(+), 1 deletion(-) create mode 100644 linux/README.md create mode 100644 linux/data/icons/tinyhand-tray-dark.svg create mode 100644 linux/data/icons/tinyhand-tray-light.svg create mode 100644 linux/data/icons/tinyhand-tray-on-dark.svg create mode 100644 linux/data/icons/tinyhand-tray-on-light.svg create mode 100644 linux/data/icons/tinyhand.png create mode 100644 linux/data/tinyhand.desktop create mode 100755 linux/install.sh create mode 100755 linux/run.py create mode 100644 linux/tinyhand/__init__.py create mode 100644 linux/tinyhand/__main__.py create mode 100644 linux/tinyhand/app.py create mode 100644 linux/tinyhand/arm.py create mode 100644 linux/tinyhand/ink.py create mode 100644 linux/tinyhand/layershell.py create mode 100644 linux/tinyhand/overlay.py create mode 100644 linux/tinyhand/paths.py create mode 100644 linux/tinyhand/prefs.py create mode 100644 linux/tinyhand/settings_ui.py create mode 100644 linux/tinyhand/shortcuts.py create mode 100644 linux/tinyhand/sound.py create mode 100644 linux/tinyhand/styles.py create mode 100644 linux/tinyhand/toolbar.py diff --git a/.gitignore b/.gitignore index b7af770..f018ec8 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,5 @@ dist/ *.dmg *.zip assets/unused/ +__pycache__/ +*.pyc diff --git a/README.md b/README.md index e1f8647..dc35d3e 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ A tiny hand on a stick that points at things on your Mac screen. [![Download for macOS](https://img.shields.io/badge/Download_for_macOS-000000?style=for-the-badge&logo=apple&logoColor=white)](https://github.com/nilbuild/tinyhand/releases/latest/download/TinyHand.dmg) [![Visit website](https://img.shields.io/badge/Visit_website-ffffff?style=for-the-badge&logo=safari&logoColor=black)](https://tinyhand.app) -macOS 13 or later, Apple Silicon and Intel. +macOS 13 or later, Apple Silicon and Intel. There is also a port for [KDE Plasma on Linux](linux/README.md). ## Install @@ -33,6 +33,10 @@ Open `TinyHand.dmg`, drag TinyHand to Applications and allow **Accessibility** w While the pointer is on, a small toolbar at the bottom of the screen lets you pick one of 36 hands or a laser dot, mute the tap sound, or exit. +## Linux + +A Qt port for KDE Plasma lives in [`linux/`](linux/). It uses the same hands and sounds. See [linux/README.md](linux/README.md) for the install steps. + ## License MIT. See [LICENSE](LICENSE). diff --git a/linux/README.md b/linux/README.md new file mode 100644 index 0000000..e05aa2c --- /dev/null +++ b/linux/README.md @@ -0,0 +1,116 @@ +# TinyHand for KDE Plasma + +A port of TinyHand to Linux. It runs on KDE Plasma 6 with Wayland and uses the same +36 hand images and tap sounds as the Mac app. + +## What you need + +TinyHand is a Python program. It needs these packages: + +| Distribution | Command | +|---|---| +| Fedora | `sudo dnf install python3-pyside6 python3-numpy layer-shell-qt` | +| Debian, Ubuntu, KDE neon | `sudo apt install python3-pyside6.qtwidgets python3-pyside6.qtdbus python3-pyside6.qtmultimedia python3-numpy liblayershellqtinterface6` | +| Arch | `sudo pacman -S pyside6 python-numpy layer-shell-qt` | + +`layer-shell-qt` is part of Plasma. It lets the hand sit above every window and the panel. + +## Install + +From the repository root: + +```sh +sh linux/install.sh +``` + +The script copies TinyHand to `~/.local/share/tinyhand`, puts a `tinyhand` command into +`~/.local/bin`, and adds a launcher entry with an icon. Run `sh linux/install.sh --uninstall` +to remove it again. Your settings stay in `~/.config/tinyhand/tinyhand.ini`. + +Start TinyHand from the launcher or with `tinyhand`. It shows a hand icon in the system tray. +Turn on "Open at login" in the settings if you want it to start with Plasma. + +You can also run it from the checkout without an install: `python3 linux/run.py`. + +## Use + +| | | +|---|---| +| Click the tray icon, or **Ctrl+Alt+H** | Turn the pointer on or off | +| Right-click the tray icon | Menu and Settings | +| Click | Tap (nothing underneath gets clicked) | +| Hold and drag | Draw on the screen | +| Right-click | The hand steps aside for 3 seconds so that you can click the real thing | +| **Ctrl+Alt+X** | Clear the drawing | +| **Esc** | Clear everything and turn the pointer off | + +While the pointer is on, a small toolbar at the bottom of the screen lets you pick one of +the pinned hands or the laser dot, change the ink colour, mute the tap sound, or exit. + +The shortcuts are registered with KDE. Change them in System Settings > Keyboard > +Shortcuts under "TinyHand". The settings window has a button that opens that page. + +The command line controls a running TinyHand, for example from a Stream Deck or a script: + +```sh +tinyhand --toggle # pointer on or off +tinyhand --on +tinyhand --off +tinyhand --clear # clear the drawing +tinyhand --settings # open the settings window +tinyhand --quit +``` + +The same commands exist on D-Bus as `app.tinyhand` at `/app/tinyhand`, interface +`app.tinyhand.TinyHand`, with the methods `Toggle`, `TurnOn`, `TurnOff`, `Clear`, +`Settings`, `Reload`, `Quit`, and `IsActive`. + +## Your own hands + +Put a PNG into `~/.local/share/tinyhand/hands/`. The image must have a transparent +background and show the hand on its stick with the fingertip at the top, like the files in +`assets/`. The file name becomes the name in the settings window. The ink colour comes from +the colour of the hand. + +## Differences from the Mac app + +Wayland does not let one app read the mouse position or pass clicks to another window. The +port works within that: + +- The hand is drawn on a transparent layer that covers each screen. While the pointer is on, + the layer takes the mouse, so clicks tap and drags draw, like on the Mac. +- There is no "hold a key to click for real". Instead, a right-click (or middle-click, see the + settings) hides the hand and lets clicks through for a few seconds. +- Keyboard input keeps going to your apps while the pointer is on. Esc works through a global + shortcut that is active only while the pointer is on. +- Global shortcuts come from KDE's KGlobalAccel, so they work on Wayland and X11, but only on + Plasma. On other desktops the tray icon and the command line still work. +- Multiple screens: the hand follows the mouse to whichever screen it is on. +- There is no automatic update. Pull the repository and run the install script again. + +X11 sessions run with a plain always-on-top window. That path has had less testing than +Wayland. + +## How the code is laid out + +``` +linux/ + run.py entry point for a checkout or an install directory + install.sh user or system install, with --uninstall + tinyhand/ + __main__.py command line, forwards to the running app over D-Bus + app.py tray icon, D-Bus service, global shortcuts, pointer controller + overlay.py one transparent layer-shell window per screen + arm.py hand pose and painting (a port of ArmView.swift) + ink.py strokes and fading (a port of Ink.swift) + toolbar.py the bottom toolbar, ink tray and first-run hint + styles.py the style table and the hand image measuring (PointerStyle.swift) + prefs.py QSettings-backed preferences + shortcuts.py KGlobalAccel over D-Bus + sound.py tap sounds with QSoundEffect + layershell.py ctypes bridge to LayerShellQt + settings_ui.py the settings window (runs as its own process) + data/ desktop file and icons +``` + +Set `TINYHAND_DEBUG=1` to print per-second paint and event counts while the pointer is on. diff --git a/linux/data/icons/tinyhand-tray-dark.svg b/linux/data/icons/tinyhand-tray-dark.svg new file mode 100644 index 0000000..ea26574 --- /dev/null +++ b/linux/data/icons/tinyhand-tray-dark.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/linux/data/icons/tinyhand-tray-light.svg b/linux/data/icons/tinyhand-tray-light.svg new file mode 100644 index 0000000..ecd7483 --- /dev/null +++ b/linux/data/icons/tinyhand-tray-light.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/linux/data/icons/tinyhand-tray-on-dark.svg b/linux/data/icons/tinyhand-tray-on-dark.svg new file mode 100644 index 0000000..745090f --- /dev/null +++ b/linux/data/icons/tinyhand-tray-on-dark.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/linux/data/icons/tinyhand-tray-on-light.svg b/linux/data/icons/tinyhand-tray-on-light.svg new file mode 100644 index 0000000..b3d56f0 --- /dev/null +++ b/linux/data/icons/tinyhand-tray-on-light.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/linux/data/icons/tinyhand.png b/linux/data/icons/tinyhand.png new file mode 100644 index 0000000000000000000000000000000000000000..527606cbda58a69bf0c00a234292e29efb0d7eee GIT binary patch literal 321640 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

-XAI!M=ybHyI4bho7GT|-2=%2pN|bkE(Y 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±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/dev/null 2>&1 && update-desktop-database "$PREFIX/share/applications" || true + echo "TinyHand removed from $PREFIX. Settings stay in ~/.config/tinyhand." + exit 0 +fi + +if ! python3 -c "import PySide6.QtWidgets, PySide6.QtDBus, numpy" 2>/dev/null; then + echo "TinyHand needs python3 with PySide6 and numpy." >&2 + echo " Fedora: sudo dnf install python3-pyside6 python3-numpy" >&2 + echo " Debian/Ubuntu: sudo apt install python3-pyside6.qtwidgets python3-pyside6.qtdbus python3-pyside6.qtmultimedia python3-numpy" >&2 + echo " Arch: sudo pacman -S pyside6 python-numpy" >&2 + exit 1 +fi +have_layer_shell=0 +for lib in /usr/lib*/libLayerShellQtInterface.so.6 /usr/lib/*/libLayerShellQtInterface.so.6; do + [ -e "$lib" ] && have_layer_shell=1 +done +if [ "$have_layer_shell" = 0 ]; then + echo "Warning: layer-shell-qt was not found. On Wayland the hand will not sit above the panel." >&2 + echo " Fedora: sudo dnf install layer-shell-qt Debian/Ubuntu: sudo apt install liblayershellqtinterface6" >&2 +fi + +mkdir -p "$APP_DIR/assets/sounds" "$PREFIX/bin" "$PREFIX/share/applications" "$ICONS/512x512/apps" +rm -rf "$APP_DIR/tinyhand" +cp -r "$HERE/tinyhand" "$APP_DIR/tinyhand" +rm -rf "$APP_DIR/tinyhand/__pycache__" +cp "$HERE/run.py" "$APP_DIR/run.py" +cp "$ROOT/VERSION" "$APP_DIR/VERSION" 2>/dev/null || true +cp "$ROOT"/assets/hand_*.png "$APP_DIR/assets/" +cp "$ROOT"/assets/sounds/tap_*.wav "$APP_DIR/assets/sounds/" +mkdir -p "$APP_DIR/data/icons" +cp "$HERE"/data/icons/*.svg "$HERE"/data/icons/*.png "$APP_DIR/data/icons/" + +cat > "$BIN" < "$DESKTOP" +cp "$HERE/data/icons/tinyhand.png" "$ICONS/512x512/apps/tinyhand.png" + +command -v update-desktop-database >/dev/null 2>&1 && update-desktop-database "$PREFIX/share/applications" || true +command -v gtk-update-icon-cache >/dev/null 2>&1 && gtk-update-icon-cache -q -t "$ICONS" 2>/dev/null || true + +echo "Installed TinyHand to $PREFIX." +case ":$PATH:" in + *":$PREFIX/bin:"*) echo "Start it with: tinyhand" ;; + *) echo "Start it with: $BIN ($PREFIX/bin is not in your PATH)" ;; +esac +echo "Shortcuts: Ctrl+Alt+H turns the pointer on or off, Ctrl+Alt+X clears the drawing." diff --git a/linux/run.py b/linux/run.py new file mode 100755 index 0000000..f6bc1d8 --- /dev/null +++ b/linux/run.py @@ -0,0 +1,12 @@ +#!/usr/bin/env python3 +"""Run TinyHand from a checkout or an install directory: python3 run.py [--toggle|--settings|...]""" + +import os +import sys + +sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) + +from tinyhand.__main__ import main # noqa: E402 + +if __name__ == "__main__": + sys.exit(main()) diff --git a/linux/tinyhand/__init__.py b/linux/tinyhand/__init__.py new file mode 100644 index 0000000..78cacd4 --- /dev/null +++ b/linux/tinyhand/__init__.py @@ -0,0 +1,7 @@ +"""TinyHand for KDE Plasma: a tiny hand on a stick that points at things on your screen.""" + +APP_NAME = "TinyHand" +APP_ID = "app.tinyhand" +DBUS_SERVICE = "app.tinyhand" +DBUS_PATH = "/app/tinyhand" +DBUS_INTERFACE = "app.tinyhand.TinyHand" diff --git a/linux/tinyhand/__main__.py b/linux/tinyhand/__main__.py new file mode 100644 index 0000000..1bae744 --- /dev/null +++ b/linux/tinyhand/__main__.py @@ -0,0 +1,86 @@ +"""Command line entry point. + + tinyhand start the tray app (or do nothing if it already runs) + tinyhand --toggle turn the pointer on or off + tinyhand --on / --off turn it on or off + tinyhand --clear clear the drawing + tinyhand --settings open the settings window + tinyhand --quit stop the tray app +""" + +import os +import sys + +from . import APP_NAME, DBUS_INTERFACE, DBUS_PATH, DBUS_SERVICE + +_PACKAGE_DIR = os.path.dirname(os.path.abspath(__file__)) +VERSION_FILES = [ + os.path.join(os.path.dirname(_PACKAGE_DIR), "VERSION"), + os.path.join(os.path.dirname(os.path.dirname(_PACKAGE_DIR)), "VERSION"), +] + +COMMANDS = { + "--toggle": "Toggle", + "--on": "TurnOn", + "--off": "TurnOff", + "--clear": "Clear", + "--quit": "Quit", + "--reload": "Reload", +} + + +def version(): + for path in VERSION_FILES: + try: + with open(path, encoding="utf-8") as handle: + return handle.read().strip() + except OSError: + continue + return "dev" + + +def send(method): + """Call the running daemon. Returns True when a daemon answered.""" + from PySide6.QtCore import QCoreApplication + from PySide6.QtDBus import QDBusConnection, QDBusInterface, QDBusMessage + + app = QCoreApplication.instance() or QCoreApplication(sys.argv) + bus = QDBusConnection.sessionBus() + iface = QDBusInterface(DBUS_SERVICE, DBUS_PATH, DBUS_INTERFACE, bus) + if not iface.isValid(): + return False + reply = iface.call(method) + return reply.type() != QDBusMessage.ErrorMessage + + +def main(argv=None): + argv = list(sys.argv if argv is None else argv) + args = argv[1:] + if "--help" in args or "-h" in args: + print(__doc__.strip()) + return 0 + if "--version" in args: + print(f"{APP_NAME} {version()}") + return 0 + if "--settings" in args: + os.environ.pop("QT_WAYLAND_SHELL_INTEGRATION", None) + from .settings_ui import run_settings + + return run_settings(argv) + for flag, method in COMMANDS.items(): + if flag in args: + if send(method): + return 0 + if flag in ("--toggle", "--on"): + # Not running yet: start the daemon with the pointer on. + os.environ["TINYHAND_START_ON"] = "1" + break + print(f"{APP_NAME} is not running.", file=sys.stderr) + return 1 + from .app import run_daemon + + return run_daemon([argv[0]]) + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/linux/tinyhand/app.py b/linux/tinyhand/app.py new file mode 100644 index 0000000..aa4029e --- /dev/null +++ b/linux/tinyhand/app.py @@ -0,0 +1,389 @@ +"""The TinyHand daemon: tray icon, D-Bus control, global shortcuts, and the pointer overlays.""" + +import configparser +import os +import shutil +import subprocess +import sys +import time +from pathlib import Path + +from PySide6.QtCore import QEvent, QObject, QTimer, Slot +from PySide6.QtDBus import QDBusConnection +from PySide6.QtGui import QAction, QIcon +from PySide6.QtWidgets import QApplication, QMenu, QSystemTrayIcon, QWidget + +from . import APP_NAME, DBUS_INTERFACE, DBUS_PATH, DBUS_SERVICE +from .overlay import Overlay +from .paths import launcher_command +from .prefs import prefs +from .shortcuts import GlobalShortcuts +from .sound import TapSound +from .styles import HandAsset, PointerStyle + +TOGGLE_DEFAULT = "Ctrl+Alt+H" +CLEAR_DEFAULT = "Ctrl+Alt+X" + + +def panel_is_dark(app): + """Plasma panels follow the Plasma theme, which can differ from the application colours.""" + name = "" + for exe in ("kreadconfig6", "kreadconfig5"): + path = shutil.which(exe) + if path is None: + continue + try: + result = subprocess.run([path, "--file", "plasmarc", "--group", "Theme", "--key", "name"], + capture_output=True, text=True, timeout=3) + name = result.stdout.strip() + except (OSError, subprocess.TimeoutExpired): + name = "" + break + if name and name != "default": + bases = [Path(os.environ.get("XDG_DATA_HOME") or Path.home() / ".local" / "share")] + bases += [Path(d) for d in (os.environ.get("XDG_DATA_DIRS") or "/usr/local/share:/usr/share").split(":")] + for base in bases: + colors = base / "plasma" / "desktoptheme" / name / "colors" + if not colors.is_file(): + continue + parser = configparser.ConfigParser(interpolation=None, strict=False) + try: + parser.read(colors, encoding="utf-8") + r, g, b = (int(v) for v in parser["Colors:Window"]["BackgroundNormal"].split(",")[:3]) + return (0.299 * r + 0.587 * g + 0.114 * b) < 128 + except (KeyError, ValueError, configparser.Error): + break + lowered = name.lower() + if "dark" in lowered: + return True + if "light" in lowered: + return False + return app.palette().window().color().lightness() < 128 + + +class PointerController(QObject): + """Owns one overlay per screen while the pointer is on.""" + + def __init__(self, app, sound, shortcuts): + super().__init__() + self.app = app + self.sound = sound + self.shortcuts = shortcuts + self.overlays = [] + self.active = False + self.style = prefs().pointer_style + self.on_active_changed = None + self.on_sound_changed = None + self.step_aside_timer = QTimer(self) + self.step_aside_timer.setSingleShot(True) + self.step_aside_timer.timeout.connect(self._end_step_aside) + self.stepping_aside = False + app.screenAdded.connect(self._screens_changed) + app.screenRemoved.connect(self._screens_changed) + app.installEventFilter(self) + prefs().changed.connect(self._prefs_changed) + + # -- on / off -------------------------------------------------------------- + + def toggle(self): + if self.active: + self.deactivate() + else: + self.activate() + + def activate(self): + if self.active: + return + self.active = True + self.style = prefs().pointer_style + self.sound.enabled = prefs().sound_on_for(self.style) + self.sound.load(prefs().tap_sound) + self._build_overlays() + reveal_until = time.monotonic() + 3 + first_run = not prefs().first_run_hint_shown + if first_run: + prefs().set("firstRunHintShown", True) + parts = [("Click", "to tap"), ("Drag", "to draw")] + button = prefs().step_aside_button + if button != "off": + parts.append((f"{button.capitalize()}-click", "to click through")) + parts.append(("Esc", "to exit")) + reveal_until = time.monotonic() + 10 + for overlay in self.overlays: + overlay.show_hint(parts, 10) + for overlay in self.overlays: + overlay.reveal_for(reveal_until - time.monotonic()) + self.shortcuts.set_active("exit", True) + if self.on_active_changed: + self.on_active_changed() + + def deactivate(self): + if not self.active: + return + self.active = False + self.step_aside_timer.stop() + self.stepping_aside = False + self.shortcuts.set_active("exit", False) + self._destroy_overlays() + if self.on_active_changed: + self.on_active_changed() + + def exit(self): + self.clear_ink() + self.deactivate() + + def _build_overlays(self): + self._destroy_overlays() + for screen in self.app.screens(): + overlay = Overlay(self, screen) + overlay.set_style(self.style) + overlay.show() + self.overlays.append(overlay) + + def _destroy_overlays(self): + for overlay in self.overlays: + overlay.hide() + overlay.deleteLater() + self.overlays = [] + + def _screens_changed(self, screen): + if self.active: + QTimer.singleShot(300, self._rebuild_if_active) + + def _rebuild_if_active(self): + if self.active: + self._build_overlays() + + # -- events from overlays -------------------------------------------------- + + def pointer_entered(self, overlay): + for other in self.overlays: + if other is not overlay: + other.set_hand_hidden(True) + + def tapped(self, overlay): + self.sound.play() + + def pick(self, style): + self.style = style + prefs().pointer_style = style + + def clear_ink(self): + for overlay in self.overlays: + overlay.clear_ink() + + @property + def sound_on(self): + return prefs().sound_on_for(self.style) + + def toggle_sound(self): + prefs().set_sound_on_for(self.style, not self.sound_on) + + def step_aside(self): + """Hide the hand and let clicks through for a few seconds.""" + if not self.active: + return + self.stepping_aside = True + for overlay in self.overlays: + overlay.set_pass_through(True) + self.step_aside_timer.start(int(prefs().step_aside_seconds * 1000)) + + def _end_step_aside(self): + self.stepping_aside = False + for overlay in self.overlays: + overlay.set_pass_through(False) + + def _prefs_changed(self): + self.sound.load(prefs().tap_sound) + style = prefs().pointer_style + if style != self.style: + self.style = style + for overlay in self.overlays: + overlay.set_style(style) + self.sound.enabled = prefs().sound_on_for(self.style) + for overlay in self.overlays: + overlay.apply_prefs() + if self.on_sound_changed: + self.on_sound_changed() + + def eventFilter(self, obj, event): + # Mouse moves over toolbar buttons still steer the hand. + if event.type() == QEvent.MouseMove and isinstance(obj, QWidget): + window = obj.window() + if isinstance(window, Overlay) and obj is not window: + window.aim(obj.mapTo(window, event.position().toPoint())) + return False + + +class DBusService(QObject): + """app.tinyhand.TinyHand on the session bus. Slots are the public methods.""" + + def __init__(self, daemon): + super().__init__() + self.daemon = daemon + + @Slot() + def Toggle(self): + self.daemon.pointer.toggle() + + @Slot() + def TurnOn(self): + self.daemon.pointer.activate() + + @Slot() + def TurnOff(self): + self.daemon.pointer.exit() + + @Slot() + def Clear(self): + self.daemon.pointer.clear_ink() + + @Slot() + def Settings(self): + self.daemon.open_settings() + + @Slot() + def Reload(self): + prefs().reload() + + @Slot() + def Quit(self): + self.daemon.quit() + + @Slot(result=bool) + def IsActive(self): + return self.daemon.pointer.active + + +class Daemon(QObject): + def __init__(self, app): + super().__init__() + self.app = app + app.setQuitOnLastWindowClosed(False) + app.setApplicationName("tinyhand") + app.setDesktopFileName("tinyhand") + self.sound = TapSound(prefs().tap_sound) + self.shortcuts = GlobalShortcuts(self) + self.pointer = PointerController(app, self.sound, self.shortcuts) + self.pointer.on_active_changed = self._refresh_tray + self.pointer.on_sound_changed = self._refresh_menu + self.settings_process = None + + self.service = DBusService(self) + bus = QDBusConnection.sessionBus() + bus.registerObject(DBUS_PATH, DBUS_INTERFACE, self.service, QDBusConnection.ExportAllSlots) + + self.shortcuts.register("toggle", "Turn pointer on or off", TOGGLE_DEFAULT, self.pointer.toggle) + self.shortcuts.register("clear", "Clear the drawing", CLEAR_DEFAULT, self.pointer.clear_ink) + self.shortcuts.register("exit", "Turn pointer off (while it is on)", "Esc", self.pointer.exit, active=False) + + self._setup_tray() + app.installEventFilter(self) + QTimer.singleShot(0, self._warm) + + def eventFilter(self, obj, event): + if event.type() == QEvent.ApplicationPaletteChange and obj is self.app: + self._refresh_tray() + return False + + def _warm(self): + for style in prefs().pinned_styles: + if not style.is_laser: + HandAsset.thumbnail(style) + + # -- tray ---------------------------------------------------------------- + + def _setup_tray(self): + self.tray = QSystemTrayIcon(self) + self.menu = QMenu() + self.toggle_action = QAction("", self.menu) + self.toggle_action.triggered.connect(self.pointer.toggle) + self.clear_action = QAction("", self.menu) + self.clear_action.triggered.connect(self.pointer.clear_ink) + self.sound_action = QAction("Tap Sound", self.menu) + self.sound_action.setCheckable(True) + self.sound_action.triggered.connect(self.pointer.toggle_sound) + self.menu.addAction(self.toggle_action) + self.menu.addAction(self.clear_action) + self.menu.addAction(self.sound_action) + self.menu.addSeparator() + settings_action = QAction("Settings…", self.menu) + settings_action.triggered.connect(self.open_settings) + self.menu.addAction(settings_action) + self.menu.addSeparator() + quit_action = QAction(f"Quit {APP_NAME}", self.menu) + quit_action.triggered.connect(self.quit) + self.menu.addAction(quit_action) + self.menu.aboutToShow.connect(self._refresh_menu) + self.tray.setContextMenu(self.menu) + self.tray.activated.connect(self._tray_activated) + self._refresh_tray() + self._refresh_menu() + self.tray.show() + + def _tray_icon(self, on): + """Light or dark glyph to match the panel. Plasma shows the pixmap as is, so we pick the colour.""" + name = "tinyhand-tray-on" if on else "tinyhand-tray" + variant = "light" if panel_is_dark(self.app) else "dark" + path = Path(__file__).resolve().parent.parent / "data" / "icons" / f"{name}-{variant}.svg" + if path.is_file(): + return QIcon(str(path)) + return QIcon.fromTheme("input-mouse") + + def _refresh_tray(self): + on = self.pointer.active + self.tray.setIcon(self._tray_icon(on)) + self.tray.setToolTip(f"{APP_NAME} is on. Click to turn off, right-click for the menu" if on + else f"{APP_NAME}. Click to turn on, right-click for the menu") + self._refresh_menu() + + def _refresh_menu(self): + on = self.pointer.active + toggle_keys = self.shortcuts.current_keys("toggle") or TOGGLE_DEFAULT + clear_keys = self.shortcuts.current_keys("clear") or CLEAR_DEFAULT + self.toggle_action.setText(f"{'Turn Pointer Off' if on else 'Turn Pointer On'}\t{toggle_keys}") + self.clear_action.setText(f"Clear Drawing\t{clear_keys}") + self.sound_action.setChecked(self.pointer.sound_on) + + def _tray_activated(self, reason): + if reason in (QSystemTrayIcon.Trigger, QSystemTrayIcon.DoubleClick): + self.pointer.toggle() + elif reason == QSystemTrayIcon.MiddleClick: + self.pointer.clear_ink() + + # -- settings -------------------------------------------------------------- + + def open_settings(self): + """The settings window runs in its own process so it gets a normal window, not a layer surface.""" + self.pointer.exit() + if self.settings_process is not None and self.settings_process.poll() is None: + return + env = dict(os.environ) + env.pop("QT_WAYLAND_SHELL_INTEGRATION", None) + command = launcher_command().split(" ", 1) + if len(command) == 2: + args = [command[0], command[1], "--settings"] + else: + args = [command[0], "--settings"] + try: + self.settings_process = subprocess.Popen(args, env=env) + except OSError as error: + print(f"could not open settings: {error}", file=sys.stderr) + + def quit(self): + self.pointer.deactivate() + self.tray.hide() + self.app.quit() + + +def run_daemon(argv): + os.environ.setdefault("QT_WAYLAND_SHELL_INTEGRATION", "layer-shell") + app = QApplication(argv) + bus = QDBusConnection.sessionBus() + if not bus.registerService(DBUS_SERVICE): + print(f"{APP_NAME} is already running.", file=sys.stderr) + return 0 + daemon = Daemon(app) + if os.environ.pop("TINYHAND_START_ON", ""): + QTimer.singleShot(0, daemon.pointer.activate) + return app.exec() diff --git a/linux/tinyhand/arm.py b/linux/tinyhand/arm.py new file mode 100644 index 0000000..124b445 --- /dev/null +++ b/linux/tinyhand/arm.py @@ -0,0 +1,263 @@ +"""The hand on a stick: where it is, how it leans, and how it is drawn.""" + +import math + +import numpy as np +from PySide6.QtCore import QPointF, QRectF, Qt +from PySide6.QtGui import QColor, QImage, QPainter, QRadialGradient, QTransform + +from .styles import RED, HandAsset, PointerStyle + + +class ArmRenderer: + GRIP_LEAN = 0.30 + GRIP_DEPTH = 0.12 + GRIP_FOLLOW = 0.08 + LIFT = 0.06 + MIN_ROD = 0.05 + + def __init__(self): + self.style = PointerStyle("lavender") + self.asset = None + self.hand_len_frac = 0.13 + self.show_shadow = True + self.hidden = False + self.held = False + self.press_amount = 0.0 + self.grip_x = None + self.grip_target = None + self.cursor = None + self.width = 0 + self.height = 0 + self.dpr = 1.0 + self.pose = None + self._display = None + self._shadow = None + self._display_height = 0 + + # -- state --------------------------------------------------------------- + + @property + def is_settling(self): + if self.press_amount > 0.002: + return True + if self.grip_x is None or self.grip_target is None: + return False + return abs(self.grip_target - self.grip_x) > 0.5 + + def set_style(self, style): + self.style = style + self.asset = None if style.is_laser else HandAsset.load(style) + if not style.is_laser and self.asset is None: + self.style = PointerStyle("laser") + self._display = None + self._shadow = None + self._display_height = 0 + self.pose = None + + def set_size(self, width, height, dpr): + if (width, height, dpr) != (self.width, self.height, self.dpr): + self.width = width + self.height = height + self.dpr = dpr + self._display_height = 0 + self.pose = None + + def press(self): + self.press_amount = 1.0 + + def bounds(self): + """Screen rect that the current pose covers, for partial repaints.""" + pose = self.pose + if pose is None: + return QRectF() + if pose["kind"] == "laser": + r = pose["glow"] + 2 + c = pose["cursor"] + return QRectF(c.x() - r, c.y() - r, 2 * r, 2 * r) + width = pose["width"] + local = QRectF(-pose["rod_x"] * width, -(pose["rod_len"] + pose["hand"]), width, pose["rod_len"] + pose["hand"]) + rect = pose["transform"].mapRect(local) + shadow = pose["shadow_transform"].mapRect(local) + margin = pose["lift"] * 0.5 + 12 + return rect.united(shadow).adjusted(-margin, -margin, margin, margin) + + # -- aiming -------------------------------------------------------------- + + def aim(self, cursor): + """Point at `cursor` (overlay coordinates, y down). Returns True when the pose changed.""" + self.cursor = QPointF(cursor) + w = self.width + h = self.height + if w <= 0 or h <= 0: + return False + target_x = min(max(cursor.x() + self.GRIP_LEAN * w, w * 0.15), w * 1.05) + if self.grip_x is None: + gx = target_x + else: + gx = self.grip_x + (target_x - self.grip_x) * self.GRIP_FOLLOW + self.grip_x = gx + self.grip_target = target_x + if not self.held: + self.press_amount += (0 - self.press_amount) * 0.18 + if self.press_amount < 0.001: + self.press_amount = 0.0 + + if self.style.is_laser or self.asset is None: + return self._aim_laser(cursor) + + a = self.asset + self._update_display(a) + grip_up = QPointF(gx, -self.GRIP_DEPTH * h) + cursor_up = QPointF(cursor.x(), h - cursor.y()) + dx = cursor_up.x() - grip_up.x() + dy = cursor_up.y() - grip_up.y() + reach = math.hypot(dx, dy) + aim_angle = math.atan2(dy, dx) + + hand_pts = self.hand_len_frac * h * (1 - 0.06 * self.press_amount) + s = hand_pts / (a.wrist - a.hand_top) + width_pts = s * a.aspect + hand_tip_pts = (a.wrist - a.tip) * s + tip_off_x = (a.tip_x - a.rod_x) * width_pts + + along = math.sqrt(max(0.0, reach * reach - tip_off_x * tip_off_x)) + rod_len = max(self.MIN_ROD * h, along - hand_tip_pts) + tip_angle = math.atan2(rod_len + hand_tip_pts, tip_off_x) + rotation = aim_angle - tip_angle + + lift = self.LIFT * h * (1 - 0.8 * self.press_amount) + shadow_offset = QPointF(lift * 0.6, lift) + grip = QPointF(gx, h + self.GRIP_DEPTH * h) + degrees = -math.degrees(rotation) + + key = tuple(round(v * 100) for v in (rotation, rod_len, hand_pts, width_pts, gx, lift, self.press_amount, + 1.0 if self.show_shadow else 0.0)) + if self.pose is not None and self.pose.get("key") == key: + return False + transform = QTransform().translate(grip.x(), grip.y()).rotate(degrees) + shadow_transform = QTransform().translate(grip.x() + shadow_offset.x(), grip.y() + shadow_offset.y()).rotate(degrees) + self.pose = { + "kind": "hand", + "key": key, + "transform": transform, + "shadow_transform": shadow_transform, + "rod_len": rod_len, + "hand": hand_pts, + "width": width_pts, + "rod_x": a.rod_x, + "lift": lift, + "press": self.press_amount, + } + return True + + def _aim_laser(self, cursor): + press = self.press_amount + r = max(4.0, self.height * 0.0038 * self.hand_len_frac / 0.13) * (1 + 0.2 * press) + key = tuple(round(v * 100) for v in (r, cursor.x(), cursor.y())) + if self.pose is not None and self.pose.get("key") == key: + return False + self.pose = { + "kind": "laser", + "key": key, + "cursor": QPointF(cursor), + "r": r, + "core": r * 0.45, + "glow": r * (2.2 + press) * 1.6, + } + return True + + # -- images -------------------------------------------------------------- + + def _update_display(self, a): + full = a.image + rest_pts = self.hand_len_frac * self.height / (a.wrist - a.hand_top) + step = 64 + needed = (int(math.ceil(rest_pts * self.dpr)) + step - 1) // step * step + height = full.height() if needed >= full.height() * 9 // 10 else max(step, needed) + if height == self._display_height and self._display is not None: + return + self._display_height = height + if height == full.height(): + image = full + else: + width = max(1, round(full.width() * height / full.height())) + image = full.scaled(width, height, Qt.IgnoreAspectRatio, Qt.SmoothTransformation) + self._display = image + self._shadow = self._make_shadow(image) + + @staticmethod + def _make_shadow(image): + """A soft black silhouette of the hand image.""" + img = image.convertToFormat(QImage.Format_ARGB32_Premultiplied).copy() + h = img.height() + w = img.width() + raw = np.frombuffer(img.bits(), dtype=np.uint8) + pixels = raw.reshape(h, img.bytesPerLine())[:, : w * 4].reshape(h, w, 4) + pixels[:, :, 0:3] = 0 + small = img.scaled(max(1, w // 6), max(1, h // 6), Qt.IgnoreAspectRatio, Qt.SmoothTransformation) + return small.scaled(w, h, Qt.IgnoreAspectRatio, Qt.SmoothTransformation) + + # -- painting ------------------------------------------------------------ + + def paint(self, painter): + if self.hidden or self.pose is None: + return + if self.pose["kind"] == "laser": + self._paint_laser(painter) + return + a = self.asset + if a is None or self._display is None: + return + pose = self.pose + painter.save() + painter.setRenderHint(QPainter.RenderHint.SmoothPixmapTransform) + painter.setRenderHint(QPainter.RenderHint.Antialiasing) + if self.show_shadow: + painter.save() + painter.setTransform(pose["shadow_transform"], True) + painter.setOpacity(0.26 + 0.02 * pose["press"]) + self._paint_group(painter, self._shadow, a, pose) + painter.restore() + painter.setTransform(pose["transform"], True) + self._paint_group(painter, self._display, a, pose) + painter.restore() + + @staticmethod + def _paint_group(painter, image, a, pose): + iw = image.width() + ih = image.height() + width = pose["width"] + rod_len = pose["rod_len"] + hand = pose["hand"] + left = -pose["rod_x"] * width + rod_source = QRectF(0, a.wrist * ih, iw, (a.rod_end - a.wrist) * ih) + hand_source = QRectF(0, a.hand_top * ih, iw, (a.wrist - a.hand_top) * ih) + painter.drawImage(QRectF(left, -rod_len, width, rod_len + 1), image, rod_source) + painter.drawImage(QRectF(left, -(rod_len + hand), width, hand), image, hand_source) + + def _paint_laser(self, painter): + pose = self.pose + c = pose["cursor"] + r = pose["r"] + glow = pose["glow"] + painter.save() + painter.setRenderHint(QPainter.RenderHint.Antialiasing) + painter.setPen(Qt.NoPen) + gradient = QRadialGradient(c, glow) + red = QColor(RED) + red.setAlphaF(0.55) + gradient.setColorAt(0.0, red) + mid = QColor(RED) + mid.setAlphaF(0.18) + gradient.setColorAt(0.45, mid) + clear = QColor(RED) + clear.setAlphaF(0.0) + gradient.setColorAt(1.0, clear) + painter.setBrush(gradient) + painter.drawEllipse(c, glow, glow) + painter.setBrush(RED) + painter.drawEllipse(c, r, r) + painter.setBrush(QColor.fromRgbF(1, 0.86, 0.82, 0.95)) + painter.drawEllipse(c, pose["core"], pose["core"]) + painter.restore() diff --git a/linux/tinyhand/ink.py b/linux/tinyhand/ink.py new file mode 100644 index 0000000..269537c --- /dev/null +++ b/linux/tinyhand/ink.py @@ -0,0 +1,133 @@ +"""Drawing strokes that fade away.""" + +import time + +from PySide6.QtCore import QPointF, QRectF, Qt +from PySide6.QtGui import QColor, QPainterPath, QPen + +FADE_DURATION = 0.6 + + +class Stroke: + __slots__ = ("points", "base", "color", "width", "ended_at", "bounds") + + def __init__(self, point, color, width): + self.points = [QPointF(point)] + self.base = QPainterPath(QPointF(point)) + self.color = QColor(color) + self.width = width + self.ended_at = None + pad = width / 2 + 6 + self.bounds = QRectF(point.x() - pad, point.y() - pad, 2 * pad, 2 * pad) + + def path(self): + path = QPainterPath(self.base) + if len(self.points) == 1: + path.lineTo(self.points[0]) + else: + path.lineTo(self.points[-1]) + return path + + def extend(self, point): + prev = self.points[-1] + mid = QPointF((prev.x() + point.x()) / 2, (prev.y() + point.y()) / 2) + self.base.quadTo(prev, mid) + self.points.append(QPointF(point)) + pad = self.width / 2 + 6 + segment = QRectF(prev, point).normalized().adjusted(-pad, -pad, pad, pad) + self.bounds = self.bounds.united(segment) + return segment + + +class Ink: + def __init__(self): + self.color = QColor(135, 84, 242) + self.fade_seconds = 3.0 + self.strokes = [] + self.current = None + + @property + def keep(self): + return self.fade_seconds <= 0 + + @property + def fade_delay(self): + return max(0.5, self.fade_seconds) + + @property + def is_drawing(self): + return self.current is not None + + def begin(self, point, width): + stroke = Stroke(point, self.color, width) + self.strokes.append(stroke) + self.current = stroke + return stroke.bounds + + def extend(self, point): + if self.current is None: + return None + last = self.current.points[-1] + if (point - last).manhattanLength() < 1.5: + return None + return self.current.extend(point) + + def end(self): + if self.current is None: + return + self.current.ended_at = time.monotonic() + self.current = None + + def clear(self): + rects = [s.bounds for s in self.strokes] + self.strokes = [] + self.current = None + return rects + + def opacity(self, stroke, now): + if stroke.ended_at is None or self.keep: + return 1.0 + start = stroke.ended_at + self.fade_delay + if now < start: + return 1.0 + return max(0.0, 1.0 - (now - start) / FADE_DURATION) + + def is_fading(self, stroke, now): + return stroke.ended_at is not None and not self.keep and now >= stroke.ended_at + self.fade_delay + + def has_pending_fade(self): + return not self.keep and any(s.ended_at is not None for s in self.strokes) + + def prune(self, now): + """Drop strokes that finished fading. Returns the rects that changed.""" + dirty = [] + remaining = [] + for stroke in self.strokes: + if self.is_fading(stroke, now): + dirty.append(stroke.bounds) + if self.opacity(stroke, now) <= 0: + continue + remaining.append(stroke) + self.strokes = remaining + return dirty + + def paint(self, painter, clip): + now = time.monotonic() + painter.save() + painter.setRenderHint(painter.RenderHint.Antialiasing) + painter.setBrush(Qt.NoBrush) + for stroke in self.strokes: + if not stroke.bounds.intersects(clip): + continue + alpha = self.opacity(stroke, now) + if alpha <= 0: + continue + path = stroke.path() + painter.setOpacity(alpha) + shadow = QPen(QColor(0, 0, 0, 46), stroke.width + 1.5, Qt.SolidLine, Qt.RoundCap, Qt.RoundJoin) + painter.setPen(shadow) + painter.drawPath(path.translated(1.0, 1.5)) + pen = QPen(stroke.color, stroke.width, Qt.SolidLine, Qt.RoundCap, Qt.RoundJoin) + painter.setPen(pen) + painter.drawPath(path) + painter.restore() diff --git a/linux/tinyhand/layershell.py b/linux/tinyhand/layershell.py new file mode 100644 index 0000000..d44e5d3 --- /dev/null +++ b/linux/tinyhand/layershell.py @@ -0,0 +1,88 @@ +"""Thin ctypes bridge to LayerShellQt, so the overlay can sit above every window and panel. + +LayerShellQt has no Python bindings. Its setters take plain integers, so calling the +C++ symbols directly is safe on the x86_64 and aarch64 ABIs. +""" + +import ctypes +import ctypes.util + +ANCHOR_TOP = 1 +ANCHOR_BOTTOM = 2 +ANCHOR_LEFT = 4 +ANCHOR_RIGHT = 8 +ANCHOR_ALL = ANCHOR_TOP | ANCHOR_BOTTOM | ANCHOR_LEFT | ANCHOR_RIGHT + +LAYER_BACKGROUND = 0 +LAYER_BOTTOM = 1 +LAYER_TOP = 2 +LAYER_OVERLAY = 3 + +KEYBOARD_NONE = 0 +KEYBOARD_EXCLUSIVE = 1 +KEYBOARD_ON_DEMAND = 2 + +SCREEN_FROM_QWINDOW = 0 +SCREEN_FROM_COMPOSITOR = 1 + +_lib = None +_symbols = {} + + +def _load(): + global _lib + if _lib is not None: + return _lib + for name in ("libLayerShellQtInterface.so.6", ctypes.util.find_library("LayerShellQtInterface")): + if not name: + continue + try: + _lib = ctypes.CDLL(name) + break + except OSError: + continue + if _lib is None: + return None + table = { + "get": ("_ZN12LayerShellQt6Window3getEP7QWindow", ctypes.c_void_p, [ctypes.c_void_p]), + "set_layer": ("_ZN12LayerShellQt6Window8setLayerENS0_5LayerE", None, [ctypes.c_void_p, ctypes.c_uint]), + "set_anchors": ("_ZN12LayerShellQt6Window10setAnchorsE6QFlagsINS0_6AnchorEE", None, + [ctypes.c_void_p, ctypes.c_uint]), + "set_keyboard": ("_ZN12LayerShellQt6Window24setKeyboardInteractivityENS0_21KeyboardInteractivityE", None, + [ctypes.c_void_p, ctypes.c_uint]), + "set_exclusive_zone": ("_ZN12LayerShellQt6Window16setExclusiveZoneEi", None, [ctypes.c_void_p, ctypes.c_int]), + "set_screen_configuration": ("_ZN12LayerShellQt6Window22setScreenConfigurationENS0_19ScreenConfigurationE", + None, [ctypes.c_void_p, ctypes.c_uint]), + } + for key, (symbol, restype, argtypes) in table.items(): + try: + fn = getattr(_lib, symbol) + except AttributeError: + _lib = None + return None + fn.restype = restype + fn.argtypes = argtypes + _symbols[key] = fn + return _lib + + +def available(): + return _load() is not None + + +def configure(qwindow, layer=LAYER_OVERLAY, anchors=ANCHOR_ALL, keyboard=KEYBOARD_NONE): + """Turn a not-yet-shown QWindow into a layer surface with the given layer and anchors.""" + if _load() is None: + return False + import shiboken6 + + ptr = shiboken6.getCppPointer(qwindow)[0] + window = _symbols["get"](ptr) + if not window: + return False + _symbols["set_layer"](window, layer) + _symbols["set_anchors"](window, anchors) + _symbols["set_keyboard"](window, keyboard) + _symbols["set_exclusive_zone"](window, -1) + _symbols["set_screen_configuration"](window, SCREEN_FROM_QWINDOW) + return True diff --git a/linux/tinyhand/overlay.py b/linux/tinyhand/overlay.py new file mode 100644 index 0000000..c963fea --- /dev/null +++ b/linux/tinyhand/overlay.py @@ -0,0 +1,314 @@ +"""One transparent window per screen that draws the hand, takes the clicks, and hosts the toolbar.""" + +import time + +from PySide6.QtCore import QPointF, QRect, QRectF, QTimer, Qt +from PySide6.QtGui import QGuiApplication, QPainter, QRegion +from PySide6.QtWidgets import QWidget + +from . import layershell +from .arm import ArmRenderer +from .ink import Ink +from .prefs import ink_color_for, prefs +from .toolbar import HintStrip, Toolbar + +NO_INPUT = QRegion(QRect(-10, -10, 1, 1)) + +DEBUG = bool(__import__("os").environ.get("TINYHAND_DEBUG")) +COUNTS = {"paint": 0, "tick": 0, "aim": 0, "move": 0} + + +def _debug_report(): + if DEBUG: + print("counts/s", dict(COUNTS), flush=True) + for key in COUNTS: + COUNTS[key] = 0 + + +_debug_timer = None + + +def _start_debug(): + global _debug_timer + if DEBUG and _debug_timer is None: + _debug_timer = QTimer() + _debug_timer.timeout.connect(_debug_report) + _debug_timer.start(1000) + + +class Overlay(QWidget): + def __init__(self, controller, screen): + super().__init__(None) + _start_debug() + self.controller = controller + self.target_screen = screen + self.wayland = QGuiApplication.platformName().startswith("wayland") + if self.wayland: + self.setWindowFlags(Qt.FramelessWindowHint) + else: + self.setWindowFlags(Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint | Qt.X11BypassWindowManagerHint + | Qt.Tool) + self.setAttribute(Qt.WA_TranslucentBackground) + self.setAttribute(Qt.WA_NoSystemBackground) + self.setMouseTracking(True) + self.setCursor(Qt.BlankCursor) + + self.arm = ArmRenderer() + self.ink = Ink() + self.toolbar = Toolbar(self) + self.toolbar.pick.connect(controller.pick) + self.toolbar.toggle_sound.connect(controller.toggle_sound) + self.toolbar.exit_requested.connect(controller.exit) + self.hint = None + self.down_point = None + self.reveal_until = 0.0 + self.pass_through = False + self.last_mouse = None + + self.tick_timer = QTimer(self) + self.tick_timer.setInterval(8) + self.tick_timer.timeout.connect(self._tick) + self.fade_timer = QTimer(self) + self.fade_timer.setInterval(33) + self.fade_timer.timeout.connect(self._fade_tick) + + self.winId() + handle = self.windowHandle() + handle.setScreen(screen) + if self.wayland: + layershell.configure(handle, layer=layershell.LAYER_OVERLAY, anchors=layershell.ANCHOR_ALL, + keyboard=layershell.KEYBOARD_NONE) + else: + self.setGeometry(screen.geometry()) + self.apply_prefs() + + # -- geometry ------------------------------------------------------------ + + @property + def ink_width(self): + return max(3.0, self.height() * 0.0055) + + def toolbar_bottom(self): + """Where the toolbar's bottom edge goes: 14 px above the panel, like above the Dock on macOS.""" + screen = self.target_screen + available = screen.availableGeometry() + full = screen.geometry() + bottom = available.bottom() - full.top() + 1 + return min(self.height(), bottom) - 14 + + def resizeEvent(self, event): + super().resizeEvent(event) + self.arm.set_size(self.width(), self.height(), self.devicePixelRatioF()) + self.toolbar.place(self.toolbar_bottom()) + self._place_hint() + self.clear_ink() + if self.last_mouse is not None: + self.aim(self.last_mouse) + + # -- preferences --------------------------------------------------------- + + def apply_prefs(self): + p = prefs() + self.arm.hand_len_frac = p.pointer_size + self.arm.show_shadow = p.show_shadow + self.ink.fade_seconds = p.fade_seconds + self.ink.color = ink_color_for(p.ink_choice, self.arm.style) + self.arm.pose = None + self.toolbar.rebuild_styles() + self.toolbar.refresh_ink() + self.toolbar.set_sound_on(p.sound_on_for(self.arm.style)) + if self.last_mouse is not None: + self.aim(self.last_mouse) + self.update() + + def set_style(self, style): + old = self.arm.bounds() + self.arm.set_style(style) + self.ink.color = ink_color_for(prefs().ink_choice, self.arm.style) + self.toolbar.select(self.arm.style) + self.toolbar.set_sound_on(prefs().sound_on_for(self.arm.style)) + self._update_rect(old) + if self.last_mouse is not None: + self.aim(self.last_mouse) + + # -- pointer ------------------------------------------------------------- + + def set_hand_hidden(self, hidden): + if hidden == self.arm.hidden: + return + if hidden: + self.release() + self.arm.hidden = hidden + self._update_rect(self.arm.bounds()) + + def set_pass_through(self, value): + """Let clicks fall through to the windows beneath (used by step-aside).""" + self.pass_through = value + handle = self.windowHandle() + if handle is None: + return + if self.wayland: + handle.setMask(NO_INPUT if value else QRegion()) + else: + self.setWindowFlag(Qt.WindowTransparentForInput, value) + self.show() + if value: + self.toolbar.hide_now() + self.set_hand_hidden(value) + + def aim(self, pos): + COUNTS["aim"] += 1 + self.last_mouse = QPointF(pos) + old = self.arm.bounds() + if self.arm.aim(pos): + self._update_rect(old.united(self.arm.bounds())) + self._update_zones(pos) + if (self.arm.is_settling or self.arm.held) and not self.tick_timer.isActive(): + self.tick_timer.start() + + def _tick(self): + COUNTS["tick"] += 1 + if self.last_mouse is None: + self.tick_timer.stop() + return + old = self.arm.bounds() + if self.arm.aim(self.last_mouse): + self._update_rect(old.united(self.arm.bounds())) + if not self.arm.is_settling and not self.arm.held: + self.tick_timer.stop() + + def _update_rect(self, rect): + if rect.isNull() or rect.isEmpty(): + return + self.update(rect.toAlignedRect().adjusted(-2, -2, 2, 2)) + + def reveal_for(self, seconds): + """Show the toolbar for a while, then fall back to the hover rule.""" + self.reveal_until = time.monotonic() + seconds + self.toolbar.set_revealed(True) + QTimer.singleShot(int(seconds * 1000) + 50, self._recheck_zones) + + def _recheck_zones(self): + if self.last_mouse is not None: + self._update_zones(self.last_mouse) + elif time.monotonic() >= self.reveal_until: + self.toolbar.set_revealed(False) + + def _update_zones(self, mouse): + frame = self.toolbar.frame() + near_rect = frame.adjusted(-80, -90 - 10, 80, 10) + near = near_rect.contains(mouse.toPoint()) + drawing = self.ink.is_drawing + self.toolbar.set_revealed(not drawing and (near or time.monotonic() < self.reveal_until)) + + # -- mouse ----------------------------------------------------------------- + + def enterEvent(self, event): + self.controller.pointer_entered(self) + self.set_hand_hidden(self.pass_through) + self.aim(event.position()) + + def mouseMoveEvent(self, event): + COUNTS["move"] += 1 + pos = event.position() + self.aim(pos) + if self.down_point is not None: + self.drag(pos) + + def mousePressEvent(self, event): + button = event.button() + if button == Qt.LeftButton: + self.press(event.position()) + return + name = "right" if button == Qt.RightButton else "middle" if button == Qt.MiddleButton else "" + if name and name == prefs().step_aside_button: + self.controller.step_aside() + + def mouseReleaseEvent(self, event): + if event.button() == Qt.LeftButton: + self.release() + + def press(self, pos): + self.arm.press() + self.arm.held = True + self.down_point = QPointF(pos) + self.hide_hint() + self.controller.tapped(self) + self.aim(pos) + + def drag(self, pos): + start = self.down_point + if start is None: + return + if not self.ink.is_drawing: + if (pos - start).manhattanLength() < 4: + return + self._update_rect(self.ink.begin(start, self.ink_width)) + self._update_zones(pos) + segment = self.ink.extend(pos) + if segment is not None: + self._update_rect(segment) + + def release(self): + if self.down_point is None and not self.arm.held: + return + self.arm.held = False + self.down_point = None + self.ink.end() + if self.ink.has_pending_fade() and not self.fade_timer.isActive(): + self.fade_timer.start() + if self.last_mouse is not None: + self.aim(self.last_mouse) + + # -- ink ------------------------------------------------------------------- + + def clear_ink(self): + for rect in self.ink.clear(): + self._update_rect(rect) + self.fade_timer.stop() + + def _fade_tick(self): + now = time.monotonic() + for stroke in self.ink.strokes: + if self.ink.is_fading(stroke, now): + self._update_rect(stroke.bounds) + for rect in self.ink.prune(now): + self._update_rect(rect) + if not self.ink.has_pending_fade(): + self.fade_timer.stop() + + # -- hint ------------------------------------------------------------------ + + def show_hint(self, parts, seconds): + self.hide_hint() + self.hint = HintStrip(self, parts) + self._place_hint() + self.hint.show() + self.hint.raise_() + self.hint.fade(1.0, 200) + QTimer.singleShot(int(seconds * 1000), self.hide_hint) + + def _place_hint(self): + if self.hint is None: + return + x = (self.width() - self.hint.width()) // 2 + y = self.toolbar.y() - 12 - self.hint.height() + self.hint.move(x, y) + + def hide_hint(self): + hint = self.hint + if hint is None: + return + self.hint = None + hint.fade(0.0, 300, hint.deleteLater) + + # -- painting -------------------------------------------------------------- + + def paintEvent(self, event): + COUNTS["paint"] += 1 + painter = QPainter(self) + clip = QRectF(event.rect()) + self.ink.paint(painter, clip) + if self.arm.bounds().intersects(clip): + self.arm.paint(painter) + painter.end() diff --git a/linux/tinyhand/paths.py b/linux/tinyhand/paths.py new file mode 100644 index 0000000..f6a0350 --- /dev/null +++ b/linux/tinyhand/paths.py @@ -0,0 +1,62 @@ +"""Where TinyHand finds its images, sounds, and user data.""" + +import os +import sys +from pathlib import Path + + +def _package_root(): + return Path(__file__).resolve().parent + + +def asset_dirs(): + """Directories that can hold the hand images and sounds, in search order.""" + dirs = [] + env = os.environ.get("TINYHAND_ASSETS") + if env: + dirs.append(Path(env)) + root = _package_root() + dirs.append(root.parent / "assets") + dirs.append(root.parent.parent / "assets") + dirs.append(data_home() / "assets") + dirs.append(Path("/usr/local/share/tinyhand/assets")) + dirs.append(Path("/usr/share/tinyhand/assets")) + return dirs + + +def find_asset(relative): + for base in asset_dirs(): + candidate = base / relative + if candidate.is_file(): + return candidate + return None + + +def data_home(): + base = os.environ.get("XDG_DATA_HOME") or str(Path.home() / ".local" / "share") + return Path(base) / "tinyhand" + + +def cache_home(): + base = os.environ.get("XDG_CACHE_HOME") or str(Path.home() / ".cache") + return Path(base) / "tinyhand" + + +def config_home(): + base = os.environ.get("XDG_CONFIG_HOME") or str(Path.home() / ".config") + return Path(base) + + +def custom_hands_dir(): + return data_home() / "hands" + + +def launcher_command(): + """The command that starts TinyHand, for autostart and desktop files.""" + exe = Path(sys.argv[0]).resolve() + if exe.name == "tinyhand": + return str(exe) + run_py = _package_root().parent / "run.py" + if run_py.is_file(): + return f"{sys.executable} {run_py}" + return f"{sys.executable} -m tinyhand" diff --git a/linux/tinyhand/prefs.py b/linux/tinyhand/prefs.py new file mode 100644 index 0000000..298f5e8 --- /dev/null +++ b/linux/tinyhand/prefs.py @@ -0,0 +1,220 @@ +"""User preferences, stored with QSettings in ~/.config/tinyhand/tinyhand.conf.""" + +from pathlib import Path + +from PySide6.QtCore import QObject, QSettings, Signal + +from .paths import config_home, launcher_command +from .styles import DEFAULT_PINNED, RED, LASER, PointerStyle, hex_color + +INK_CHOICES = [ + ("match", "Match the pointer", None), + ("red", "Red", RED), + ("orange", "Orange", hex_color(0xFF8A00)), + ("yellow", "Yellow", hex_color(0xFFCC00)), + ("green", "Green", hex_color(0x30C25A)), + ("blue", "Blue", hex_color(0x0A84FF)), + ("purple", "Purple", hex_color(0x8754F2)), + ("white", "White", hex_color(0xFFFFFF)), + ("black", "Black", hex_color(0x1D1D21)), +] + +TAP_SOUNDS = [ + ("thock", "Thock"), + ("click", "Click"), + ("pop", "Pop"), + ("wood", "Wood block"), + ("boop", "Boop"), + ("squeak", "Squeak"), +] + +STEP_ASIDE_BUTTONS = [ + ("right", "Right mouse button"), + ("middle", "Middle mouse button"), + ("off", "Off"), +] + +POINTER_SIZE_MIN = 0.08 +POINTER_SIZE_MAX = 0.20 +POINTER_SIZE_DEFAULT = 0.13 + +DEFAULTS = { + "pointerStyle": "lavender", + "pointerSize": POINTER_SIZE_DEFAULT, + "showShadow": True, + "fadeSeconds": 3.0, + "sound.hands": True, + "sound.laser": False, + "tapSound": "thock", + "inkChoice": "match", + "showInkButton": True, + "pinnedStyles": list(DEFAULT_PINNED), + "stepAsideButton": "right", + "stepAsideSeconds": 3.0, + "firstRunHintShown": False, +} + + +def ink_color_for(choice_id, style): + for cid, _, color in INK_CHOICES: + if cid == choice_id and color is not None: + return color + return style.ink_color + + +class Prefs(QObject): + """Typed access to the settings. `changed` fires after every write and after reload().""" + + changed = Signal() + + def __init__(self): + super().__init__() + self._settings = QSettings(QSettings.IniFormat, QSettings.UserScope, "tinyhand", "tinyhand") + + @property + def file_path(self): + return self._settings.fileName() + + def reload(self): + self._settings.sync() + self.changed.emit() + + def _get(self, key, kind): + value = self._settings.value(key, DEFAULTS[key]) + if kind is bool: + if isinstance(value, str): + return value.lower() in ("true", "1", "yes") + return bool(value) + if kind is float: + try: + return float(value) + except (TypeError, ValueError): + return float(DEFAULTS[key]) + if kind is list: + if isinstance(value, str): + return [value] if value else [] + return list(value) if value else [] + return str(value) + + def set(self, key, value): + self._settings.setValue(key, value) + self._settings.sync() + self.changed.emit() + + def reset_all(self): + for key in DEFAULTS: + self._settings.remove(key) + self._settings.sync() + self.changed.emit() + + @property + def pointer_style(self): + return PointerStyle.from_id(self._get("pointerStyle", str)) + + @pointer_style.setter + def pointer_style(self, style): + self.set("pointerStyle", style.id) + + @property + def pointer_size(self): + return min(POINTER_SIZE_MAX, max(POINTER_SIZE_MIN, self._get("pointerSize", float))) + + @property + def show_shadow(self): + return self._get("showShadow", bool) + + @property + def fade_seconds(self): + return self._get("fadeSeconds", float) + + @property + def hand_sound(self): + return self._get("sound.hands", bool) + + @property + def laser_sound(self): + return self._get("sound.laser", bool) + + @property + def tap_sound(self): + value = self._get("tapSound", str) + return value if value in {sid for sid, _ in TAP_SOUNDS} else "thock" + + @property + def ink_choice(self): + value = self._get("inkChoice", str) + return value if value in {cid for cid, _, _ in INK_CHOICES} else "match" + + @property + def show_ink_button(self): + return self._get("showInkButton", bool) + + @property + def pinned_styles(self): + known = {s.id for s in PointerStyle.all_styles()} + seen = [] + for raw in self._get("pinnedStyles", list): + if raw in known and raw not in seen: + seen.append(raw) + if not seen: + seen = list(DEFAULT_PINNED) + return [PointerStyle(s) for s in seen] + + @property + def step_aside_button(self): + value = self._get("stepAsideButton", str) + return value if value in {bid for bid, _ in STEP_ASIDE_BUTTONS} else "right" + + @property + def step_aside_seconds(self): + return max(0.5, self._get("stepAsideSeconds", float)) + + @property + def first_run_hint_shown(self): + return self._get("firstRunHintShown", bool) + + def sound_on_for(self, style): + return self.laser_sound if style.is_laser else self.hand_sound + + def set_sound_on_for(self, style, value): + self.set("sound.laser" if style.is_laser else "sound.hands", bool(value)) + + # Launch at login is a desktop file in ~/.config/autostart, not a setting. + + @property + def autostart_file(self): + return config_home() / "autostart" / "tinyhand.desktop" + + @property + def launch_at_login(self): + return self.autostart_file.is_file() + + @launch_at_login.setter + def launch_at_login(self, value): + path = self.autostart_file + if value: + path.parent.mkdir(parents=True, exist_ok=True) + path.write_text( + "[Desktop Entry]\n" + "Type=Application\n" + "Name=TinyHand\n" + "Comment=A tiny hand on a stick that points at things on your screen\n" + f"Exec={launcher_command()}\n" + "Icon=tinyhand\n" + "Terminal=false\n" + "X-KDE-autostart-after=panel\n" + "OnlyShowIn=KDE;\n" + ) + else: + path.unlink(missing_ok=True) + self.changed.emit() + + +_instance = None + + +def prefs(): + global _instance + if _instance is None: + _instance = Prefs() + return _instance diff --git a/linux/tinyhand/settings_ui.py b/linux/tinyhand/settings_ui.py new file mode 100644 index 0000000..8725739 --- /dev/null +++ b/linux/tinyhand/settings_ui.py @@ -0,0 +1,322 @@ +"""The settings window. Runs as its own process so it gets a normal window.""" + +import shutil +import subprocess +import sys + +from PySide6.QtCore import QSize, Qt +from PySide6.QtGui import QIcon +from PySide6.QtWidgets import (QApplication, QCheckBox, QComboBox, QDoubleSpinBox, QFormLayout, QFrame, QGridLayout, + QGroupBox, QHBoxLayout, QLabel, QMessageBox, QPushButton, QScrollArea, QSlider, + QToolButton, QVBoxLayout, QWidget) + +from . import APP_NAME, DBUS_INTERFACE, DBUS_PATH, DBUS_SERVICE +from .paths import custom_hands_dir +from .prefs import (INK_CHOICES, POINTER_SIZE_MAX, POINTER_SIZE_MIN, + STEP_ASIDE_BUTTONS, TAP_SOUNDS, prefs) +from .shortcuts import read_current_keys +from .sound import TapSound +from .styles import MAX_PINNED, HandAsset, PointerStyle +from .toolbar import laser_icon + + +def notify_daemon(method="Reload"): + from PySide6.QtDBus import QDBusConnection, QDBusInterface + + iface = QDBusInterface(DBUS_SERVICE, DBUS_PATH, DBUS_INTERFACE, QDBusConnection.sessionBus()) + if iface.isValid(): + iface.call(method) + + +class HandPicker(QWidget): + """A grid of every hand. Up to eight can be pinned to the toolbar.""" + + def __init__(self, parent=None): + super().__init__(parent) + self.buttons = {} + self.updating = False + self.grid = QGridLayout(self) + self.grid.setSpacing(4) + self.rebuild() + + def rebuild(self): + while self.grid.count(): + item = self.grid.takeAt(0) + if item.widget(): + item.widget().deleteLater() + self.buttons = {} + styles = PointerStyle.all_styles() + columns = 8 + for i, style in enumerate(styles): + button = QToolButton(self) + button.setCheckable(True) + button.setAutoRaise(True) + button.setIconSize(QSize(44, 44)) + button.setFixedSize(56, 56) + button.setToolTip(style.title) + pixmap = laser_icon() if style.is_laser else HandAsset.thumbnail(style) + if pixmap is not None: + button.setIcon(QIcon(pixmap)) + else: + button.setText(style.title[:2]) + button.toggled.connect(lambda checked, s=style: self._toggled(s, checked)) + self.buttons[style] = button + self.grid.addWidget(button, i // columns, i % columns) + self.refresh() + + def refresh(self): + self.updating = True + pinned = prefs().pinned_styles + for style, button in self.buttons.items(): + button.setChecked(style in pinned) + self.updating = False + + def _toggled(self, style, checked): + if self.updating: + return + pinned = prefs().pinned_styles + if checked: + if style in pinned: + return + if len(pinned) >= MAX_PINNED: + self.updating = True + self.buttons[style].setChecked(False) + self.updating = False + QMessageBox.information(self, APP_NAME, f"The toolbar holds up to {MAX_PINNED} pointers. " + "Unpin one first.") + return + pinned.append(style) + else: + if len(pinned) <= 1: + self.updating = True + self.buttons[style].setChecked(True) + self.updating = False + return + pinned = [s for s in pinned if s != style] + prefs().set("pinnedStyles", [s.id for s in pinned]) + notify_daemon() + + +class SettingsWindow(QWidget): + def __init__(self): + super().__init__() + self.setWindowTitle(f"{APP_NAME} Settings") + self.setMinimumWidth(560) + self.sound = TapSound(prefs().tap_sound) + self.sound.enabled = True + self.loading = True + + outer = QVBoxLayout(self) + outer.setContentsMargins(0, 0, 0, 0) + scroll = QScrollArea(self) + scroll.setWidgetResizable(True) + scroll.setFrameShape(QFrame.NoFrame) + outer.addWidget(scroll) + body = QWidget() + scroll.setWidget(body) + layout = QVBoxLayout(body) + layout.setSpacing(14) + layout.setContentsMargins(18, 18, 18, 18) + + # Pointer + pointer = QGroupBox("Pointer") + form = QFormLayout(pointer) + self.size_slider = QSlider(Qt.Horizontal) + self.size_slider.setRange(int(POINTER_SIZE_MIN * 100), int(POINTER_SIZE_MAX * 100)) + self.size_slider.valueChanged.connect(lambda v: self._set("pointerSize", v / 100)) + form.addRow("Size", self.size_slider) + self.shadow_box = QCheckBox("Draw a shadow under the hand") + self.shadow_box.toggled.connect(lambda v: self._set("showShadow", v)) + form.addRow("", self.shadow_box) + self.style_combo = QComboBox() + for style in PointerStyle.all_styles(): + self.style_combo.addItem(style.title, style.id) + self.style_combo.currentIndexChanged.connect( + lambda i: self._set("pointerStyle", self.style_combo.itemData(i))) + form.addRow("Current pointer", self.style_combo) + layout.addWidget(pointer) + + pins = QGroupBox(f"Pointers in the toolbar (up to {MAX_PINNED})") + pins_layout = QVBoxLayout(pins) + self.picker = HandPicker(pins) + pins_layout.addWidget(self.picker) + custom = QLabel(f'Your own hands: put a PNG with a transparent background, the hand on its stick and the ' + f'fingertip at the top, into {custom_hands_dir()}. The built-in hands in ' + f'the assets folder show the layout.') + custom.setWordWrap(True) + custom.setTextFormat(Qt.RichText) + pins_layout.addWidget(custom) + layout.addWidget(pins) + + # Drawing + drawing = QGroupBox("Drawing") + form = QFormLayout(drawing) + self.ink_combo = QComboBox() + for choice_id, title, _ in INK_CHOICES: + self.ink_combo.addItem(title, choice_id) + self.ink_combo.currentIndexChanged.connect(lambda i: self._set("inkChoice", self.ink_combo.itemData(i))) + form.addRow("Ink colour", self.ink_combo) + self.fade_spin = QDoubleSpinBox() + self.fade_spin.setRange(0, 60) + self.fade_spin.setDecimals(1) + self.fade_spin.setSingleStep(0.5) + self.fade_spin.setSuffix(" s") + self.fade_spin.setSpecialValueText("Keep until cleared") + self.fade_spin.valueChanged.connect(lambda v: self._set("fadeSeconds", v)) + form.addRow("Fade drawing after", self.fade_spin) + self.ink_button_box = QCheckBox("Show the ink colour button in the toolbar") + self.ink_button_box.toggled.connect(lambda v: self._set("showInkButton", v)) + form.addRow("", self.ink_button_box) + layout.addWidget(drawing) + + # Sound + sound = QGroupBox("Tap sound") + form = QFormLayout(sound) + row = QHBoxLayout() + self.sound_combo = QComboBox() + for sound_id, title in TAP_SOUNDS: + self.sound_combo.addItem(title, sound_id) + self.sound_combo.currentIndexChanged.connect(self._sound_changed) + row.addWidget(self.sound_combo, 1) + play = QPushButton("Play") + play.clicked.connect(lambda: self.sound.play(self.sound_combo.currentData())) + row.addWidget(play) + form.addRow("Sound", row) + self.hand_sound_box = QCheckBox("Play when a hand taps") + self.hand_sound_box.toggled.connect(lambda v: self._set("sound.hands", v)) + form.addRow("", self.hand_sound_box) + self.laser_sound_box = QCheckBox("Play when the laser dot taps") + self.laser_sound_box.toggled.connect(lambda v: self._set("sound.laser", v)) + form.addRow("", self.laser_sound_box) + layout.addWidget(sound) + + # Clicking through + through = QGroupBox("Clicking through") + form = QFormLayout(through) + self.aside_combo = QComboBox() + for button_id, title in STEP_ASIDE_BUTTONS: + self.aside_combo.addItem(title, button_id) + self.aside_combo.currentIndexChanged.connect( + lambda i: self._set("stepAsideButton", self.aside_combo.itemData(i))) + form.addRow("Hand steps aside on", self.aside_combo) + self.aside_spin = QDoubleSpinBox() + self.aside_spin.setRange(0.5, 30) + self.aside_spin.setDecimals(1) + self.aside_spin.setSingleStep(0.5) + self.aside_spin.setSuffix(" s") + self.aside_spin.valueChanged.connect(lambda v: self._set("stepAsideSeconds", v)) + form.addRow("Comes back after", self.aside_spin) + note = QLabel("While the pointer is on, your clicks tap instead of clicking. Press the step-aside button " + "to hide the hand and click the real thing underneath. Wayland does not let an app pass a " + "click on, so the hand steps aside for a moment instead.") + note.setWordWrap(True) + form.addRow(note) + layout.addWidget(through) + + # Shortcuts + keys = QGroupBox("Keyboard shortcuts") + form = QFormLayout(keys) + self.toggle_label = QLabel() + self.clear_label = QLabel() + form.addRow("Turn pointer on or off", self.toggle_label) + form.addRow("Clear the drawing", self.clear_label) + form.addRow("Turn pointer off", QLabel("Esc (while it is on)")) + change = QPushButton("Change in System Settings…") + change.clicked.connect(self._open_shortcut_settings) + form.addRow("", change) + hint = QLabel(f"The shortcuts are listed under “{APP_NAME}” in System Settings > Keyboard > Shortcuts " + f"once {APP_NAME} has run.") + hint.setWordWrap(True) + form.addRow(hint) + layout.addWidget(keys) + + # Startup + startup = QGroupBox("Startup") + form = QFormLayout(startup) + self.login_box = QCheckBox("Open at login") + self.login_box.toggled.connect(self._login_changed) + form.addRow("", self.login_box) + layout.addWidget(startup) + + bottom = QHBoxLayout() + reset = QPushButton("Reset to defaults") + reset.clicked.connect(self._reset) + bottom.addWidget(reset) + bottom.addStretch(1) + where = QLabel(f"Settings file: {prefs().file_path}") + where.setTextInteractionFlags(Qt.TextSelectableByMouse) + bottom.addWidget(where) + layout.addLayout(bottom) + + self.load() + self.resize(640, 820) + + def load(self): + self.loading = True + p = prefs() + self.size_slider.setValue(int(round(p.pointer_size * 100))) + self.shadow_box.setChecked(p.show_shadow) + index = self.style_combo.findData(p.pointer_style.id) + self.style_combo.setCurrentIndex(max(0, index)) + self.ink_combo.setCurrentIndex(max(0, self.ink_combo.findData(p.ink_choice))) + self.fade_spin.setValue(p.fade_seconds) + self.ink_button_box.setChecked(p.show_ink_button) + self.sound_combo.setCurrentIndex(max(0, self.sound_combo.findData(p.tap_sound))) + self.hand_sound_box.setChecked(p.hand_sound) + self.laser_sound_box.setChecked(p.laser_sound) + self.aside_combo.setCurrentIndex(max(0, self.aside_combo.findData(p.step_aside_button))) + self.aside_spin.setValue(p.step_aside_seconds) + self.login_box.setChecked(p.launch_at_login) + self.toggle_label.setText(read_current_keys("toggle", "Turn pointer on or off") or "Ctrl+Alt+H") + self.clear_label.setText(read_current_keys("clear", "Clear the drawing") or "Ctrl+Alt+X") + self.picker.refresh() + self.loading = False + + def _set(self, key, value): + if self.loading: + return + prefs().set(key, value) + notify_daemon() + + def _sound_changed(self, index): + if self.loading: + return + choice = self.sound_combo.itemData(index) + self._set("tapSound", choice) + self.sound.play(choice) + + def _login_changed(self, value): + if self.loading: + return + prefs().launch_at_login = value + + def _reset(self): + prefs().reset_all() + notify_daemon() + self.load() + + def _open_shortcut_settings(self): + exe = shutil.which("systemsettings") or shutil.which("systemsettings5") + if exe is None: + QMessageBox.information(self, APP_NAME, "System Settings was not found. Open it from the launcher and " + "look for Keyboard > Shortcuts.") + return + subprocess.Popen([exe, "kcm_keys"]) + + +def run_settings(argv): + app = QApplication(argv) + app.setApplicationName("tinyhand") + app.setDesktopFileName("tinyhand") + icon = QIcon.fromTheme("tinyhand") + if icon.isNull(): + from pathlib import Path + + icon_path = Path(__file__).resolve().parent.parent / "data" / "icons" / "tinyhand.png" + if icon_path.is_file(): + icon = QIcon(str(icon_path)) + app.setWindowIcon(icon) + notify_daemon("TurnOff") + window = SettingsWindow() + window.show() + return app.exec() diff --git a/linux/tinyhand/shortcuts.py b/linux/tinyhand/shortcuts.py new file mode 100644 index 0000000..664a6d2 --- /dev/null +++ b/linux/tinyhand/shortcuts.py @@ -0,0 +1,136 @@ +"""Global shortcuts through KDE's KGlobalAccel daemon over D-Bus. + +The shortcuts show up in System Settings > Keyboard > Shortcuts under "TinyHand", +where the user can change them. We use busctl for the calls whose arguments PySide6 +cannot marshal (integer arrays) and QtDBus for the signal. +""" + +import shutil +import subprocess + +from PySide6.QtCore import QObject, Slot, SLOT +from PySide6.QtDBus import QDBusConnection, QDBusInterface, QDBusMessage +from PySide6.QtGui import QKeySequence + +COMPONENT = "tinyhand" +COMPONENT_FRIENDLY = "TinyHand" +SERVICE = "org.kde.kglobalaccel" +PATH = "/kglobalaccel" +INTERFACE = "org.kde.KGlobalAccel" +COMPONENT_INTERFACE = "org.kde.kglobalaccel.Component" + +SET_PRESENT = 2 +NO_AUTOLOADING = 4 +IS_DEFAULT = 8 + + +def _busctl(method, signature="", *args): + exe = shutil.which("busctl") + if exe is None: + return None + cmd = [exe, "--user", "--timeout=3", "call", SERVICE, PATH, INTERFACE, method] + if signature: + cmd.append(signature) + cmd.extend(str(a) for a in args) + try: + result = subprocess.run(cmd, capture_output=True, text=True, timeout=5) + except (OSError, subprocess.TimeoutExpired): + return None + if result.returncode != 0: + return None + return result.stdout.strip() + + +def _parse_int_array(text): + """busctl prints `ai 2 123 456`; return the integers.""" + if not text: + return [] + parts = text.split() + if len(parts) < 2 or parts[0] != "ai": + return [] + try: + count = int(parts[1]) + return [int(p) for p in parts[2 : 2 + count]] + except ValueError: + return [] + + +class GlobalShortcuts(QObject): + """Registers named actions with default keys and calls back when one is pressed.""" + + def __init__(self, parent=None): + super().__init__(parent) + self._bus = QDBusConnection.sessionBus() + self._callbacks = {} + self._friendly = {} + self._defaults = {} + self.available = self._bus.isConnected() and shutil.which("busctl") is not None + self._listening = False + + def _action_id(self, action): + return [COMPONENT, action, COMPONENT_FRIENDLY, self._friendly.get(action, action)] + + def register(self, action, friendly, default_keys, callback, active=True): + """`default_keys` is a key sequence string such as "Ctrl+Alt+H".""" + self._callbacks[action] = callback + self._friendly[action] = friendly + self._defaults[action] = default_keys + if not self.available: + return False + iface = QDBusInterface(SERVICE, PATH, INTERFACE, self._bus) + iface.call("doRegister", self._action_id(action)) + key = QKeySequence(default_keys)[0].toCombined() if default_keys else 0 + aid = self._action_id(action) + _busctl("setShortcut", "asaiu", 4, *aid, 1, key, SET_PRESENT | IS_DEFAULT) + if active: + _busctl("setShortcut", "asaiu", 4, *aid, 1, key, SET_PRESENT) + else: + _busctl("setInactive", "as", 4, *aid) + self._listen() + return True + + def set_active(self, action, active): + if not self.available or action not in self._callbacks: + return + aid = self._action_id(action) + if active: + key = QKeySequence(self._defaults[action])[0].toCombined() if self._defaults[action] else 0 + _busctl("setShortcut", "asaiu", 4, *aid, 1, key, SET_PRESENT) + else: + _busctl("setInactive", "as", 4, *aid) + + def current_keys(self, action): + """The key sequence the user currently has for an action, as display text.""" + if not self.available: + return self._defaults.get(action, "") + text = _busctl("shortcut", "as", 4, *self._action_id(action)) + keys = [k for k in _parse_int_array(text) if k > 0] + if not keys: + return "" + return QKeySequence(keys[0]).toString(QKeySequence.NativeText) + + def _listen(self): + if self._listening: + return + self._listening = self._bus.connect( + SERVICE, f"/component/{COMPONENT}", COMPONENT_INTERFACE, "globalShortcutPressed", + self, SLOT("_pressed(QDBusMessage)"), + ) + + @Slot(QDBusMessage) + def _pressed(self, message): + args = message.arguments() + if len(args) < 2 or args[0] != COMPONENT: + return + callback = self._callbacks.get(args[1]) + if callback is not None: + callback() + + +def read_current_keys(action, friendly_fallback=""): + """Read a shortcut without registering anything, for the settings window.""" + text = _busctl("shortcut", "as", 4, COMPONENT, action, COMPONENT_FRIENDLY, friendly_fallback or action) + keys = [k for k in _parse_int_array(text) if k > 0] + if not keys: + return "" + return QKeySequence(keys[0]).toString(QKeySequence.NativeText) diff --git a/linux/tinyhand/sound.py b/linux/tinyhand/sound.py new file mode 100644 index 0000000..11e5b56 --- /dev/null +++ b/linux/tinyhand/sound.py @@ -0,0 +1,50 @@ +"""The tap sound.""" + +import shutil +import subprocess + +from PySide6.QtCore import QUrl + +from .paths import find_asset +from .prefs import TAP_SOUNDS + +try: + from PySide6.QtMultimedia import QSoundEffect +except ImportError: # QtMultimedia is optional; we fall back to a command line player. + QSoundEffect = None + + +class TapSound: + def __init__(self, choice="thock"): + self.enabled = True + self.choice = choice + self._effects = {} + self._player = shutil.which("pw-play") or shutil.which("paplay") or shutil.which("aplay") + if QSoundEffect is not None: + for sound_id, _ in TAP_SOUNDS: + path = find_asset(f"sounds/tap_{sound_id}.wav") + if path is None: + continue + effect = QSoundEffect() + effect.setSource(QUrl.fromLocalFile(str(path))) + effect.setVolume(1.0) + self._effects[sound_id] = effect + + def load(self, choice): + self.choice = choice + + def play(self, choice=None): + if not self.enabled and choice is None: + return + sound_id = choice or self.choice + effect = self._effects.get(sound_id) + if effect is not None and effect.status() != QSoundEffect.Status.Error: + effect.play() + return + path = find_asset(f"sounds/tap_{sound_id}.wav") + if path is None or self._player is None: + return + try: + subprocess.Popen([self._player, str(path)], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) + except OSError: + pass diff --git a/linux/tinyhand/styles.py b/linux/tinyhand/styles.py new file mode 100644 index 0000000..04147cf --- /dev/null +++ b/linux/tinyhand/styles.py @@ -0,0 +1,332 @@ +"""Pointer styles (the 36 hands and the laser dot) and the hand image measurements.""" + +import colorsys +import json +import os +from dataclasses import dataclass +from pathlib import Path + +import numpy as np +from PySide6.QtCore import QRect, Qt +from PySide6.QtGui import QColor, QImage, QPixmap + +from .paths import cache_home, custom_hands_dir, find_asset + +PURPLE = QColor.fromRgbF(0.53, 0.33, 0.95) +RED = QColor.fromRgbF(1.0, 0.16, 0.12) + + +def hex_color(value): + return QColor((value >> 16) & 0xFF, (value >> 8) & 0xFF, value & 0xFF) + + +BUILT_IN = [ + ("lavender", "Lavender toy", PURPLE), + ("glove", "Cursor glove", PURPLE), + ("coral", "Coral vinyl", RED), + ("plush", "Plush", hex_color(0x2F86F0)), + ("robot", "Robot", hex_color(0x16A87A)), + ("pink", "Bubblegum", hex_color(0xEE4F98)), + ("blue", "Sky", hex_color(0x2F86F0)), + ("mint", "Mint", hex_color(0x16A87A)), + ("lemon", "Lemon", hex_color(0xF2B705)), + ("black", "Midnight", hex_color(0x1D1D21)), + ("chrome", "Chrome", hex_color(0x6B7380)), + ("holo", "Holo", PURPLE), + ("fuzzy", "Fuzzy", PURPLE), + ("wood", "Wood", hex_color(0x9A5E2C)), + ("marble", "Marble", hex_color(0x6B7380)), + ("terrazzo", "Terrazzo", hex_color(0xF0561D)), + ("glass", "Glass", hex_color(0x1597E5)), + ("jelly", "Jelly", hex_color(0xA33FE6)), + ("pastel", "Pastel", hex_color(0xEE4F98)), + ("pixel", "Pixel", hex_color(0x1D1D21)), + ("lowpoly", "Low poly", PURPLE), + ("knit", "Knit", PURPLE), + ("skeleton", "Skeleton", hex_color(0x9A5E2C)), + ("astro", "Astronaut", hex_color(0x2F86F0)), + ("space", "Space", RED), + ("monster", "Monster", hex_color(0x3E9E2E)), + ("water", "Water", hex_color(0x1597E5)), + ("lava", "Lava", hex_color(0xF0561D)), + ("grass", "Grass", hex_color(0x3E9E2E)), + ("cactus", "Cactus", hex_color(0x3E9E2E)), + ("choco", "Chocolate", hex_color(0x9A5E2C)), + ("cloud", "Cloud", hex_color(0x2F86F0)), + ("mech", "Mech", hex_color(0xF0561D)), + ("neon", "Neon", hex_color(0xE0309A)), + ("leaf", "Leaf", hex_color(0x3E9E2E)), + ("cookie", "Gingerbread", hex_color(0x9A5E2C)), +] + +LASER = "laser" +DEFAULT_PINNED = ["lavender", "glove", "coral", "plush", "robot", LASER] +MAX_PINNED = 8 + + +class PointerStyle: + """One pointer look. Built-in hands are keyed by their short id, custom hands by file name.""" + + __slots__ = ("id",) + + def __init__(self, style_id): + self.id = style_id + + def __eq__(self, other): + return isinstance(other, PointerStyle) and other.id == self.id + + def __hash__(self): + return hash(self.id) + + def __repr__(self): + return f"PointerStyle({self.id!r})" + + @property + def is_laser(self): + return self.id == LASER + + @property + def is_custom(self): + return self.id.startswith("custom:") + + @property + def title(self): + if self.is_laser: + return "Laser dot" + if self.is_custom: + name = self.id[len("custom:"):] + return name.replace("_", " ").replace("-", " ").strip().capitalize() or name + for style_id, title, _ in BUILT_IN: + if style_id == self.id: + return title + return self.id + + @property + def image_path(self): + if self.is_laser: + return None + if self.is_custom: + path = custom_hands_dir() / (self.id[len("custom:"):] + ".png") + return path if path.is_file() else None + return find_asset(f"hand_{self.id}.png") + + @property + def ink_color(self): + if self.is_laser: + return RED + if self.is_custom: + asset = HandAsset.load(self) + return asset.ink if asset is not None and asset.ink is not None else PURPLE + for style_id, _, color in BUILT_IN: + if style_id == self.id: + return color + return PURPLE + + @staticmethod + def built_in_hands(): + return [PointerStyle(style_id) for style_id, _, _ in BUILT_IN] + + @staticmethod + def custom_hands(): + folder = custom_hands_dir() + if not folder.is_dir(): + return [] + names = sorted(p.stem for p in folder.glob("*.png")) + return [PointerStyle("custom:" + name) for name in names] + + @staticmethod + def all_styles(): + return PointerStyle.built_in_hands() + PointerStyle.custom_hands() + [PointerStyle(LASER)] + + @staticmethod + def from_id(style_id, fallback="lavender"): + if style_id == "dot": + style_id = LASER + if style_id == "sunny": + style_id = "coral" + style = PointerStyle(style_id or "") + if style.is_laser or style.id in {s.id for s in PointerStyle.all_styles()}: + return style + return PointerStyle(fallback) + + +@dataclass +class HandAsset: + """A hand image and where its parts sit, all as fractions of the image size.""" + + image: QImage + aspect: float + hand_top: float + tip: float + wrist: float + rod_end: float + tip_x: float + rod_x: float + hand_min_x: float + hand_max_x: float + ink: QColor | None + + _cache = {} + _recent = [] + _cache_limit = 3 + _thumbnails = {} + + @classmethod + def load(cls, style): + path = style.image_path + if path is None: + return None + key = str(path) + hit = cls._cache.get(key) + if hit is not None: + cls._touch(key) + return hit + image = QImage(str(path)) + if image.isNull(): + return None + image = image.convertToFormat(QImage.Format_ARGB32_Premultiplied) + asset = cls.measure(image, want_ink=style.is_custom) + if asset is None: + return None + cls._cache[key] = asset + cls._touch(key) + return asset + + @classmethod + def _touch(cls, key): + if key in cls._recent: + cls._recent.remove(key) + cls._recent.append(key) + while len(cls._recent) > cls._cache_limit: + cls._cache.pop(cls._recent.pop(0), None) + + @classmethod + def forget(cls, style): + path = style.image_path + if path is None: + return + cls._cache.pop(str(path), None) + cls._thumbnails.pop(style.id, None) + + @staticmethod + def measure(image, want_ink=False): + """Find the fingertip, wrist, and stick in the alpha channel, like the macOS version.""" + w = image.width() + h = image.height() + if w < 8 or h < 8: + return None + if image.format() != QImage.Format_ARGB32_Premultiplied: + image = image.convertToFormat(QImage.Format_ARGB32_Premultiplied) + raw = np.frombuffer(image.constBits(), dtype=np.uint8) + pixels = raw.reshape(h, image.bytesPerLine())[:, : w * 4].reshape(h, w, 4) + alpha = pixels[:, :, 3] > 128 + counts = alpha.sum(axis=1) + rows = np.flatnonzero(counts) + if len(rows) == 0: + return None + top = int(rows[0]) + last = int(rows[-1]) + search_end = min(h, top + int(0.45 * h)) + max_w = int(counts[top:search_end].max()) + if max_w <= 0: + return None + fist_rows = np.flatnonzero(counts[top:] > 0.6 * max_w) + if len(fist_rows) == 0: + return None + fist = top + int(fist_rows[0]) + wrist_rows = np.flatnonzero(counts[fist:] < 0.35 * max_w) + if len(wrist_rows) == 0: + return None + wrist = fist + int(wrist_rows[0]) + rod_w = int(counts[min(h - 1, wrist + h // 50)]) + start = min(h - 1, wrist + h // 33) + handle_rows = np.flatnonzero(counts[start:] > 1.8 * rod_w) + rod_end = start + int(handle_rows[0]) if len(handle_rows) else last + + def center(y): + xs = np.flatnonzero(alpha[y]) + if len(xs) == 0: + return 0.5 + return (int(xs[0]) + int(xs[-1])) / 2 / w + + columns = np.flatnonzero(alpha[top:wrist].any(axis=0)) + min_x = int(columns[0]) if len(columns) else 0 + max_x = int(columns[-1]) if len(columns) else w - 1 + + ink = None + if want_ink: + ink = HandAsset._dominant_color(pixels[top:wrist]) + + fh = float(h) + return HandAsset( + image=image, + aspect=w / fh, + hand_top=max(0.0, top - 0.004 * fh) / fh, + tip=top / fh, + wrist=wrist / fh, + rod_end=rod_end / fh, + tip_x=center(min(h - 1, top + h // 200)), + rod_x=center((wrist + rod_end) // 2), + hand_min_x=min_x / w, + hand_max_x=max_x / w, + ink=ink, + ) + + @staticmethod + def _dominant_color(pixels): + """A bright, saturated version of the hand's average colour, for custom hands' ink.""" + solid = pixels[pixels[:, :, 3] > 200] + if len(solid) == 0: + return None + mean = solid[:, :3].astype(np.float64).mean(axis=0) / 255.0 + b, g, r = mean + hue, sat, val = colorsys.rgb_to_hsv(r, g, b) + sat = max(sat, 0.6) + val = max(val, 0.75) + r, g, b = colorsys.hsv_to_rgb(hue, sat, val) + return QColor.fromRgbF(r, g, b) + + @classmethod + def thumbnail(cls, style, size=64): + """A square crop of just the hand, cached in memory and on disk.""" + key = (style.id, size) + hit = cls._thumbnails.get(key) + if hit is not None: + return hit + path = style.image_path + if path is None: + return None + cache_dir = cache_home() / "thumbs" + stamp = f"{path.stat().st_mtime_ns}-{path.stat().st_size}-{size}" + safe = style.id.replace(":", "_").replace("/", "_") + cache_file = cache_dir / f"{safe}-{stamp}.png" + if cache_file.is_file(): + pix = QPixmap(str(cache_file)) + if not pix.isNull(): + cls._thumbnails[key] = pix + return pix + asset = cls.load(style) + if asset is None: + return None + image = asset.image + w = image.width() + h = image.height() + hand_w = (asset.hand_max_x - asset.hand_min_x) * w + hand_h = (asset.wrist - asset.hand_top) * h + side = max(hand_w, hand_h) * 1.06 + cx = (asset.hand_min_x + asset.hand_max_x) / 2 * w + cy = (asset.hand_top + asset.wrist) / 2 * h + rect = QRect(int(cx - side / 2), int(cy - side / 2), int(side), int(side)).intersected(QRect(0, 0, w, h)) + px = size * 2 + small = image.copy(rect).scaled(px, px, Qt.KeepAspectRatio, Qt.SmoothTransformation) + small.setDevicePixelRatio(2.0) + pix = QPixmap.fromImage(small) + try: + cache_dir.mkdir(parents=True, exist_ok=True) + for old in cache_dir.glob(f"{safe}-*.png"): + old.unlink(missing_ok=True) + small.save(str(cache_file)) + except OSError: + pass + cls._thumbnails[key] = pix + return pix diff --git a/linux/tinyhand/toolbar.py b/linux/tinyhand/toolbar.py new file mode 100644 index 0000000..4e2d1e2 --- /dev/null +++ b/linux/tinyhand/toolbar.py @@ -0,0 +1,436 @@ +"""The small toolbar at the bottom of the screen, drawn inside the overlay window.""" + +import math + +from PySide6.QtCore import QEasingCurve, QPointF, QPropertyAnimation, QRect, QRectF, QSize, Qt, Signal +from PySide6.QtGui import QColor, QFont, QLinearGradient, QPainter, QPainterPath, QPen, QPixmap +from PySide6.QtWidgets import QGraphicsOpacityEffect, QHBoxLayout, QLabel, QWidget + +from .prefs import INK_CHOICES, ink_color_for, prefs +from .styles import RED, HandAsset + +BACKGROUND = QColor(28, 28, 32, 222) +BORDER = QColor(255, 255, 255, 36) + + +def rounded_panel(painter, rect, radius): + painter.setRenderHint(QPainter.RenderHint.Antialiasing) + path = QPainterPath() + path.addRoundedRect(QRectF(rect), radius, radius) + painter.fillPath(path, BACKGROUND) + painter.setPen(QPen(BORDER, 1)) + painter.setBrush(Qt.NoBrush) + painter.drawPath(path) + + +def ink_dot(color, size=64): + pix = QPixmap(size, size) + pix.fill(Qt.transparent) + p = QPainter(pix) + p.setRenderHint(QPainter.RenderHint.Antialiasing) + c = QPointF(size / 2, size / 2) + r = size * 13 / 64 + p.setPen(Qt.NoPen) + p.setBrush(QColor(0, 0, 0, 90)) + p.drawEllipse(QRectF(c.x() - r - 1.5, c.y() - r - 0.5, 2 * r + 3, 2 * r + 3)) + p.setBrush(color) + p.drawEllipse(c, r, r) + p.setBrush(QColor(255, 255, 255, 90)) + p.drawEllipse(QRectF(c.x() - r * 0.55, c.y() - r * 0.65, r * 0.7, r * 0.5)) + p.end() + return pix + + +def rainbow_dot(size=64): + pix = QPixmap(size, size) + pix.fill(Qt.transparent) + p = QPainter(pix) + p.setRenderHint(QPainter.RenderHint.Antialiasing) + c = QPointF(size / 2, size / 2) + r = size * 13 / 64 + p.setPen(Qt.NoPen) + p.setBrush(QColor(0, 0, 0, 90)) + p.drawEllipse(QRectF(c.x() - r - 1.5, c.y() - r - 0.5, 2 * r + 3, 2 * r + 3)) + colors = [QColor(255, 59, 48), QColor(255, 149, 0), QColor(255, 204, 0), QColor(52, 199, 89), QColor(0, 122, 255), + QColor(175, 82, 222)] + rect = QRectF(c.x() - r, c.y() - r, 2 * r, 2 * r) + for i, color in enumerate(colors): + p.setBrush(color) + p.drawPie(rect, int((90 - i * 60) * 16), int(-60 * 16)) + p.end() + return pix + + +def laser_icon(size=64): + pix = QPixmap(size, size) + pix.fill(Qt.transparent) + p = QPainter(pix) + p.setRenderHint(QPainter.RenderHint.Antialiasing) + c = QPointF(size / 2, size / 2) + p.setPen(Qt.NoPen) + from PySide6.QtGui import QRadialGradient + + glow = QRadialGradient(c, size * 0.3) + red = QColor(RED) + red.setAlphaF(0.55) + glow.setColorAt(0, red) + red2 = QColor(RED) + red2.setAlphaF(0) + glow.setColorAt(1, red2) + p.setBrush(glow) + p.drawEllipse(c, size * 0.3, size * 0.3) + p.setBrush(RED) + p.drawEllipse(c, 7, 7) + p.setBrush(QColor.fromRgbF(1, 0.86, 0.82, 0.95)) + p.drawEllipse(c, 3, 3) + p.end() + return pix + + +def symbol_icon(name, size=40, alpha=0.85): + """Simple vector icons: speaker, muted speaker, close.""" + pix = QPixmap(size, size) + pix.fill(Qt.transparent) + p = QPainter(pix) + p.setRenderHint(QPainter.RenderHint.Antialiasing) + color = QColor(255, 255, 255, int(alpha * 255)) + pen = QPen(color, 2.2, Qt.SolidLine, Qt.RoundCap, Qt.RoundJoin) + p.setPen(pen) + c = size / 2 + if name == "close": + d = size * 0.17 + p.drawLine(QPointF(c - d, c - d), QPointF(c + d, c + d)) + p.drawLine(QPointF(c + d, c - d), QPointF(c - d, c + d)) + elif name in ("sound", "muted"): + body = QPainterPath() + body.moveTo(c - 9, c - 4) + body.lineTo(c - 4, c - 4) + body.lineTo(c + 1, c - 9) + body.lineTo(c + 1, c + 9) + body.lineTo(c - 4, c + 4) + body.lineTo(c - 9, c + 4) + body.closeSubpath() + p.fillPath(body, color) + if name == "sound": + p.drawArc(QRectF(c - 2, c - 5, 10, 10), -50 * 16, 100 * 16) + p.drawArc(QRectF(c - 4, c - 9, 18, 18), -50 * 16, 100 * 16) + else: + p.drawLine(QPointF(c + 4, c - 4), QPointF(c + 11, c + 4)) + p.drawLine(QPointF(c + 11, c - 4), QPointF(c + 4, c + 4)) + p.end() + return pix + + +class IconButton(QWidget): + clicked = Signal() + + def __init__(self, parent, pixmap=None, side=40, icon_size=None, tip=""): + super().__init__(parent) + self.pixmap = pixmap + self.side = side + self.icon_size = icon_size or int(side * 0.85) + self.tip = tip + self.selected = False + self.hover = False + self.radius = 10 + self.setFixedSize(side, side) + self.setMouseTracking(True) + + def set_pixmap(self, pixmap): + self.pixmap = pixmap + self.update() + + def set_selected(self, value): + if value != self.selected: + self.selected = value + self.update() + + def enterEvent(self, event): + self.hover = True + self.update() + + def leaveEvent(self, event): + self.hover = False + self.update() + + def mousePressEvent(self, event): + if event.button() == Qt.LeftButton: + event.accept() + else: + event.ignore() + + def mouseReleaseEvent(self, event): + if event.button() == Qt.LeftButton: + event.accept() + if self.rect().contains(event.position().toPoint()): + self.clicked.emit() + else: + event.ignore() + + def paintEvent(self, event): + p = QPainter(self) + p.setRenderHint(QPainter.RenderHint.Antialiasing) + p.setRenderHint(QPainter.RenderHint.SmoothPixmapTransform) + if self.selected or self.hover: + p.setPen(Qt.NoPen) + p.setBrush(QColor(255, 255, 255, 46 if self.selected else 24)) + p.drawRoundedRect(QRectF(self.rect()), self.radius, self.radius) + if self.pixmap is not None: + s = self.icon_size + target = QRectF((self.side - s) / 2, (self.side - s) / 2, s, s) + p.drawPixmap(target, self.pixmap, QRectF(self.pixmap.rect())) + + +class Divider(QWidget): + def __init__(self, parent): + super().__init__(parent) + self.setFixedSize(1, 24) + + def paintEvent(self, event): + p = QPainter(self) + p.fillRect(self.rect(), QColor(255, 255, 255, 46)) + + +class InkTray(QWidget): + """Nine ink swatches that pop up above the ink button.""" + + picked = Signal(str) + + def __init__(self, parent): + super().__init__(parent) + self.setMouseTracking(True) + layout = QHBoxLayout(self) + layout.setContentsMargins(6, 5, 6, 5) + layout.setSpacing(2) + self.swatches = {} + for choice_id, title, color in INK_CHOICES: + button = IconButton(self, pixmap=ink_dot(color) if color is not None else rainbow_dot(), side=30, + icon_size=28, tip=title) + button.radius = 15 + button.clicked.connect(lambda cid=choice_id: self.picked.emit(cid)) + self.swatches[choice_id] = button + layout.addWidget(button) + self.adjustSize() + self.hide() + + def refresh(self, current): + for choice_id, button in self.swatches.items(): + button.set_selected(choice_id == current) + + def paintEvent(self, event): + p = QPainter(self) + rounded_panel(p, self.rect(), 14) + + +class HintStrip(QWidget): + """The first-run tips shown above the toolbar.""" + + def __init__(self, parent, parts): + super().__init__(parent) + self.setAttribute(Qt.WA_TransparentForMouseEvents) + layout = QHBoxLayout(self) + layout.setContentsMargins(16, 9, 16, 9) + layout.setSpacing(14) + for key, text in parts: + label = QLabel(f'{key}' + f' {text}', self) + label.setTextFormat(Qt.RichText) + font = QFont() + font.setPointSizeF(10.5) + label.setFont(font) + layout.addWidget(label) + self.adjustSize() + self.effect = QGraphicsOpacityEffect(self) + self.effect.setOpacity(0.0) + self.setGraphicsEffect(self.effect) + self.animation = QPropertyAnimation(self.effect, b"opacity", self) + self.animation.finished.connect(self._finished) + self.on_done = None + + def fade(self, to, duration, on_done=None): + self.animation.stop() + self.animation.setDuration(duration) + self.animation.setStartValue(self.effect.opacity()) + self.animation.setEndValue(to) + self.on_done = on_done + self.animation.start() + + def _finished(self): + done = self.on_done + self.on_done = None + if done is not None: + done() + + def paintEvent(self, event): + p = QPainter(self) + rounded_panel(p, self.rect(), 12) + + +class Toolbar(QWidget): + pick = Signal(object) + toggle_sound = Signal() + exit_requested = Signal() + + def __init__(self, parent): + super().__init__(parent) + self.setMouseTracking(True) + self.layout_ = QHBoxLayout(self) + self.layout_.setContentsMargins(10, 8, 10, 8) + self.layout_.setSpacing(6) + self.style_buttons = {} + self.shown_styles = [] + self.current = None + self.revealed = False + self.ink_open = False + + self.divider = Divider(self) + self.layout_.addWidget(self.divider) + self.ink_button = IconButton(self, tip="Ink colour") + self.ink_button.clicked.connect(self._toggle_ink) + self.layout_.addWidget(self.ink_button) + self.sound_button = IconButton(self, pixmap=symbol_icon("sound"), icon_size=40, tip="Tap sound") + self.sound_button.clicked.connect(self.toggle_sound.emit) + self.layout_.addWidget(self.sound_button) + self.exit_button = IconButton(self, pixmap=symbol_icon("close"), icon_size=40, tip="Exit (Esc)") + self.exit_button.clicked.connect(self.exit_requested.emit) + self.layout_.addWidget(self.exit_button) + + self.tray = InkTray(parent) + self.tray.picked.connect(self._ink_picked) + + self.effect = QGraphicsOpacityEffect(self) + self.effect.setOpacity(0.0) + self.setGraphicsEffect(self.effect) + self.animation = QPropertyAnimation(self.effect, b"opacity", self) + self.animation.setEasingCurve(QEasingCurve.OutCubic) + self.animation.finished.connect(self._animation_done) + self.hide() + self.rebuild_styles() + self.refresh_ink() + + # -- layout ---------------------------------------------------------------- + + def frame(self): + rect = QRect(self.geometry()) + if self.ink_open and self.tray.isVisible(): + rect = rect.united(self.tray.geometry()) + return rect + + def place(self, bottom): + """Centre the toolbar horizontally with its bottom edge at `bottom` (overlay coordinates).""" + self.adjustSize() + parent = self.parentWidget() + x = (parent.width() - self.width()) // 2 + y = bottom - self.height() + self.move(x, y) + self._place_tray() + + def _place_tray(self): + self.tray.adjustSize() + centre = self.ink_button.mapTo(self.parentWidget(), self.ink_button.rect().center()) + self.tray.move(centre.x() - self.tray.width() // 2, self.y() - 8 - self.tray.height()) + + def rebuild_styles(self): + styles = list(prefs().pinned_styles) + if self.current is not None and self.current not in styles: + styles.append(self.current) + if styles == self.shown_styles: + return + self.shown_styles = styles + for button in self.style_buttons.values(): + self.layout_.removeWidget(button) + button.deleteLater() + self.style_buttons = {} + for i, style in enumerate(styles): + pixmap = laser_icon() if style.is_laser else HandAsset.thumbnail(style) + button = IconButton(self, pixmap=pixmap, icon_size=36, tip=style.title) + button.clicked.connect(lambda s=style: self.pick.emit(s)) + self.style_buttons[style] = button + self.layout_.insertWidget(i, button) + self._highlight() + self._resize_keeping_centre() + + def _resize_keeping_centre(self): + centre_x = self.x() + self.width() / 2 + bottom = self.y() + self.height() + self.adjustSize() + self.move(int(centre_x - self.width() / 2), bottom - self.height()) + self._place_tray() + + def select(self, style): + self.current = style + self.rebuild_styles() + self._highlight() + self.refresh_ink() + + def _highlight(self): + for style, button in self.style_buttons.items(): + button.set_selected(style == self.current) + + def set_sound_on(self, on): + self.sound_button.set_pixmap(symbol_icon("sound" if on else "muted", alpha=0.85 if on else 0.45)) + + # -- ink ------------------------------------------------------------------- + + def _toggle_ink(self): + self.set_ink_open(not self.ink_open) + + def set_ink_open(self, open_): + if open_ == self.ink_open: + return + self.ink_open = open_ + if open_: + self._place_tray() + self.tray.raise_() + self.tray.show() + else: + self.tray.hide() + self.refresh_ink() + + def _ink_picked(self, choice_id): + prefs().set("inkChoice", choice_id) + self.set_ink_open(False) + + def refresh_ink(self): + style = self.current or prefs().pointer_style + self.ink_button.set_pixmap(ink_dot(ink_color_for(prefs().ink_choice, style))) + self.ink_button.set_selected(self.ink_open) + hidden = not prefs().show_ink_button + if self.ink_button.isHidden() != hidden: + self.ink_button.setVisible(not hidden) + if hidden: + self.set_ink_open(False) + self._resize_keeping_centre() + self.tray.refresh(prefs().ink_choice) + + # -- reveal ---------------------------------------------------------------- + + def set_revealed(self, value): + if value == self.revealed: + return + self.revealed = value + if not value: + self.set_ink_open(False) + self.animation.stop() + self.animation.setDuration(150 if value else 350) + self.animation.setStartValue(self.effect.opacity()) + self.animation.setEndValue(1.0 if value else 0.0) + if value: + self.show() + self.raise_() + self.animation.start() + + def _animation_done(self): + if not self.revealed: + self.hide() + + def hide_now(self): + self.revealed = False + self.animation.stop() + self.effect.setOpacity(0.0) + self.set_ink_open(False) + self.hide() + + def paintEvent(self, event): + p = QPainter(self) + rounded_panel(p, self.rect(), 16)