- Ctrl+Alt+A/Z 맨 앞 창 통째 캡쳐(DWM 확장 프레임 경계), S/X 드래그 캡쳐. A/S 새 대화, Z/X 마지막 대화 - 캡쳐 후 창을 확실히 앞으로(AttachThreadInput), capture.image 에 목적지 path 실어 그 Composer 만 소비 - 드래그 선택영역 원본 밝기·더블버퍼(번쩍임) — code-assistant-v2 복사본에서 이식 - 단축키 Ctrl+Alt+Q/W: Eclipse·ADT·SAP GUI 바인딩 목록 대조해 비어 있는 조합으로 - 버튼 cursor:pointer(Tailwind v4), 가운데 스피너, 스니펫→챗 버튼, 스니펫 검색창 높이 84→88 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2.2 KiB
2.2 KiB
Contract: 캡쳐 이미지 브릿지 + 챗 첨부
C#→JS 메시지 (신규)
기존 SendToWeb(CoreWebView2.PostWebMessageAsJson) 채널 재사용.
| 방향 | 메시지 | 처리 |
|---|---|---|
| C#→JS | {type:"capture.image", path, dataUrl} |
프론트가 캡쳐 이미지를 지정된 챗 입력창 첨부로 받음 |
path: 캡쳐를 받을 route(/snap/new또는/snap/s/:id).dataUrl:data:image/png;base64,...(PNG).- App 캡쳐 완료 순서: 창 소환 → 대상 route로 이동 →
{type:"capture.image", path, dataUrl}전송. - 기존 메시지(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)
// path가 일치하는 마지막 캡쳐 이미지를 1회 소비하고, 다르면 pending을 유지함.
export function consumePendingCaptureImage(path: string): string
// capture.image 수신 → {path, dataUrl} 보관 + bridge:captureImage 이벤트 발생
프론트 계약 (Composer.tsx)
capturePath와 메시지path가 같은 Composer만 pending 이미지를 소비함. 네비게이션 직전의 다른 Composer가 이미지를 훔치지 않는다.- 새 대화와 기존 대화 모두 캡쳐 이미지를 누적하고 X로 제거할 수 있다.
- v1 전송: 텍스트만. 이미지 첨부는 미전송 + 전송 후 정리.
순수 브라우저(dev)
SendToWeb/chrome.webview 없음 → capture.image 안 옴, 캡쳐 기능 비활성(데스크톱 전용). 기존 챗은 그대로.