Skip to content

Latest commit

 

History

History
330 lines (264 loc) · 16.5 KB

File metadata and controls

330 lines (264 loc) · 16.5 KB

Changelog

The latest published Kurbo release is 0.13.1 which was released on 2026-05-13. You can find its changes documented below.

This release has an MSRV of 1.85.

Added

0.13.1 (2026-05-13)

This release has an MSRV of 1.85.

Added

  • Stroke::is_finite and Stroke::is_nan. (#545 by @waywardmonkeys)
  • Component-wise Insets::min/max methods. (#548 by @xStrom)
  • Ability to add and subtract Insets from other Insets. (#549 by @xStrom)
  • Arc now implements ParamCurve. (#378 by @waywardmonkeys)
  • Affine::{pre,then}_skew and Affine::{pre,then}_reflect fluent composition helpers. (#563 by @waywardmonkeys)
  • Three transform matrix norms: Affine::{nuclear_norm_squared,frobenius_norm_squared,spectral_norm}. (#569 by @tomcur)
  • StrokeOpts::stable_dash_order to keep dashes at fixed path-relative positions instead of merging the first/last dash across. (#550 by @RobertBrewitz)
  • expand_path anisotropic path expansion. (#575 by @raphlinus)

Changed

  • Improved performance of RoundedRect::winding and RoundedRect::contains. (#534 by @tomcur)
  • Axis, Ellipse::from_affine, Insets, Line::reversed, Rect::min_x/max_x/min_y/max_y, RoundedRectRadii::abs/clamp/as_single_radius, RoundedRect::width/height/radii/rect/origin/center, Size::aspect_ratio, Stroke::new/with_join/with_miter_limit/with_start_cap/with_end_cap/with_caps are all now const. (#536 by @xStrom, #539 and #561 by @tomcur)
  • Improved performance of Ellipse::area. Note: for non-finite ellipses, this method may now return f64::INFINITY where it returned f64::NAN before. (#559 by @tomcur)
  • Improved numerical robustness of winding numbers for paths. (#537 by @jneem)

Fixed

  • Affine::pre_rotate_about calculation. (#567 by @dannymcgee)
  • Now closing subpaths when computing area for expansion. (#580 by @raphlinus)
  • Odd-length dash patterns no longer swap dashes and gaps when dash_offset increases. (#585 by @Keavon)

0.13.0 (2025-11-27)

This release has an MSRV of 1.85.

Added

  • BezPath::into_elements method which allows getting all path elements as a Vec without allocating, consuming the original path. This is the counterpart of BezPath::from_vec. (#504 by @cmyr)
  • A derive Hash to the Axis type. (#527 by @jrmoulton)

Changed

  • Sped up methods like Ellipse::radii by reworking the singular value decomposition expression. (#499 by @tomcur)
  • Line::nearest method to calculate the projection of a point onto a line segment has been made more performant. (#505 by @tomcur)
  • QuadBez::arclen calculation has been made more numerically stable (#503 by @jneem).
  • SvgParseError now implements core::error:Error. It previously implemented std::error::Error in std-enabled builds. (#517 by @Bombaninha)
  • The behavior of open versus closed shapes when using BezPath::extend (extending Bezier paths using an iterator over PathEl) has been clarified. (#523 by @DJMcNab)
  • More methods are marked inline. (#506 by @LaurenzV, #509 by @tomcur)

The following functions are now callable from const contexts. (#510, #512, #521, #522, #524, #525, #526 by @tomcur)

  • Affine::{skew, then_translate, map_unit_square, as_coeffs, determinant, inverse, translation, with_translation}
  • Point::midpoint
  • Rect::{width, height, origin, size, area, is_zero_area, center, aspect_ratio_width, overlap, contains_rect, union, intersect, inscribed_rect_with_aspect_ratio, inflate, scale_from_origin, abs}
  • Size::{max_side, min_side, area, is_zero_area, min, max, clamp, aspect_ratio_width}
  • In addition, the is_finite and is_nan methods on the following types are now const: Affine, Circle, ConstPoint, CubicBez, Ellipse, Insets, Line, Point, QuadBez, Rect, RoundedRect, RoundedRectRadii, Size, Triangle, Vec2.

0.12.0 (2025-09-04)

This release has an MSRV of 1.82. It was increased to support floating point math in const functions.

Added

  • Newly public StrokeCtx allows for reusing allocations when stroking multiple paths. (#475 by @LaurenzV)
  • Axis type. (#476 by @PoignardAzur)
  • Ellipse::major_radius and Ellipse::minor_radius methods. (#497 by @tomcur)

Changed

  • The implementation of stroking is much faster. (#427 by @raphlinus)
  • More Vec2 methods can now be called in const contexts. (#479 by @tomcur)
  • aspect_ratio on Rect and Size has been deprecated and replaced with aspect_ratio_width. This is because the implementation of aspect_ratio used the ratio of height to width, whereas aspect rations are otherwise always ratios of width to height. (#486 by @ErisianArchitect and @DJMcNab)
  • Deprecated contained_rect_with_aspect_ratio, replaced with inscribed_rect_with_aspect_ratio, which incidentally also uses the usual definition of aspect ratio (where the old name didn't). (#486 by @DJMcNab)
  • Breaking change: The deprecated offset::CubicOffset has been removed, and replaced by offset::offset_cubic. (#489 by @jneem)
  • Several methods marked #[inline]. (#472, #480, #496 by @tomcur)

Fixed

  • Improved cubic to quadratic conversion handling for degenerate cubic curves with 3-4 consecutive equal control points. The approximation now correctly handles edge cases where cubics degenerate to lines or single points, matching fonttools' cu2qu behavior. (#485 by @anthrotype)
  • Miter join in dashed strokes. (#490 by @gemberg)

Removed

  • Breaking change: DashIterator has been removed. Replace DashIterator::new with dash. (#488 by @DJMcNab)
  • Breaking change: The previously deprecated BezPath::flatten, Ellipse::[with_]x_rotation, {Rect, Size}::is_empty, Shape::[in]to_bez_path, and TranslateScale::as_tuple have been removed. (#487 by @DJMcNab)

0.11.3 (2025-07-21)

This release has an MSRV of 1.65.

Added

Changed

  • Let more methods take Into<Point> instead of Point. (#466 by @sagudev)

    Note: this can impact type inference.

  • Inline the Mul<PathEl> implementation for Affine. (#461 by @LaurenzV)

  • Inline the next method of the ToQuads iterator. (#460 by @LaurenzV)

  • Avoid calling f64::hypot, as it calls a slow library function. (#448 by @beholdnec, #451 by @raphlinus)

Fixed

  • Documentation of RoundedRect no longer incorrectly specifies the corner radii are equal. (#447 by @tomcur)
  • Negative dash offset by normalization. (#454 by @sagudev)
  • Now using exact endpoints for PathSeg. (#465 by @jneem)

0.11.2 (2025-04-28)

This release has an MSRV of 1.65.

Added

Changed

  • Reduced number of operations in Triangle::circumscribed_circle. (#390 by @tomcur)
  • Numerically approximate ellipse perimeter. (#383, #407 by @tomcur)
  • Always inline trivial casts, splats, and swizzles. (#428 by @xorgy)

Fixed

0.11.1 (2024-09-12)

This release has an MSRV of 1.65.

Added

Changed

Fixed

0.11.0 (2024-02-14)

This release has an MSRV of 1.65.

Note: A changelog was not kept for or before this release