Skip to content

Task #1187: BookReview.hwp 글상자 내용 clip 회귀 수정#1190

Merged
edwardkim merged 8 commits into
edwardkim:develfrom
postmelee:fix/1187-bookreview-textbox-clip
May 31, 2026
Merged

Task #1187: BookReview.hwp 글상자 내용 clip 회귀 수정#1190
edwardkim merged 8 commits into
edwardkim:develfrom
postmelee:fix/1187-bookreview-textbox-clip

Conversation

@postmelee

@postmelee postmelee commented May 31, 2026

Copy link
Copy Markdown
Collaborator

관련 이슈: #1187

요약

  • BookReview.hwp 1쪽 글상자 콘텐츠를 RenderNodeType::TextBox 하위로 모아 SVG와 paint layer 양쪽에서 글상자 내부 영역으로 clip 되도록 수정했습니다.
  • PageLayerTree에는 ClipKind::TextBox 및 JSON "clipKind":"textBox" 를 추가했고, additive 변경으로 schemaMinorVersion14 -> 15 로 올렸습니다.
  • PR 시각 피드백에서 확인된 과한 clip 문제를 보정했습니다. 글상자 첫 문단의 line_seg.vertical_pos 중복 적용을 막아 정상 표시되어야 하는 5장, 6장, 에필로그 목차 줄이 clip 안에 남도록 했습니다.
  • CI svg_snapshot 실패를 보정했습니다. layout_composed_paragraph 에 명시 플래그를 추가해 표 셀의 기존 column-top vpos fallback 은 유지하고, 글상자 내부 문단에서만 중복 fallback 을 생략합니다.
  • 텍스트박스 clip 도입으로 의도적으로 바뀐 issue-267, issue-617 SVG snapshot golden 을 갱신했습니다.

시각 검증 스크린샷

Before After
image image

검증

  • cargo fmt --all -- --check
  • git diff --check
  • cargo build --bin rhwp
  • cargo test --test svg_snapshot — 8 passed
  • cargo test --test issue_1187_textbox_clip — 2 passed
  • cargo test --lib paint::builder::tests — 7 passed
  • cargo test --lib paint::json::tests::serializes_textbox_clip_kind — 1 passed
  • cargo test --lib paint::schema::tests::layer_tree_schema_constants_match_schema — 1 passed
  • cargo test --lib renderer::svg_layer::tests — 3 passed
  • cargo test --test issue_1052_footnote_in_textbox --test issue_919_textbox_hit_test --test issue_1028_hwpx_textbox_vertical — 11 passed
  • wasm-pack build --target web --dev
  • npm run build — 통과, Vite chunk size 경고만 출력

확인 메모

  • 최종 SVG에서 textbox-clip-33, textbox-clip-52, textbox-clip-103 생성을 확인했습니다.
  • 회귀가 발생한 큰 글상자는 textbox-clip-52 (x=47.92, y=516.56, width=687.55, height=487.88) 아래에서 렌더링됩니다.
  • 큰 글상자 clip bottom 은 1004.44 이고, 보정 후 5장, 6장, 에필로그 baseline 은 각각 887.34, 924.03, 960.73 으로 clip 안에 남습니다.
  • rhwp-studio 로컬 서버에서 BookReview.hwp 직접 로드 후 1쪽 하단 목차와 저자 정보 글상자 표시를 확인했습니다.

@postmelee postmelee marked this pull request as draft May 31, 2026 11:00
@postmelee postmelee changed the title BookReview.hwp 글상자 내용 clip 회귀 수정 Task #1187: BookReview.hwp 글상자 내용 clip 회귀 수정 May 31, 2026
@postmelee postmelee marked this pull request as ready for review May 31, 2026 12:10
@edwardkim edwardkim merged commit 6ca2be7 into edwardkim:devel May 31, 2026
7 checks passed
@edwardkim

Copy link
Copy Markdown
Owner

머지 완료했습니다 (devel c8f3a201). 작업지시자 SVG 시각 판정 통과, WASM 빌드까지 완료했습니다. 좋은 작업 감사합니다, @postmelee.

리뷰 요약

문제BookReview.hwp 1쪽 큰 글상자 내용이 영역 밖으로 overflow 되어 저자 정보 박스와 겹침. 글상자 내용이 clip 노드 없이 shape node 자식으로 직접 배치되고, 출력 경로가 Body/TableCell clip 만 처리하던 것이 원인.

수정 확인

  • 글상자 내용을 RenderNodeType::TextBox(inner_area bbox) 노드로 모음. 가로/세로/오버플로 4 return 경로 모두 textbox_node 로 일관 변경, if !children.is_empty() 가드로 빈 글상자 clip 회피.
  • ClipKind::TextBox / GroupKind::TextBox / JSON "clipKind":"textBox" 추가 (additive, schema 14→15).
  • 3 렌더러 경로 일관 적용 — svg.rs(clipPath+g) / web_canvas.rs(save·clip·restore) / paint/builder.rs(ClipRect>Group). canvaskit_policy / svg_layer / json 모두 match arm 추가.
  • 회귀 가드: layout_composed_paragraphsuppress_column_top_vpos_fallback 가 글상자 호출 2곳만 true, table/footnote 전 호출처는 false → 표 셀 기존 동작 보존을 확인했습니다.

검증 (로컬 머지 시뮬레이션 + 머지 후 재검증)

  • cargo fmt --all --check / cargo clippy --lib / cargo build: 통과
  • cargo test --tests: 1883 passed, 0 failed
  • export-svg BookReview -p 0: textbox-clip-52 (x=47.92 y=516.56 w=687.55 h=487.88, bottom 1004.44) 생성 확인 — PR 메모와 일치
  • CI: Build & Test / Canvas visual diff / Analyze ×3 전부 SUCCESS
  • WASM Docker 빌드 완료

golden SVG(issue-267/issue-617)는 TextBox clip 도입에 따른 의도적 변경으로 확인했습니다.

edwardkim added a commit that referenced this pull request May 31, 2026
@postmelee postmelee deleted the fix/1187-bookreview-textbox-clip branch May 31, 2026 23:38
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.

2 participants