Compare commits

..

1 Commits

Author SHA1 Message Date
Siddhant Agarwal
252efa4946
Merge 3d7a289334b56f39a7b8a5bc005735e0b6484537 into 78355421ad73fdcbe93b4acca890b439c4b6f98d 2025-07-22 21:10:37 +08:00
4 changed files with 17 additions and 19 deletions

View File

@ -476,18 +476,26 @@ impl Curve {
/// Computes the size of the bounding box of this curve.
pub fn bbox_size(&self) -> Size {
let mut min = Point::splat(Abs::inf());
let mut max = Point::splat(-Abs::inf());
let mut min_x = Abs::inf();
let mut min_y = Abs::inf();
let mut max_x = -Abs::inf();
let mut max_y = -Abs::inf();
let mut cursor = Point::zero();
for item in self.0.iter() {
match item {
CurveItem::Move(to) => {
min_x = min_x.min(cursor.x);
min_y = min_y.min(cursor.y);
max_x = max_x.max(cursor.x);
max_y = max_y.max(cursor.y);
cursor = *to;
}
CurveItem::Line(to) => {
min = min.min(cursor).min(*to);
max = max.max(cursor).max(*to);
min_x = min_x.min(cursor.x);
min_y = min_y.min(cursor.y);
max_x = max_x.max(cursor.x);
max_y = max_y.max(cursor.y);
cursor = *to;
}
CurveItem::Cubic(c0, c1, end) => {
@ -499,17 +507,17 @@ impl Curve {
);
let bbox = cubic.bounding_box();
min.x = min.x.min(Abs::pt(bbox.x0)).min(Abs::pt(bbox.x1));
min.y = min.y.min(Abs::pt(bbox.y0)).min(Abs::pt(bbox.y1));
max.x = max.x.max(Abs::pt(bbox.x0)).max(Abs::pt(bbox.x1));
max.y = max.y.max(Abs::pt(bbox.y0)).max(Abs::pt(bbox.y1));
min_x = min_x.min(Abs::pt(bbox.x0)).min(Abs::pt(bbox.x1));
min_y = min_y.min(Abs::pt(bbox.y0)).min(Abs::pt(bbox.y1));
max_x = max_x.max(Abs::pt(bbox.x0)).max(Abs::pt(bbox.x1));
max_y = max_y.max(Abs::pt(bbox.y0)).max(Abs::pt(bbox.y1));
cursor = *end;
}
CurveItem::Close => (),
}
}
Size::new(max.x - min.x, max.y - min.y)
Size::new(max_x - min_x, max_y - min_y)
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 399 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

View File

@ -130,16 +130,6 @@
down, up, down, up, down,
)
--- curve-stroke-gradient-sharp ---
#set page(width: auto)
#let down = curve.line((40pt, 40pt), relative: true)
#let up = curve.line((40pt, -40pt), relative: true)
#curve(
stroke: 4pt + gradient.linear(red, blue).sharp(3),
down, up, down, up, down,
)
--- curve-fill-rule ---
#stack(
dir: ltr,