Skip to content

Windows UI redesign — Foundation epic: three focused jobs #111

Closed
3 of 3 issues completed
Closed

Description

@chammoru

완료 정리 / Completion — 2026-10-18

이 상위 이슈의 세 개 작업은 모두 구현·검증 기록과 함께 master에 병합되었고 닫혔습니다. #117 → PR #135 (996ac76), #118 → PR #138 (c7a94fa), #119 → PR #141 (ea10a53). 따라서 합의된 개별 작업 범위의 Foundation 단계는 완료로 정리합니다. 아래 단계 전체 설계는 당시 참고 자료이며, 이후 개별 이슈와 사용자 합의가 우선합니다.

검증 한계를 통과로 바꾸지 않습니다. #117에서 사용자가 생략한 실제 200%·다중 모니터·전체 글리프 등은 생략 상태 그대로이며, #118/#119의 실제 OS 조합 한계도 각 검증 기록을 따릅니다. 아래 전체 행렬 체크박스가 모든 환경에서의 실측 통과를 뜻하지 않습니다.

v2.8.1 이후 발견한 비활성 점선 표시·Viewer 이전/다음 자동 재생·변경 없는 메뉴 조회 후속 수정은 로컬 구현·검증을 마쳤지만 이 완료 정리 시점에는 아직 master에 병합되지 않았습니다. 이를 기존 배포에 포함됐다고 주장하지 않으며 별도 후속 변경으로 관리합니다. #120 및 나머지 디자인 단계는 이 이슈 완료에 포함하지 않습니다.

All three focused jobs are merged and closed with implementation/verification evidence: #117 / PR #135, #118 / PR #138, and #119 / PR #141. Close this coordination epic for the agreed leaf-job scope. Historical phase-wide material below is reference, superseded by the later job-level decisions. Waived and untested native environment checks remain waived/untested, not passed. Post-v2.8.1 command-feedback/autoplay/idle-refresh corrections are verified local follow-up changes, not yet merged at this closure. #120 and later roadmap work are separate.


한국어 — 작은 작업별로 진행하는 작업 묶음

이 이슈는 관련 작업을 묶는 관리용 상위 이슈입니다. 한 번에 구현하거나 한꺼번에 설계 승인하는 단일 작업이 아닙니다. 아래 개별 이슈를 각각 검토·완료합니다. 실행 범위와 순서는 개별 이슈의 질문·좁은 범위·선행 작업을 기준으로 정합니다. 아래에 남겨 둔 기존 단계 전체 설계는 참고 자료입니다.

개별 작업 화면·논의 질문·완료 조건
한글·영문 UI 글꼴 통일 #117
이미지 픽셀을 바꾸지 않는 일관된 테마 #118
명령의 사용 가능 여부와 조작 상태 통일 #119

화면 맥락

제안 화면

구현된 앱 화면이 아닌 UI 제안입니다. 그림의 모든 주변 요소가 아니라 현재 논의 중인 개별 작업의 범위만 구현합니다.

진행 상태: 합의된 개별 작업 #117·#118·#119 구현·검증 및 병합 완료. 검증 생략·한계와 별도 후속 수정은 맨 위 완료 정리를 따릅니다. 다음 작업과 릴리즈는 자동 진행하지 않습니다.


시각적 설명과 논의

이 작업 묶음은 새 화면 배치가 아니라 두 Windows 앱에서 같은 종류의 글자·버튼·선택·테두리가 일관되게 보이도록 하는 공통 시각 규칙입니다. 기존 Pretendard와 Q1 브랜드를 유지합니다.

아래 도식은 구조와 동작을 설명합니다. 정확한 픽셀 배치·글꼴 렌더링이나 구현된 Windows 앱 스크린샷이 아닙니다.

flowchart TD
  TODAY["현재: 서로 다른 조작 요소·렌더링 경로에 시각 규칙이 적용됨"]
  TODAY --> ROLES["공통 규칙: 색상 · 글꼴 역할 · 간격 · 조작 상태"]
  ROLES --> VIEWER["Viewer: 명령 · 폴더 · Info · 상태"]
  ROLES --> COMPARATOR["Comparator: 파일명 · 역할 레이블 · 측정값"]
  ROLES --> RENDERERS["GDI · DirectWrite · Windows 기본 조작 요소 연동"]
  SCALE["Windows 테마 · DPI · 텍스트 확대 · 고대비"] --> ROLES
  VIEWER --> RESULT["같은 역할 → 같은 외관; 이미지 데이터는 유지"]
  COMPARATOR --> RESULT
  RENDERERS --> RESULT
Loading

