현상
`samples/exam_math.hwp` 의 수식 객체를 더블클릭했을 때 수식 편집기가 나타나야 하지만, 1페이지만 정상 동작 하고 2페이지부터 오동작 .
오동작 시 `findPictureAtClick` 이 수식을 hit 으로 인식하지 못하여 일반 텍스트 hitTest fallback 으로 진입 → 의도하지 않은 위치로 캐럿 이동.
재현:
rhwp-studio 에서 `samples/exam_math.hwp` 열기
1페이지의 수식 더블클릭 → 정상 동작 (수식 편집기 등장)
2페이지의 7번 문항 수식 (큰 수식, paraIdx=65 ci=0) 더블클릭 → 편집기 안 나타남 + 캐럿이 다른 위치로 이동
Rust 측 점검 결과 — 정합
`get_page_control_layout_native` 의 controls 배열에 page 2 의 7번 문항 수식이 정상 수집됨:
paraIdx
ci
x
y
w
h
64
0
622.1
150.7
27.8
15.0
64
1
739.9
150.7
9.8
15.0
65
0
589.5
191.7
131.7
37.3
66
0
657.5
255.4
26.8
15.0
67
0..4
570.8~912.8
296.1
7~14
15.0
bbox 좌표는 모두 페이지 내부 좌표 (page 2 의 모든 y < 1390). rust 측 데이터는 정합 .
TS 측 의심 영역
`rhwp-studio/src/engine/input-handler-mouse.ts` 의 page 좌표 계산:
```ts
const pageIdx = this.virtualScroll.getPageAtY(contentY);
const pageX = (contentX - pageLeft) / zoom;
const pageY = (contentY - pageOffset) / zoom;
```
후속 진단 후보:
(a) `virtualScroll.getPageAtY(contentY)` 가 page 2 를 page 1 로 잘못 반환 → `getPageControlLayout(잘못된 page)` 결과와 매칭 실패
(b) `pageOffset` 차감 누적 갭 → pageY 부정합
(c) page 2 부터 `pictureObjectRenderer` 또는 `active` 상태 비활성화
진단 단계 (제안)
`findPictureAtClick` 진입부에 임시 디버그 로그 추가 — pageIdx, pageX, pageY, layout.controls 길이, 매칭 시도 영역
사용자 콘솔 로그 분석 → 위 후보 (a)/(b)/(c) 중 어느 영역인지 좁히기
본질 정정 + 회귀 테스트 + 시각 판정
메모
본 이슈는 PR fix: LaTeX 분수 수식 미리보기 파싱 보정 (#143 1차) #563 (LaTeX 분수 미리보기) 처리 사이클 중 작업지시자가 발견하여 분리 등록.
1페이지 정상 / 2페이지부터 오동작이라는 매우 구체적 증상 → multi-page 좌표 변환 영역 가설 유력.
`feedback_process_must_follow` 정합으로 별도 task 사이클 분리.
현상
`samples/exam_math.hwp` 의 수식 객체를 더블클릭했을 때 수식 편집기가 나타나야 하지만, 1페이지만 정상 동작하고 2페이지부터 오동작.
오동작 시 `findPictureAtClick` 이 수식을 hit 으로 인식하지 못하여 일반 텍스트 hitTest fallback 으로 진입 → 의도하지 않은 위치로 캐럿 이동.
재현:
Rust 측 점검 결과 — 정합
`get_page_control_layout_native` 의 controls 배열에 page 2 의 7번 문항 수식이 정상 수집됨:
bbox 좌표는 모두 페이지 내부 좌표 (page 2 의 모든 y < 1390). rust 측 데이터는 정합.
TS 측 의심 영역
`rhwp-studio/src/engine/input-handler-mouse.ts` 의 page 좌표 계산:
```ts
const pageIdx = this.virtualScroll.getPageAtY(contentY);
const pageX = (contentX - pageLeft) / zoom;
const pageY = (contentY - pageOffset) / zoom;
```
후속 진단 후보:
진단 단계 (제안)
메모