From 14da7b3dece73a6807185087cb54593dfbd38b17 Mon Sep 17 00:00:00 2001 From: AskaEth Date: Sun, 1 Nov 2026 16:58:25 +0800 Subject: [PATCH] =?UTF-8?q?refactor(app-iced):=20M68=20=E2=80=94=E2=80=94?= =?UTF-8?q?=20=E6=8A=8A=20nav=20=E8=BD=A8=E5=AE=BD=E6=94=B6=E6=95=9B?= =?UTF-8?q?=E6=88=90=E4=B8=80=E4=B8=AA=20M69=20=E8=BF=81=E7=A7=BB=E7=82=B9?= =?UTF-8?q?=EF=BC=88=E4=B8=89=E5=A4=84=E8=B0=83=E7=94=A8=20=E2=86=92=20?= =?UTF-8?q?=E4=B8=80=E8=A1=8C=E6=94=B9=E5=8A=A8=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit M69(141e9b1)把 LayoutMetrics::nav_expanded_width 改名 nav_rail_width、删掉 nav_collapsed_width、新增 nav_drawer_width=240。本分支基线 0aac307 还没有 M69 的 crates/design(那个目录也不在本 mission 的改动范围),现在直接改名会编不过。 所以把 shell/nav.rs 的三处 metrics.nav_expanded_width 收敛到 nav_rail_width(metrics), 并在函数文档里写清 M69 前后对照与「合入后只改函数体一行」;theme::STROKE_PX 同样 注明可换成 unlucky_design::stroke::HAIRLINE。行为/视觉零变化(值都是 88 / 1.0)。 --- crates/app-iced/src/shell/nav.rs | 27 ++++++++++++++++++++++----- crates/app-iced/src/theme.rs | 5 +++++ 2 files changed, 27 insertions(+), 5 deletions(-) diff --git a/crates/app-iced/src/shell/nav.rs b/crates/app-iced/src/shell/nav.rs index 06f2df5..de96561 100644 --- a/crates/app-iced/src/shell/nav.rs +++ b/crates/app-iced/src/shell/nav.rs @@ -4,7 +4,7 @@ //! //! | 项 | 参考值 | 令牌落点 | //! |---|---|---| -//! | 轨宽 | 5.1 官方 96(narrow 80);本项目 **88** | `LayoutMetrics::DESKTOP.nav_expanded_width` | +//! | 轨宽 | 5.1 官方 96(narrow 80);本项目 **88** | [`nav_rail_width`](`LayoutMetrics` 骨架值,详见该函数文档的 M69 迁移说明) | //! | 轨容器 | 5.3 形状 None / L0 / `Surface` | `MaterialLayer::Canvas` | //! | 选中指示器 | 5.4 **56×32**、圆角 full、`SecondaryContainer` | [`indicator_size`](令牌推导) | //! | 图标 | 5.5 24px | `IconSize::Toolbar` | @@ -88,7 +88,7 @@ pub(super) fn rail<'a>(ui: &'a Ui, selected: NavItem) -> Element<'a, Message> { } container(column(items).spacing(metrics.nav_item_gap)) - .width(metrics.nav_expanded_width) + .width(nav_rail_width(metrics)) .height(Length::Fill) .style(|_theme| filled(ui.layer(MaterialLayer::Canvas))) .into() @@ -138,7 +138,7 @@ fn rail_item<'a>( .height(item_height); button(stack) - .width(ui.metrics().nav_expanded_width) + .width(nav_rail_width(ui.metrics())) .height(item_height) .padding(0) .style(move |_theme: &IcedTheme, status| { @@ -168,13 +168,30 @@ fn rail_item<'a>( .into() } +/// 导航轨宽度(**M69 迁移点**)。 +/// +/// M69(`141e9b1`)把 `LayoutMetrics` 的 nav 字段做了语义纠正: +/// +/// | 旧 | 新 | +/// |---|---| +/// | `nav_expanded_width = 88` | **`nav_rail_width = 88`**(值不变,只是名字从「展开」改成「轨」) | +/// | `nav_collapsed_width = 48` | 删除(48 连 56 宽的选中指示器都放不下) | +/// | —(缺) | 新增 `nav_drawer_width = 240`(D33 的展开态抽屉) | +/// +/// 本 crate 的分支基线(`0aac307`)还没有 M69,所以这里只能写旧字段名;**等 M69 合入后 +/// 把函数体那一行改成 `metrics.nav_rail_width` 即可,其余代码与视觉零变化**。 +/// 把三处调用点收敛到这个函数,就是为了让迁移永远只有一行。 +fn nav_rail_width(metrics: LayoutMetrics) -> f32 { + metrics.nav_expanded_width +} + /// 选中指示器尺寸(12b 5.4 参考 56×32),全部由令牌推导、不写死: /// -/// - 宽 = `nav_expanded_width − 2 × Space::X4` = 88 − 32 = **56**(轨的左右内边距 16) +/// - 宽 = [`nav_rail_width`] − 2 × `Space::X4` = 88 − 32 = **56**(轨的左右内边距 16) /// - 高 = `control_height − Space::X2` = 40 − 8 = **32**(可见高度上下各让 4) pub fn indicator_size(metrics: LayoutMetrics) -> (f32, f32) { ( - metrics.nav_expanded_width - Space::X4.dp() * 2.0, + nav_rail_width(metrics) - Space::X4.dp() * 2.0, metrics.control_height - Space::X2.dp(), ) } diff --git a/crates/app-iced/src/theme.rs b/crates/app-iced/src/theme.rs index 4cc8987..fe3655a 100644 --- a/crates/app-iced/src/theme.rs +++ b/crates/app-iced/src/theme.rs @@ -30,6 +30,11 @@ use unlucky_design::spacing::{LayoutMetrics, Space}; use unlucky_design::typography::{FontFamily, Platform, TypeRole, TypeStyle, Weight}; /// 全站描边宽度(逻辑 px @100% DPI)。rubric G7 要求全站 1px —— 只许这一处定义。 +/// +/// **M69 迁移点**:M69(`141e9b1`)起令牌层有「一像素线单一真源」 +/// `unlucky_design::stroke::HAIRLINE = 1.0`(容器描边/分隔线/聚焦环都用它)。 +/// 本 crate 的分支基线(`0aac307`)还没有这个模块;M69 合入后把这个常量换成 +/// `pub use unlucky_design::stroke::HAIRLINE as STROKE_PX;` 即可(数值与被引用的地方都不动)。 pub const STROKE_PX: f32 = 1.0; /// 已经解析到系统的字体族名(`&'static str` 才能塞进 `iced::Font`)。