mirror of
https://github.com/storytold/vectorcraft.git
synced 2026-11-15 07:10:13 +00:00
EMF and WMF import now plays the records with the shared craft-metafile reader (storytold/craft-libs#778, at the craft-libs rev the SVG, EPS and DXF crates already use) and maps its picture onto the document here: paths with their fills, strokes, caps, joins, miter limits and dashes, clipping groups, images and point type. The EMF and WMF record players in crates/metafile/src/import and the DIB decoder they used are removed. The writers are unchanged, and the PICT reader keeps its own player. What changes for a file being opened, placed or pasted, and for an EPS file's Windows metafile preview (read when its PostScript can't be): - An EMF that draws with EMF+ records is read from them. It opened empty, with a warning that EMF+ is not read. A file with both kinds of record is read from its EMF+ records too. - Hatched and pattern brushes fill with the average color of the brush's tile, translucent where the tile has gaps. Hatches filled with the hatch color and pattern brushes with gray. - Translucent fills, strokes and EMF+ text keep their alpha as opacity. - Text keeps a stretch across from the world transform; it kept only the turn. Text the file clips to a rectangle is clipped to it, and an underlined or struck-through font gives underlined or struck-through type. - A clip path whose bounding box holds the whole picture is kept unless it is that rectangle; a diamond or a bow tie around the picture was dropped. - Images drawn with SRCAND, SRCPAINT or SRCINVERT are drawn as they look over white, and images drawn with other raster operations are drawn as a plain copy. They were left out with a warning. - Excluded clip rectangles and the other clip region modes are applied. A clip path combined with RGN_OR, RGN_XOR or RGN_DIFF is ignored without the warning it gave. - An image past the reader's size or pixel limits, or one that can't be decoded, is left out without a warning of its own. A file past the reader's limits (more than 32 nested clip paths, 200,000 drawn items, 256 MiB held) is read up to that point without a warning. - An EMF record whose size is not a multiple of 4 ends the file, with the "ends early" warning. Tests: an EMF+ only picture imports its fill (it failed before), a dual EMF+ file draws its translucent EMF+ fill and not its fallback, hatch and pattern brush colors, clipped and underlined text, excluded clip rectangles, a shared clipping group, an odd record size, WMF at 1440 units an inch without a placeable header and at its own units with an inverted box, an EMF without a frame, diamond and bow-tie clips, text with a stretch, clips nested past the stack and 200,000 clip records; the fuzz test gains random EMF+ records.
25 lines
847 B
TOML
25 lines
847 B
TOML
[package]
|
|
name = "vectorcraft-metafile"
|
|
version.workspace = true
|
|
edition.workspace = true
|
|
license.workspace = true
|
|
description = "VectorCraft metafiles: hand-written EMF and WMF writers, EMF, EMF+ and WMF import through craft-metafile, and a QuickDraw picture (PICT) reader"
|
|
|
|
[lints]
|
|
workspace = true
|
|
|
|
[dependencies]
|
|
vectorcraft-geom = { workspace = true }
|
|
vectorcraft-color = { workspace = true }
|
|
vectorcraft-doc = { workspace = true }
|
|
vectorcraft-effects = { workspace = true }
|
|
vectorcraft-brush = { workspace = true }
|
|
vectorcraft-text = { workspace = true }
|
|
craft-metafile = { workspace = true }
|
|
kurbo = { workspace = true }
|
|
image = { workspace = true }
|
|
|
|
[dev-dependencies]
|
|
# The tests lay type out in the bundled fonts (the workspace leaves turning them on to the engine).
|
|
vectorcraft-text = { workspace = true, features = ["bundled-fonts"] }
|