release: v0.2.4 里程碑快照(孤儿提交,无父;树 = dev 68362e5)
CI / fmt (rustfmt --check) (push) Waiting to run
CI / clippy (ubuntu-latest) (push) Waiting to run
CI / clippy (windows-latest) (push) Waiting to run
CI / test (ubuntu-latest) (push) Waiting to run
CI / test (windows-latest) (push) Waiting to run
CI / build release (ubuntu-latest) (push) Waiting to run
CI / build release (windows-latest) (push) Waiting to run
CI / runtime smoke (ubuntu x64, xvfb) (push) Waiting to run
CI / runtime smoke (macos arm64, probe) (push) Skipped
CI / update-e2e (windows x64) (push) Waiting to run
GPU evidence / GPU 判据自测(不需 GPU;跳过 ≠ 已验证) (push) Waiting to run
GPU evidence / GPU 证据 — 探测可用产物与硬件适配器 (push) Waiting to run
Guards / core 零 UI 守门 (push) Waiting to run
Guards / presenter 零 UI 守门 (push) Waiting to run
Guards / design 零第三方依赖守门 (push) Waiting to run
Guards / unsafe 落点守门(集合必须恰好等于期望) (push) Waiting to run
Guards / 文件行数 ≤400 守门 (push) Waiting to run
Guards / 依赖许可与来源(cargo-deny) (push) Waiting to run
Release guard / 发布标记语义守门(push tag → 稳定版) (push) Waiting to run
Signing status(播报,不是门禁) / 判据自测(三行/退出码/变异重放/接线) (push) Waiting to run
Signing status(播报,不是门禁) / 签名就绪度(播报) (push) Waiting to run
Release / 选槽位(默认四个:Windows 两档 + Linux 两档) (push) Waiting to run
CI / fmt (rustfmt --check) (push) Waiting to run
CI / clippy (ubuntu-latest) (push) Waiting to run
CI / clippy (windows-latest) (push) Waiting to run
CI / test (ubuntu-latest) (push) Waiting to run
CI / test (windows-latest) (push) Waiting to run
CI / build release (ubuntu-latest) (push) Waiting to run
CI / build release (windows-latest) (push) Waiting to run
CI / runtime smoke (ubuntu x64, xvfb) (push) Waiting to run
CI / runtime smoke (macos arm64, probe) (push) Skipped
CI / update-e2e (windows x64) (push) Waiting to run
GPU evidence / GPU 判据自测(不需 GPU;跳过 ≠ 已验证) (push) Waiting to run
GPU evidence / GPU 证据 — 探测可用产物与硬件适配器 (push) Waiting to run
Guards / core 零 UI 守门 (push) Waiting to run
Guards / presenter 零 UI 守门 (push) Waiting to run
Guards / design 零第三方依赖守门 (push) Waiting to run
Guards / unsafe 落点守门(集合必须恰好等于期望) (push) Waiting to run
Guards / 文件行数 ≤400 守门 (push) Waiting to run
Guards / 依赖许可与来源(cargo-deny) (push) Waiting to run
Release guard / 发布标记语义守门(push tag → 稳定版) (push) Waiting to run
Signing status(播报,不是门禁) / 判据自测(三行/退出码/变异重放/接线) (push) Waiting to run
Signing status(播报,不是门禁) / 签名就绪度(播报) (push) Waiting to run
Release / 选槽位(默认四个:Windows 两档 + Linux 两档) (push) Waiting to run
本批内容见 CHANGELOG.md 的 0.2.4 段。按 D41 用孤儿快照推 main,保留「公开史只有里程碑」的模型。
This commit is contained in:
commit
a5d1dec495
1580 files changed
+320938
No files matched your search
@@ -0,0 +1,124 @@
|
||||
//! 「外观(高级)」四件的回调接线(从 `callbacks.rs` 拆出,守住单文件 ≤400 行)。
|
||||
//!
|
||||
//! 与 `wire_settings` 的分工:这个文件只负责 09 §101-104 的四个高级特性
|
||||
//! (背景图 / 面板半透明度 / 玻璃拟态 / 强调色)+ 主题三态。
|
||||
//! 每个回调都是同一套动作:改 `state.prefs` → 下发到 Slint(`apply_*`)→ 落盘(`persist_settings`)→
|
||||
//! `sync()`。出厂全部关闭,所以「不碰设置页」时这里一次都不会触发。
|
||||
|
||||
use std::rc::Weak;
|
||||
|
||||
use crate::conv;
|
||||
use crate::ui_bind::Inner;
|
||||
|
||||
/// 接主题三态与外观四件的回调。
|
||||
pub(crate) fn wire(ui: &crate::MainWindow, weak: &Weak<Inner>) {
|
||||
{
|
||||
let weak = weak.clone();
|
||||
ui.on_theme_changed(move |mode| {
|
||||
let Some(this) = weak.upgrade() else { return };
|
||||
this.state.borrow_mut().prefs.theme = conv::theme_mode_from(mode);
|
||||
this.apply_theme();
|
||||
this.persist_settings();
|
||||
this.sync();
|
||||
});
|
||||
}
|
||||
// ── 09 §101-104「外观(高级)」四件(出厂全关,改动即刻落盘)────────
|
||||
{
|
||||
let weak = weak.clone();
|
||||
ui.on_bg_image_enabled_changed(move |enabled| {
|
||||
let Some(this) = weak.upgrade() else { return };
|
||||
this.state.borrow_mut().prefs.appearance.bg_image_enabled = enabled;
|
||||
this.apply_appearance();
|
||||
this.persist_settings();
|
||||
this.sync();
|
||||
});
|
||||
}
|
||||
{
|
||||
let weak = weak.clone();
|
||||
ui.on_bg_image_changed(move |path| {
|
||||
let Some(this) = weak.upgrade() else { return };
|
||||
this.state.borrow_mut().prefs.appearance.bg_image = path.to_string();
|
||||
this.apply_appearance();
|
||||
this.persist_settings();
|
||||
this.sync();
|
||||
});
|
||||
}
|
||||
{
|
||||
let weak = weak.clone();
|
||||
ui.on_bg_fill_changed(move |fill| {
|
||||
let Some(this) = weak.upgrade() else { return };
|
||||
this.state.borrow_mut().prefs.appearance.bg_fill = conv::bg_fill_from(fill);
|
||||
this.apply_appearance();
|
||||
this.persist_settings();
|
||||
this.sync();
|
||||
});
|
||||
}
|
||||
{
|
||||
let weak = weak.clone();
|
||||
ui.on_bg_dim_changed(move |value| {
|
||||
let Some(this) = weak.upgrade() else { return };
|
||||
this.state.borrow_mut().prefs.appearance.bg_dim = value;
|
||||
this.apply_appearance();
|
||||
this.persist_settings();
|
||||
this.sync();
|
||||
});
|
||||
}
|
||||
{
|
||||
let weak = weak.clone();
|
||||
ui.on_panel_alpha_changed(move |value| {
|
||||
let Some(this) = weak.upgrade() else { return };
|
||||
this.state.borrow_mut().prefs.appearance.panel_alpha = value;
|
||||
this.apply_appearance();
|
||||
this.persist_settings();
|
||||
this.sync();
|
||||
});
|
||||
}
|
||||
{
|
||||
let weak = weak.clone();
|
||||
ui.on_glass_changed(move |enabled| {
|
||||
let Some(this) = weak.upgrade() else { return };
|
||||
this.state.borrow_mut().prefs.appearance.glass = enabled;
|
||||
this.apply_appearance();
|
||||
this.persist_settings();
|
||||
this.sync();
|
||||
});
|
||||
}
|
||||
{
|
||||
let weak = weak.clone();
|
||||
ui.on_accent_color_changed(move |text| {
|
||||
let Some(this) = weak.upgrade() else { return };
|
||||
let accepted = this.state.borrow_mut().prefs.appearance.set_accent(&text);
|
||||
// 非法输入:只亮设置页的 warn 行,不改现状、不落盘
|
||||
this.ui.set_accent_invalid(!accepted);
|
||||
if accepted {
|
||||
this.apply_appearance();
|
||||
this.persist_settings();
|
||||
}
|
||||
this.sync();
|
||||
});
|
||||
}
|
||||
{
|
||||
let weak = weak.clone();
|
||||
ui.on_accent_swatch_picked(move |index| {
|
||||
let Some(this) = weak.upgrade() else { return };
|
||||
let Ok(index) = usize::try_from(index) else {
|
||||
return;
|
||||
};
|
||||
let accepted = this
|
||||
.state
|
||||
.borrow_mut()
|
||||
.prefs
|
||||
.appearance
|
||||
.set_accent_preset(index);
|
||||
if !accepted {
|
||||
return;
|
||||
}
|
||||
let hex = this.state.borrow().prefs.appearance.accent_color.clone();
|
||||
this.ui.set_accent_color(conv::accent_color(&hex));
|
||||
this.ui.set_accent_invalid(false);
|
||||
this.apply_appearance();
|
||||
this.persist_settings();
|
||||
this.sync();
|
||||
});
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user