diff options
| author | srdusr <[email protected]> | 2025-04-03 22:35:00 +0200 |
|---|---|---|
| committer | srdusr <[email protected]> | 2025-04-03 22:35:00 +0200 |
| commit | 254557f94544fe8841a4e9422eee9228e7ed4152 (patch) | |
| tree | 4a1197daae3571d00e9af5e779107edaca183443 /crates/wayland/src/native_lock.rs | |
| parent | 4d61d76b1b73f56fc14ed977806e4d4ad313fd51 (diff) | |
| download | srdwm-254557f94544fe8841a4e9422eee9228e7ed4152.tar.gz srdwm-254557f94544fe8841a4e9422eee9228e7ed4152.zip | |
Fix border corner rendered as a solid wedge instead of a ring
round_top_corners/round_bottom_corners only ever cut pixels *outside*
the shared corner radius (the rounded outer silhouette). Nothing cut
anything *inside* it, so a border strip's own "extra" rows (present
whenever corner_radius > border_width) stayed a solid filled disk out
to the centre column/row, then hit clip_middle_beyond_thickness's
hard, unblended rectangular cut right at the disk's own most opaque
point - a clean right-angle step, not a curve. Confirmed live,
zoomed: a real square notch bitten into an otherwise smooth arc,
reported as "squares on the inside corners of each vertex."
Added carve_inner_corner_pixel, the same smoothstep falloff as the
existing outer cut but inverted (cuts near the centre instead of far
from it), applied at radius - border_width so the corner becomes a
genuine ring of ~border_width visible thickness tapering smoothly to
transparent, instead of a filled wedge. Only render_border_top/
render_border_bottom pass an inner_radius; the titlebar's own corner
and the lock-screen box keep their existing solid-disk behaviour,
which is correct for a single flat-coloured panel with nothing of a
different colour underneath needing to show through.
Also generalizes round_top_corners with an explicit center_col
parameter, mirroring the existing center_row shift: the titlebar's own
corner circle was never shifted horizontally to match the border
strip's (only vertically), leaving a border_width-wide sliver of the
titlebar's own misaligned curve poking through at the seam.
border_top_and_titlebar_corners_meet_without_a_seam and
border_top_curve_actually_closes_within_the_side_strips_own_width
updated to match: both now compare the correct corresponding columns
(the titlebar's own buffer starts border_width columns inside the
border strip's), and the latter no longer demands exact 255 opacity at
a point that legitimately sits within the new inner cut's own
antialiasing band.
Diffstat (limited to 'crates/wayland/src/native_lock.rs')
| -rw-r--r-- | crates/wayland/src/native_lock.rs | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/crates/wayland/src/native_lock.rs b/crates/wayland/src/native_lock.rs index 31c4fc3..3f090bb 100644 --- a/crates/wayland/src/native_lock.rs +++ b/crates/wayland/src/native_lock.rs @@ -434,8 +434,8 @@ fn render_ui_box(native: &NativeLock, theme: &srdwm_core::LockConfig) -> (Vec<u8 // value. Clipping after the border fill above means the corner pixels // of that border get cut along with the background, the same "cut, // don't stroke" treatment `render_titlebar`'s own corners get. - round_top_corners(&mut buf, WIDTH, HEIGHT, theme.corner_radius, theme.corner_radius as i32); - round_bottom_corners(&mut buf, WIDTH, HEIGHT, theme.corner_radius); + round_top_corners(&mut buf, WIDTH, HEIGHT, theme.corner_radius, theme.corner_radius as i32, theme.corner_radius as i32, None); + round_bottom_corners(&mut buf, WIDTH, HEIGHT, theme.corner_radius, None); (buf, (WIDTH as i32, HEIGHT as i32)) } |