From 290b1f59b1bb46ea7ef980387625f8bf580e0328 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 29 Jul 2026 14:09:23 +0000 Subject: [PATCH] chore: release v0.4.0 --- .../fixed_vector_container_paint_bounds.md | 9 --------- .../fixed_vector_decorated_box_clipping.md | 11 ----------- CHANGELOG.md | 19 +++++++++++++++++++ Cargo.lock | 12 ++++++------ Cargo.toml | 2 +- tellur-core/Cargo.toml | 2 +- tellur-live/Cargo.toml | 8 ++++---- tellur-plugin/Cargo.toml | 2 +- tellur-renderer/Cargo.toml | 2 +- tellur/Cargo.toml | 8 ++++---- 10 files changed, 37 insertions(+), 38 deletions(-) delete mode 100644 .changeset/fixed_vector_container_paint_bounds.md delete mode 100644 .changeset/fixed_vector_decorated_box_clipping.md diff --git a/.changeset/fixed_vector_container_paint_bounds.md b/.changeset/fixed_vector_container_paint_bounds.md deleted file mode 100644 index edf19dd..0000000 --- a/.changeset/fixed_vector_container_paint_bounds.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -default: major ---- - -# Fixed vector containers clipping their children's overflow - -`VectorLayer`, `Frame`, `Flex`, and `Padding` reported only their own layout box as their paint bounds, so anything a child painted outside that box — an outset stroke, a drop shadow, an overhanging chip — was cut off during rasterization. They now start from the layout box and grow it to include their children's paint bounds, matching the raster variants of the same name. - -Existing projects whose layouts contain such overflow may produce different video pixels after upgrading, so regenerate and review reference renders or snapshots. diff --git a/.changeset/fixed_vector_decorated_box_clipping.md b/.changeset/fixed_vector_decorated_box_clipping.md deleted file mode 100644 index f7eee90..0000000 --- a/.changeset/fixed_vector_decorated_box_clipping.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -default: major ---- - -# Fixed vector `DecoratedBox` not clipping its child - -The vector `DecoratedBox` only reported its own box as its paint bounds, which clips a child that paints outside it while the box is the rasterization root — but not once the box sits inside another vector container, because a vector parent keeps its children's nodes and drops their view boxes. It now cuts the child at its box geometrically, so it acts as a clip rectangle wherever it appears, matching the raster variant. - -Its `border` is the box's own paint rather than the child's, so the outer half of the border's stroke width is now included in the paint bounds instead of being cut off. - -Existing projects that decorate a box with an overflowing child or a border may produce different video pixels after upgrading, so regenerate and review reference renders or snapshots. diff --git a/CHANGELOG.md b/CHANGELOG.md index ce2e30c..99efca6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,25 @@ All notable changes to tellur are documented in this file. Versions are lockstep across the workspace. +## 0.4.0 (2026-07-29) + +### Breaking Changes + +- **Fixed vector containers clipping their children's overflow** + + `VectorLayer`, `Frame`, `Flex`, and `Padding` reported only their own layout box as their paint bounds, so anything a child painted outside that box — an outset stroke, a drop shadow, an overhanging chip — was cut off during rasterization. They now start from the layout box and grow it to include their children's paint bounds, matching the raster variants of the same name. + + Existing projects whose layouts contain such overflow may produce different video pixels after upgrading, so regenerate and review reference renders or snapshots. + +- **Fixed vector `DecoratedBox` not clipping its child** + + The vector `DecoratedBox` only reported its own box as its paint bounds, which clips a child that paints outside it while the box is the rasterization root — but not once the box sits inside another vector container, because a vector parent keeps its children's nodes and drops their view boxes. It now cuts the child at its box geometrically, so it acts as a clip rectangle wherever it appears, matching the raster variant. + + Its `border` is the box's own paint rather than the child's, so the outer half of the border's stroke width is now included in the paint bounds instead of being cut off. + + Existing projects that decorate a box with an overflowing child or a border may produce different video pixels after upgrading, so regenerate and review reference renders or snapshots. + + ## 0.3.0 (2026-07-19) ### Breaking Changes diff --git a/Cargo.lock b/Cargo.lock index 52c7b78..4021317 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2030,7 +2030,7 @@ dependencies = [ [[package]] name = "tellur" -version = "0.3.0" +version = "0.4.0" dependencies = [ "cargo_metadata", "clap", @@ -2043,7 +2043,7 @@ dependencies = [ [[package]] name = "tellur-core" -version = "0.3.0" +version = "0.4.0" dependencies = [ "ab_glyph", "bon", @@ -2068,7 +2068,7 @@ dependencies = [ [[package]] name = "tellur-live" -version = "0.3.0" +version = "0.4.0" dependencies = [ "lru", "png", @@ -2079,7 +2079,7 @@ dependencies = [ [[package]] name = "tellur-macros" -version = "0.3.0" +version = "0.4.0" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -2089,14 +2089,14 @@ dependencies = [ [[package]] name = "tellur-plugin" -version = "0.3.0" +version = "0.4.0" dependencies = [ "tellur-core", ] [[package]] name = "tellur-renderer" -version = "0.3.0" +version = "0.4.0" dependencies = [ "bytemuck", "bytes", diff --git a/Cargo.toml b/Cargo.toml index 71b6c36..653987a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -11,7 +11,7 @@ exclude = ["tools/release-notes"] resolver = "2" [workspace.package] -version = "0.3.0" +version = "0.4.0" edition = "2021" license = "MIT" readme = "README.md" diff --git a/tellur-core/Cargo.toml b/tellur-core/Cargo.toml index 4fac099..abd8a9d 100644 --- a/tellur-core/Cargo.toml +++ b/tellur-core/Cargo.toml @@ -40,7 +40,7 @@ rustybuzz = "0.20" # full Symphonia feature set so users can import common audio containers/codecs # such as WAV/AIFF, FLAC, Ogg/Vorbis, MP3, and MP4 AAC/ALAC. symphonia = { version = "0.5.4", default-features = false, features = ["all"] } -tellur-macros = { path = "../tellur-macros", version = "0.3.0" } +tellur-macros = { path = "../tellur-macros", version = "0.4.0" } thiserror = "2.0.18" # LaTeX math layout (RaTeX), gated behind the `latex` feature. `ratex-layout` diff --git a/tellur-live/Cargo.toml b/tellur-live/Cargo.toml index 9092f36..e1d94fc 100644 --- a/tellur-live/Cargo.toml +++ b/tellur-live/Cargo.toml @@ -24,9 +24,9 @@ include = [ [dependencies] lru = "0.12.5" png = "0.18.1" -tellur-core = { path = "../tellur-core", version = "0.3.0" } -tellur-plugin = { path = "../tellur-plugin", version = "0.3.0" } -tellur-renderer = { path = "../tellur-renderer", version = "0.3.0" } +tellur-core = { path = "../tellur-core", version = "0.4.0" } +tellur-plugin = { path = "../tellur-plugin", version = "0.4.0" } +tellur-renderer = { path = "../tellur-renderer", version = "0.4.0" } [[example]] name = "demo_timeline_plugin" @@ -41,4 +41,4 @@ name = "timeline_showcase" crate-type = ["cdylib"] [dev-dependencies] -tellur-plugin = { path = "../tellur-plugin", version = "0.3.0" } +tellur-plugin = { path = "../tellur-plugin", version = "0.4.0" } diff --git a/tellur-plugin/Cargo.toml b/tellur-plugin/Cargo.toml index 39d404d..8b7fbc6 100644 --- a/tellur-plugin/Cargo.toml +++ b/tellur-plugin/Cargo.toml @@ -9,4 +9,4 @@ description = "Plugin ABI for loading tellur timelines as dynamic libraries" build = "build.rs" [dependencies] -tellur-core = { path = "../tellur-core", version = "0.3.0" } +tellur-core = { path = "../tellur-core", version = "0.4.0" } diff --git a/tellur-renderer/Cargo.toml b/tellur-renderer/Cargo.toml index dcdaab1..460b559 100644 --- a/tellur-renderer/Cargo.toml +++ b/tellur-renderer/Cargo.toml @@ -36,7 +36,7 @@ lru = "0.12" pollster = "0.3" rustc-hash = "1.1.0" sysinfo = { version = "0.32", default-features = false, features = ["system"] } -tellur-core = { path = "../tellur-core", version = "0.3.0" } +tellur-core = { path = "../tellur-core", version = "0.4.0" } thiserror = "2.0.18" tiny-skia = "0.12.0" vello = "0.2.1" diff --git a/tellur/Cargo.toml b/tellur/Cargo.toml index f3f04c0..68c3051 100644 --- a/tellur/Cargo.toml +++ b/tellur/Cargo.toml @@ -25,10 +25,10 @@ latex = ["tellur-core/latex", "tellur-renderer?/latex"] cli = ["dep:clap", "dep:cargo_metadata", "dep:toml_edit", "dep:tellur-live", "renderer"] [dependencies] -tellur-core = { path = "../tellur-core", version = "0.3.0" } -tellur-plugin = { path = "../tellur-plugin", version = "0.3.0" } -tellur-renderer = { path = "../tellur-renderer", version = "0.3.0", optional = true } -tellur-live = { path = "../tellur-live", version = "0.3.0", optional = true } +tellur-core = { path = "../tellur-core", version = "0.4.0" } +tellur-plugin = { path = "../tellur-plugin", version = "0.4.0" } +tellur-renderer = { path = "../tellur-renderer", version = "0.4.0", optional = true } +tellur-live = { path = "../tellur-live", version = "0.4.0", optional = true } clap = { version = "4", features = ["derive"], optional = true } cargo_metadata = { version = "0.18", optional = true } toml_edit = { version = "0.22", optional = true }