Skip to content

rhwp-studio: 드래그 선택 하이라이트 오버플로우 수정#663

Closed
postmelee wants to merge 4 commits into
edwardkim:develfrom
postmelee:codex/task658-selection-drag-fix
Closed

rhwp-studio: 드래그 선택 하이라이트 오버플로우 수정#663
postmelee wants to merge 4 commits into
edwardkim:develfrom
postmelee:codex/task658-selection-drag-fix

Conversation

@postmelee

Copy link
Copy Markdown
Collaborator

요약

  • samples/exam_social.hwp에서 드래그 선택 하이라이트가 실제 텍스트/페이지 폭을 넘어 확장되는 문제를 수정했습니다.
  • 선택 rect 계산 시 같은 문자 오프셋이 이전 줄의 끝과 다음 줄의 시작에 동시에 걸리는 경우를 구분하도록 커서 hit bias를 추가했습니다.
  • 드래그 중 선택 하이라이트 DOM 노드를 재사용하고 동일 rect 반복 렌더링을 건너뛰어 불필요한 DOM churn을 줄였습니다.
  • 수정 후 별도로 관찰된 커서/스크롤 위치 튐은 rhwp-studio: 텍스트 드래그 선택 중 커서와 스크롤 위치가 튀는 현상 #661 follow-up 이슈로 분리했습니다.

Closes #658

원인

선택 rect 계산에서 시작/끝 오프셋 모두 동일한 렌더 트리 hit 탐색을 사용했습니다. 줄바꿈 경계에서는 같은 문자 오프셋이 이전 줄 TextRun의 끝이면서 다음 줄 TextRun의 시작일 수 있는데, 선택 시작점이 이전 줄 끝 좌표로 해석되면서 하이라이트가 오른쪽으로 과도하게 확장되었습니다.

변경 사항

  • 선택 rect 시작/끝 위치에 각각 맞는 cursor hit bias를 추가했습니다.
  • 표 셀 및 본문 multiline 선택 경계 회귀 테스트를 추가했습니다.
  • rhwp-studio: 마우스 드래그 텍스트 선택 하이라이트가 페이지 밖으로 튀고 버벅임 #658 선택 rect를 빠르게 점검할 수 있는 inspect_658_selection 진단 예제를 추가했습니다.
  • SelectionRenderer가 기존 highlight div를 재사용하고 남는 노드는 숨기도록 변경했습니다.
  • 드래그 중 caret 업데이트를 가볍게 처리하는 경로를 추가했습니다.

검증

  • cargo test --test issue_658_text_selection_rects
  • cargo test --lib --release
  • cd rhwp-studio && npm run build
  • cargo run --example inspect_658_selection
  • 로컬 웹 계측으로 samples/exam_social.hwp 선택 동작 확인
    • 선택 rect 최대 오른쪽 경계: 956.6px
    • 페이지 폭: 1028.0px
    • 선택 레이어 노드 풀 재사용 확인: 18 -> 3 -> 0 visible nodes, 전체 노드 수 증가 없음

후속 작업

  • #661에서 특정 드래그 시작 상황의 커서 및 페이지 스크롤 위치 튐 문제를 별도로 추적합니다.

@postmelee postmelee closed this May 7, 2026
@postmelee postmelee deleted the codex/task658-selection-drag-fix branch May 7, 2026 07:32
edwardkim added a commit that referenced this pull request May 8, 2026
PR #664 (Task #658): rhwp-studio 드래그 선택 하이라이트 오버플로우 수정
- merge commit: c6bf769 (4 commits 단계별 보존 no-ff merge — 작업지시자 직접 결정)
- 본질 정정: cursor hit bias (cursor_nav.rs +118/-53) + selection-renderer DOM churn 정정
- 본 환경 결정적 검증 1165 lib + issue_658 2/2 + TypeScript clean + clippy clean
- WASM 빌드 4,584,723 bytes
- 작업지시자 시각 판정 ★ 통과 (exam_social.hwp 드래그 선택 페이지 폭 안 정합)

컨트리뷰터: @postmelee (Taegyu Lee) — 다회 사이클 영역 (PR #663 close → #664 재제출)
후속 분리: #661 (드래그 시작 영역 영역 커서/스크롤 위치 튐 영역) → PR #718 영역

closes #658

산출물:
- mydocs/pr/archives/pr_664_review.md
- mydocs/pr/archives/pr_664_report.md
- mydocs/orders/20260508.md 갱신
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant