rust_widgets 2.8.1

Pure Rust cross-platform native GUI library with hardware-adaptive rendering, 180 widgets, touch/gesture support, i18n, and SVG-pipeline-accurate output
NOTICE
======

This repository is licensed under the MIT licence (see `LICENSE`). It also
bundles the third-party material recorded below, whose licence differs from the
project's own. Each section describes one inclusion: what is included, where it
came from, under which licence, and what was changed. Append a new
clearly-delimited section rather than editing an existing one.

================================================================================
GNU Unifont 16.0.01 — 16x16 bitmap CJK subset
================================================================================

Included file
    src/render/text/cjk_bitmap_data.rs

Origin
    GNU Unifont 16.0.01 — the **bitmap** (`.hex`) build, not the OTF.
    Unifont is by Roman Czyborra, Paul Hardy, and contributors.
    Project:  https://unifoundry.com/unifont/index.html
    Source:   https://unifoundry.com/pub/unifont/unifont-16.0.01/font-builds/unifont-16.0.01.hex.gz
    SHA-256 of the decompressed `.hex`:
        3b9d881d534c4144cd9865a47a7667760e33a571a45794a5334c16a72cb8f839

    The file is generated, never hand-edited. Regenerate with:
        python3 tools/gen_cjk_bitmap.py --license=ofl-1.1

What it is
    A **subset** of the Unifont 16x16 bitmap glyphs, reduced to the codepoint
    ranges listed below and re-encoded as two Rust arrays (`CODEPOINTS`, `ROWS`).
    The bitmap bits are Unifont's, copied verbatim; no glyph was redrawn or
    re-rasterised, and no outline was autohinted. Glyphs that Unifont stores
    8 px wide are left-aligned in a 16 px cell.

Codepoint ranges included
    U+3000..=U+303F   CJK Symbols and Punctuation         64 glyphs
    U+3040..=U+30FF   Hiragana and Katakana              192 glyphs
    U+4E00..=U+5548   CJK Unified Ideographs (subset)   1865 glyphs
    U+FF00..=U+FFEF   Halfwidth and Fullwidth Forms      240 glyphs
    ------------------------------------------------------------------
    Total 2361 glyphs (84996 bytes of array data: ROWS 75552 + CODEPOINTS 9444).
    ASCII (U+0000..=U+007F) is deliberately excluded.

Licence
    Unifont is dual-licensed by its copyright holders. Either of the following
    applies:

    (a) SIL Open Font License, Version 1.1
        https://openfontlicense.org/

    (b) GNU General Public License, Version 2.0 or later, with the GNU font
        embedding exception
        https://www.gnu.org/licenses/gpl-2.0.html
        https://www.gnu.org/licenses/gpl-faq.html#FontException

    Unifont's own licence file: https://unifoundry.com/LICENSE.txt

Reserved Font Name (OFL)
    Unifont's licence states only that the fonts are "covered by the SIL Open Font
    License version 1.1"; it names no Reserved Font Name, so OFL 1.1 §3 imposes no
    naming restriction here. Independently of that, this subset is a "Modified
    Version" (it retains only a portion of Unifont's glyphs and re-encodes them), and
    nothing in the shipped tree presents itself as the original font: the file is
    named `cjk_bitmap_data.rs` and the arrays are `CODEPOINTS` and `ROWS`. The name
    "Unifont" appears in this NOTICE and in the generated file's header for
    attribution only.

================================================================================
Open Sans — vector subset for `fonts-vector-latin`
================================================================================

Included files
    src/render/text/font_assets/latin.rs    (the provenance header and `include_bytes!`)
    src/render/text/font_assets/latin.ttf   (the subset itself)

Origin
    Open Sans, by Steve Matteson and the Open Sans project (originally
    commissioned by Google).
    Project:  https://fonts.google.com/specimen/Open+Sans
    Source:   https://github.com/google/fonts/blob/main/ofl/opensans/OpenSans%5Bwdth,wght%5D.ttf
    SHA-256 of the upstream `.ttf`:
        36643644f318a812aab2d2ed3bb98f8cf0872527f835fe9398d95fe6b9adb878

    The files are generated, never hand-edited. Regenerate with:
        python3 tools/gen_font_subset.py --face=latin --license=ofl-1.1

What it is
    A **subset** of Open Sans, instantiated from the variable font at
    `wdth=100, wght=400` and reduced to ASCII printable, the Latin-1 supplement
    and the punctuation a label uses. No outline was redrawn, re-hinted or
    modified; the glyph outlines and the layout tables (GSUB, GPOS — including
    kerning) are Open Sans's own.