기존 단계 전체의 논의 질문 — 참고

  • 글꼴: 한글·영문 UI에 Pretendard를 유지하고 정렬이 필요한 숫자에만 고정폭 글꼴을 사용할까요?

  • 시각적 분위기: 차분한 중립 표면과 절제된 파란 선택·포커스가 좋을까요, 더 따뜻하고 다채로운 UI가 좋을까요?

  • 테마: 기본 System, 선택 가능한 Light/Dark, 독립적인 중립 이미지 배경으로 할까요?

참고 자료 상태: 승인은 위의 개별 작업 질문을 기준으로 합니다. 단계 전체의 참고 내용을 한 번에 구현하는 작업으로 취급하지 않습니다.


상위 이슈·의존성

상위: #110. 첫 구현 단계에 해당합니다.

목표

기존 작업 흐름과 이미지 동작을 유지하면서 재사용할 수 있는 Windows UI 규칙을 마련합니다.

구현 범위

  • 역할별 Light/Dark/System 및 고대비 색상 규칙을 도입합니다. 패널·약한 표면·마우스 올림·누름, 장식 구분선과 필수 경계, 텍스트, 강조·선택, 의미 있는 피드백을 구분합니다.
  • 포함된 Pretendard Variable과 글리프 대체를 재사용합니다. 역할·DPI·텍스트 크기별 GDI 글꼴과 DirectWrite 형식을 캐시하고 숫자 역할에만 Cascadia Mono/Consolas를 사용합니다.
  • 상위 설계의 글자 크기/줄 높이를 적용합니다: 본문·명령 14/20 DIP, 파일·폴더명 13/18, 보조 레이블 12/16, 측정값 16/22, 숫자 데이터 13/18. 관련 설정 변경 시 캐시를 재생성합니다.
  • 앱 테마와 중립적인 캔버스 밝기를 분리하고 고대비를 우선합니다. Windows 기본 메뉴·대화상자는 문서화된 OS 동작을 유지합니다.
  • 기존 MFC ID를 점검하고 메뉴·도구 모음·단축키·도움말에 공통 표시·활성·실행 정보를 정의합니다. 점진적으로 도입하고 명령 전달 전체를 한 번에 교체하지 않습니다.
  • Windows 기본 창·Snap과 승인된 Q1 아이콘을 유지합니다. 선택적 창 재질 효과나 새 정식 아이콘 자산은 선행 조건이 아닙니다.
  • 검토된 로컬 설계 문서·목업을 적절한 출처 표시와 함께 문서 또는 공통 기반 PR에 포함합니다. 그 전에는 #110이 독립적으로 읽을 수 있는 공개 설계 명세입니다.

기존 단계 전체 완료 조건 — 참고 체크리스트

전체 환경 행렬은 모두 실측 통과한 것이 아니므로 이 과거 체크리스트를 일괄 체크하지 않습니다. 완료 판단은 상단의 합의된 개별 작업 및 검증 한계 기록을 따릅니다.

  • Viewer와 Comparator가 GDI/D2D/DWrite에서 같은 역할을 일관되게 표현합니다.
  • 필수 조작 요소 경계를 낮은 대비의 장식 구분선 색으로 그리지 않습니다.
  • 테마 저장·시스템 변경 감지·고대비 우선 적용이 동작합니다.
  • 한글·영문 혼합, 다른 문자 대체, 100/125/150/200% DPI, 텍스트 확대, 모니터 이동에서 글자 잘림이나 클릭 영역 어긋남이 없습니다.
  • 테마·글꼴 변경 후 현재 파일·프레임, 확대·이동, ROI, 선택, 캐시, 측정 입력이 유지됩니다. 폴더 전체 디코딩이나 유휴 반복 그리기가 발생하지 않습니다.
  • 기존 단축키·Windows 기본 메뉴 탐색이 정확한 명령을 한 번만 실행합니다.

실행·완료 규칙

Windows MFC Viewer/Comparator만 대상이며 상위 설계와 AGENTS.md를 따릅니다. 최신 origin/master에서 작업 범위에 맞는 브랜치를 만들고 관계없는 변경을 보존합니다. 기존 명령 ID와 렌더링·데이터 경로를 재사용합니다. 관련 자동·수동 검사를 수행하고 공통 코드 또는 릴리즈에 민감한 코드 변경에는 로컬 CoreRegressionTests 및 두 Windows Release 빌드도 수행합니다. 브랜치/PR, 검증 증거, 남은 한계, 회귀 수정 내용을 기록합니다. 목업 또는 빌드 성공만으로 완료 처리하지 않습니다. 이 구현 단계에서는 릴리즈를 태그하거나 게시하지 않습니다.


English original — 영어 원문 펼치기

Coordination epic — work through the small jobs

