Compare commits

4 Commits
Author SHA1 Message Date
swaits 1ba0e698cb chore: repoint URLs at git.swaits.com and bump for release
Rewrites remaining github.com / git.sr.ht references to git.swaits.com,
translating GitHub URL shapes to Gitea's (/blob/<ref>/ -> /src/branch/<ref>/,
/tree/<tag> -> /src/tag/<tag>, /actions/workflows/X -> /actions?workflow=X,
/edit/ -> /_edit/).

Left pointing at GitHub on purpose: pull-request links (PRs were not migrated)
and GitHub-only surfaces Gitea lacks (security advisories, discussions).
2026-08-31 17:58:38 -06:00
swaits 4e986bdd8c chore: point repository at git.swaits.com 2026-08-31 17:19:23 -06:00
swaits 4d728e2712 chore: bump version to 0.1.2 2026-04-07 13:12:27 -06:00
swaits f0fa2866f2 fix: remove auto-exit timer and smooth cursor tracking
Remove the 10-second display timer so the overlay runs until toggled
off. Shrink the cursor input hole from 512px to 48px for near-pixel-
perfect tracking instead of chunky jumps.
2026-04-07 13:10:24 -06:00
6 changed files with 26 additions and 20 deletions

No files matched your search

+15
View File
@@ -1,5 +1,20 @@
# Changelog # Changelog
## 0.1.2 (2026-04-07)
### Bug Fixes
- Decouple input passthrough hole from shader cursor avoidance radius
- Small constant-size input hole (48px) for click passthrough
- Shader cursor avoidance tracks independently with smooth updates
## 0.1.1 (2026-04-07)
### Bug Fixes
- Remove 10-second auto-exit timer; overlay now runs until toggled off
- Smooth cursor tracking by reducing input hole from 512px to 48px
## 0.1.0 (2026-04-07) ## 0.1.0 (2026-04-07)
Initial release. Initial release.
Generated
+1 -1
View File
@@ -727,7 +727,7 @@ checksum = "19b30a45b0cd0bcca8037f3d0dc3421eaf95327a17cad11964fb8179b4fc4832"
[[package]] [[package]]
name = "ringa" name = "ringa"
version = "0.1.0" version = "0.1.2"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"bytemuck", "bytemuck",
+3 -3
View File
@@ -1,11 +1,11 @@
[package] [package]
name = "ringa" name = "ringa"
version = "0.1.0" version = "0.1.3"
edition = "2021" edition = "2021"
license = "MIT" license = "MIT"
description = "GPU-rendered ring light overlay for Wayland" description = "GPU-rendered ring light overlay for Wayland"
repository = "https://github.com/swaits/ringa" repository = "https://git.swaits.com/swaits/ringa"
homepage = "https://github.com/swaits/ringa" homepage = "https://git.swaits.com/swaits/ringa"
readme = "README.md" readme = "README.md"
keywords = ["wayland", "ring-light", "overlay", "wgpu", "camera"] keywords = ["wayland", "ring-light", "overlay", "wgpu", "camera"]
categories = ["command-line-utilities", "multimedia"] categories = ["command-line-utilities", "multimedia"]
+1 -1
View File
@@ -16,7 +16,7 @@ GPU-rendered ring light overlay for Wayland. Simulates a monitor-mounted ring li
### From source ### From source
```sh ```sh
git clone https://github.com/swaits/ringa.git git clone https://git.swaits.com/swaits/ringa.git
cd ringa cd ringa
cargo install --path . cargo install --path .
``` ```
+3 -12
View File
@@ -10,7 +10,6 @@ use lock::ToggleResult;
use render::GpuRenderer; use render::GpuRenderer;
use wayland::{OverlayEvent, WaylandBackend}; use wayland::{OverlayEvent, WaylandBackend};
const DISPLAY_DURATION: Duration = Duration::from_secs(10);
const FRAME_INTERVAL: Duration = Duration::from_millis(16); const FRAME_INTERVAL: Duration = Duration::from_millis(16);
fn main() -> Result<()> { fn main() -> Result<()> {
@@ -37,19 +36,16 @@ fn main() -> Result<()> {
color, color,
)?; )?;
// Initial cursor offscreen — will update when pointer enters ring zone.
let mut cursor_x = -10000.0_f64; let mut cursor_x = -10000.0_f64;
let mut cursor_y = -10000.0_f64; let mut cursor_y = -10000.0_f64;
renderer.render(cursor_x, cursor_y)?; renderer.render(cursor_x, cursor_y)?;
let start = Instant::now();
let mut last_draw = Instant::now(); let mut last_draw = Instant::now();
let mut dirty = false; let mut dirty = false;
loop { loop {
let elapsed = start.elapsed(); if lock::should_exit() {
if elapsed >= DISPLAY_DURATION || lock::should_exit() {
break; break;
} }
@@ -59,13 +55,10 @@ fn main() -> Result<()> {
dirty = false; dirty = false;
} }
let remaining = DISPLAY_DURATION - elapsed;
let poll_timeout = if dirty { let poll_timeout = if dirty {
FRAME_INTERVAL FRAME_INTERVAL.saturating_sub(last_draw.elapsed())
.saturating_sub(last_draw.elapsed())
.min(remaining)
} else { } else {
remaining Duration::from_secs(1)
}; };
let event = match wl.next_event(poll_timeout)? { let event = match wl.next_event(poll_timeout)? {
@@ -77,8 +70,6 @@ fn main() -> Result<()> {
OverlayEvent::CursorMoved(x, y) => { OverlayEvent::CursorMoved(x, y) => {
cursor_x = x; cursor_x = x;
cursor_y = y; cursor_y = y;
// Punch a passthrough hole at the new cursor position so
// clicks go to the desktop, then re-render the shader.
wl.update_cursor_hole(cursor_x, cursor_y)?; wl.update_cursor_hole(cursor_x, cursor_y)?;
dirty = true; dirty = true;
} }
+3 -3
View File
@@ -25,9 +25,9 @@ use raw_window_handle::{
RawDisplayHandle, RawWindowHandle, WaylandDisplayHandle, WaylandWindowHandle, RawDisplayHandle, RawWindowHandle, WaylandDisplayHandle, WaylandWindowHandle,
}; };
/// Size of the passthrough hole around the cursor. Should be large enough /// Size of the passthrough hole around the cursor. Small = more frequent
/// that normal mouse movement stays within the hole between frames. /// pointer events = smoother tracking. Clicks land inside this hole.
const CURSOR_HOLE_SIZE: i32 = 512; const CURSOR_HOLE_SIZE: i32 = 48;
pub enum OverlayEvent { pub enum OverlayEvent {
Close, Close,