From c5765c57e7326dbe09d7a74beacc6b492a8f60a6 Mon Sep 17 00:00:00 2001 From: AskaEth Date: Mon, 2 Nov 2026 06:55:28 +0800 Subject: [PATCH] =?UTF-8?q?fix(selection):=20Chip=20=E7=A6=81=E7=94=A8?= =?UTF-8?q?=E6=94=B9=E6=88=90=E4=BF=AE=E9=A5=B0=E5=99=A8=EF=BC=8C=E5=8F=AA?= =?UTF-8?q?=E6=B8=85=E6=B6=88=E6=81=AF=E3=80=81=E4=B8=8D=E5=88=A0=E5=9B=BE?= =?UTF-8?q?=E6=A0=87=E4=B8=8E=E9=80=89=E4=B8=AD=E6=80=81=EF=BC=88=E5=A4=8D?= =?UTF-8?q?=E5=AE=A1=20P2-1=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 旧 API Chip::disabled(label, variant) 强制 leading/trailing/selected = None/false:实测 assist 78→54、filter·on 74→50(连填充和勾都没了),禁用列里 filter·on 与 filter 逐像素同形 - 新 API Chip::assist(label, msg).leading(k).disabled():只清 on_press,视觉信息全保留 (research/12b §13 的禁用态是「容器/描边 12%、文字与图标 38%」——只降不删) - 矩阵里禁用格改用修饰器,图标与选中态一并保留 --- .../app-iced/src/components/selection/chip.rs | 20 +++++++------- .../src/components/selection/matrix.rs | 27 +++++++++---------- 2 files changed, 22 insertions(+), 25 deletions(-) diff --git a/crates/app-iced/src/components/selection/chip.rs b/crates/app-iced/src/components/selection/chip.rs index 036a797..c4a9750 100644 --- a/crates/app-iced/src/components/selection/chip.rs +++ b/crates/app-iced/src/components/selection/chip.rs @@ -56,17 +56,15 @@ impl<'a, M> Chip<'a, M> { Self::new(label, ChipVariant::Input, false, on_press) } - /// 禁用的 chip(无消息)。 - pub fn disabled(label: &'a str, variant: ChipVariant) -> Self { - Self { - label, - variant, - selected: false, - leading: None, - trailing: None, - on_press: None, - state: None, - } + /// 转成禁用:**只清消息**,图标 / 选中态 / 状态层全部保留(复审 P2-1)。 + /// + /// 官方禁用态是「容器/描边 12%、文字与**图标** 38%」——只降**不删**。早先的 + /// `Chip::disabled(label, variant)` 把 leading / trailing / selected 一起丢掉,实测 + /// assist 78→54、filter·on 74→50(连填充和勾都没了),禁用列里 `filter·on` 与 `filter` + /// 逐像素同形,看不出选中与否。 + pub fn disabled(mut self) -> Self { + self.on_press = None; + self } fn new(label: &'a str, variant: ChipVariant, selected: bool, on_press: M) -> Self { diff --git a/crates/app-iced/src/components/selection/matrix.rs b/crates/app-iced/src/components/selection/matrix.rs index d5112c8..5f44807 100644 --- a/crates/app-iced/src/components/selection/matrix.rs +++ b/crates/app-iced/src/components/selection/matrix.rs @@ -163,22 +163,21 @@ fn draw(ui: &Ui, spec: Row, state: Interaction) -> Element<'_, ()> { ChipVariant::Filter => "Filter", ChipVariant::Input => "Input", }; - let chip = if disabled { - Chip::disabled(label, variant) - } else { - match variant { - ChipVariant::Assist => Chip::assist(label, ()).leading(IconKind::Download), - // Filter 的勾只在**选中**时给(选中态才需要「已筛选」的强提示) - ChipVariant::Filter if selected => { - Chip::filter(label, true, ()).leading(IconKind::Check) - } - ChipVariant::Filter => Chip::filter(label, false, ()).leading(IconKind::Filter), - // Input chip:前置图标 + 后置关闭键(avatar 位用图标代替) - ChipVariant::Input => Chip::input(label, ()) - .leading(IconKind::Folder) - .trailing(IconKind::Close), + // 禁用**只清消息**(`Chip::disabled()` 是修饰器):图标与选中态必须保留, + // 否则禁用列里 `filter·on` 与 `filter` 会逐像素同形(复审 P2-1)。 + let chip = match variant { + ChipVariant::Assist => Chip::assist(label, ()).leading(IconKind::Download), + // Filter 的勾只在**选中**时给(选中态才需要「已筛选」的强提示) + ChipVariant::Filter if selected => { + Chip::filter(label, true, ()).leading(IconKind::Check) } + ChipVariant::Filter => Chip::filter(label, false, ()).leading(IconKind::Filter), + // Input chip:前置图标 + 后置关闭键(avatar 位用图标代替) + ChipVariant::Input => Chip::input(label, ()) + .leading(IconKind::Folder) + .trailing(IconKind::Close), }; + let chip = if disabled { chip.disabled() } else { chip }; selection::chip(ui, chip.state(state)) } }