Skip to content

Task #508: PageLayerTree image brightness/contrast JSON 필드 추가#510

Closed
postmelee wants to merge 2 commits into
edwardkim:develfrom
postmelee:task508
Closed

Task #508: PageLayerTree image brightness/contrast JSON 필드 추가#510
postmelee wants to merge 2 commits into
edwardkim:develfrom
postmelee:task508

Conversation

@postmelee

@postmelee postmelee commented May 1, 2026

Copy link
Copy Markdown
Collaborator

요약

  • PageLayerTree image paint op JSON에 brightness, contrast 필드를 추가했습니다.
  • 기본값 0도 항상 출력해 downstream renderer가 필드 존재 여부를 분기하지 않고 replay contract를 사용할 수 있게 했습니다.
  • serializes_backend_replay_payload_fields 테스트에 non-zero brightness/contrast assertion을 추가했습니다.

원인

ImageNode와 PageRenderTree 생성 경로에는 brightness/contrast가 이미 존재했지만, src/paint/json.rsPaintOp::Image serialization에서 두 필드를 내보내지 않았습니다.

그 결과 PageLayerTree JSON 기반 renderer는 이미지 보정 값을 알 수 없었고, core SVG renderer와 같은 image filter 입력값을 재현할 수 없었습니다.

핵심 변경 내용

기존 image paint op serialization은 effect만 출력한 뒤 바로 transform을 출력했습니다.

let _ = write!(
    buf,
    ",\"effect\":{}",
    json_escape(image_effect_str(image.effect))
);
buf.push_str(",\"transform\":");

이번 변경으로 effect 직후 brightness, contrast를 항상 출력합니다.

let _ = write!(
    buf,
    ",\"effect\":{},\"brightness\":{},\"contrast\":{}",
    json_escape(image_effect_str(image.effect)),
    image.brightness,
    image.contrast
);
buf.push_str(",\"transform\":");

따라서 image paint op JSON은 다음처럼 보정 값을 포함합니다.

{
  "type": "image",
  "effect": "blackWhite",
  "brightness": -50,
  "contrast": 70,
  "transform": { "rotation": 0.000, "horzFlip": false, "vertFlip": false }
}

테스트도 non-zero 값이 JSON에 그대로 포함되는지 검증하도록 보강했습니다.

image.brightness = -50;
image.contrast = 70;

assert!(json.contains("\"brightness\":-50"));
assert!(json.contains("\"contrast\":70"));

스키마 판단

PAGE_LAYER_TREE_SCHEMA_VERSION은 유지했습니다.

  • 기존 필드 제거 없음
  • 기존 필드 의미 변경 없음
  • image paint op에 brightness, contrast를 추가하는 additive JSON field 변경
  • 기본값 0은 기존 시각 의미와 동일

외부 기여자 체크리스트

  • Fork 기반 PR: postmelee:task508edwardkim/rhwp:devel
  • PR 대상 브랜치: devel
  • 작업 문서 위치: plans/, working/, report/, orders/ 규칙 준수
  • mydocs/pr/ 폴더는 수정하지 않음
  • 기존 미추적 AGENTS.md는 PR 범위에서 제외

로컬 검증

  • cargo test --lib paint::json::tests::serializes_backend_replay_payload_fields — 통과
  • cargo test --lib paint::json — 4 passed, 0 failed
  • cargo test --lib — 1102 passed, 0 failed, 1 ignored
  • cargo clippy --lib -- -D warnings — 통과
  • cargo clippy -- -D warnings — 통과
  • cargo test — 통과
    • lib: 1102 passed, 0 failed, 1 ignored
    • integration tests: 통과
    • doc-tests: 통과

GitHub CI

  • Build & Test — 통과
  • Canvas visual diff — 통과
  • Analyze (rust) — 통과
  • Analyze (javascript-typescript) — 통과
  • Analyze (python) — 통과
  • CodeQL — 통과
  • WASM Build — workflow 조건으로 skipped

@postmelee postmelee marked this pull request as ready for review May 1, 2026 06:52
edwardkim pushed a commit that referenced this pull request May 1, 2026
PR #510 cherry-pick (postmelee, alhangeul-macos downstream).

PaintOp::Image JSON 에 brightness/contrast 필드 추가. core SVG
renderer 와 동일한 image filter 입력값을 PageLayerTree 기반
downstream renderer 에서도 재현 가능.

closes #508
edwardkim added a commit that referenced this pull request May 1, 2026
- PR #510 (postmelee, Task #508 PageLayerTree image brightness/contrast)
  머지 완료 (cherry-pick 548df60). 검토 + 구현 계획서 + 처리 보고서 작성.
  before/after SVG byte-identical 380,804 bytes 결정적 검증 + 작업지시자 시각 판정 승인.
- PR #507 (cskwork, CASES+EQALIGN 분수 분실) 검토 문서 작성.
  수정 요청 — 시각 판정 게이트 미충족 (samples/미적분03.hwp 부재).
- mydocs/orders/20260502.md 외부 PR 처리 섹션 추가.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
edwardkim added a commit that referenced this pull request May 1, 2026
… brightness/contrast) + PR #507 검토 + 메모리 동기화

- PR #510 (postmelee, alhangeul-macos downstream) Task #508 cherry-pick
- PR #507 (cskwork, CASES+EQALIGN 분수 분실) 검토 → 수정 요청
- mydocs/manual/memory 활성↔백업 동기화

closes #508
@edwardkim

Copy link
Copy Markdown
Owner

검토 + 시각 판정 게이트 통과 후 cherry-pick 머지 완료 (commit 548df60, devel branch). 단일 일괄 cherry-pick + commit 메시지 보강 (PR 번호 + closes #508 footer). 검증: paint::json 4/4 + lib 1110/1110 + clippy 0 + issue_418/501/svg_snapshot 회귀 0 + before/after SVG byte-identical (380,804 bytes). 처리 보고서: mydocs/pr/pr_510_report.md. 감사합니다.

@edwardkim edwardkim closed this May 1, 2026
edwardkim added a commit that referenced this pull request May 1, 2026
…괄 정리

- README v0.7.9 사이클: PR #506 (jangster77, HWP 3.0 파서 + Square wrap)
  + PR #510 (postmelee, PageLayerTree image brightness/contrast) 추가.
  Task #509 (PUA 글머리표 회귀) 도 회귀 정정 섹션에 추가.
- 누적 외부 기여자 목록에 jangster77 추가.
- mydocs/pr/ → archives/ 일괄 이동 (PR #235~#510 closed/merged 44 PR,
  84 파일). pr_507 만 OPEN 상태로 보존. pr_235_review/_impl 은 archives
  사본과 byte-identical 이라 중복 제거.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
edwardkim added a commit that referenced this pull request May 1, 2026
직전 commit 9b3c039 에서 의도된 변경 두 건이 누락되어 후속 정정.

- README v0.7.9 사이클: PR #506 (jangster77, HWP 3.0 파서 + Square wrap)
  + PR #510 (postmelee, PageLayerTree image brightness/contrast) +
  Task #509 (PUA 글머리표) 추가. 누적 외부 기여자에 jangster77 추가.
- mydocs/pr/pr_235_review.md / pr_235_review_impl.md 가 archives/ 와
  pr/ 양쪽에 중복 존재했던 문제 정리 (archives 사본 보존, pr/ 사본 제거).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@postmelee postmelee deleted the task508 branch May 2, 2026 07:37
@edwardkim edwardkim mentioned this pull request May 4, 2026
4 tasks
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