fix(components): factor typeface resolution and stop panicking on missing fonts#28
Merged
Merged
Conversation
Replace ~32 duplicated match_family_style fallback chains and every
panicking resolution (.expect("No fallback font"), panic!("No fonts
available")) with the existing typeface_with_fallback helper. On the
essentially-unreachable FontNotFound, painters now skip the affected
text instead of crashing the render; font helpers return Option and
callers bail out with balanced canvas save/restore.
18 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #8.
Goal: rendering never panics because a font is missing; one shared resolution path.
match_family_style(...).or_else(Helvetica).or_else(Arial)chains across 37 files replaced by the existingtypeface_with_fallback(already re-exported fromrenderer, already documented "use this instead of .expect" — it just wasn't used)panic!("No fonts available")incodeblock/highlight.rs(its JetBrains Mono → Fira Code → … monospace preference chain is preserved; only the tail changed)FontNotFound(essentially unreachable): painters skip the affected text — font helpers returnOption, callers bail with balancedcanvas.save()/restore()(comparison.rsrestores before returning;terminal.rs/table.rs/notification.rsresolve fonts before saving)rich_textspans resolve per-span (filter_map) so one unresolvable span doesn't abort the whole paintVerify:
cargo test --workspace→ 133 passed ✓ ·cargo fmt --check✓ · clippy 0 warnings ✓ · grep: no panicking font resolution remains ✓