mirror of
https://github.com/typst/typst
synced 2025-05-14 04:56:26 +08:00
Fix 0pt strokes (#923)
This commit is contained in:
parent
fd5e5b1ebb
commit
e9a0cf9741
@ -402,28 +402,33 @@ fn render_shape(
|
|||||||
miter_limit,
|
miter_limit,
|
||||||
}) = &shape.stroke
|
}) = &shape.stroke
|
||||||
{
|
{
|
||||||
let dash = dash_pattern.as_ref().and_then(|pattern| {
|
let width = thickness.to_f32();
|
||||||
// tiny-skia only allows dash patterns with an even number of elements,
|
|
||||||
// while pdf allows any number.
|
|
||||||
let len = if pattern.array.len() % 2 == 1 {
|
|
||||||
pattern.array.len() * 2
|
|
||||||
} else {
|
|
||||||
pattern.array.len()
|
|
||||||
};
|
|
||||||
let dash_array =
|
|
||||||
pattern.array.iter().map(|l| l.to_f32()).cycle().take(len).collect();
|
|
||||||
|
|
||||||
sk::StrokeDash::new(dash_array, pattern.phase.to_f32())
|
// Don't draw zero-pt stroke.
|
||||||
});
|
if width > 0.0 {
|
||||||
let paint = paint.into();
|
let dash = dash_pattern.as_ref().and_then(|pattern| {
|
||||||
let stroke = sk::Stroke {
|
// tiny-skia only allows dash patterns with an even number of elements,
|
||||||
width: thickness.to_f32(),
|
// while pdf allows any number.
|
||||||
line_cap: line_cap.into(),
|
let len = if pattern.array.len() % 2 == 1 {
|
||||||
line_join: line_join.into(),
|
pattern.array.len() * 2
|
||||||
dash,
|
} else {
|
||||||
miter_limit: miter_limit.0 as f32,
|
pattern.array.len()
|
||||||
};
|
};
|
||||||
canvas.stroke_path(&path, &paint, &stroke, ts, mask);
|
let dash_array =
|
||||||
|
pattern.array.iter().map(|l| l.to_f32()).cycle().take(len).collect();
|
||||||
|
|
||||||
|
sk::StrokeDash::new(dash_array, pattern.phase.to_f32())
|
||||||
|
});
|
||||||
|
let paint = paint.into();
|
||||||
|
let stroke = sk::Stroke {
|
||||||
|
width,
|
||||||
|
line_cap: line_cap.into(),
|
||||||
|
line_join: line_join.into(),
|
||||||
|
dash,
|
||||||
|
miter_limit: miter_limit.0 as f32,
|
||||||
|
};
|
||||||
|
canvas.stroke_path(&path, &paint, &stroke, ts, mask);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Some(())
|
Some(())
|
||||||
|
Binary file not shown.
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 4.3 KiB |
@ -69,3 +69,36 @@
|
|||||||
|
|
||||||
// Error: 29-55 expected "solid", "dotted", "densely-dotted", "loosely-dotted", "dashed", "densely-dashed", "loosely-dashed", "dashdotted", "densely-dashdotted", "loosely-dashdotted", array, dictionary, dash pattern, or none
|
// Error: 29-55 expected "solid", "dotted", "densely-dotted", "loosely-dotted", "dashed", "densely-dashed", "loosely-dashed", "dashdotted", "densely-dashdotted", "loosely-dashdotted", array, dictionary, dash pattern, or none
|
||||||
#line(length: 60pt, stroke: (color: red, dash: "dash"))
|
#line(length: 60pt, stroke: (color: red, dash: "dash"))
|
||||||
|
|
||||||
|
---
|
||||||
|
// 0pt strokes must function exactly like 'none' strokes and not draw anything
|
||||||
|
#rect(width: 10pt, height: 10pt, stroke: none)
|
||||||
|
#rect(width: 10pt, height: 10pt, stroke: 0pt)
|
||||||
|
|
||||||
|
#rect(width: 10pt, height: 10pt, stroke: none, fill: blue)
|
||||||
|
#rect(width: 10pt, height: 10pt, stroke: 0pt + red, fill: blue)
|
||||||
|
|
||||||
|
#line(length: 30pt, stroke: 0pt)
|
||||||
|
#line(length: 30pt, stroke: (color: red, thickness: 0pt, dash: ("dot", 1pt)))
|
||||||
|
|
||||||
|
#table(columns: 2, stroke: none)[A][B]
|
||||||
|
#table(columns: 2, stroke: 0pt)[A][B]
|
||||||
|
|
||||||
|
#path(
|
||||||
|
fill: red,
|
||||||
|
stroke: none,
|
||||||
|
closed: true,
|
||||||
|
((0%, 0%), (4%, -4%)),
|
||||||
|
((50%, 50%), (4%, -4%)),
|
||||||
|
((0%, 50%), (4%, 4%)),
|
||||||
|
((50%, 0%), (4%, 4%)),
|
||||||
|
)
|
||||||
|
#path(
|
||||||
|
fill: red,
|
||||||
|
stroke: 0pt,
|
||||||
|
closed: true,
|
||||||
|
((0%, 0%), (4%, -4%)),
|
||||||
|
((50%, 50%), (4%, -4%)),
|
||||||
|
((0%, 50%), (4%, 4%)),
|
||||||
|
((50%, 0%), (4%, 4%)),
|
||||||
|
)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user