Add the library, collections, and trash views; theme from style.yaml
The UI gains the views the catalog work was building toward: a windowed
library grid with ratings and flags, the collection tree with drag-to-add,
and trash with restore. derived_sync pushes thumbnail shards and the catalog
snapshot to the server's derived folder.
Tokens now have one source of truth. build.rs reads style.yaml and generates
theme.slint into OUT_DIR, which answers every existing
`import { Theme } from "theme.slint"` unchanged, because Slint resolves
imports against the importing file's directory first and the include paths
after. Generating into OUT_DIR rather than beside the hand-written Slint is
the point: a generated file sitting in ui/ looks exactly like the files
around it that are meant to be edited, and an edit to it would survive until
the next touch of style.yaml — a bug that hides for weeks. build.rs fails
loudly if a stale ui/theme.slint exists, which would otherwise shadow the
generated one silently and make every palette change vanish with no error.
The palette moves to near-neutral dark with achromatic signalling, so the
accent means "modified" or "active" rather than "heading". Shared components
land in widgets.slint: a token that binds several values into one concept is
a component, not a row in a YAML file.
Adds an optional live-style feature that makes the tokens in-out so they can
be written at startup — a feature rather than the default because it stops
the properties being constant-folded.
serde_norway is the YAML crate: serde_yaml and serde_yml are both deprecated,
and its mappings preserve insertion order, which is what lets the generated
Slint keep the token ordering the author chose.
Assisted-by: LLM
This commit is contained in:
+28
-1
@@ -19,16 +19,43 @@ dr-plat.workspace = true
|
||||
dr-sync.workspace = true
|
||||
dr-sync-nextcloud.workspace = true
|
||||
dr-pipeline.workspace = true
|
||||
slint = { workspace = true, features = ["compat-1-2", "renderer-femtovg", "backend-winit"] }
|
||||
dr-catalog.workspace = true
|
||||
dr-thumbs.workspace = true
|
||||
# The library module writes scan results straight into the catalog, so it
|
||||
# needs the same SQLite types dr-catalog exposes.
|
||||
rusqlite.workspace = true
|
||||
# The renderer is shared, but the backend is not: winit on desktop,
|
||||
# android-activity on Android, and enabling both makes the backend selector
|
||||
# pick at random. So the backend features live on the target-specific
|
||||
# dependencies below rather than here.
|
||||
slint = { workspace = true, features = ["compat-1-2", "renderer-femtovg"] }
|
||||
wgpu.workspace = true
|
||||
anyhow.workspace = true
|
||||
log.workspace = true
|
||||
pollster.workspace = true
|
||||
# Runtime YAML only for `live-style`; release builds read the tokens the
|
||||
# Slint compiler folded in at build time and never touch style.yaml.
|
||||
serde_norway = { workspace = true, optional = true }
|
||||
|
||||
# Backend per platform. Slint already declares its android-activity backend
|
||||
# under `cfg(target_os = "android")`, so this only has to name the feature;
|
||||
# cargo resolves it away entirely on desktop.
|
||||
[target.'cfg(not(target_os = "android"))'.dependencies]
|
||||
slint = { workspace = true, features = ["backend-winit"] }
|
||||
|
||||
[target.'cfg(target_os = "android")'.dependencies]
|
||||
slint = { workspace = true, features = ["backend-android-activity-06"] }
|
||||
|
||||
[build-dependencies]
|
||||
slint-build.workspace = true
|
||||
# build.rs generates theme.slint from style.yaml (S2).
|
||||
serde_norway.workspace = true
|
||||
|
||||
[features]
|
||||
default = []
|
||||
# Temporary CPU readback path; see dr-ui docs and spike S1.
|
||||
readback = ["dr-gpu/readback"]
|
||||
# Debug convenience: re-read style.yaml at startup so a palette can be tuned
|
||||
# without rebuilding. Costs the constant-folding of every token, so it stays
|
||||
# off by default and has no business in a release build.
|
||||
live-style = ["dep:serde_norway"]
|
||||
|
||||
Reference in New Issue
Block a user