2.1 KiB
2.1 KiB
Contract: 캡쳐 이미지 브릿지 + 챗 첨부
C#→JS 메시지 (신규)
기존 SendToWeb(CoreWebView2.PostWebMessageAsJson) 채널 재사용.
| 방향 | 메시지 | 처리 |
|---|---|---|
| C#→JS | {type:"capture.image", dataUrl} |
프론트가 캡쳐 이미지를 챗 입력창 첨부로 받음 |
dataUrl:data:image/png;base64,...(PNG).- App 캡쳐 완료 순서:
ShowPalette()→NavigateApp("/snap/new")→SendCaptureImage(dataUrl). (navigate·소환은 기존 배선.) - 기존 메시지(navigate·paste.target·window.·snippets. 등)와 같은 리스너 허브에서
type으로 분기.
C# 표면 (신규/확장)
Shell/Platform/ScreenCapture.cs—static byte[] CapturePng(int x, int y, int width, int height): 물리 좌표 영역을CopyFromScreen으로 PNG 바이트. (좌표 변환은 호출측=오버레이 몫.)Views/CaptureOverlayWindow— 드래그 선택 + DIP→물리 변환 +ScreenCapture.CapturePng호출 →event Action<string> Captured(base64 dataUrl) /event Action Cancelled.App.xaml.cs— 핫키 id0x1002(Ctrl+Shift+9) → 오버레이 표시.Captured→ 위 순서 실행.Cancelled→ 무시.PaletteWindow.SendCaptureImage(string dataUrl) => Web.SendToWeb(new { type = "capture.image", dataUrl });
프론트 계약 (bridgeNavigate.ts)
// 마지막 캡쳐 이미지 dataUrl 을 1회 소비(마운트 레이스 대비). 없으면 "".
export function consumePendingCaptureImage(): string
// capture.image 수신 → pendingCaptureImage 갱신 + window.dispatchEvent(new CustomEvent("bridge:captureImage", { detail: { dataUrl } }))
프론트 계약 (Composer.tsx)
- 상태
imageAttachments: string[](dataUrl). 마운트 시consumePendingCaptureImage()push +bridge:captureImage구독 push. X 제거. (data-model.md 규칙.) - v1 전송: 텍스트만. 이미지 첨부는 미전송 + 전송 후 정리.
순수 브라우저(dev)
SendToWeb/chrome.webview 없음 → capture.image 안 옴, 캡쳐 기능 비활성(데스크톱 전용). 기존 챗은 그대로.