fix(iced/feedback): 复审 r3 的 A/B/D/E/F 项 + C 项待 rebase 后改 view_at
(先落一个中间提交,rebase main 之后再按 tower 的修正把空态图标改成 32/view_at)
This commit is contained in:
1 parent
5d9e75efd8
commit
a4cdd61fe5
12 files changed
+325
-108
No files matched your search
@@ -54,8 +54,14 @@ const HOST_MIN: f32 = 368.0;
|
||||
const HOST_NARROW: f32 = 324.0;
|
||||
/// `Snackbar` 宿主高(比 68 + 2×12 略高,留出贴顶/贴底的判定余量)。
|
||||
const HOST_TALL: f32 = 96.0;
|
||||
/// 单行提示条的宿主高(48 + 2×12 外边距 = 72,正好装下)。
|
||||
const HOST_SHORT: f32 = 72.0;
|
||||
/// 窄宿主:给 `Dialog::width` 递 360,量「窄宿主不再被裁」的那一格(复审 E)。
|
||||
const NARROW_HOST: f32 = 360.0;
|
||||
|
||||
/// 单行提示条的宿主高。
|
||||
///
|
||||
/// **96 而不是 72**(复审 D):72 = 48 + 2×12 时上下外边距相等,像素上分不出「贴底」还是
|
||||
/// 「居中」;96 让贴底那格的上留白 = 36、下留白 = 12,探针能量到「条底距宿主底 = 12」。
|
||||
const HOST_SHORT: f32 = 96.0;
|
||||
/// 空态宿主高:内容本征高 ≈96+16+32+8+16+24+40 ≈ 232,留出上下各 40 的余量。
|
||||
const HOST_EMPTY: f32 = 320.0;
|
||||
|
||||
@@ -100,6 +106,29 @@ fn caption<'a>(ui: &'a Ui, value: &'a str) -> Element<'a, DemoMessage> {
|
||||
.into()
|
||||
}
|
||||
|
||||
/// 带 1px 取景框的宿主:`Snackbar` 的贴底/贴顶需要一条**可见的宿主边界**才量得出来
|
||||
/// (透明宿主的底边在图上不存在,`Placement::Bottom` 就不可证)。
|
||||
fn framed_host<'a>(
|
||||
ui: &'a Ui,
|
||||
width: f32,
|
||||
height: f32,
|
||||
content: impl Into<Element<'a, DemoMessage>>,
|
||||
) -> Element<'a, DemoMessage> {
|
||||
let line = ui.color(Role::OutlineVariant);
|
||||
container(content)
|
||||
.width(Length::Fixed(width))
|
||||
.height(Length::Fixed(height))
|
||||
.style(move |_theme| container::Style {
|
||||
border: iced::Border {
|
||||
color: line,
|
||||
width: crate::theme::STROKE_PX,
|
||||
radius: iced::border::Radius::default(),
|
||||
},
|
||||
..container::Style::default()
|
||||
})
|
||||
.into()
|
||||
}
|
||||
|
||||
/// 固定宽宿主(量宽度用:宿主宽写死,组件内部的占比/夹取才有确定值)。
|
||||
fn host<'a>(
|
||||
width: f32,
|
||||
@@ -214,9 +243,10 @@ fn snackbar_block<'a>(ui: &'a Ui) -> Element<'a, DemoMessage> {
|
||||
.state(Interaction::Hovered),
|
||||
),
|
||||
);
|
||||
let mid = host(
|
||||
let mid = framed_host(
|
||||
ui,
|
||||
HOST_MIN,
|
||||
Some(HOST_SHORT),
|
||||
HOST_SHORT,
|
||||
feedback::snackbar(
|
||||
ui,
|
||||
Snackbar::new("已删除实例")
|
||||
@@ -224,9 +254,10 @@ fn snackbar_block<'a>(ui: &'a Ui) -> Element<'a, DemoMessage> {
|
||||
.action("撤销", press("snackbar/undo")),
|
||||
),
|
||||
);
|
||||
let narrow = host(
|
||||
let narrow = framed_host(
|
||||
ui,
|
||||
HOST_NARROW,
|
||||
Some(HOST_SHORT),
|
||||
HOST_SHORT,
|
||||
feedback::snackbar(ui, Snackbar::new("宿主 324").placement(Placement::Bottom)),
|
||||
);
|
||||
|
||||
@@ -243,7 +274,7 @@ fn snackbar_block<'a>(ui: &'a Ui) -> Element<'a, DemoMessage> {
|
||||
two_lines,
|
||||
caption(
|
||||
ui,
|
||||
"宿主 324 ⇒ 条 300:组件没有 min-width,宿主给多少就是多少(G17-d)"
|
||||
"宿主 324(取景框)⇒ 条 300:组件没有 min-width,宿主给多少就是多少(G17-d);贴底 = 条底距框底 12"
|
||||
),
|
||||
narrow,
|
||||
caption(ui, "宿主 368 ⇒ 条 344:最小宽的取值口径([估])"),
|
||||
@@ -289,6 +320,11 @@ fn dialog_block<'a>(ui: &'a Ui, full: bool) -> Element<'a, DemoMessage> {
|
||||
Dialog::new("已导入整合包", "共 42 个模组,缺失 0 个。")
|
||||
.confirm("知道了", press("dialog/ok")),
|
||||
);
|
||||
// 窄宿主那格:可用宽 360 ⇒ `min(480, 360) = 360`,且不得低于官方下限 280。
|
||||
let narrow = feedback::dialog(
|
||||
ui,
|
||||
Dialog::new("窄宿主 360", "可用宽 360 时取 min(480, 360)。").width(NARROW_HOST),
|
||||
);
|
||||
// 强制 hover:动作件的状态层必须来自 `interaction`(不是组件里自己乘 8%)。
|
||||
let double = feedback::dialog(
|
||||
ui,
|
||||
@@ -307,8 +343,9 @@ fn dialog_block<'a>(ui: &'a Ui, full: bool) -> Element<'a, DemoMessage> {
|
||||
.spacing(ui.space(Space::X2));
|
||||
|
||||
body = body.push(row![plain, single].spacing(ui.space(Space::X6)));
|
||||
// 双动作 + 窄宿主并排:探针要同时量到 480 与 360 两种宽
|
||||
body = body.push(row![double, narrow].spacing(ui.space(Space::X6)));
|
||||
if full {
|
||||
body = body.push(double);
|
||||
body = body.push(caption(
|
||||
ui,
|
||||
"Dialog · scrim = 黑@0.32 叠 canvas 的实色(D27 预合成;详见 dialog.rs 模块文档)",
|
||||
|
||||
Reference in new issue
Block a user