All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog and this project adheres to Semantic Versioning.
0.12.0 - 2026-02-02
- Fixed a panic when drawing small anti-aliased rectangles. Thanks to @nwhitehead
- 2-point conical gradient support for (
RadialGradient). Thanks to @wmedrano - Sweep gradient support (
SweepGradient). Thanks to @wmedrano - Support for a small number of color spaces. Thanks to @danieldg
- Added the
is_emptyandjoinmethods toRect. Thanks to @danieldg - Implement
HashforPathVerb,RectandSizeandIntSize. Thanks to @LaurenzV - Add support for relaxed SIMD in WebAssembly. Thanks to @CryZe
- Add the
from_rgba_uncheckedmethod toColorso it can be created inconstcontexts. Thanks to @jeffreyrosenbluth - Add the
scale_byandscale_tomethod toSize. Thanks to @jermy - Add the
take_demultipliedmethod toPixmap. Thanks to @JustForFun88 - Add the
takemethod toMask. Thanks to @valadaptive - Add the
round_outmethod toRect. Thanks to @valadaptive
- The
RadialGradient::newrequires a start radius now. Set the second argument to 0.0 to preserve the old behavior.
0.11.4 - 2024-02-04
Path::compute_tight_boundscalculation. Thanks to @qbcbyb
0.11.3 - 2023-12-03
Path::compute_tight_bounds
0.11.2 - 2023-10-01
- MSRV bumped to stable, because of the
flate2crate.
Transform::is_validwas treating 1/4096 as zero. We need a higher precision.- Build failure on AVX2 with
--no-default-features. Thanks to @linkmauve
0.11.1 - 2023-06-17
- MSRV bumped to 1.60, because of the
logcrate.
LineJoin::MiterCliphandling with smallmiter_limit. Thanks to @torokati44
0.11.0 - 2023-06-08
LineJoin::MiterClip. Thanks to @torokati44
Rect::insetandRect::outsetare no longer require a mutableself. Thanks to @wezm
0.10.0 - 2023-05-27
PathBuilder::push_pathNonZeroRectSizeRect::transformRect::bbox_transformTransform::from_bboxTransform::is_validTransform::get_scaleTransform::pre_rotateTransform::post_rotateTransform::pre_rotate_atTransform::post_rotate_atTransform::map_point
ColorU8andPremultipliedColorU8are stored as[u8; 4]instead ofu32. This fixes potential alignment issues and make the code easier to understand. Thanks to @e00EPathBuilder::push_rectacceptsRectand notf32numbers now.
tiny_skia_path::ScreenIntRect. It become private.Path::is_empty.Pathcannot be empty by design.
ColorU8::getandPremultipliedColorU8::get. Use the getters instead.
0.9.1 - 2023-05-17
- Reexport
tiny_skia_path::PathStrokerintiny-skia.
0.9.0 - 2023-04-23
Mask::from_vecMask::from_pixmapto convertPixmapintoMaskby extracting alpha or luminance.Mask::widthMask::heightMask::dataMask::data_mutMask::fill_pathMask::decode_pngMask::load_pngMask::encode_pngMask::save_pngMask::invertMaskTypePixmap::apply_mask
- Rename
ClipMaskintoMask. Maskis closer to a 8bit (A8)Pixmapnow, rather than being its own thing.Mask::newrequires width and height arguments now.- Drawing on
MaskusingMask::fill_pathuses our SIMD pipeline now instead of a scalar code that should make it a bit faster. - Painting API no longer returns
Option<()>, but simply adds a warning to the log. Paint::anti_aliasis set totrueby default.
Mask::set_path. UseMask::fill_pathinstead.Mask::default(). Mask cannot be empty anymore.
0.8.4 - 2023-04-22
- Implement
PartialEqforPaintand subtypes. Thanks to @hecrj
- MSRV bumped to 1.57, mainly because of the
pngcrate.
ClipMasks larger than 8191x8191 pixels. Previously, the creation of a large mask viaClipMask::set_pathwould have created an empty mask.
0.8.3 - 2023-02-05
- Performance regression, probably due to LLVM update in Rust. Thanks to @mostafa-khaled775
- Big-endian targets support. Thanks to @ids1024
0.8.2 - 2022-10-22
Pixmap::from_vec.
- Increase Conic to Quad conversion precision. This allows us to produce nicer round caps. Previously, they were not as round as needed.
0.8.1 - 2022-08-29
- Conditional compilation of
FasterMinMaxon fallback platforms. Thanks to @CryZe
0.8.0 - 2022-08-27
- AArch64 Neon SIMD support. Up to 3x faster on Apple M1. Thanks to @CryZe
FiniteF32,NormalizedF32andNonZeroPositiveF32types have been moved to thestrict-numcrate.- Rename
NormalizedF32::from_u8intoNormalizedF32::new_u8. - Rename
NormalizedF32::new_boundedintoNormalizedF32::new_clamped. - Use explicit SIMD intrinsic instead of relying on
safe_arch. - MSRV bumped to 1.51
0.7.0 - 2022-07-03
tiny-skia-pathdependency that can be used independently fromtiny-skia. It contains thetiny-skiaBezier path implementation, including stroking and dashing. As well as all the geometry primitives (likePointandRect).
- When disabling the
stdfeature, one have to enableno-std-floatfeature instead oflibmnow.
0.6.6 - 2022-06-23
- Panic in
Rect::roundandRect::round_out. Thanks to @Wardenfar
0.6.5 - 2022-06-10
- Minimum
arrayrefversion.
0.6.4 - 2022-06-04
- Panic during non-aliased hairline stroking at the bottom edge of an image.
0.6.3 - 2022-02-01
- SourceOver blend mode must not be optimized to Source when ClipPath is present.
0.6.2 - 2021-12-30
ClipMask::intersect_pathalpha multiplying.
0.6.1 - 2021-08-28
- Support rendering on pixmaps larger than 8191x8191 pixels.
From now,
Pixmapis limited only by the amount of memory caller has. Transform::map_pointsPathBuilder::push_oval
0.6.0 - 2021-08-21
- WASM simd128 support. Thanks to @CryZe
Transform::post_scaleno longer requires&mut self.- Update
pngcrate.
0.5.1 - 2021-03-07
- Color memset optimizations should be ignored when clip mask is present.
ClipMask::intersect_pathlogic.
0.5.0 - 2021-03-06
ClipMask::intersect_path- no_std support. Thanks to @CryZe
- Reduce
Transformstrictness. It's no longer guarantee to have only finite values, therefore we don't have to check each operation.
Canvas. CallPixmap/PixmapMutdrawing methods directly.
0.4.2 - 2021-01-23
- Panic during path filling with anti-aliasing because of incorrect edges processing.
0.4.1 - 2021-01-19
- Endless loop during stroke dashing.
0.4.0 - 2021-01-02
- Remove almost all
unsafe. No performance changes.
0.3.0 - 2020-12-20
PixmapRefandPixmapMut, that can be created fromPixmapor from raw data.Canvas::set_clip_mask,Canvas::get_clip_mask,Canvas::take_clip_mask.
Canvasno longer owns aPixmap.Canvas::draw_pixmapandPattern::newacceptPixmapRefinstead of&Pixmapnow.- Improve clipping performance.
- The internal
ClipMasktype become public.
- Panic when path is drawn slightly past the
Pixmapbounds.
Canvas::new
- Port to Rust.
- Bindings to a stripped down Skia fork.