- 重构版主提示词(14 parts,面向 ClassHelper 灵动岛重构) - ClassIsland 全量规格提示词(20 parts,含分卷与逐章版本) - 投喂指南、分卷、逐节文件 - 调研记录、一致性基线、生成与质检脚本
26 KiB
26 KiB
analysis/island-ui.md —— ui-island 工作备注(Part 04 / 05)
- 任务:
task-2(revision 2,owner: ui-island) - 产出:
parts/04-main-window.md(CJK 6501 字)、parts/05-components.md(CJK 6982 字) - 工作方式:只读静态分析。未构建、未运行、未启动任何 UI/脚本、未截图、未安装依赖、未改动
repos/。
1. 已读文件清单
1.1 ClassIsland —— 主界面 / 行 / 主题 / 编辑模式
| 文件 | 读取范围 | 用途 |
|---|---|---|
analysis/00-brief.md |
全文 | 团队总简报、格式与纪律 |
repos/ClassIsland/ClassIsland/MainWindow.axaml |
全文 686 行 | 窗口样式、根布局树、行模板、编辑 UI、原生菜单 |
repos/ClassIsland/ClassIsland/MainWindow.axaml.cs |
全文 1652 行 | 窗口几何、层级、点击穿透、编辑模式、菜单动作 |
repos/ClassIsland/ClassIsland/ViewModels/MainViewModel.cs |
全文 387 行 | IsEditMode / ActualClientBound / ContainerComponents 等 |
repos/ClassIsland/ClassIsland/Controls/MainWindowLine.axaml |
全文 79 行 | 行可见性表达式、:dock-* 伪类、行淡出 |
repos/ClassIsland/ClassIsland/Controls/MainWindowLine.cs |
全文 815 行 | 行模板部件、淡出判定、提醒队列、鼠标命中 |
repos/ClassIsland/ClassIsland/XamlThemes/FluentTheme/Styles.axaml |
全文 457 行 | 行背景/遮罩/浮层/进度条/动画参数(默认主题) |
repos/ClassIsland/ClassIsland/XamlThemes/ClassicTheme/Styles.axaml |
全文 375 行 | 经典主题的等价参数(TranslateY 遮罩) |
repos/ClassIsland/ClassIsland.Core/Assists/MainWindowStylesAssist.cs |
全文 | 6 个继承型附加属性(圆角/透明度/分体/编辑态等) |
repos/ClassIsland/ClassIsland.Core/StylesBase.axaml |
全文 | Border.primaryColorZone、SettingsContainerWidth 用法 |
repos/ClassIsland/ClassIsland.Core/ThemeBase.axaml |
1–90 行 | 字号资源 14/16/18/20、SettingsContainerWidth=960、图标字体 |
repos/ClassIsland/ClassIsland.Core/Themes/WrapPanelResizingAnimation.axaml |
全文 | animated-resize 类定义 |
repos/ClassIsland/ClassIsland.Core/Themes/ComponentsPanelStyles.axaml |
全文 | components-panel = 横排 StackPanel / 重排动画 |
repos/ClassIsland/ClassIsland/Controls/EditMode/EditModeView.axaml |
全文 613 行 | 抽屉、组件库、行设置、外观设置、配置管理 |
repos/ClassIsland/ClassIsland/Controls/EditMode/EditModeView.axaml.cs |
100–329 行 + grep | 抽屉打开/收起、容器组件、规则抽屉 |
repos/ClassIsland/ClassIsland/Controls/EditMode/EditableComponentsListBox.axaml |
全文 338 行 | 选中框、Adorner 操作条、拖拽阈值/预览/高亮 |
repos/ClassIsland/ClassIsland/Controls/EditMode/EditModeContainerComponentInfo.cs |
全文 | 浮动编辑框数据 |
repos/ClassIsland/ClassIsland/Controls/SlantedMaskControl.cs |
全文 346 行 | 斜面遮罩 5 区段权重/60°/360ms/120ms |
repos/ClassIsland/ClassIsland.Core/Controls/VerticalDrawer.axaml |
全文 157 行 | 抽屉外观、圆角 8 8 0 0、阴影、250ms |
repos/ClassIsland/ClassIsland.Core/Controls/VerticalDrawer.axaml.cs |
部分 + grep | RequestedWidth、ContentHeightRatio=0.5 |
repos/ClassIsland/ClassIsland.Core/Converters/SizeDoubleToCornerRadiusConverter.cs |
全文 | 圆角 = 值/参数(1.0) |
repos/ClassIsland/ClassIsland.Core/Converters/WidthDoubleToRectConverter.cs |
全文 | 行裁切矩形 + 停靠位置 X 偏移 |
repos/ClassIsland/platforms/ClassIsland.Platforms.Windows/Services/WindowPlatformService.cs |
100–209 行 | WS_EX_LAYERED/TRANSPARENT/NOACTIVATE、Topmost/Bottommost/Private/ToolWindow |
1.2 ClassIsland —— 设置 / 数据模型
| 文件 | 读取范围 | 用途 |
|---|---|---|
repos/ClassIsland/ClassIsland/Models/Settings.cs |
1–1856、1856–2255、grep 全文 | 全部主界面相关默认值(窗口/外观/组件/提醒/天气) |
repos/ClassIsland/ClassIsland.Core/Models/Components/MainWindowLineSettings.cs |
全文 | 行设置 21 个字段与默认值 |
repos/ClassIsland/ClassIsland.Core/Models/Components/ComponentSettings.cs |
全文 541 行 | 组件设置全部通用字段与默认值 |
repos/ClassIsland/ClassIsland/Services/ComponentsService.cs |
20–129 行 | 默认组件布局(1 行 = 日期 + 课程表)、配置文件路径 |
repos/ClassIsland/ClassIsland/App.Services.xaml.cs |
285–325 行 | Fluent 主题 VerticalSafeAreaPx=20、4 套天气图标模板 |
repos/ClassIsland/ClassIsland/Services/XamlThemeService.cs |
108–140 行 | ActualVerticalSafeAreaPx 取所有启用主题的最大值 |
repos/ClassIsland/ClassIsland.Core/Models/XamlTheme/ThemeManifest.cs |
110–132 行 + grep | VerticalSafeAreaPx 默认 0(Classic 主题即 0) |
1.3 ClassIsland —— 组件(全部 11 个)
| 文件 | 读取范围 |
|---|---|
Controls/Components/DateComponent.axaml + .axaml.cs |
全文 |
Controls/Components/ClockComponent.axaml + .axaml.cs |
全文 |
Controls/Components/CountDownComponent.axaml + .axaml.cs |
全文(115 + 312 行) |
Controls/Components/ScheduleComponent.axaml + .axaml.cs |
全文(117 + 268 行) |
Controls/Components/WeatherComponent.axaml + .axaml.cs |
全文(314 行 + 68 行) |
Controls/Components/TextComponent.axaml + .axaml.cs |
全文 |
Controls/Components/RollingComponent.axaml + .axaml.cs |
全文(49 + 206 行) |
Controls/Components/SlideComponent.axaml + .axaml.cs |
全文(126 + 202 行) |
Controls/Components/GroupComponent.axaml + .axaml.cs |
全文 |
Controls/Components/StackComponent.axaml + .axaml.cs |
全文 |
Controls/Components/SeparatorComponent.axaml + .axaml.cs |
全文 |
Controls/Components/*ComponentSettingsControl.axaml(8 个) |
grep 全部 Header=/Content=/Minimum=/Maximum=/Description= |
Models/ComponentSettings/{Clock,CountDown,Group,Rolling,Slide,Stack,Text,Weather}ComponentSettings.cs |
全文(grep 字段默认值) |
Models/ComponentSettings/LessonControlSettings.cs |
全文 189 行 |
ClassIsland.Core/Controls/ComponentPresenter.axaml |
全文 73 行(宿主通用行为) |
ClassIsland.Core/Controls/ComponentAdvancedSettingsControl.axaml |
grep 全部设置项文案/范围 |
ClassIsland.Core/Controls/LessonsControls/LessonsListBox.axaml |
全文 204 行(课程列表容器与列表项主题) |
ClassIsland.Core/Controls/LessonsControls/LessonControlExpanded.axaml |
全文 240 行 |
ClassIsland.Core/Controls/LessonsControls/LessonControlMinimized.axaml |
全文 65 行 |
ClassIsland.Core/Controls/LessonsControls/LessonControlSeperator.axaml |
全文 27 行 |
ClassIsland.Core/Controls/LessonsControls/LessonControlBase.cs |
全文 75 行 |
ClassIsland.Core/Controls/HighlightBox.axaml |
全文 28 行 |
Controls/WeatherIcons/{Index,SimpleTextWeatherIconTemplate}.axaml |
全文(其余 3 套仅列名/大小) |
1.4 ClassHelper(实现栈参照)
| 文件 | 读取范围 | 用途 |
|---|---|---|
packages/shared/src/island-layout.ts |
全文 404 行 | CLASSISLAND_ISLAND_METRICS(已核对与本任务一致)、组件契约、默认方案 |
packages/shared/src/constants.ts |
240–369 行 | DEFAULT_ISLAND_APPEARANCE、ISLAND_SHADOW_PAD=10、ISLAND_SIZE_DELTA、ISLAND_TYPE_SCALE |
packages/desktop-client/src/main/island.ts |
1–140、400–659 行 + grep | BrowserWindow 参数、setIgnoreMouseEvents、setAlwaysOnTop('screen-saver')、失焦宽限、固定包围盒、禁止 setBackgroundMaterial |
packages/desktop-client/src/island/IslandApp.vue |
200–399 行 + grep | 弹簧形变、--island-* 变量、progress² 交叉淡入、命中重算 |
packages/desktop-client/src/island/spring.ts |
全文 115 行 | stiffness 0.10 / damping 0.68 / 换向 35% / 单帧 ≤20% / snap 0.05px |
packages/desktop-client/src/island/squircle.ts |
全文 81 行 | 超椭圆指数 4.2、每角 14 段、expandedRadius |
packages/desktop-client/src/island/classic-island.css |
全文 757 行 | 卡片/胶囊/列表排版系数与 token 命名 |
packages/desktop-client/src/island/custom-island.css |
全文 205 行 | 常驻行布局(--custom-row-gap 等) |
packages/desktop-client/src/island/custom-runtime.css |
全文 255 行 | 常驻卡片的 ClassIsland Fluent 化配色(--wn-bg:#20202080、--wn-border:#ffffff26) |
packages/desktop-client/src/island/ComponentNode.vue |
210–329 行 | 组件 DOM 类名约定(component-node + node.kind)、tabular-nums |
repos/ClassIsland/AGENTS.md、repos/ClassHelper-master/AGENTS.md |
注入全文 | 纪律约束 |
2. 关键参数表(数值 → 证据)
2.1 窗口与几何
| 参数 | 值 | 证据 |
|---|---|---|
| 窗口透明 | Background=Transparent / TransparencyLevelHint=Transparent / TransparencyBackgroundFallback=Transparent |
MainWindow.axaml:169-171, 33 |
| 无边框 / 不可缩放 / 不可最大化最小化 | SystemDecorations=None, CanResize=False, CanMaximize=False, CanMinimize=False |
MainWindow.axaml:171-174 |
| 不抢焦点 | ShowActivated="False" |
MainWindow.axaml:32 |
| 初始高度 | Height="1" |
MainWindow.axaml:8 |
| 编辑模式窗口底色 | SmokeFillColorDefaultBrush + TransparencyLevelHint="AcrylicBlur, Transparent" |
MainWindow.axaml:177-181 |
| 自由窗口编辑模式 | SystemDecorations=Full、可缩放/最大化/最小化;Win10≤1803 用不透明底色 |
MainWindow.axaml:182-191;MainWindow.axaml.cs:257-260 |
| 窗口标题 | ClassIsland / 编辑主界面 | ClassIsland |
MainWindow.axaml:175, 180 |
| 自由窗口编辑模式屏幕边距 | 60 |
MainWindow.axaml.cs:134 |
| 编辑模式窗口高 = 屏高 − 1px | 防 Windows 误判全屏 | MainWindow.axaml.cs:970 |
| 窗口宽度(非编辑) | screen.Bounds.Width / dpiX(整屏宽) |
MainWindow.axaml.cs:915 |
| 窗口高度(非编辑) | 内容高 + safeT + safeB |
MainWindow.axaml.cs:916 |
| 竖直安全区 | Fluent 20 / Classic 0 |
App.Services.xaml.cs:314;ThemeManifest.cs:20 |
| 停靠位置 6 值 + 默认 1 | 0..5,默认中上 |
Models/Settings.cs:48, 1810-1823 |
| 偏移 X/Y 默认 | 0 / 0(物理像素) |
Models/Settings.cs:49-50 |
| 显示器索引默认 | 0,越界回退主屏 |
Models/Settings.cs:51;MainWindow.axaml.cs:806-812 |
| 忽略工作区 | 默认 false |
Models/Settings.cs:1835 |
| 窗口层级 | 默认 1=置顶;0=置底 |
Models/Settings.cs:52, 1961-1978 |
| 置顶重查模式 | 默认 0;另有 1/2/3(3=1ms 高频) |
Models/Settings.cs:1860;MainWindow.axaml.cs:136-139, 420-436 |
| 任务栏显示条件 | IsWindowMode || IsScreenRecordingModeEnabled |
MainWindow.axaml:34-39 |
| 鼠标穿透(Windows) | WS_EX_LAYERED | WS_EX_TRANSPARENT | WS_EX_NOACTIVATE + SetLayeredWindowAttributes |
WindowPlatformService.cs:130-150 |
| ToolWindow | 非编辑/非自由窗口/非录屏时启用 WS_EX_TOOLWINDOW |
MainWindow.axaml.cs:832-838;WindowPlatformService.cs:173-185 |
| 防截屏 | WDA_EXCLUDEFROMCAPTURE,开关默认 false |
MainWindow.axaml.cs:840;Models/Settings.cs:1862 |
| 提醒特效渲染缩放自动值 | 屏高 ≥1400 → 0.75;≥2000 → 0.5 | MainWindow.axaml.cs:377-392 |
2.2 行(MainWindowLine)
| 参数 | 值 | 证据 |
|---|---|---|
行高 IslandContainerHeight |
40 |
MainWindowLine.axaml:16、FluentTheme/Styles.axaml:65、ClassicTheme/Styles.axaml:16 |
| 内容盒内边距 / 最小宽 | 12 0 / 20 |
FluentTheme/Styles.axaml:109-110、ClassicTheme/Styles.axaml:99-100 |
| 行间距默认 | 5(范围 0–150,步进 5) |
Models/Settings.cs:219;MainWindow.axaml:344;EditModeView.axaml:114-120 |
| 组件外边距 | 6 0(相邻合计 12) |
MainWindow.axaml:396 |
| 行背景圆角 | RadiusX(默认 8,0–20,步进 0.5) |
Models/Settings.cs:183, 1186-1196;SizeDoubleToCornerRadiusConverter.cs:8-17 |
| 行背景边框 | 1px,ControlElevationBorderBrush |
FluentTheme/Styles.axaml:46-47 |
| 行背景阴影 | 0 4 8 2 #48000000 |
FluentTheme/Styles.axaml:49 |
| 背景不透明度 | Opacity 默认 0.5(0–1,步进 0.05),只作用于背景层 |
Models/Settings.cs:64, 1140-1150;FluentTheme/Styles.axaml:44 |
| 行不透明度 | 行级 Opacity 默认 1.0(0.1–1,步进 0.05) |
MainWindowLineSettings.cs:42;MainWindowLine.axaml:51 |
| 行淡出不透明度 | 0.05 |
MainWindowLine.axaml:73-75 |
| 行选择框 | 1.5px 虚线、dash 1/1.5、opacity 0.75、圆角端点、Bevel 连接 |
MainWindow.axaml:353-363 |
| 行操作按钮间距/字号 | 2 / 14 |
MainWindow.axaml:403-406 |
| 行过渡(Fluent) | opacity 100ms;BackgroundWidth 300ms 0.65,0,0.35,1.0 |
FluentTheme/Styles.axaml:264-273 |
| 行过渡(Classic) | opacity 100ms;BackgroundWidth 550ms 0,1,0.5,1.10 |
ClassicTheme/Styles.axaml:202-211 |
| 行挂载淡入 | 250ms 0.25,1,0.5,1,仅 AnimationLevel≥2 |
MainWindowLine.cs:382-401;Models/Settings.cs:1851 |
| 重排动画 | 300ms 0.65,0,0.35,1.0 |
MainWindow.axaml:197-198 |
| 分体主界面组件盒 | Margin -2 0、MinWidth 40、ContentPresenter Margin 16 0 |
FluentTheme/Styles.axaml:245-259 |
| 分体主界面开关 | 全局默认 false;行级 IslandSeparationMode 0/1/2 |
Models/Settings.cs:1852;MainWindowLineSettings.cs:47-50 |
2.3 遮罩 / 浮层 / 进度
| 参数 | 值 | 证据 |
|---|---|---|
| 遮罩斜面角度 | 60°(tan(30°)*h,SlantedHeight 默认 80) |
SlantedMaskControl.cs:284-286, 25-26 |
| 遮罩区段权重 | [0, 0.1, 0.2, 0.4, 0.2, 0.1](5 段 + 首尾 0) |
SlantedMaskControl.cs:298-308 |
| 遮罩区段时长 / 错峰 | RegionDurationMs=360 / StageStaggerMs=120(行模板显式) |
FluentTheme/Styles.axaml:175-180 |
| 打开错峰 | 0/4 → 0ms;1/3 → 90ms;2 → 120ms;QuarticEaseOut |
SlantedMaskControl.cs:177-188 |
| 关闭错峰 | 2 → 0ms;1/3 → 90ms;0/4 → 120ms;QuadraticEaseIn |
SlantedMaskControl.cs:189-200 |
| 遮罩文字淡入 | delay 260ms / 250ms / 0.25,1,0.5,1 |
FluentTheme/Styles.axaml:329-340 |
| 遮罩文字缩放 | 1.1→1.0 / 750ms / delay 260ms | FluentTheme/Styles.axaml:341-352 |
| 强调底淡入 | delay 600ms / 100ms / Forward | FluentTheme/Styles.axaml:355-367 |
| 遮罩投影 | 0 8 32 0 #66000000 |
FluentTheme/Styles.axaml:323-328 |
| 提醒进度条 | Maximum=1,Value=LeftProgress,过渡 50ms 线性 |
FluentTheme/Styles.axaml:131-146;MainWindowLine.axaml:77 |
| 浮层淡入淡出 | 200ms SineEaseIn |
FluentTheme/Styles.axaml:419-451 |
| Classic 遮罩 | Y -50→0 200ms QuadraticEaseIn;关 Y 0→50 delay100ms 200ms QuadraticEaseOut |
ClassicTheme/Styles.axaml:265-318 |
| Classic 首帧投影 | DropShadowEffect blur 8,Effect 过渡 100ms 线性 |
ClassicTheme/Styles.axaml:34-45 |
| 进度精度降低 | 默认 true;tick=max(10, totalSeconds/500) |
Models/Settings.cs:1853;CountDownComponent.axaml.cs:291-295 |
2.4 编辑模式
| 参数 | 值 | 证据 |
|---|---|---|
| 底部操作栏 | bottom 64px、CornerRadius 6、Padding 4、按钮间距 6、1px 边框 |
MainWindow.axaml:595-604 |
| 操作栏分隔线 | 0,0 → 0,25、1px |
MainWindow.axaml:610-613 |
| 抽屉宽度 | 960(SettingsContainerWidth) |
ThemeBase.axaml:37;EditModeView.axaml:600-605 |
| 抽屉圆角 / 阴影 | 8 8 0 0 / 0 8 32 0 #66000000 |
VerticalDrawer.axaml:9, 45 |
| 抽屉内边距 / 标题栏 | 8 8 8 0 / 高 32 |
VerticalDrawer.axaml:53-54 |
| 抽屉过渡 | bottom+height 250ms cubic-bezier(0,0,0,1) |
VerticalDrawer.axaml:29-36 |
| 次抽屉高度比例 | 0.5 |
EditModeView.axaml:608 |
| 设置容器 | Margin 12 12 18 12、Spacing 4 |
StylesBase.axaml:67-71 |
| 组件库项 | 高 50、Margin 0 8、图标 32、描述 12px/0.75、WrapPanel 目标宽 225 |
EditModeView.axaml:177-218 |
| 拖拽阈值 / 预览透明度 | 3 / 0.5 |
EditableComponentsListBox.axaml:286-288 |
| 拖拽插入高亮 | 1s 交替无限,opacity 0.1↔0.6,SineEaseInOut |
EditableComponentsListBox.axaml:307-336 |
| 选中操作条 | CornerRadius 6、Padding 4、Spacing 6、1px 边框、分隔线高 25 |
EditableComponentsListBox.axaml:100-184 |
| 容器组件浮动框 | CornerRadius 6、Padding 4 0、把手宽 20、列表高 40、初始 Y+48 |
MainWindow.axaml:485-537;MainWindow.axaml.cs:1559-1567 |
| 隐藏组件斜条纹 | 45° 重复渐变 #afffffff/#50ffffff |
ComponentPresenter.axaml:20-33 |
| 缩放 | ZoomBorder 0.5–3、speed 1.2、约束开启;设置 Scale 0.75–2.5 步进 0.05 |
MainWindow.axaml:199-212;EditModeView.axaml:50-57 |
2.5 组件(要点)
| 参数 | 值 | 证据 |
|---|---|---|
| 字号资源 | 14 / 16 / 18 / 20 | ThemeBase.axaml:32-35;Models/Settings.cs:197-200 |
| 默认字体 | HarmonyOS Sans SC + FluentSystemIcons-Resizable |
MainWindow.axaml.cs:185-189 |
| 字重 | FontWeight.Medium(默认 500) |
Models/Settings.cs:101 |
| 宿主内边距 | 0 8(上下 8) |
ComponentPresenter.axaml:55-57 |
| 组件宽约束默认 | min 100 / max 300 / fixed 200,全部关闭 | ComponentSettings.cs:30-35, 37, 43 |
| 组件不透明度默认 | 1.0 |
ComponentSettings.cs:46 |
| 日期格式 | ddd MM/dd |
DateComponent.axaml:11 |
| 时钟分隔符逻辑 | !Flash || ShowSeconds || 秒%2==1 |
ClockComponent.axaml.cs:75 |
| 倒计时环 | 22×22、描边 3.1、半径 r=9.5、>100% 按 99.9999 |
CountDownComponent.axaml.cs:34-47 |
| 倒计时默认色/字号 | #FFFF0000 / 16(16–30) |
CountDownComponentSettings.cs;设置页 :410-414 |
| 倒计时格式默认 | %D天 |
同上 |
| 课程列表高 | 40、项 MaxHeight 40 |
LessonsListBox.axaml:41, 107 |
| 课程淡化 | 0.6,150ms CubicEaseInOut |
LessonsListBox.axaml:56-77 |
| 课程强调字号 | 18 + Bold |
LessonControlExpanded.axaml:66-67 |
| 课程左右间隔 | 16px * ScheduleSpacing(0.2–1) |
LessonControlExpanded.axaml:51-56, 219-224 |
| 最小型间隔 | 10px * ScheduleSpacing |
LessonControlMinimized.axaml:33-38 |
| 高亮条 | 高 12、opacity 0.4、margin -2 8 -2 0、radius 2 |
HighlightBox.axaml:15-18 |
| 天气主图尺寸 | 图标 22×22,图标右移 -2px |
WeatherComponent.axaml:42-44, 65-67 |
| 预警药丸 | 高 22、radius 11、文本 14px、margin 4 0 8 0 |
WeatherComponent.axaml:252-263 |
| 降水药丸 | padding 0 8、1px 边框、底色 opacity 0.15、radius = 高/2 |
WeatherComponent.axaml:276-311 |
| 滚动速度默认 | 40 px/s(≥0.1) |
RollingComponentSettings.cs |
| 滚动暂停默认 | 启用、10s、偏移 0 |
同上 |
| 轮播间隔默认 | 15s(≥0.1) |
SlideComponentSettings.cs |
| 轮播动画 | 250ms 0.65,0,0.35,1,位移 ±40 |
SlideComponent.axaml:72-107 |
| 分割线 | 2×25、2px、opacity 0.8 |
SeparatorComponent.axaml:10-13 |
| 默认布局 | 1 行:日期 + 课程表 | ComponentsService.cs:33-52 |
3. 未决问题 / 缺口(需要 Lead 或其它 part 决策)
- 主题颜色 token 未取色:
SolidBackgroundFillColorSecondaryBrush、ControlElevationBorderBrush、AccentFillColorDefaultBrush、SmokeFillColorDefaultBrush、CommandBarOverflowPresenterBackground/BorderBrush、ContentDialogBackground/BorderBrush/BorderWidth、AqiLevel1..6Brush的实际 HEX/alpha 未逐一定位取色(属 part 03 设计系统职责)。本 part 只写资源名与语义。风险:part 03 若用了不同命名,需要一次对齐。 - ProgressBar 默认高度/圆角未确认:FluentAvalonia 的 ProgressBar 模板高度直接影响行底提醒进度条、课程进度条、倒计时进度条的像素高度;part 04/05 已标【推断:约 3px】。需要 design 提供 token 或在实现里固定为 3px。
- Acrylic 的 Electron 等价:编辑模式用了
TransparencyLevelHint="AcrylicBlur, Transparent"。ClassHelper 的既有结论是禁止setBackgroundMaterial()(会破坏逐像素透明)。本 part 给出的方案是"全屏半透明遮罩 + 窗口仍逐像素透明",未验证视觉等价性(不能运行)。需 Lead 决定是否接受该近似,或允许编辑模式例外使用材质。 IsWindowMode的 UI 入口未定位:MainViewModel.EditModeIsWindowMode默认true(MainViewModel.cs:48),但EditModeView.axaml中没有找到"全屏/自由窗口"切换按钮,可能在别的设置页或教程步骤里。属未决。- 提醒在多行之间的分发策略:
NotificationHostService.RegisterNotificationConsumer(this, IsMainLine ? -1 : LineNumber)(MainWindowLine.cs:441)只说明注册顺序,具体"多行都启用提醒时谁显示"的规则在NotificationHostService内部,本 part 未深入(属 part 07)。 StackComponent的测量语义:AvaloniaPanel中带Margin="6 0"的子项,其宽度是否计入容器测量宽,未验证;实现时以实测为准(本 part 按"取子项最大宽度 + 6px 外边距"描述)。ZoomBorder手势细节:ZoomBorder未定位到源码(可能来自 Avalonia 扩展库),滚轮是否需修饰键、双击是否重置、平移边界计算均为【推断】,已在 part 04 §4.6 标注。TextComponent字号与全局字号的关系:文本组件用自身Settings.FontSize(默认 16),不随MainWindowBodyFontSize变化,除非开启资源覆盖。这是源码事实,但产品上可能造成困惑,建议 part 10(设置中心)或 part 16 提示。- 斜面遮罩的完整 CSS:part 04 只给了 5 段权重、60°、时长、缓动与实现思路,未给可直接粘贴的完整
@keyframes+ 5 个clip-path片段(篇幅取舍)。若 Lead 要求"可直接粘贴",需补一节。 - 窗口高度=内容高的方案取舍:ClassIsland 是"窗口随内容高变化",ClassHelper 是"固定包围盒 + 窗内形变"。part 04 按 ClassIsland 写(附 ClassHelper 参考),但两者在"展开/折叠"场景下动画观感不同;需要 Lead 在 part 01/14 统一口径。
MainWindow.axaml:8 Height="1"的初始化意图未深究(Electron 无对应需求)。ReduceProgressAccuracy对主界面行提醒进度条的量化:源码只对倒计时组件做了量化(CountDownComponent.axaml.cs:291-295),行进度条是否也量化未直接看到;part 04 §4.7.1 写成"同样应做降频"属【推断】。ExtraInfo4ShowSecondsSeconds、ShowTomorrowSchedules、PauseOnRule/PauseRule(滚动容器) 等字段在源码中存在但当前 UI 未暴露或未使用,属历史/预留字段;part 05 已标注"保留/兼容",实现时可保留 JSON 字段但不提供 UI。- 多显示器
WindowDockingMonitorIndex与 DPI 混合场景:ClassIsland 用所选屏幕的Scaling统一换算,若显示器 DPI 不同,跨屏拖动时会重算;part 04 只写了公式,跨 DPI 拖动的边界行为未验证。 WindowTopmostRecheckMode的 1ms 高频模式(WindowTopmostRecheckMode==3)在 Electron 下不可照搬(1ms 轮询会烧 CPU),part 04 已建议最小 1000ms;需 Lead 在 part 18(禁止事项/性能底线)确认。
4. Lead 裁决回填(第二轮,已完成)
Lead 对 §3 未决项做了最终裁决,已按"小范围修补"回填 parts 04/05(未重写整篇):
| # | 裁决 | 回填位置 |
|---|---|---|
| 1 | 禁止系统材质 API;编辑态用 rgba(0,0,0,0.30) 全屏遮罩 + 逐像素透明,禁 backdrop-filter;标【推断/差异说明】,不得写"与 Acrylic 完全一致" |
04 §4.8.1、验收 14;拖拽预览浮标降级色 §4.8.8 |
| 2 | 窗口改采固定包围盒 + 窗内形变:宽 = 屏宽,高 = contentMaxHeight + 2*safePadding,setBounds 节流 ≥100ms;编辑模式扩展为「屏宽 ×(屏高−1px)」+ 四边 60px 安全边距 + 开鼠标;保留 ClassIsland 视觉结果(可见岛高 = 行高之和 + 行距) |
04 §4.1 约定 1、§4.3 全节重写(4.3.1 裁决 / 4.3.2 视觉基准 / 4.3.3 编辑画布 / 4.3.4 节流)、§4.6、§4.8.2、§4.9、验收 5/5.1/6/14 |
| 3 | 进度条高度定为 3px(--ci-progress-height),3 处【推断≈3px】改确定值 |
04 §4.4 token 表 + §4.7.1 + 验收 8.1;05 §5.4、§5.5.2、§5.15 |
| 4 | IsWindowMode 不实现 UI 入口,保留字段与能力说明,标 P2/【推断】;注明 2.1 中该设置存在但编辑页无可见切换按钮 |
04 §4.2 第 5 条 |
| 5 | 置顶:事件驱动 + 兜底轮询 ≥1000ms,禁止 1ms/10ms 级轮询,另列各模块刷新频率 | 04 §4.2 第 4 条 + 新增 §4.2.1 性能底线 + 验收 5.1 |
| 6 | ZoomBorder:仅 Ctrl+滚轮 0.5–3.0 + 双击重置;不做平移(Space+drag 标 P2/【推断】) |
04 §4.6 全节重写 |
| 7 | 提醒多行分发规则归 part 07;04 只保留宿主与 IsNotificationEnabled 标记 |
04 §4.5.8、验收 8 |
| 8 | 预留 JSON 字段保留 schema、不给 UI,统一标【预留】 | 05 §5.5.5、§5.8、§5.9(含统一处置说明) |
修补后字数:04 = CJK 8360(+1859)、05 = CJK 7173(+191)。仍为只读分析、未运行任何程序、未改 repos/。
5. 自检
- 数值全部有
路径:行号证据或标【推断】。 - 覆盖
MainWindow.axaml(.cs)、MainWindowLine、两套主题 Styles、全部 11 个组件 axaml+cs、8 个组件设置控件、EditMode 三个文件、ComponentPresenter、LessonsListBox + 3 种课程控件、SlantedMaskControl、VerticalDrawer、两个关键 Converter、Windows 平台窗口特性实现。 - 覆盖 ClassHelper 侧 island.ts / IslandApp.vue / spring.ts / squircle.ts / classic-island.css / custom-island.css / custom-runtime.css / ComponentNode.vue / shared island-layout.ts + constants.ts。
- 两份 part 均含「验收标准」小节,且均为中文祈使句、无"建议考虑"式模糊表述。
- CJK 字数:04 = 8360,05 = 7173(要求 ≥5000)。
- Lead 8 条裁决已全部回填(见 §4)。
- 未构建、未运行、未截图、未安装依赖、未修改
repos/。