icu_tool
v0.3.0 - 2026-07-09
v0.3.0
Jul 10 2026 at 06:31 UTC
๐ Version Tag
- ๐ New Features:
- โจ mirx image format support โ icu now decodes and encodes mirx FLAT images (all pixel formats: RGB565 / RGB565Swapped / RGB888 / RGBA8888 / BGRA8888 / XRGB8888) plus mirx CHUNK files with VECTOR / FONT chunks.
icu convert -F mirxproduces mirx output;icu inforeports per-chunk metadata (op_count, glyph_count, source_size, bit_depth). - โจ TTF/OTF/TTC font parsing via
ttf-parserโicu infoon a TTF reports family, style, units_per_em, ascender, descender, line_height, glyph_count. Glyph outlines collect intomirx::PathCmd(MoveTo / LineTo / QuadTo / CubicTo / Close) with 24.8 fixed coordinates. - โจ
icu bake-fontCLI โ bakes a TTF/OTF into a mirx FONT chunk (SDF or grayscale atlas). Pipeline: ttf-parser outline โ mirui scanline coverage โ Euclidean distance transform โ 4/8-bit quantization (SDF) or packed coverage (gray). Supports--charset/--charset-file/--size/--bit-depth/--spread/--format sdf|gray. - โจ
icu merge-fontsCLI โ merges multiple single-font.mirxfiles into one multi-FONT-chunk bundle forMultiFontProvidersize-based selection at runtime. - โจ SVG import/export โ
icu info/icu show/icu convertaccept SVG. Import usesusvg(resolves<defs>,<use>,<symbol>, transform lists, style inheritance, gradients/clip-paths/masks). Export emits<path>/<rect>/<line>/<g>with fill, fill-opacity, fill-rule, stroke, stroke-width, stroke-linecap, stroke-linejoin, transform.icu convert test.svg -F mirxproduces a VECTOR chunk. - โจ
MiData::PATH/FONT/INDEXEDvariants โMiDatacarries structured data alongside the flat RGBA preview.PATH(SceneData)wrapsmirx::Scene;FONT(FontData)is an enum (Mirx(mirx::Font)|FreeType(FreeTypeFontData));INDEXED(IndexedImageData)carries palette + per-pixel indexes + bpp. - โจ Font/path/indexed viewer panels in the GUI โ
ImageItemcarries the originalMiData; central panel dispatches on variant. FONT shows metadata + preview-text input + rendered atlas; PATH shows a scene op tree; INDEXED shows a palette grid whose entries drive anIndexHoverOverlay. - โจ SDF โ Gray downsample โ
sdf_to_gray_fontsamples an SDF atlas at a target pixel size and packs coverage into an 8-bit grayscale font, no re-bake from TTF needed. - โจ Postprocess overlay framework โ
ImageOverlaytrait +OverlayStackcomposite with alpha blending and dirty-flag cache.IndexHoverOverlayhighlights palette-indexed pixels;QualityOverlayrenders a quantization-error heat map;DiffOverlaydrives the diff display. - โจ LVGL indexed decode โ I1/I2/I4/I8 color formats decode to
MiData::INDEXEDwith palette + indexes + bpp extracted before the generic RGBA conversion. - โจ ColorFormat unification โ
icu_lib::endecoder::ColorFormatis the universal enum; LVGL and mirx eachFromtheir own wire format.EncoderParams.color_formatis nowicu_lib::ColorFormat.
- โจ mirx image format support โ icu now decodes and encodes mirx FLAT images (all pixel formats: RGB565 / RGB565Swapped / RGB888 / RGBA8888 / BGRA8888 / XRGB8888) plus mirx CHUNK files with VECTOR / FONT chunks.
- ๐ง Improvements:
- ๐งน Diff display routed through
OverlayStack+DiffOverlay.ImageDiffResultstill feedsdiff_panelpixel list / min-max range. - ๐งน
icu_libre-exportsmirxandimagecrates. - ๐งน
MiData+ all variants deriveClone+PartialEq.
- ๐งน Diff display routed through
๐ฆ Dependencies
- โ
ttf-parser = "0.25"(icu_lib) - โ
usvg = { version = "0.47", default-features = false }(icu_lib; no fontdb, no text shaping โ +~510KB binary) - โ
mirx = "0.41"+mirui = { version = "0.41", default-features = false }+critical-section = { version = "1", features = ["std"] }(icu_lib)