Files
filmcraft/crates/ui-egui/Cargo.toml
seif cfe0c751e9 #395: Arabic and Hebrew in the interface: fallback fonts, captions in reading order
The interface had no face for Arabic or Hebrew, so caption text, track and media names showed
missing-glyph boxes in the Text panel and on the timeline while the Program monitor drew them.
crates/ui-egui/src/rtl.rs adds the craft-fonts Arab / Hebr faces, else one installed face per
script (Noto Sans Arabic, SF Arabic, Segoe UI...), as the last fallbacks of every UI font family,
as cjk.rs does for Chinese.

egui already shapes each font run with harfrust, so the letters join, but it lays runs out left to
right with no bidi pass and multi-word Arabic read backwards. rtl::Lines lays captions out in
reading order: lines are broken on the logical text as egui wraps it, each line is reordered with
unicode-bidi (UAX #9, as crates/text does for titles) and every right-to-left word is its own
layout section for egui's shaper. Caption blocks on the timeline and the Text panel caption list
use it; a caption being edited keeps egui's logical order, since TextEdit places the caret by
character index. Left-to-right text is laid out exactly as before.
2026-10-11 13:14:30 -06:00

61 lines
2.3 KiB
TOML

[package]
name = "filmcraft-ui-egui"
description = "The FilmCraft egui frontend (swappable): panels, docking, timeline, monitors, control channel"
version.workspace = true
edition.workspace = true
license.workspace = true
rust-version.workspace = true
[lints]
workspace = true
[dependencies]
craft-ui = { workspace = true }
filmcraft-time = { workspace = true }
filmcraft-geom = { workspace = true }
filmcraft-color = { workspace = true }
filmcraft-frame = { workspace = true }
filmcraft-media = { workspace = true }
filmcraft-project = { workspace = true }
filmcraft-tts = { workspace = true }
filmcraft-edit = { workspace = true }
filmcraft-render = { workspace = true }
filmcraft-text = { workspace = true }
filmcraft-audio-dsp = { workspace = true }
filmcraft-engine = { workspace = true }
filmcraft-export = { workspace = true }
filmcraft-gpu = { workspace = true }
filmcraft-scopes = { workspace = true }
egui = { workspace = true }
eframe = { workspace = true, features = ["default_fonts", "wgpu", "accesskit"] }
serde = { workspace = true }
serde_json = { workspace = true }
log = { workspace = true }
rayon = { workspace = true }
web-time = "1"
# Unicode Bidirectional Algorithm for Arabic and Hebrew captions in reading order (MIT OR Apache-2.0).
unicode-bidi = "0.3.18"
# ArtCraft wordmark (PNG) for the About dialog and Home screen.
image = { version = "0.25", default-features = false, features = ["png"] }
# Thread/process CPU clocks for frame-job profiling (safe wrappers; see frames.rs).
[target.'cfg(unix)'.dependencies]
rustix = { version = "1", default-features = false, features = ["std", "time"] }
# the same clocks on Windows (GetThreadTimes / GetProcessTimes behind a safe API; MIT OR Apache-2.0)
[target.'cfg(windows)'.dependencies]
cpu-time = "1"
[dev-dependencies]
pollster = "0.4"
filmcraft-codecs = { workspace = true }
# the bench registers OS hardware decoders as the desktop app does (dev-dependency only: ui-egui
# itself stays OS-independent and web-portable)
filmcraft-platform = { workspace = true }
filmcraft-interchange = { workspace = true }
egui_kittest = { workspace = true, features = ["eframe", "wgpu"] }
# build.rs bakes contributors/contributors.json into the binary (About ▸ Contributors).
[build-dependencies]
serde_json = { workspace = true }
toml = "1"