Skip to content

Commit c968e9e

Browse files
authored
Merge pull request #816 from 7474/fix-win11-formsize
Windows11下でのフォームサイズ、テキストレンダリングをある程度最適化
2 parents 910b749 + 5f6c95c commit c968e9e

20 files changed

Lines changed: 96 additions & 32 deletions

SRC.Sharp/SRCSharpForm/Forms/Configuration.Designer.cs

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

SRC.Sharp/SRCSharpForm/Forms/ErrorMessage.Designer.cs

Lines changed: 2 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

SRC.Sharp/SRCSharpForm/Forms/InputForm.Designer.cs

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

SRC.Sharp/SRCSharpForm/Forms/ListBox.Designer.cs

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

SRC.Sharp/SRCSharpForm/Forms/Main.Designer.cs

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

SRC.Sharp/SRCSharpForm/Forms/Main.cs

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,11 @@
77
using SRCCore;
88
using SRCCore.Commands;
99
using SRCCore.Maps;
10+
using SRCSharpForm.Lib;
1011
using System;
1112
using System.Collections.Generic;
1213
using System.Drawing;
14+
using System.Drawing.Text;
1315
using System.Linq;
1416
using System.Windows.Forms;
1517

@@ -18,6 +20,45 @@ namespace SRCSharpForm
1820
// メインウィンドウのフォーム
1921
internal partial class frmMain : Form
2022
{
23+
/// <summary>
24+
/// ContextMenuStrip のテキストを SingleBitPerPixelGridFit でシャープに描画するレンダラー。
25+
/// ToolStripSystemRenderer が使う TextRenderer.DrawText (GDI) は
26+
/// Graphics.TextRenderingHint の影響を受けないため、DrawString に置き換えて制御する。
27+
/// TODO レンダリングの課題を見直す https://github.com/7474/SRC/pull/816#discussion_r2867096631
28+
/// </summary>
29+
private sealed class SharpMenuRenderer : ToolStripSystemRenderer
30+
{
31+
protected override void OnRenderItemText(ToolStripItemTextRenderEventArgs e)
32+
{
33+
var oldHint = e.Graphics.TextRenderingHint;
34+
try
35+
{
36+
e.Graphics.TextRenderingHint = RenderingConfig.TextHint;
37+
using var brush = new SolidBrush(e.TextColor);
38+
using var sf = new StringFormat(StringFormat.GenericDefault)
39+
{
40+
Alignment = StringAlignment.Near,
41+
LineAlignment = StringAlignment.Center,
42+
FormatFlags = StringFormatFlags.NoWrap,
43+
HotkeyPrefix = HotkeyPrefix.None,
44+
};
45+
e.Graphics.DrawString(e.Text, e.TextFont, brush, e.TextRectangle, sf);
46+
}
47+
finally
48+
{
49+
e.Graphics.TextRenderingHint = oldHint;
50+
}
51+
}
52+
}
53+
54+
protected override void OnLoad(EventArgs e)
55+
{
56+
base.OnLoad(e);
57+
// ポップアップメニューにシャープレンダラーを適用
58+
var sharpRenderer = new SharpMenuRenderer();
59+
mnuUnitCommand.Renderer = sharpRenderer;
60+
mnuMapCommand.Renderer = sharpRenderer;
61+
}
2162
public SRCCore.SRC SRC { get; set; }
2263
public IGUI GUI => SRC.GUI;
2364
public Map Map => SRC.Map;

SRC.Sharp/SRCSharpForm/Forms/Main.guistatus.cs

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
using System;
1010
using System.Collections.Generic;
1111
using System.Drawing;
12-
using System.Drawing.Text;
1312
using System.Linq;
1413
using System.Text;
1514

@@ -43,9 +42,7 @@ internal partial class frmMain : IGUIStatus
4342
public Color StatusFontColorNormalString = Color.FromArgb(0, 0, 0);
4443
public Color StatusFontColorWarning = Color.FromArgb(190, 0, 0);
4544

46-
// XXX
47-
private TextRenderingHint StatusTextRenderingHint = TextRenderingHint.SystemDefault;
48-
//private Font StatusFont = new Font("Yu Gothic UI", 10f);
45+
//private Font StatusFont
4946
//private Font StatusFont = new Font("Meiryo UI", 10f);
5047
private Font StatusFont = new Font("MS 明朝", 10f);
5148
// XXX 10.5より大きい感じする
@@ -82,7 +79,7 @@ public void DisplayGlobalStatus()
8279
picUnitStatus.NewImageIfNull();
8380
using (var g = Graphics.FromImage(picUnitStatus.Image))
8481
{
85-
g.TextRenderingHint = StatusTextRenderingHint;
82+
g.TextRenderingHint = RenderingConfig.TextHint;
8683
g.DrawString(sb.ToString(), StatusFont, StatusNormalStringBrush, 0, 0);
8784
}
8885
return;
@@ -201,7 +198,7 @@ public void DisplayGlobalStatus()
201198
picUnitStatus.NewImageIfNull();
202199
using (var g = Graphics.FromImage(picUnitStatus.Image))
203200
{
204-
g.TextRenderingHint = StatusTextRenderingHint;
201+
g.TextRenderingHint = RenderingConfig.TextHint;
205202
g.DrawString(sb.ToString(), StatusFont, StatusNormalStringBrush, 0, 0);
206203

207204
// マップ画像表示
@@ -244,8 +241,8 @@ public void DisplayUnitStatus(Unit u, Pilot p = null)
244241
using (var pilotG = Graphics.FromImage(picPilotStatus.NewImageIfNull().Image))
245242
using (var unitG = Graphics.FromImage(picUnitStatus.NewImageIfNull().Image))
246243
{
247-
pilotG.TextRenderingHint = StatusTextRenderingHint;
248-
unitG.TextRenderingHint = StatusTextRenderingHint;
244+
pilotG.TextRenderingHint = RenderingConfig.TextHint;
245+
unitG.TextRenderingHint = RenderingConfig.TextHint;
249246
var headingMargin = HeadingFont.Height;
250247
var textMargin = StatusFont.Height;
251248
var smallMargin = StatusSmallFont.Height;

SRC.Sharp/SRCSharpForm/Forms/Message.Designer.cs

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

SRC.Sharp/SRCSharpForm/Forms/MultiColumListBox.Designer.cs

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

SRC.Sharp/SRCSharpForm/Forms/MultiSelectListBox.Designer.cs

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)