[package] name = "dr-ui" version.workspace = true edition.workspace = true rust-version.workspace = true license.workspace = true [dependencies] dr-types.workspace = true # No `readback`. S1 wired Slint's texture import, so the develop view hands # the compositor the texture itself and there is no display round-trip left to # gate (ARCH §6.1, AC-8). The export path reads pixels back through # `export_pixels`, which is ungated and always was. dr-gpu.workspace = true dr-decode.workspace = true serde_json.workspace = true tokio.workspace = true reqwest.workspace = true dr-plat.workspace = true dr-sync.workspace = true dr-sync-nextcloud.workspace = true dr-export.workspace = true dr-pipeline.workspace = true 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. # # `renderer-femtovg-wgpu` rather than `renderer-femtovg`: the latter is # FemtoVG over OpenGL, and a compositor drawing through GL cannot be handed a # `wgpu::Texture`. Importing one requires Slint itself to be rendering with # wgpu, and this is the FemtoVG backend that does (ARCH §6.1, spike S1). # # `unstable-wgpu-29` is the other half: the renderer feature makes Slint draw # with wgpu, and this one exposes the API to say so — `BackendSelector:: # require_wgpu_29` and `Image::try_from(wgpu::Texture)`. Unstable is Slint's # word for it; the surface is small and the alternative is the 7 ms round-trip. # # `renderer-femtovg` is *not* kept alongside as a fallback, though it would # still compile. Slint's winit backend prefers the wgpu FemtoVG renderer # whenever both are built, so the GL one would only ever be reached by someone # setting `SLINT_BACKEND=winit-femtovg` — and on that path an imported texture # is not drawn at all. FemtoVG-over-GL has no branch for a `wgpu::Texture`, so # it falls through to "render this image to a buffer", gets nothing back, and # draws nothing. A blank canvas with no error is a far worse failure than the # one below, so the fallback is removed rather than left as a trap. # # Consequence worth stating plainly: the desktop app now needs a working wgpu # adapter to open a window at all. Slint refuses a CPU adapter for this # renderer unless `SLINT_WGPU_CPU` is set in the environment. slint = { workspace = true, features = [ "compat-1-2", "renderer-femtovg-wgpu", "unstable-wgpu-29", ] } wgpu.workspace = true anyhow.workspace = true # `SettingsError` distinguishes an io failure from a malformed file, which the # settings page reports differently; anyhow would flatten both to a string. thiserror.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"] } # Opening the sign-in URL needs an ACTION_VIEW Intent — Android has no # xdg-open. Version-matched to Slint's Android backend so both halves of the # process agree on the JavaVM types; ndk-context supplies the VM and activity # that android-activity's glue already stashed. jni = "0.22" ndk-context = "0.1" [build-dependencies] slint-build.workspace = true # build.rs generates theme.slint from style.yaml (S2). serde_norway.workspace = true [features] default = [] # 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"]