mirror of
https://github.com/storytold/vectorcraft.git
synced 2026-10-31 05:07:51 -06:00
* Shortcuts: the keymap, overrides and dispatch come from craft-keymap
The editor's catalogue (commands, UI commands, panels, tools; one tool
group per tool; show/hide commands marked as toggles) builds a
craft-keymap Keymap. UiState::shortcut_overrides is a craft_keymap
Overrides stored through keymap::stored, which writes the same map of
entry key -> one string as before, with panel: keys and VectorCraft's
spellings, so earlier versions read the file; a value that is not text
drops that entry instead of every preference.
Key presses run through craft_keymap's Dispatcher with accept filters:
keys that type text go to the one-key text path, and while the Type
tool edits only command-key chords run. Held keys repeat. Conflicts
and assignment use the crate's conflicts and set_bindings. Extra Shift
no longer falls back to the chord without it.
* Shortcuts: .kys import matches and applies through craft-keymap
The review proposes targets with craft_keymap's namematch, and Apply
hands the ready rows to craft_keymap::plan as one set, each row's
target passed as the remembered answer for its entry. The later row
takes a chord, and commands outside the set lose the chords the set
gives. Rows with one name in one block keep their own targets.
The engine's own namematch module is removed.
* Shortcuts: Cmd+, beside other hits, web Mac platform, cached dialog view
- Pin craft-keymap at 362eb59f.
- Cmd+, opens Settings on a Mac after the frame's other shortcuts run, with the
Mac read from egui's OS; drop settings_chord, which dispatch no longer used.
- The web build follows the browser's OS, so Ctrl stays Ctrl on a Mac.
- The Keyboard Shortcuts dialog keeps its keymap, row texts and conflict count
between frames while the working set is unchanged.
- Every default shortcut text becomes its entry's binding (test).
- craft-keymap counts as a UI crate for the layer check.
- Translate "too many changed shortcuts"; the parse error reuses the existing
"can't parse shortcut `{c}`" message.
* Shortcuts: the chords the operating system takes can't be assigned
The keymap reserves craft_keymap::reserved::system for its platform:
window switching and closing, and the virtual consoles off the Mac.
The Keyboard Shortcuts dialog and shortcuts.set refuse them with
"<chord> is reserved by the system", and a saved override on one keeps
the entry's default. No default shortcut uses a reserved chord.
* Shortcuts: craft-keymap at craft-libs 2eca9b3a
craft-keymap comes from storytold/craft-libs (craft-libs #164 and #186), at the rev craft-pdf
already uses. The web build keeps the browser's full platform, so Windows browsers get Windows'
reserved chords, and each platform caches its own default keymap.
71 lines
2.8 KiB
TOML
71 lines
2.8 KiB
TOML
[package]
|
|
name = "vectorcraft-ui-egui"
|
|
version.workspace = true
|
|
edition.workspace = true
|
|
license.workspace = true
|
|
description = "VectorCraft egui frontend (menus, panels, tools and canvas); swappable — nothing below depends on it"
|
|
|
|
[lints]
|
|
workspace = true
|
|
|
|
[features]
|
|
default = ["bundled-fonts", "interface-fonts"]
|
|
# The fonts vectorcraft-text bundles for documents, through the engine's `bundled-fonts`. Off, for
|
|
# an embedder that supplies every document font at run time (`vectorcraft_text::FontDb::add_font`);
|
|
# the interface's own faces are `interface-fonts`.
|
|
bundled-fonts = ["vectorcraft-engine/bundled-fonts"]
|
|
# The interface's own faces (theme.rs: Inter, Source Sans 3, JetBrains Mono, about 2 MB). Off, the
|
|
# panels and dialogs draw in egui's built-in fonts, which lack some symbols they show (→ ▾ ● ✓);
|
|
# `theme::install_fonts` binds their families either way.
|
|
interface-fonts = []
|
|
|
|
[dependencies]
|
|
craft-ui = { workspace = true }
|
|
craft-keymap = { workspace = true, features = ["egui"] }
|
|
vectorcraft-geom = { workspace = true }
|
|
vectorcraft-color = { workspace = true }
|
|
vectorcraft-doc = { workspace = true }
|
|
vectorcraft-brush = { workspace = true }
|
|
vectorcraft-render = { workspace = true }
|
|
vectorcraft-text = { workspace = true }
|
|
vectorcraft-tools = { workspace = true }
|
|
vectorcraft-engine = { workspace = true }
|
|
vectorcraft-svg = { workspace = true }
|
|
vectorcraft-effects = { workspace = true }
|
|
vectorcraft-three-d = { workspace = true }
|
|
vectorcraft-plugins = { workspace = true }
|
|
vectorcraft-pdf = { workspace = true }
|
|
vectorcraft-cad = { workspace = true }
|
|
vectorcraft-eps = { workspace = true }
|
|
vectorcraft-format = { workspace = true }
|
|
egui = { workspace = true, features = ["bytemuck"] }
|
|
# With egui's `bytemuck`: copies rendered rasters into egui images whole (`canvas::color_image`).
|
|
bytemuck = "1"
|
|
egui_extras = { workspace = true }
|
|
image = { workspace = true }
|
|
serde = { workspace = true }
|
|
serde_json = { workspace = true }
|
|
log = { workspace = true }
|
|
|
|
[target.'cfg(target_arch = "wasm32")'.dependencies]
|
|
# `now_ms` (src/lib.rs) reads the page's `performance.now()` with this crate in the web build. It is
|
|
# MIT OR Apache-2.0 and already in the build through eframe.
|
|
web-time = "1"
|
|
|
|
# The current user's id (`geteuid`): Preview in Browser uses its temporary folder only when that
|
|
# user owns it (src/dialogs/save_for_web.rs). Already in Cargo.lock (tempfile), so this adds no
|
|
# new crate.
|
|
[target.'cfg(unix)'.dependencies]
|
|
rustix = { workspace = true, features = ["std", "process"] }
|
|
|
|
[dev-dependencies]
|
|
egui_kittest = { workspace = true, features = ["wgpu", "snapshot"] }
|
|
vectorcraft-testkit = { workspace = true }
|
|
# A variable font built in code (no font file is committed).
|
|
vectorcraft-text = { workspace = true, features = ["test-fonts"] }
|
|
wat = { workspace = true }
|
|
|
|
[build-dependencies]
|
|
serde_json = { workspace = true }
|
|
toml = "1"
|