Add support for dashed borders to GPUI (#27139)

Features:

* Scales dash spacing with border width.
* Laying out dashes around rounded corners.
* Varying border widths with rounded corners - now uses an ellipse for the inner edge of the border.
* When there are no rounded corners, each straight border is laid out separately, so that the dashes to meet at the corners.
* All sides of each dash are antialiased.

![image](https://github.com/user-attachments/assets/b3789a98-a5be-4f97-9736-c4e59615afe6)

![image](https://github.com/user-attachments/assets/739bdc57-4580-42c8-bfc3-6e287411a408)

Release Notes:

- N/A

---------

Co-authored-by: Michael Sloan <michael@zed.dev>
Co-authored-by: Ben <ben@zed.dev>
This commit is contained in:
Nathan Sobo
2025-03-25 11:11:04 -06:00
committed by GitHub
co-authored by Michael Sloan Ben
parent 2fe2028e20
commit cd1e56d6c7
14 changed files with 869 additions and 159 deletions
+2 -1
View File
@@ -1662,7 +1662,7 @@ impl Interactivity {
window: &mut Window,
cx: &mut App,
) {
use crate::TextAlign;
use crate::{BorderStyle, TextAlign};
if global_id.is_some()
&& (style.debug || style.debug_below || cx.has_global::<crate::DebugBelow>())
@@ -1753,6 +1753,7 @@ impl Interactivity {
},
},
crate::red(),
BorderStyle::default(),
))
}
}