- 한 값을 모든 모니터에(모니터 배율은 플랫폼), 코드 칸만(사용자 결정) - CodeFontMetrics: 줄 높이 · 번호 칸 · 여백 단추를 같은 비율로, 12 에서 지금 값 그대로 - 화면은 DynamicResource 한 벌, MergeLine.MinimumRowHeight 도 따라감 - Ctrl+휠 · Ctrl++/- · Ctrl+0 · 설정 "보기 > 코드 글자 크기" · 상태 줄 글자 N - 줄 번호 기준선을 코드와 맞춤 - FontTest 110 · ShortcutTest +14(1,538건) Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
58 lines
2.3 KiB
C#
58 lines
2.3 KiB
C#
using System;
|
|
|
|
namespace MergeHub.Services
|
|
{
|
|
/// <summary>
|
|
/// 코드 칸 글자 크기 하나에서 나오는 크기들(11차 F-5). 줄 높이 · 줄 번호 칸 · 여백 단추가 같은 비율로 따라간다.
|
|
///
|
|
/// 기본 12 에서 지금까지의 값(줄 20 · 여백 66 = 번호 46 + 단추 20 · LOCAL 은 표식 6 + 번호 40 + 단추 20 · 단추 14 · 단추 글자 9)과
|
|
/// 정확히 같다. 네 칸이 모두 이 값을 쓰므로 어느 크기에서나 행이 같은 눈높이에 온다.
|
|
///
|
|
/// 크기는 WPF 단위(1/96 인치)다. 모니터마다 Windows 배율은 플랫폼(PerMonitorV2)이 맞추므로
|
|
/// 한 값이 어느 모니터에서나 같은 눈 크기로 보인다(사용자 결정 "한 값을 모든 모니터에").
|
|
/// </summary>
|
|
public sealed record CodeFontMetrics(
|
|
double FontSize,
|
|
double LineHeight,
|
|
double GutterWidth,
|
|
double NumberWidth,
|
|
double NarrowNumberWidth,
|
|
double MarkWidth,
|
|
double ButtonWidth,
|
|
double ButtonHeight,
|
|
double ButtonFontSize)
|
|
{
|
|
public const double Default = 12;
|
|
public const double Min = 8;
|
|
public const double Max = 24;
|
|
|
|
public static double Clamp(double size) =>
|
|
double.IsNaN(size) || size <= 0 ? Default : Math.Max(Min, Math.Min(Max, Math.Round(size)));
|
|
|
|
/// <summary>한 칸(1) 키우거나 줄인다. 끝에서는 그대로.</summary>
|
|
public static double Step(double current, int delta) => Clamp(Math.Round(Clamp(current)) + delta);
|
|
|
|
public static CodeFontMetrics For(double size)
|
|
{
|
|
var f = Clamp(size);
|
|
var k = f / Default;
|
|
|
|
var mark = Math.Round(6 * k);
|
|
var narrow = Math.Round(40 * k);
|
|
var button = Math.Round(20 * k);
|
|
var number = mark + narrow;
|
|
|
|
return new CodeFontMetrics(
|
|
FontSize: f,
|
|
LineHeight: Math.Round(20 * k),
|
|
GutterWidth: number + button,
|
|
NumberWidth: number,
|
|
NarrowNumberWidth: narrow,
|
|
MarkWidth: mark,
|
|
ButtonWidth: button,
|
|
ButtonHeight: Math.Round(14 * k),
|
|
ButtonFontSize: Math.Round(9 * k, 1));
|
|
}
|
|
}
|
|
}
|