Licence
    SIL Open Font License, Version 1.1
        https://openfontlicense.org/

Reserved Font Name (OFL)
    The upstream licence declares **no** Reserved Font Name: its copyright
    statement is followed by no name specification, so OFL 1.1 §3 imposes no naming
    restriction on this subset. The files are nonetheless named after this crate's
    modules (`latin.rs` / `latin.ttf`) rather than after the upstream family, so
    nothing in the shipped tree presents itself as the original font.

================================================================================
Noto Naskh Arabic — vector subset for `fonts-complex`
================================================================================

Included files
    src/render/text/font_assets/arabic.rs    (the provenance header and `include_bytes!`)
    src/render/text/font_assets/arabic.ttf   (the subset itself)

Origin
    Noto Naskh Arabic, by the Noto project (Google).
    Project:  https://fonts.google.com/noto/specimen/Noto+Naskh+Arabic
    Source:   https://github.com/google/fonts/blob/main/ofl/notonaskharabic/NotoNaskhArabic%5Bwght%5D.ttf
    SHA-256 of the upstream `.ttf`:
        67b5a525a661b607971fbd3f96a81b89d3a768e74534fca84f18ac97e6fab72f

    The files are generated, never hand-edited. Regenerate with:
        python3 tools/gen_font_subset.py --face=arabic --license=ofl-1.1

What it is
    A **subset** of Noto Naskh Arabic, instantiated at `wght=400` and reduced to
    the Arabic block (letters, marks, digits), the six zero-width and directional
    controls and ASCII. The contextual forms are **not** stored as data: they are
    produced at shaping time from the retained `GSUB` joining features, which are
    part of the subset. No outline was redrawn or re-hinted.

Licence
    SIL Open Font License, Version 1.1
        https://openfontlicense.org/

Reserved Font Name (OFL)
    The upstream licence declares **no** Reserved Font Name: its copyright
    statement is followed by no name specification, so OFL 1.1 §3 imposes no naming
    restriction on this subset. The files are nonetheless named after this crate's
    modules (`arabic.rs` / `arabic.ttf`) rather than after the upstream family, so
    nothing in the shipped tree presents itself as the original font.

================================================================================
Noto Color Emoji — colour bitmap subset for `fonts-emoji-color`
================================================================================

Included files
    src/render/text/font_assets/emoji.rs     (the provenance header and `include_bytes!`)
    src/render/text/font_assets/emoji.ttf    (the subset itself)

Origin
    Noto Color Emoji, by the Noto project (Google).
    Project:  https://github.com/googlefonts/noto-emoji
    Source:   https://raw.githubusercontent.com/googlefonts/noto-emoji/main/2D/fonts/NotoColorEmoji.ttf
    SHA-256 of the upstream `.ttf`:
        15671215ab769fdc7162a045d56fd7d7e477c51b04e6b3c761d914d8fdd6cc44

    The files are generated, never hand-edited. Regenerate with:
        python3 tools/gen_emoji_subset.py --license=ofl-1.1

What it is
    A **subset** of Noto Color Emoji, reduced to the 317 codepoints listed in
    `tools/emoji_subset_codepoints.txt`. Noto Color Emoji stores its glyphs as
    **colour bitmaps**, not outlines: each glyph is a PNG held in the `CBDT`
    table and indexed by `CBLC`. The subset retains those tables and the PNG
    images **verbatim** — no image was redrawn, re-encoded, rescaled or
    re-compressed, and no outline was synthesised. The generator runs fontTools'
    subsetter with `recalc_timestamp=False`, so the retained tables are
    byte-identical to upstream and the output is reproducible.

    The codepoints were chosen by hand (faces, gestures, food, animals, symbols
    and the 26 regional indicators), not by taking everything upstream: the full
    face is 10,730,124 bytes and this subset is 1,602,492 bytes, which is what
    makes it shippable. `--check` verifies the shipped bytes are exactly what the
    generator produces from the pinned upstream digest.

Licence
    SIL Open Font License, Version 1.1
        https://openfontlicense.org/

Reserved Font Name (OFL)
    Noto Color Emoji's licence declares **no** Reserved Font Name: its copyright
    statement is followed by no name specification, so OFL 1.1 §3 imposes no naming
    restriction on this subset. The files are nonetheless named after this crate's
    modules (`emoji.rs` / `emoji.ttf`) rather than after the upstream family, and
    the subset is a "Modified Version" (it retains only a portion of the upstream
    glyphs), so nothing in the shipped tree presents itself as the original font.
    The name "Noto Color Emoji" appears in this NOTICE and in the generated file's
    header for attribution only.

