deckcraft/docs
Brandon Thomas 0440b7e054 Metafiles draw their text, pattern and hatch brushes
deckcraft-metafile (still kurbo + thiserror only, so it builds for wasm):
- Text: WMF EXTTEXTOUT/TEXTOUT and EMF EXTTEXTOUTW/EXTTEXTOUTA/SMALLTEXTOUT with the
  selected font (CREATEFONTINDIRECT, EXTCREATEFONTINDIRECTW: face, signed LOGFONT height,
  width, weight, italic, underline, strike-out, escapement, charset), text and background
  colour, background mode, TA_* alignment and TA_UPDATECP, the dx array (ETO_PDY pairs too),
  ETO_OPAQUE fills and ETO_CLIPPED clips. 8-bit strings decode through their charset
  (Windows-1252/1250/1251; symbol fonts keep their codes at U+F000; double-byte sets keep
  their advances). The neutral Item::Text carries a text-space-to-picture transform, so the
  mapping and escapement are folded in and glyphs are never mirrored.
- Brushes: WMF DIBCREATEPATTERNBRUSH, EMF CREATEDIBPATTERNBRUSHPT and CREATEMONOBRUSH, and
  BS_HATCHED, as Item::Pattern tiles in 96-dpi pixels; WMF PATBLT. The XOR / AND-pattern /
  XOR see-through shadow of old PowerPoint WMFs draws its pattern in the XOR colour.
- MFCOMMENT escapes with an embedded EMF are ignored: PowerPoint draws the WMF's records.
- Pattern pixels and text count against the byte budget; strings are capped.

deckcraft-render draws text through deckcraft-fonts with the face slide text would use
(document_face), symbol fonts mapped as bullets map them (deckcraft_text::symbol_char, now
public, with Webdings), per-character fallback, the file's advances, GDI cell metrics for
top/bottom alignment, underline/strike-out and synthetic bold/italic. Tiles below 1.5 output
pixels per cell are drawn as their average colour.

On the 24 corpus slides that show a metafile, mean abs diff against PowerPoint goes from
28.31 to 5.06 (with the OLE/ActiveX preview commits).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-12 22:38:41 -04:00
..
brand Rename SlideCraft to DeckCraft: crates, apps, binaries, app id, file extension (.deckcraft; .slidecraft files still open), packaging, docs; ROADMAP alpha and parity estimates 2026-10-06 01:46:40 -04:00
images README: screenshots, feature overview and alpha/parity summary; docs use control port 7990 2026-10-06 02:01:34 -04:00
animation-parity.md Progress docs: target-app parity, gaps, alpha gate, readiness by audience (#89) 2026-10-10 14:09:21 -04:00
architecture.md Shapes: add 38 missing preset geometries (#315) 2026-10-12 18:15:54 -04:00
contributors.md About: contributor and model credits compiled in (grab bag + table, self-submitted names) (#3) 2026-10-07 21:16:38 -04:00
control-protocol.md Korean, Japanese and Chinese: input-method composition and interface text (#101) (#331) 2026-10-12 22:03:42 -04:00
file-format-parity.md Metafiles draw their text, pattern and hatch brushes 2026-10-12 22:38:41 -04:00
gaps.md Metafiles draw their text, pattern and hatch brushes 2026-10-12 22:38:41 -04:00
hardware-parity.md Korean, Japanese and Chinese: input-method composition and interface text (#101) (#331) 2026-10-12 22:03:42 -04:00
localization-parity.md Korean, Japanese and Chinese: input-method composition and interface text (#101) (#331) 2026-10-12 22:03:42 -04:00
mcp.md Rename SlideCraft to DeckCraft: crates, apps, binaries, app id, file extension (.deckcraft; .slidecraft files still open), packaging, docs; ROADMAP alpha and parity estimates 2026-10-06 01:46:40 -04:00
parity-checklist.md Text: WordArt transforms (prstTxWarp) draw, and their adjusts round-trip (#312) 2026-10-12 18:12:58 -04:00
roadmap.md Pictures: WMF and EMF draw, with the metafile reader ported from WordCraft (#317) 2026-10-12 18:27:19 -04:00
slideshow-parity.md Progress docs: target-app parity, gaps, alpha gate, readiness by audience (#89) 2026-10-10 14:09:21 -04:00
target-app-parity.md Shapes: add 38 missing preset geometries (#315) 2026-10-12 18:15:54 -04:00
ui-parity.md Text: Ctrl+arrows, Ctrl+Backspace/Delete and other text keys work like PowerPoint (#268) (#333) 2026-10-12 22:09:50 -04:00