mirror of
https://github.com/storytold/vectorcraft.git
synced 2026-10-24 09:46:59 -06:00
PDF import: keep one tracking value on letters whose file widths round off the installed font's advances
Cause: place_each (crates/pdf/src/import_text.rs, #3715) works out each character's tracking as the file's distance between glyph origins minus the installed font's advance. A PDF gives widths to the thousandth of an em (the standard-14 AFM metrics or /Widths), so with a font of 2048 units an em (Helvetica on macOS) every character is a hair (~0.0002 em) off. When the line isn't evenly spaced as a whole (a TJ word gap, a space read from a gap), `even` keeps every character's own value, rounding noise included, and restyled() splits the line into a run per character. text_becomes_point_type failed on macOS; Linux CI passed because Helvetica isn't installed there, its stand-in's widths differ by more than 1% and place_each falls back to the line-wide fit. Change: measure the spacing from the file's own widths: each character's pen is moved by how much wider the file says the characters before it are than the font's advances, where the file gives the character's width and the layout sets it as a glyph of its own. The tracking is then the file's (Tc, Tw, TJ), whatever font is installed; the layout check that the glyphs land within 0.02 em of the file's places is unchanged. Verification: text_becomes_point_type and all of tests_text_placement pass on macOS. New test widths_rounded_off_the_installed_fonts_advances_keep_one_tracking uses built-in Inter (non-embedded, widths rounded to thousandths), so it doesn't depend on system fonts; without the fix it fails on any platform with runs N/e/x/t/ /li/n/e/ /h/e/re. cargo xtask ci: all 10 steps passed.
This commit is contained in:
committed by
bflatastic
parent
5c3db3cef8
commit
b87cda7d4b
@@ -130,6 +130,7 @@ the app's own editing copy of a file (an EPS after its `%%EOF`, a `.ai`'s `AIPri
|
||||
|
||||
| Date | Change | Summary |
|
||||
|---|---|---|
|
||||
| 2026-10-23 | minor | PDF import: a line's spacing is measured from the file's own glyph widths, so type in a font the file doesn't carry, drawn with an installed font whose advances its widths round off (Helvetica on macOS: 2048 units an em), keeps one tracking value on its letters instead of a run per character (#722 follow-up); test with built-in Inter, independent of the fonts installed; scores and hours unchanged |
|
||||
| 2026-10-22 | minor | EPS import: a CR LF ending after `readline` counts as one line ending (PostScript Language Reference §3.8), so counted metadata that follows it is no longer shifted by a byte and the editable vectors import instead of the preview; scores and estimates unchanged. |
|
||||
| 2026-10-21 | minor | PDF export: flattening for PDF/X-1a and PDF/X-3 in a CMYK document draws the areas it rasterizes as ink amounts (a CMYK image), so a CMYK colour under an image with see-through pixels keeps its numbers, K included, instead of going through RGB and back (#2160); own-fixture test; scores and hours unchanged |
|
||||
| 2026-10-21 | minor | EPS and `.ai` editing data: type with an art style of several fills or strokes, effects on a fill (Offset Path, Transform with copies, Drop Shadow, Gaussian Blur, Bas Relief), pattern and gradient fills, per-fill blend modes and a Warp comes in as type with that live appearance instead of its drawn look (outlines), the style read as a tree of filters; other objects keep the rule for plain styles. Point type whose frame has no matrix (written so by newer files) is read; such stories were left out. Where a styled object's drawn look lay, the page isn't held to look like VectorCraft's drawing of the style. `editingData: "always"` also opens an Illustrator EPS from its editing data. Own-fixture tests; a user's file used locally only; scores and hours unchanged |
|
||||
|
||||
Reference in New Issue
Block a user