================================================================================
Noto Sans SC — scalable CJK vector subset for `fonts-cjk`
================================================================================

Included files
    src/render/text/font_assets/cjk.rs      (the provenance header and `include_bytes!`)
    src/render/text/font_assets/cjk.ttf     (the subset itself)

Origin
    Noto Sans SC, by the Noto project (Adobe and Google).
    Project:  https://github.com/notofonts/noto-cjk
    Source:   https://raw.githubusercontent.com/notofonts/noto-cjk/main/Sans/SubsetOTF/SC/NotoSansSC-Regular.otf
    SHA-256 of the upstream `.otf`:
        faa6c9df652116dde789d351359f3d7e5d2285a2b2a1f04a2d7244df706d5ea9

    The files are generated, never hand-edited. Regenerate with:
        python3 tools/gen_font_subset.py --face=cjk --license=ofl-1.1

What it is
    A **subset** of Noto Sans SC (Regular), reduced to the codepoints listed in
    `tools/cjk_vector_codepoints.txt`: ASCII, CJK Symbols and Punctuation, Hiragana
    and Katakana, Halfwidth and Fullwidth Forms, and the first 800 CJK Unified
    Ideographs. No outline was redrawn, re-hinted or modified; the glyph outlines
    and the layout tables (GSUB, GPOS) are Noto Sans SC's own. The upstream
    `SubsetOTF` release is already a single weight, so there is no variable axis to
    instantiate. The generator runs fontTools' subsetter with
    `recalcTimestamp=False`, so the retained tables are byte-identical to upstream
    and the output is reproducible.

    This face is **distinct from** `src/render/text/cjk_bitmap_data.rs`
    (`fonts-cjk-bitmap`). They are two answers to the same script and they are not
    interchangeable:

        fonts-cjk-bitmap   2361 glyphs, fixed 16x16 bitmap   ~85 KB
        fonts-cjk          2053 glyphs, outlines, any size   ~353 KB

    An outline is several times a 16x16 bitmap, so a vector subset at the bitmap's
    own coverage weighs 581 KB — about 7x. The bitmap face is therefore what
    `mini`/`embedded` use (data only, no shaping engine), and this face is for a
    `desktop`/`tablet` host that wants Chinese antialiased at any pixel size.
    `tools/gen_font_subset.py` enforces a 400,000-byte budget on this face so the
    payload cannot creep unnoticed.

Licence
    SIL Open Font License, Version 1.1
        https://openfontlicense.org/

Reserved Font Name (OFL)
    Noto Sans SC's licence declares **no** Reserved Font Name: its copyright
    statement is followed by no name specification, so OFL 1.1 §3 imposes no naming
    restriction on this subset. The files are nonetheless named after this crate's
    modules (`cjk.rs` / `cjk.ttf`) rather than after the upstream family, and the
    subset is a "Modified Version" (it retains only a portion of the upstream
    glyphs), so nothing in the shipped tree presents itself as the original font.
    The name "Noto Sans SC" appears in this NOTICE and in the generated file's
    header for attribution only.

================================================================================
Noto Sans SC (sharded) — unicode-range subsets for `fonts-cjk-shards`
================================================================================

Included files
    src/render/text/font_assets/cjk_shards.rs             (the shard index, generated)
    src/render/text/font_assets/cjk_shard_latin.rs/ttf    (the Latin shard)
    src/render/text/font_assets/cjk_shard_symbols.rs/ttf  (the CJK Symbols and Punctuation shard)
    src/render/text/font_assets/cjk_shard_kana.rs/ttf     (the kana shard)
    src/render/text/font_assets/cjk_shard_han.rs/ttf      (the Han shard)
    src/render/text/font_assets/cjk_shard_fullwidth.rs/ttf (the fullwidth-forms shard)

Origin
    Noto Sans SC, by the Noto project (Adobe and Google). The **same** upstream
    revision as the `fonts-cjk` face above:
        https://raw.githubusercontent.com/notofonts/noto-cjk/main/Sans/SubsetOTF/SC/NotoSansSC-Regular.otf
        SHA-256 of the upstream `.otf`:
            faa6c9df652116dde789d351359f3d7e5d2285a2b2a1f04a2d7244df706d5ea9

    The files are generated, never hand-edited. Regenerate with:
        python3 tools/gen_cjk_shards.py --license=ofl-1.1