This issue groups related work; it is not one implementation job or one all-at-once design approval. Review and complete the linked leaf issues separately. Their questions, narrow scopes and prerequisites govern execution. The older phase-wide material below is reference context.

Focused job UI screen, question and acceptance checks
Unify Korean/English UI typography #117
Add coherent appearance themes without changing image pixels #118
Make command availability and interaction states consistent #119

Screen context

Proposed screen context

This is a UI proposal, not an implemented screenshot. Implement only the boundary of the leaf job under discussion, not every contextual element visible in the picture.

Coordination status: agreed jobs #117, #118 and #119 implemented, verified and merged. See the completion record above for waivers, limitations and separate follow-up fixes. No automatic next-job work or release.


Visual walkthrough and discussion

This task is the shared visual rulebook, not a new layout. It makes the same kind of text, button, selection, and border look consistent in both Windows apps. Existing Pretendard and the Q1 brand stay.

Schematic only: these diagrams explain structure and behavior, not exact pixel geometry, font rendering, or an implemented Windows screenshot.

flowchart TD
  TODAY["Today: visual rules are applied through separate control/rendering paths"]
  TODAY --> ROLES["Shared rulebook: colors · font roles · spacing · interaction states"]
  ROLES --> VIEWER["Viewer: commands, folders, Info, status"]
  ROLES --> COMPARATOR["Comparator: filenames, role labels, metric values"]
  ROLES --> RENDERERS["GDI · DirectWrite · native-control integration"]
  SCALE["Windows theme · DPI · text enlargement · high contrast"] --> ROLES
  VIEWER --> RESULT["Same role → same appearance; image data remains unchanged"]
  COMPARATOR --> RESULT
  RENDERERS --> RESULT
Loading

Historical phase-level discussion prompts (reference)

  • Typography: keep Pretendard for Korean/English UI, with monospaced numbers only where alignment matters?

  • Visual tone: quiet neutral surfaces with restrained blue selection/focus, or should the UI feel warmer/more colorful?

  • Theme: System by default, with Light/Dark choices and an independent neutral image background?

Reference status: use the focused leaf-job questions above for approval. This phase-wide material is not one implementation job.


Parent and dependencies

Parent: #110. First implementation step.

Goal

Establish reusable Windows UI contracts while keeping existing workflows and image behavior unchanged.

Implementation scope

  • Introduce role-based Light/Dark/System and high-contrast token resolution: panel/subtle/hover/pressed surfaces, decorative versus essential borders, text, accent/selection, and semantic feedback.
  • Reuse bundled Pretendard Variable and glyph fallback. Cache role/DPI/text-scale-specific GDI fonts and DirectWrite formats; reserve Cascadia Mono/Consolas for numeric roles.
  • Apply the parent's type ramp: body/commands 14/20 DIP, file/folder captions 13/18, supporting labels 12/16, metric values 16/22, numeric data 13/18. Recreate caches on relevant settings changes.
  • Separate application theme from neutral canvas brightness; high contrast takes precedence. Native menus/dialogs retain documented OS behavior.
  • Audit existing MFC IDs and define shared display/enabled/execute metadata for menu, toolbar, shortcuts, and help. Introduce incrementally; do not replace all routing at once.
  • Preserve native frame/Snap and the approved Q1 icon. Optional frame material and new production icon assets are not prerequisites.
  • Include the reviewed local design documents/mockup in a documentation or foundation PR, with appropriate attribution. Until then, Windows UI redesign: Fluent Inspector design and phased implementation #110 is the self-contained published specification.

Historical phase-wide acceptance checklist

Do not blanket-check untested environment combinations. Closure follows the agreed leaf-job scope and documented verification limits above.

  • Viewer and Comparator resolve the same role consistently across GDI/D2D/DWrite.
  • Essential control boundaries are not drawn using the low-contrast decorative divider token.
  • Theme settings persist, system-theme changes are observed, and high-contrast overrides work.
  • Mixed Korean/English, fallback scripts, 100/125/150/200% DPI, text enlargement, and monitor transitions render without clipped text/hit-area drift.
  • Theme/font changes preserve current file/frame, image transforms, ROI, selection, caches, and metric inputs; no directory-wide decoding or idle repaint loop.
  • Existing shortcuts/native menu navigation still execute exactly one correct command.

Execution and completion rules

Windows MFC Viewer/Comparator only; follow the parent specification and existing AGENTS.md. Start a focused branch from current origin/master and keep unrelated changes intact. Reuse existing command IDs and rendering/data paths. Run relevant automated/manual checks plus local CoreRegressionTests and both Windows Release builds for changes affecting shared or release-sensitive code. Record the branch/PR, verification evidence, remaining limitations, and any regression fixes. A mockup or build alone is not completion. Do not tag/publish a release in this implementation step.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions