feat: ClassIsland / ClassHelper 灵动岛提示词套件
- 重构版主提示词(14 parts,面向 ClassHelper 灵动岛重构) - ClassIsland 全量规格提示词(20 parts,含分卷与逐章版本) - 投喂指南、分卷、逐节文件 - 调研记录、一致性基线、生成与质检脚本
This commit is contained in:
commit
22c1784bab
117 files changed
+47759
No files matched your search
@@ -0,0 +1,259 @@
|
||||
# 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 决策)
|
||||
|
||||
1. **主题颜色 token 未取色**:`SolidBackgroundFillColorSecondaryBrush`、`ControlElevationBorderBrush`、`AccentFillColorDefaultBrush`、`SmokeFillColorDefaultBrush`、`CommandBarOverflowPresenterBackground/BorderBrush`、`ContentDialogBackground/BorderBrush/BorderWidth`、`AqiLevel1..6Brush` 的实际 HEX/alpha 未逐一定位取色(属 part 03 设计系统职责)。本 part 只写资源名与语义。**风险**:part 03 若用了不同命名,需要一次对齐。
|
||||
2. **ProgressBar 默认高度/圆角未确认**:FluentAvalonia 的 ProgressBar 模板高度直接影响行底提醒进度条、课程进度条、倒计时进度条的像素高度;part 04/05 已标【推断:约 3px】。需要 design 提供 token 或在实现里固定为 3px。
|
||||
3. **Acrylic 的 Electron 等价**:编辑模式用了 `TransparencyLevelHint="AcrylicBlur, Transparent"`。ClassHelper 的既有结论是禁止 `setBackgroundMaterial()`(会破坏逐像素透明)。本 part 给出的方案是"全屏半透明遮罩 + 窗口仍逐像素透明",**未验证视觉等价性**(不能运行)。需 Lead 决定是否接受该近似,或允许编辑模式例外使用材质。
|
||||
4. **`IsWindowMode` 的 UI 入口未定位**:`MainViewModel.EditModeIsWindowMode` 默认 `true`(`MainViewModel.cs:48`),但 `EditModeView.axaml` 中没有找到"全屏/自由窗口"切换按钮,可能在别的设置页或教程步骤里。属未决。
|
||||
5. **提醒在多行之间的分发策略**:`NotificationHostService.RegisterNotificationConsumer(this, IsMainLine ? -1 : LineNumber)`(`MainWindowLine.cs:441`)只说明注册顺序,具体"多行都启用提醒时谁显示"的规则在 `NotificationHostService` 内部,本 part 未深入(属 part 07)。
|
||||
6. **`StackComponent` 的测量语义**:Avalonia `Panel` 中带 `Margin="6 0"` 的子项,其宽度是否计入容器测量宽,未验证;实现时以实测为准(本 part 按"取子项最大宽度 + 6px 外边距"描述)。
|
||||
7. **`ZoomBorder` 手势细节**:`ZoomBorder` 未定位到源码(可能来自 Avalonia 扩展库),滚轮是否需修饰键、双击是否重置、平移边界计算均为【推断】,已在 part 04 §4.6 标注。
|
||||
8. **`TextComponent` 字号与全局字号的关系**:文本组件用自身 `Settings.FontSize`(默认 16),不随 `MainWindowBodyFontSize` 变化,除非开启资源覆盖。这是源码事实,但产品上可能造成困惑,建议 part 10(设置中心)或 part 16 提示。
|
||||
9. **斜面遮罩的完整 CSS**:part 04 只给了 5 段权重、60°、时长、缓动与实现思路,未给可直接粘贴的完整 `@keyframes` + 5 个 `clip-path` 片段(篇幅取舍)。若 Lead 要求"可直接粘贴",需补一节。
|
||||
10. **窗口高度=内容高的方案取舍**:ClassIsland 是"窗口随内容高变化",ClassHelper 是"固定包围盒 + 窗内形变"。part 04 按 ClassIsland 写(附 ClassHelper 参考),但两者在"展开/折叠"场景下动画观感不同;需要 Lead 在 part 01/14 统一口径。
|
||||
11. **`MainWindow.axaml:8 Height="1"`** 的初始化意图未深究(Electron 无对应需求)。
|
||||
12. **`ReduceProgressAccuracy` 对主界面行提醒进度条的量化**:源码只对倒计时组件做了量化(`CountDownComponent.axaml.cs:291-295`),行进度条是否也量化未直接看到;part 04 §4.7.1 写成"同样应做降频"属【推断】。
|
||||
13. **`ExtraInfo4ShowSecondsSeconds`、`ShowTomorrowSchedules`、`PauseOnRule`/`PauseRule`(滚动容器)** 等字段在源码中存在但当前 UI 未暴露或未使用,属历史/预留字段;part 05 已标注"保留/兼容",实现时可保留 JSON 字段但不提供 UI。
|
||||
14. **多显示器 `WindowDockingMonitorIndex` 与 DPI 混合场景**:ClassIsland 用所选屏幕的 `Scaling` 统一换算,若显示器 DPI 不同,跨屏拖动时会重算;part 04 只写了公式,跨 DPI 拖动的边界行为未验证。
|
||||
15. **`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. 自检
|
||||
|
||||
- [x] 数值全部有 `路径:行号` 证据或标【推断】。
|
||||
- [x] 覆盖 `MainWindow.axaml(.cs)`、`MainWindowLine`、两套主题 Styles、全部 11 个组件 axaml+cs、8 个组件设置控件、EditMode 三个文件、ComponentPresenter、LessonsListBox + 3 种课程控件、SlantedMaskControl、VerticalDrawer、两个关键 Converter、Windows 平台窗口特性实现。
|
||||
- [x] 覆盖 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。
|
||||
- [x] 两份 part 均含「验收标准」小节,且均为中文祈使句、无"建议考虑"式模糊表述。
|
||||
- [x] CJK 字数:04 = 8360,05 = 7173(要求 ≥5000)。
|
||||
- [x] Lead 8 条裁决已全部回填(见 §4)。
|
||||
- [x] 未构建、未运行、未截图、未安装依赖、未修改 `repos/`。
|
||||
Reference in new issue
Block a user