Skip to content

[skera] Preserve radial gradients with sentinel maps and no variation store - #2340

Closed
behdad wants to merge 18 commits into
write-fonts-review-pairpos-matrixfrom
skera-review-radial-sentinels
Closed

behdad wants to merge 18 commits into
write-fonts-review-pairpos-matrixfrom
skera-review-radial-sentinels

Conversation

@behdad

@behdad behdad commented Oct 12, 2026

Copy link
Copy Markdown
Contributor

Partial instancing of a VarRadialGradient failed when its explicit map contained only NO_VARIATION_INDEX entries and its item variation store was absent. The radial constancy check required a store before resolving the sentinel mappings.

Resolve each mapping first and build a store plan only for live indices. The regression constructs a valid COLRv1/CPAL font, partially instances it, and checks that both radii and stop offsets survive.

Validation: the targeted partial-instancing regression passed. The analogous HarfBuzz table-dropping bug is fixed in harfbuzz/harfbuzz#6389; FontTools passes this case, including its pending COLR instancing PR.

Found while auditing the COLR follow-up #2316.

Depends on #2339.

Validation of the combined fixes: 1,199 Skera, Skrifa and write-fonts tests passed with Rust 1.89 and the Skera CLI enabled; 8 existing tests were ignored. Clippy with all targets/features, formatting and diff checks passed.

@behdad
behdad force-pushed the skera-review-radial-sentinels branch from 3202282 to 80329a5 Compare October 14, 2026 23:11
This tree is unchanged; the replacement evaluator already handles missing
variation rows. Preserve the repaired parent ancestry.

Assisted-by: OpenAI Codex
Preserve reviewed parent ancestry and each PR's existing feature changes.

Assisted-by: OpenAI Codex
Preserve the independently validated TrueType changes and all feature code.

Assisted-by: OpenAI Codex
Keep empty record counts and allocation bounds at each PR boundary.

Assisted-by: OpenAI Codex
Move the existing #2338 correction into the width-reduction PR.

Assisted-by: OpenAI Codex
Reject unsupported versions and oversized arrays before ownership.
Keep current HarfBuzz references with complete feature parameters.

Assisted-by: OpenAI Codex
Preserve zero float32 products and reject subnormal condition pinning.

Assisted-by: OpenAI Codex
Bound pairwise work after deduplication, avoid temporary pair vectors,
and keep the corrected HarfBuzz column order at introduction.

Assisted-by: OpenAI Codex
@behdad

behdad commented Oct 28, 2026

Copy link
Copy Markdown
Contributor Author

Superseded by the rebuilt, consolidated instancing stack in #2416–#2423. MATH and name-table overrides remain separately covered by #2415 and #2411.

@behdad behdad closed this Oct 28, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant