summaryrefslogtreecommitdiff
path: root/crates/typst-library
diff options
context:
space:
mode:
authorEric Biedert <github@ericbiedert.de>2024-10-28 15:31:00 +0100
committerGitHub <noreply@github.com>2024-10-28 14:31:00 +0000
commit45377f25ecbd33b56ec5fcd1335f20b13488a93d (patch)
tree994bd469ffbadbafdba62f44143c1fbbcfb2b812 /crates/typst-library
parent6dd05cc17ab0a1d6ddbc11854d1a662d91da142f (diff)
Fix clipping with outset (#5295)
Co-authored-by: Laurenz <laurmaedje@gmail.com>
Diffstat (limited to 'crates/typst-library')
-rw-r--r--crates/typst-library/src/visualize/path.rs20
1 files changed, 20 insertions, 0 deletions
diff --git a/crates/typst-library/src/visualize/path.rs b/crates/typst-library/src/visualize/path.rs
index 76fd0df0..f592a712 100644
--- a/crates/typst-library/src/visualize/path.rs
+++ b/crates/typst-library/src/visualize/path.rs
@@ -1,4 +1,5 @@
use kurbo::ParamCurveExtrema;
+use typst_utils::Numeric;
use self::PathVertex::{AllControlPoints, MirroredControlPoint, Vertex};
use crate::diag::{bail, SourceResult};
@@ -228,6 +229,25 @@ impl Path {
self.0.push(PathItem::ClosePath);
}
+ /// Translate all points in this path by the given offset.
+ pub fn translate(&mut self, offset: Point) {
+ if offset.is_zero() {
+ return;
+ }
+ for item in self.0.iter_mut() {
+ match item {
+ PathItem::MoveTo(p) => *p += offset,
+ PathItem::LineTo(p) => *p += offset,
+ PathItem::CubicTo(p1, p2, p3) => {
+ *p1 += offset;
+ *p2 += offset;
+ *p3 += offset;
+ }
+ PathItem::ClosePath => (),
+ }
+ }
+ }
+
/// Computes the size of bounding box of this path.
pub fn bbox_size(&self) -> Size {
let mut min_x = Abs::inf();