mirror of
https://github.com/storytold/filmcraft.git
synced 2026-11-02 14:37:31 -06:00
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.
61 lines
2.3 KiB
TOML
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"
|