Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1ba0e698cb
|
||
|
|
4e986bdd8c
|
||
|
|
4d728e2712
|
||
|
|
f0fa2866f2
|
No files matched your search
@@ -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
@@ -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
@@ -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"]
|
||||||
|
|||||||
@@ -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
@@ -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
@@ -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,
|
||||||
|
|||||||
Reference in new issue
Block a user