What it is
    The `fonts-cjk` face's codepoints, **partitioned** on Unicode block boundaries
    rather than shipped as one file. The union of the shards is exactly
    `tools/cjk_vector_codepoints.txt` — the same coverage as `cjk.ttf` — and
    `tools/check_cjk_shards_cover_the_face.sh` asserts that equality codepoint for
    codepoint, so the sharded build and the one-face build render the same
    characters. The boundaries are declared in `tools/cjk_vector_shards.txt`.

    Sharding is a *packaging* of the same payload, not a different subset: a host
    that draws one script (say Japanese) can enable `fonts-cjk-shard-kana` and load
    only that shard, instead of carrying every CJK glyph the face contains. Each
    shard is a separate `include_bytes!` behind its own `fonts-cjk-shard-<id>`
    feature; the total when every shard is enabled (411,180 bytes) is slightly
    larger than the one-face build (361,704 bytes) because each subset carries its
    own copy of the shared layout tables. No outline or layout table was modified.

Licence
    SIL Open Font License, Version 1.1
        https://openfontlicense.org/

Reserved Font Name (OFL)
    As for `fonts-cjk` above, Noto Sans SC declares no Reserved Font Name; the shard
    files are named after this crate's modules and the shard id, not after the
    upstream family. The name "Noto Sans SC" appears in this NOTICE and in the
    generated file headers for attribution only.

================================================================================
Material Symbols — SVG path subsets for `icons`
================================================================================

Included files
    tools/material_symbols/*.svg                 (the vendored upstream outlines, one per icon)
    tools/material_symbols/LICENSE               (the upstream licence copy)
    tools/material_symbols/UPSTREAM_HAS_NO_NOTICE (a probe result, see below)
    src/widget/icon_data.rs                      (the generated table)
    src/widget/icon_fallback_data.rs             (the generated fallback geometry)

Origin
    Material Symbols, by Google LLC.
    Project:  https://github.com/google/material-design-icons
    Pin:      commit bd8cb85bd4bad964fe6918f79665bb40c3a8efef (master @ 2026-09-25)
    Style:    symbols/web/<name>/materialsymbolsoutlined/<name>_24px.svg
    SHA-256 of the upstream LICENSE at the pinned commit:
        58d1e17ffe5109a7ae296caafcadfdbe6a7d176f0bc4ab01e12a689b0499d8bd

    The files are vendored, never hand-fetched. Refresh with:
        python3 tools/vendor_material_symbols.py --refresh

What it is
    The **SVG path data** (`d`) of one outline per icon this crate names — not the
    icon font, and not a rendering of it. Each `d` is copied **verbatim**: no outline
    was redrawn, simplified, re-encoded or otherwise altered, so the shipped geometry
    is upstream's to the byte. `src/widget/icon_data.rs` is generated from the
    vendored files and is never hand-edited:
        python3 tools/gen_icon_data.py            # write the table
        python3 tools/gen_icon_data.py --check    # verify it is current

    The data is behind the `icons` feature, which is **on by default**: a plain
    `cargo build` gets these outlines. It is deliberately absent from every device
    profile, because `mini` and `embedded` are sized builds where a payload the caller
    did not ask for is wrong; a profile build that wants icons says
    `--features mini,icons`. A build without the feature draws `src/widget/icon_fallback_data.rs`,
    which is a coarse flattening of the **same** `d` strings — derived, not copied — so
    the fallback and the data cannot describe different shapes for one icon. The
    fallback table is generated by the same command as the data table and is compiled
    on every build (it is what a build without `icons` draws).

Licence
    Apache License, Version 2.0
        https://www.apache.org/licenses/LICENSE-2.0

    Obligations, and how each is met:
        §4(a) licence copy     tools/material_symbols/LICENSE
        §4(b) mark changes     the generated file carries a GENERATED header naming the
                               source and the pinned revision; no `d` was modified
        §4(c) keep notices     this NOTICE section
        §4(d) upstream NOTICE  upstream at the pinned revision ships **no** NOTICE file,
                               so this obligation is not triggered. The fact is recorded
                               in tools/material_symbols/UPSTREAM_HAS_NO_NOTICE and
                               asserted by tools/check_icon_licences.sh, so an upstream
                               that later adds one is caught rather than silently dropped.
        §6    trademarks       "Material Symbols" appears only here and in the generated
                               header, for attribution; it is not used as a product name.