런처 클립보드 이미지 미리보기 창을 추가하고 개발 문서 이력 기록 규칙을 반영\n\n- Phase L2-3로 클립보드 이미지 전용 미리보기 창 ClipboardImagePreviewWindow를 신규 추가\n- 원본 해상도 이미지 표시, Ctrl+휠 및 + / - / 0 / F / Esc 단축키 기반 줌 조작 지원\n- PNG, JPEG, BMP 저장과 클립보드 복사 기능을 미리보기 창에서 바로 수행 가능하도록 구현\n- LauncherWindow에서 # 클립보드 이미지 항목 선택 후 Shift+Enter로 미리보기 창을 여는 흐름 추가\n- 단축키 도움말에 클립보드 이미지 미리보기 동작을 반영\n- 런처 CenterOnScreen을 마우스가 위치한 모니터 기준으로 보정해 다중 디스플레이 표시 위치를 개선\n- AGENTS.md에 README.md, docs/DEVELOPMENT.md 이력 선반영 및 업데이트 날짜/시간 기록 규칙을 추가\n- README.md, docs/DEVELOPMENT.md, docs/LAUNCHER_ROADMAP.md에 v0.7.3 이력과 2026-04-04 10:05 (KST) 업데이트 시각 반영\n- dotnet build 경고 0 / 오류 0, dotnet test 436 통과 확인
Some checks failed
Release Gate / gate (push) Has been cancelled

This commit is contained in:
2026-04-04 10:12:15 +09:00
parent 442e8c2415
commit c56a841549
9 changed files with 630 additions and 80 deletions

View File

@@ -7,6 +7,8 @@ using System.Windows.Media.Animation;
using Microsoft.Win32;
using AxCopilot.Models;
using AxCopilot.ViewModels;
using FormsCursor = System.Windows.Forms.Cursor;
using FormsScreen = System.Windows.Forms.Screen;
namespace AxCopilot.Views;
@@ -676,16 +678,20 @@ public partial class LauncherWindow : Window
private void CenterOnScreen()
{
var screen = SystemParameters.WorkArea;
var monitor = FormsScreen.FromPoint(FormsCursor.Position);
var transform = PresentationSource.FromVisual(this)?.CompositionTarget?.TransformFromDevice ?? Matrix.Identity;
var topLeft = transform.Transform(new Point(monitor.WorkingArea.Left, monitor.WorkingArea.Top));
var bottomRight = transform.Transform(new Point(monitor.WorkingArea.Right, monitor.WorkingArea.Bottom));
var screen = new Rect(topLeft, bottomRight);
// ActualHeight/ActualWidth는 첫 Show() 전 레이아웃 패스 이전에 0일 수 있음 → 기본값으로 보호
var w = ActualWidth > 0 ? ActualWidth : 640;
var h = ActualHeight > 0 ? ActualHeight : 80;
Left = (screen.Width - w) / 2 + screen.Left;
Left = screen.Left + (screen.Width - w) / 2;
Top = _vm.WindowPosition switch
{
"center" => (screen.Height - h) / 2 + screen.Top,
"bottom" => screen.Height * 0.75 + screen.Top,
_ => screen.Height * 0.2 + screen.Top, // "center-top" (기본)
"center" => screen.Top + (screen.Height - h) / 2,
"bottom" => screen.Top + screen.Height * 0.75,
_ => screen.Top + screen.Height * 0.2, // "center-top" (기본)
};
}
@@ -863,6 +869,12 @@ public partial class LauncherWindow : Window
if (shift)
{
if (TryOpenClipboardImagePreview())
{
e.Handled = true;
break;
}
// 퍼지 파일 검색 결과: Shift+Enter → 파일이 있는 폴더 열기
if (_vm.SelectedItem?.Data is AxCopilot.Services.IndexEntry shiftEntry)
{
@@ -1297,7 +1309,7 @@ public partial class LauncherWindow : Window
"Ctrl+Shift+E 탐색기에서 열기",
"Ctrl+Enter 관리자 실행",
"Alt+Enter 속성 보기",
"Shift+Enter 대형 텍스트",
"Shift+Enter 대형 텍스트 / 클립보드 이미지 미리보기",
};
CustomMessageBox.Show(