Skip to content

Commit cf208f8

Browse files
committed
feat(crop): follow VS Code theme
1 parent 518f86f commit cf208f8

11 files changed

Lines changed: 16 additions & 11 deletions

File tree

docs/types/models/README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@
3535

3636
Control 协议通过 `ControlHostState.saveDraw` 同步识别绘图落盘状态,并使用 `switch-save-draw` Toolkit target 请求切换;`shortcutTarget` 标识当前窗口是否持有全局快捷键目标租约,`activate-shortcuts` 用于取得该租约。
3737

38+
Crop 协议的 `CropSettings` 仅同步用户可配置的裁剪交互和可视化参数;Canvas 背景色不属于协议设置,由 Webview 直接跟随 VS Code 编辑器主题。
39+
3840
### 2. 通用协议基类型
3941

4042
`src/webview/base.ts` 定义:

docs/webview/models/README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
- **模板匹配**: 使用自定义模板进行图像匹配
4040
- **识别测试**: 运行 pipeline 识别测试
4141
- **可视化设置**: ROI 编辑、绿色蒙版、颜色阈值;识别详情为空时跳过绘制
42+
- **主题适配**: Canvas 背景始终跟随 VS Code 编辑器背景色,并使用主题边框界定可交互区域;不提供独立背景色配置
4243

4344
### 3. Launch Panel(启动面板)
4445

@@ -70,6 +71,7 @@
7071
- 读取 VS Code CSS 自定义属性(`--vscode-*`
7172
- 动态构建 Naive UI 主题覆盖
7273
- `MutationObserver` 监听主题变化
74+
- 将解析后的编辑器背景色暴露为响应式状态,供 Crop Canvas 跟随主题重绘
7375

7476
### 国际化
7577

docs/webview/tech/README.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,10 +101,12 @@ Vite (vite.config.ts)
101101

102102
## Crop Canvas 渲染调度
103103

104-
Crop Canvas 采用按需渲染:Vue reactive effect 跟踪 `draw()` 读取的图像、视口、选框、设置和识别结果等状态,状态变更后由 `requestAnimationFrame` 合并到下一浏览器帧绘制。画面静止时不重绘;仅获得焦点的轮廓选区虚线动画会连续请求帧。Webview 隐藏时取消待处理帧,恢复可见后主动补绘。
104+
Crop Canvas 采用按需渲染:Vue reactive effect 跟踪 `draw()` 读取的图像、视口、选框、设置、主题背景色和识别结果等状态,状态变更后由 `requestAnimationFrame` 合并到下一浏览器帧绘制。画面静止时不重绘;仅获得焦点的轮廓选区虚线动画会连续请求帧。Webview 隐藏时取消待处理帧,恢复可见后主动补绘。
105105

106106
绿色蒙版直接以绿色像素保存在独立 Canvas 中,并通过 `triggerRef()` 通知主 Canvas 失效;主绘制流程直接叠加该 Canvas,避免每帧创建原图尺寸的临时 Canvas。切换图像时会释放旧蒙版及其历史记录。
107107

108+
`theme.ts``--vscode-editor-background` 解析为 Canvas 可直接使用的颜色字符串,并通过 `editorBackgroundColor` ref 共享;主题变化时该 ref 更新并触发 Crop Canvas 重绘。用户不能为 Crop Canvas 单独配置背景色。
109+
108110
## 依赖关系
109111

110112
### 工作区依赖

pkgs/types/src/webview/crop.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ import type { HostStateBase } from './base'
22

33
export type CropSettings = {
44
saveAddRoiInfo?: boolean
5-
backgroundFill?: string
65
selectFill?: string
76
selectOpacity?: number
87
selectOutlineOnly?: boolean

pkgs/webview/src/crop/App.vue

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,9 @@ canvasSt.setup(canvasSizeEl, canvasEl)
4444
position: 'absolute',
4545
left: 0,
4646
top: 0,
47+
outline:
48+
'1px solid var(--vscode-editorWidget-border, var(--vscode-panel-border, transparent))',
49+
outlineOffset: '-1px',
4750
cursor: controlSt.cursor.value
4851
}"
4952
@wheel.prevent="controlSt.onWheel"

pkgs/webview/src/crop/states/canvas.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import {
1010
watch
1111
} from 'vue'
1212

13+
import { editorBackgroundColor } from '../../utils/theme'
1314
import { Box, Pos, Size, Viewport } from '../utils/2d'
1415
import * as controlSt from './control'
1516
import * as greenMaskSt from './greenMask'
@@ -48,7 +49,7 @@ export function useDrawStep(step: DrawStep) {
4849
export function draw(ctx: CanvasRenderingContext2D) {
4950
ctx.reset()
5051

51-
ctx.fillStyle = settingsSt.backgroundFill.eff
52+
ctx.fillStyle = editorBackgroundColor.value
5253
ctx.fillRect(0, 0, ...size.value.flat())
5354

5455
if (imageSt.element.value) {

pkgs/webview/src/crop/states/settings.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,6 @@ function useSetting<K extends keyof CropSettings>(
7777
}
7878

7979
export const saveAddRoiInfo = useSetting('saveAddRoiInfo', false)
80-
export const backgroundFill = useSetting('backgroundFill', 'white', isColor)
8180
export const selectFill = useSetting('selectFill', 'wheat', isColor)
8281
export const selectOpacity = useSetting('selectOpacity', 0.3)
8382
export const selectOutlineOnly = useSetting('selectOutlineOnly', false)

pkgs/webview/src/crop/views/SettingsView.vue

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,6 @@ import * as settingsSt from '../states/settings'
1717
:off="t('maa.crop.settings.without-roi')"
1818
></settings-switch>
1919

20-
<settings-input
21-
:inst="settingsSt.backgroundFill"
22-
:title="t('maa.crop.settings.background-color')"
23-
isColor
24-
></settings-input>
2520
<settings-input
2621
:inst="settingsSt.selectFill"
2722
:title="t('maa.crop.settings.select-color')"

pkgs/webview/src/utils/locale/locale.en.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,6 @@ export default {
139139
'maa.crop.settings.saving-file-with-roi': 'Add ROI in saved file name',
140140
'maa.crop.settings.with-roi': 'With ROI',
141141
'maa.crop.settings.without-roi': 'Without ROI',
142-
'maa.crop.settings.background-color': 'Background color',
143142
'maa.crop.settings.select-color': 'Selected color',
144143
'maa.crop.settings.select-opacity': 'Selected opacity',
145144
'maa.crop.settings.select-outline-only': 'Outline only',

pkgs/webview/src/utils/locale/locale.zh-cn.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,6 @@ export default {
135135
'maa.crop.settings.saving-file-with-roi': '保存时文件名中附带ROI',
136136
'maa.crop.settings.with-roi': '附带ROI',
137137
'maa.crop.settings.without-roi': '不附带ROI',
138-
'maa.crop.settings.background-color': '背景色',
139138
'maa.crop.settings.select-color': '选中色',
140139
'maa.crop.settings.select-opacity': '选中透明度',
141140
'maa.crop.settings.select-outline-only': '仅显示轮廓',

0 commit comments

Comments
 (0)