Publish theme snapshots through IPC from explicit live state
This commit is contained in:
1 parent
8195b82073
commit
ccf7497b6f
23 files changed
+287
-130
No files matched your search
@@ -391,7 +391,7 @@ mod tests {
|
||||
let resolved = ferese_config::theme::ResolvedTheme {
|
||||
appearance: preset.appearance,
|
||||
tokens: ferese_config::theme::preset(preset.id, preset.appearance).unwrap(),
|
||||
..Default::default()
|
||||
..ferese_config::theme::default_theme()
|
||||
};
|
||||
let palette = Palette::from_resolved(&resolved);
|
||||
for enabled in [false, true] {
|
||||
|
||||
@@ -122,7 +122,7 @@ mod tests {
|
||||
for high_contrast in [false, true] {
|
||||
let mut resolved = ferese_config::theme::ResolvedTheme {
|
||||
appearance,
|
||||
..Default::default()
|
||||
..ferese_config::theme::default_theme()
|
||||
};
|
||||
resolved.accessibility.increase_contrast = high_contrast;
|
||||
let palette = Palette::from_resolved(&resolved);
|
||||
@@ -138,7 +138,7 @@ mod tests {
|
||||
let mut resolved = ferese_config::theme::ResolvedTheme {
|
||||
appearance: preset.appearance,
|
||||
tokens: ferese_config::theme::preset(preset.id, preset.appearance).unwrap(),
|
||||
..Default::default()
|
||||
..ferese_config::theme::default_theme()
|
||||
};
|
||||
resolved.tokens.material.style = "translucent".into();
|
||||
resolved.tokens.material.opacity = 0.25;
|
||||
|
||||
@@ -1,8 +1,27 @@
|
||||
use cosmic::iced::futures::SinkExt;
|
||||
use ferese_config::theme::Snapshot;
|
||||
use ferese_ipc::theme::Snapshot;
|
||||
|
||||
pub fn current() -> Snapshot {
|
||||
ferese_ipc::theme::current()
|
||||
ferese_ipc::theme::Connection::connect()
|
||||
.ok()
|
||||
.and_then(|mut connection| connection.get(ferese_config::families::builtins).ok())
|
||||
.unwrap_or_else(fallback)
|
||||
}
|
||||
|
||||
/// Standalone appearance; it does not represent compositor acceptance.
|
||||
pub fn fallback() -> Snapshot {
|
||||
let theme = ferese_config::theme::default_theme();
|
||||
Snapshot {
|
||||
version: ferese_ipc::theme::SCHEMA_VERSION,
|
||||
revision: 0,
|
||||
mode: ferese_config::theme::Mode::Dark,
|
||||
presented: theme.clone(),
|
||||
theme,
|
||||
warnings: Vec::new(),
|
||||
error: None,
|
||||
families: ferese_config::families::builtins(),
|
||||
fallback_note: None,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn opacity(theme: &ferese_config::theme::ResolvedTheme) -> f32 {
|
||||
@@ -30,13 +49,15 @@ fn stream() -> impl cosmic::iced::futures::Stream<Item = Snapshot> {
|
||||
};
|
||||
let (send, mut receive) = tokio::sync::watch::channel(None);
|
||||
tokio::task::spawn_blocking(move || {
|
||||
let Ok(mut snapshot) = connection.get() else { return };
|
||||
let Ok(mut snapshot) = connection.get(ferese_config::families::builtins) else {
|
||||
return;
|
||||
};
|
||||
loop {
|
||||
let revision = snapshot.revision;
|
||||
if send.send(Some(snapshot)).is_err() {
|
||||
return;
|
||||
}
|
||||
match connection.watch(revision) {
|
||||
match connection.watch(revision, ferese_config::families::builtins) {
|
||||
Ok(next) => snapshot = next,
|
||||
Err(_) => return,
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user