fix(B07 CAD·M02): 가운데 단추 끌기 때 페이지가 같이 움직이던 것 · 집계표 미리보기는 보기 전용 조작
- 캔버스 가운데 단추 mousedown · auxclick 의 기본 동작(자동 스크롤 · 붙여넣기)을 막음 — 휠은 이미 passive:false 로 막음. pointerdown 은 막지 않음(막으면 mousedown 이 안 와 팬이 끊김). - 미리보기(viewOnly — M02 구조물집계표 「도면 정보」 카드): 왼쪽 끌기 = 화면 옮기기 · 휠 확대 · 두 번 누름 = 전체 맞춤 · 선택 · 가까운 개체 강조 · 스냅 · 십자 커서 · 명령 안내 · 좌표 풍선 없음(손 모양 커서). [도면 수정] 편집 화면 · 도면 양식 · B07 은 그대로. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01K7JS47SacjPxZ718QsZKyr
This commit is contained in:
@@ -42,6 +42,7 @@ import {
|
||||
getSnapPoint,
|
||||
getSnapPointOnAngleGuide,
|
||||
isHostSave,
|
||||
isViewOnly,
|
||||
redo,
|
||||
setActiveToolActor,
|
||||
setAngleStep,
|
||||
@@ -111,6 +112,11 @@ export class InputController {
|
||||
canvas?.addEventListener('contextmenu', (evt) => {
|
||||
evt.preventDefault();
|
||||
});
|
||||
// 가운데 단추 — 브라우저 자동 스크롤(페이지가 같이 움직임) · 붙여넣기를 막는다.
|
||||
// 막는 자리는 mousedown(아래 handleMouseDown) — pointerdown 을 막으면 mousedown 이 안 와 팬이 끊긴다.
|
||||
canvas?.addEventListener('auxclick', (evt: MouseEvent) => {
|
||||
if (evt.button === MouseButton.Middle) evt.preventDefault();
|
||||
});
|
||||
// 캔버스 밖(리본·패널) 위에서의 트랙패드 핀치도 브라우저를 확대시키지 않는다.
|
||||
// ctrl이 없는 휠은 그대로 둬서 패널 스크롤은 살린다.
|
||||
document.addEventListener(
|
||||
@@ -191,6 +197,10 @@ export class InputController {
|
||||
if (evt.button === MouseButton.Middle) {
|
||||
setPanStartLocation(null);
|
||||
}
|
||||
if (evt.button === MouseButton.Left && isViewOnly()) {
|
||||
setPanStartLocation(null);
|
||||
return;
|
||||
}
|
||||
if (evt.button === MouseButton.Left) {
|
||||
if (this.isSelectToolActive()) {
|
||||
// 선택 도구는 누를 때 첫 점을 이미 보냈다. 끌었으면 놓는 자리로 사각형을 닫는다.
|
||||
@@ -264,6 +274,9 @@ export class InputController {
|
||||
setPanStartLocation(newScreenMouseLocation);
|
||||
}
|
||||
|
||||
// 미리보기는 보기만 — 스냅 · 가까운 개체 강조를 하지 않는다.
|
||||
if (isViewOnly()) return;
|
||||
|
||||
// Calculate angle guides and snap points
|
||||
if (getSnapEnabled()) {
|
||||
calculateAngleGuidesAndSnapPoints();
|
||||
@@ -322,11 +335,18 @@ export class InputController {
|
||||
|
||||
public handleMouseDown(evt: MouseEvent) {
|
||||
if (evt.button === MouseButton.Middle) {
|
||||
evt.preventDefault(); // 자동 스크롤로 부모 페이지가 같이 굴러가던 것
|
||||
setPanStartLocation(this.getCanvasPoint(evt));
|
||||
return;
|
||||
}
|
||||
if (evt.button !== MouseButton.Left) return;
|
||||
if ((evt.target as HTMLElement | null)?.closest('.controls')) return;
|
||||
if (isViewOnly()) {
|
||||
// 미리보기 — 왼쪽 끌기는 선택 상자 대신 화면 옮기기.
|
||||
evt.preventDefault();
|
||||
setPanStartLocation(this.getCanvasPoint(evt));
|
||||
return;
|
||||
}
|
||||
// AutoCAD처럼 누른 자리에서 사각형이 시작되도록 선택 도구에만 첫 점을 미리 보낸다.
|
||||
// 다른 도구는 예전처럼 놓을 때 한 점을 받는다 (끌다가 점이 두 개 찍히지 않게).
|
||||
if (!this.isSelectToolActive()) return;
|
||||
|
||||
Reference in New Issue
Block a user