Effect·팝업이 ClearType 을 끄고 있었다 — 글자가 흐린 이유
사용자 지적이 맞았다. Effect 가 걸린 요소는 하위 트리가 중간 서피스로 렌더링되면서 ClearType 이 꺼지고, 글자가 회색 안티에일리어싱으로 그려진다. 13px 한글이 특히 뭉개진다. 저장소는 이 사실을 이미 알고 있었다 — MessageDialogView.xaml:18 과 TagPickerDialogView.xaml:11 이 "AllowsTransparency 를 켜면 ClearType 이 꺼져 13px 한글이 뭉개진다"고 적어 두었다. 그런데 그 판단이 <b>창에만</b> 적용되고 Effect 와 Popup 에는 적용되지 않았다. ClearTypeHint 는 저장소 전체에 0 곳이었다. 추론으로 끝내지 않았다. RenderTargetBitmap 으로는 이 질문에 답할 수 없다 — 그 자체가 알파를 가진 중간 서피스라서 Effect 가 있든 없든 양쪽 다 회색으로 나오고, 검사가 통과하면서 아무것도 증명하지 못한다. 그래서 진짜 화면을 BitBlt 으로 떠서 글리프의 채널 어긋난 픽셀(ClearType 은 R≠G≠B, 회색 AA 는 R=G=B)을 셌다. --cleartype 표본 11종 실측: A 아무것도 없음 색번짐 1115 ← 대조군. 이게 0 이면 판정 불가로 끝낸다 B Effect 색번짐 0 ← 지적한 그대로 C1 힌트를 Effect 요소 자신에게 색번짐 0 ← 듣지 않는다 C2 힌트를 안쪽 불투명 배경에 색번짐 1344 ← 여기가 맞는 자리 D 레이어드 팝업 색번짐 0 ← 두 번째 원인 E 팝업 + 힌트 색번짐 1115 ← AllowsTransparency 를 끌 필요가 없다 I 힌트 바깥에 ScrollViewer 색번짐 0 ← ScrollViewer 도 중간 서피스를 연다 J 힌트를 ScrollViewer 안쪽에 색번짐 1115 F 앱 콤보 드롭다운(실제 템플릿) 색번짐 0 → 수리 후 1115 두 번 헛짚었고 두 번 다 측정이 정정했다. CornerRadius 를 의심했으나 아니었고, ScrollViewer 가 범인이었다. 그리고 F 를 처음 통과시켰을 때는 선택된 콤보 항목의 파란 배경(B.Sel, 채널 차이 61)이 색번짐으로 잡힌 것이었다 — 색번짐 4359 인데 글자픽셀은 1075 였다. 그래서 배경이 유채색이면 판정을 거부하는 장치를 넣었다. 규칙: 힌트는 Effect·ScrollViewer·레이어드 팝업 <b>안쪽</b>의 불투명 배경 요소에 건다. 적용한 곳 — 글자가 많은 순: 콤보 드롭다운(DesignerTheme) · 메뉴 하위팝업(배치·정렬 명령이 다 여기 있다) · 색 팝오버 · 컨트롤 추가 플라이아웃 · 줌 플라이아웃 남긴 곳: 플로팅 바(글자는 줌 퍼센트뿐), QueryEditorWindow 의 Card 스타일 (Effect 가 DataGrid·편집기의 중첩 ScrollViewer 를 감싸서 힌트를 넣을 자리가 여럿이다 — 그림자를 빼는 쪽이 맞아 보이고, 그건 디자인 결정이라 따로 다룬다). 게이트: --cleartype 11/11, 테스트 277/277, --edit-smoke 0실패, --modal-check 0실패, --maxrect 0실패, --dialog-shots 57파일, --db-smoke 1271건 diff 0, --db-render P062 md5 8d683835f5d81e7bb41c79071d6bf954 동일(종이 렌더 불변). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
b0d2e9b470
commit
280594362a
@@ -740,7 +740,10 @@
|
||||
HorizontalOffset="-176" VerticalOffset="4">
|
||||
<Border Background="{DynamicResource B.Surface}" BorderBrush="{DynamicResource B.Line2}"
|
||||
BorderThickness="1" CornerRadius="8" Padding="10" Effect="{DynamicResource B.FloatShadow}">
|
||||
<StackPanel Width="212">
|
||||
<!-- Effect 와 레이어드 팝업이 각각 중간 서피스를 만들어 ClearType 을 끈다.
|
||||
힌트는 Effect 가 걸린 바깥 Border 에 걸면 듣지 않으므로, 안쪽 불투명 배경에 건다. -->
|
||||
<StackPanel Width="212" Background="{DynamicResource B.Surface}"
|
||||
RenderOptions.ClearTypeHint="Enabled">
|
||||
<TextBlock Text="배경" FontSize="11" Foreground="{DynamicResource B.Muted}" Margin="0,0,0,5"/>
|
||||
<ItemsControl ItemsSource="{Binding BackgroundSwatches}"
|
||||
ItemTemplate="{StaticResource ColorSwatchTemplate}">
|
||||
|
||||
Reference in New Issue
Block a user