fix: sharp rectangle corners in the export

This commit is contained in:
elwrcl committed 2026-10-02 18:29:46 +03:00
1 parent 9357395976
commit cf8b043e1f
2 files changed
+22 -2

No files matched your search

+13
View File
@@ -109,6 +109,19 @@ mod tests {
); );
} }
#[test]
fn rectangles_have_sharp_corners() {
let base = RgbaImage::from_pixel(60, 40, Rgba([255, 255, 255, 255]));
let rect = Shape {
tool: Tool::Rectangle,
style: Style { color: [255, 0, 0], width: 8.0 },
points: vec![(10.0, 10.0), (50.0, 30.0)],
};
let out = render(&base, &[rect]);
// A round join would leave the outer corner (6..7, 6..7) white.
assert_eq!(out.get_pixel(6, 6).0, [255, 0, 0, 255]);
}
#[test] #[test]
fn highlighter_blends_at_40_percent() { fn highlighter_blends_at_40_percent() {
let base = RgbaImage::from_pixel(100, 40, Rgba([0, 0, 255, 255])); let base = RgbaImage::from_pixel(100, 40, Rgba([0, 0, 255, 255]));
+9 -2
View File
@@ -154,7 +154,7 @@ pub enum Prim {
width: f32, width: f32,
color: [u8; 4], color: [u8; 4],
closed: bool, closed: bool,
/// Round caps and joins; false means butt caps. /// Round caps and joins; false means butt caps and miter joins.
round: bool, round: bool,
}, },
/// A convex polygon. /// A convex polygon.
@@ -178,7 +178,14 @@ pub fn geometry(shape: &Shape) -> Vec<Prim> {
Tool::Arrow => arrow(pts[0], pts[1], w, opaque), Tool::Arrow => arrow(pts[0], pts[1], w, opaque),
Tool::Rectangle => { Tool::Rectangle => {
let ((x0, y0), (x1, y1)) = (pts[0], pts[1]); let ((x0, y0), (x1, y1)) = (pts[0], pts[1]);
vec![stroke(vec![(x0, y0), (x1, y0), (x1, y1), (x0, y1)], true)] // Sharp (miter) corners, as egui draws them while dragging.
vec![Prim::Stroke {
points: vec![(x0, y0), (x1, y0), (x1, y1), (x0, y1)],
width: w,
color: opaque,
closed: true,
round: false,
}]
} }
Tool::Ellipse => { Tool::Ellipse => {
let ((x0, y0), (x1, y1)) = (pts[0], pts[1]); let ((x0, y0), (x1, y1)) = (pts[0], pts[1]);