From 21f0409e3bf2cb760fa045e9630ee2f936924f90 Mon Sep 17 00:00:00 2001 From: Nathan Sobo Date: Thu, 28 Dec 2023 10:23:12 -0700 Subject: [PATCH] Fix anti-aliasing artifacts in borders Previously, we changed borders to be drawn after content, so they are no longer part of the same quads as the background. In our change, we gave the background quad a transparent black border and the border quads transparent black backgrounds. However, this caused the other channels to blend toward that black color before becoming fully transparent, causing them to become darker. In this PR, I source the "placeholder" color by duplicating the values for the other channels and only adjust the alpha down to zero. --- crates/gpui2/src/style.rs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/crates/gpui2/src/style.rs b/crates/gpui2/src/style.rs index c281818c0f0bad1107d49a8b1895762c910e8af7..7f6af4fd21002a56d9daf5e8cfa821e1a18f71d7 100644 --- a/crates/gpui2/src/style.rs +++ b/crates/gpui2/src/style.rs @@ -386,12 +386,14 @@ impl Style { let background_color = self.background.as_ref().and_then(Fill::color); if background_color.map_or(false, |color| !color.is_transparent()) { cx.with_z_index(1, |cx| { + let mut border_color = background_color.unwrap_or_default(); + border_color.a = 0.; cx.paint_quad(quad( bounds, self.corner_radii.to_pixels(bounds.size, rem_size), background_color.unwrap_or_default(), Edges::default(), - Hsla::transparent_black(), + border_color, )); }); } @@ -426,10 +428,12 @@ impl Style { bottom_bounds.upper_right(), ); + let mut background = self.border_color.unwrap_or_default(); + background.a = 0.; let quad = quad( bounds, corner_radii, - Hsla::transparent_black(), + background, border_widths, self.border_color.unwrap_or_default(), );