mirror of
https://github.com/emilk/egui.git
synced 2026-06-27 07:03:14 -04:00
Replace the character-by-character glyph lookup in `layout_section()` with a proper text shaping pipeline using harfrust (a Rust port of HarfBuzz). This enables GPOS kerning, ligatures (fi, fl), and correct positioning of combining diacritical marks. The shaping pipeline works as follows: 1. Split text into font-fallback runs (grapheme-cluster-aware) 2. Shape each run with harfrust (GSUB + GPOS) 3. Allocate and position glyphs from the shaping output Key changes: - Add harfrust, unicode-segmentation, unicode-general-category deps - Cache ShaperData on FontFace (parsed GSUB/GPOS tables) - Add shape_text() with buffer flags and variable font support - Add allocate_glyph_by_id() for shaper-produced glyph IDs - Recycle harfrust UnicodeBuffer across layout calls - Handle NOTDEF fallback (combining marks via unicode-general-category) Addresses #2517.
100 lines
3.0 KiB
TOML
100 lines
3.0 KiB
TOML
[package]
|
|
name = "epaint"
|
|
version.workspace = true
|
|
authors = ["Emil Ernerfeldt <emil.ernerfeldt@gmail.com>"]
|
|
description = "Minimal 2D graphics library for GUI work"
|
|
edition.workspace = true
|
|
rust-version.workspace = true
|
|
homepage = "https://github.com/emilk/egui/tree/main/crates/epaint"
|
|
license = "MIT OR Apache-2.0"
|
|
readme = "README.md"
|
|
repository = "https://github.com/emilk/egui/tree/main/crates/epaint"
|
|
categories = ["graphics", "gui"]
|
|
keywords = ["graphics", "gui", "egui"]
|
|
include = ["../../LICENSE-APACHE", "../../LICENSE-MIT", "**/*.rs", "Cargo.toml"]
|
|
|
|
[lints]
|
|
workspace = true
|
|
|
|
[package.metadata.docs.rs]
|
|
all-features = true
|
|
rustdoc-args = ["--generate-link-to-definition"]
|
|
|
|
[lib]
|
|
|
|
|
|
[features]
|
|
default = ["default_fonts"]
|
|
|
|
## [`bytemuck`](https://docs.rs/bytemuck) enables you to cast [`Vertex`] to `&[u8]`.
|
|
bytemuck = ["dep:bytemuck", "emath/bytemuck", "ecolor/bytemuck"]
|
|
|
|
## [`cint`](https://docs.rs/cint) enables interoperability with other color libraries.
|
|
cint = ["ecolor/cint"]
|
|
|
|
## Enable the [`hex_color`] macro.
|
|
color-hex = ["ecolor/color-hex"]
|
|
|
|
## If set, epaint will use `include_bytes!` to bundle some fonts.
|
|
## If you plan on specifying your own fonts you may disable this feature.
|
|
default_fonts = ["epaint_default_fonts"]
|
|
|
|
## [`mint`](https://docs.rs/mint) enables interoperability with other math libraries such as [`glam`](https://docs.rs/glam) and [`nalgebra`](https://docs.rs/nalgebra).
|
|
mint = ["emath/mint"]
|
|
|
|
## Enable parallel tessellation using [`rayon`](https://docs.rs/rayon).
|
|
##
|
|
## This can help performance for graphics-intense applications.
|
|
rayon = ["dep:rayon"]
|
|
|
|
## Allow serialization using [`serde`](https://docs.rs/serde).
|
|
serde = ["dep:serde", "ahash/serde", "emath/serde", "ecolor/serde", "font-types/serde", "smallvec/serde"]
|
|
|
|
## Change Vertex layout to be compatible with unity
|
|
unity = []
|
|
|
|
## Override and disable the unity feature
|
|
## This exists, so that when testing with --all-features, snapshots render correctly.
|
|
_override_unity = []
|
|
|
|
[dependencies]
|
|
emath.workspace = true
|
|
ecolor.workspace = true
|
|
|
|
ahash.workspace = true
|
|
font-types.workspace = true
|
|
harfrust.workspace = true
|
|
log.workspace = true
|
|
nohash-hasher.workspace = true
|
|
parking_lot.workspace = true # Using parking_lot over std::sync::Mutex gives 50% speedups in some real-world scenarios.
|
|
profiling.workspace = true
|
|
self_cell.workspace = true
|
|
skrifa.workspace = true
|
|
smallvec.workspace = true
|
|
unicode-general-category.workspace = true
|
|
unicode-segmentation.workspace = true
|
|
vello_cpu.workspace = true
|
|
|
|
#! ### Optional dependencies
|
|
bytemuck = { workspace = true, optional = true, features = ["derive"] }
|
|
|
|
## Enable this when generating docs.
|
|
document-features = { workspace = true, optional = true }
|
|
|
|
rayon = { workspace = true, optional = true }
|
|
|
|
## Allow serialization using [`serde`](https://docs.rs/serde) .
|
|
serde = { workspace = true, optional = true, features = ["derive", "rc"] }
|
|
|
|
epaint_default_fonts = { workspace = true, optional = true }
|
|
|
|
[dev-dependencies]
|
|
criterion.workspace = true
|
|
mimalloc.workspace = true
|
|
similar-asserts.workspace = true
|
|
|
|
|
|
[[bench]]
|
|
name = "benchmark"
|
|
harness = false
|