From 92027a0ee36c80ff7cb0e451dc2f124169c70ae8 Mon Sep 17 00:00:00 2001 From: Anton Mukhin Date: Thu, 29 May 2025 10:40:13 +0300 Subject: [PATCH] Font tester screenshot; Font tester UI fixes --- McBitFont/FontTester.Designer.cs | 20 +++++++++++--------- McBitFont/FontTester.cs | 10 ++++++++-- README.md | 4 ++++ images/Screenshot_Font-tester.png | Bin 0 -> 11583 bytes 4 files changed, 23 insertions(+), 11 deletions(-) create mode 100644 images/Screenshot_Font-tester.png diff --git a/McBitFont/FontTester.Designer.cs b/McBitFont/FontTester.Designer.cs index 7aaeb34..a1d2b70 100644 --- a/McBitFont/FontTester.Designer.cs +++ b/McBitFont/FontTester.Designer.cs @@ -70,9 +70,10 @@ // tbText // tbText.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right; + tbText.Font = new System.Drawing.Font("Segoe UI Semibold", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, 204); tbText.Location = new System.Drawing.Point(12, 55); tbText.Name = "tbText"; - tbText.Size = new System.Drawing.Size(220, 23); + tbText.Size = new System.Drawing.Size(260, 29); tbText.TabIndex = 3; toolTip1.SetToolTip(tbText, "Text to test the font with"); tbText.TextChanged += Text_Changed; @@ -83,10 +84,10 @@ dotPanel.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; dotPanel.BackColor = System.Drawing.Color.White; dotPanel.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; - dotPanel.Location = new System.Drawing.Point(12, 84); + dotPanel.Location = new System.Drawing.Point(12, 90); dotPanel.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); dotPanel.Name = "dotPanel"; - dotPanel.Size = new System.Drawing.Size(198, 104); + dotPanel.Size = new System.Drawing.Size(238, 98); dotPanel.TabIndex = 4; dotPanel.Paint += PaintPixels; dotPanel.Resize += ZoomChanged; @@ -95,7 +96,7 @@ // vScroll.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right; vScroll.LargeChange = 25; - vScroll.Location = new System.Drawing.Point(211, 84); + vScroll.Location = new System.Drawing.Point(251, 84); vScroll.Name = "vScroll"; vScroll.Size = new System.Drawing.Size(21, 125); vScroll.TabIndex = 17; @@ -106,14 +107,14 @@ hScroll.Anchor = System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right; hScroll.Location = new System.Drawing.Point(12, 188); hScroll.Name = "hScroll"; - hScroll.Size = new System.Drawing.Size(198, 21); + hScroll.Size = new System.Drawing.Size(238, 21); hScroll.TabIndex = 16; hScroll.ValueChanged += Scrolling; // // lblZoom // lblZoom.AutoSize = true; - lblZoom.Location = new System.Drawing.Point(133, 9); + lblZoom.Location = new System.Drawing.Point(173, 9); lblZoom.Name = "lblZoom"; lblZoom.Size = new System.Drawing.Size(42, 15); lblZoom.TabIndex = 18; @@ -124,7 +125,7 @@ cbZoom.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; cbZoom.FormattingEnabled = true; cbZoom.Items.AddRange(new object[] { "2", "3", "5", "10", "15", "20", "25", "30", "35", "40", "45", "50" }); - cbZoom.Location = new System.Drawing.Point(182, 6); + cbZoom.Location = new System.Drawing.Point(222, 6); cbZoom.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); cbZoom.Name = "cbZoom"; cbZoom.Size = new System.Drawing.Size(50, 23); @@ -136,18 +137,19 @@ // chkBaseline // chkBaseline.AutoSize = true; - chkBaseline.Location = new System.Drawing.Point(163, 36); + chkBaseline.Location = new System.Drawing.Point(203, 36); chkBaseline.Name = "chkBaseline"; chkBaseline.Size = new System.Drawing.Size(69, 19); chkBaseline.TabIndex = 20; chkBaseline.Text = "Baseline"; chkBaseline.UseVisualStyleBackColor = true; + chkBaseline.CheckedChanged += Scrolling; // // FontTester // AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - ClientSize = new System.Drawing.Size(244, 221); + ClientSize = new System.Drawing.Size(284, 221); Controls.Add(chkBaseline); Controls.Add(cbZoom); Controls.Add(lblZoom); diff --git a/McBitFont/FontTester.cs b/McBitFont/FontTester.cs index 0533962..e30cf02 100644 --- a/McBitFont/FontTester.cs +++ b/McBitFont/FontTester.cs @@ -19,6 +19,7 @@ namespace McBitFont { private readonly int absentWidth = 5; private readonly int pixelOffset = 5; + private int baselineThickness = 1; private byte[] encoded = []; private int cellSize; private int width; @@ -45,7 +46,7 @@ namespace McBitFont { SolidBrush sbp = new SolidBrush(Color.LightPink); SolidBrush sb; Pen blackPen = new(Color.Black); - Pen bluePen = new(Color.FromArgb(100, 20, 20, 200), 1); + Pen bluePen = new(Color.FromArgb(100, 20, 20, 200), baselineThickness); int x, y, i, j; // Sycle through ecoded bytes of test text @@ -82,7 +83,7 @@ namespace McBitFont { if (chkBaseline.Checked && baseline > 0) { x = pixelOffset - hScroll.Value; y = pixelOffset + baseline * cellSize - vScroll.Value; - g.DrawLine(bluePen, x, y, dotPanel.Width - pixelOffset, y); + g.DrawLine(bluePen, x, y, dotPanel.Width - 2 * pixelOffset, y); } } @@ -123,6 +124,11 @@ namespace McBitFont { vScroll.Enabled = true; } + // Baseline thickness calc + baselineThickness = cellSize / 5; + if (baselineThickness > 5) baselineThickness = 5; + if (baselineThickness < 1) baselineThickness = 1; + dotPanel.Refresh(); } diff --git a/README.md b/README.md index b2a4122..6892589 100644 --- a/README.md +++ b/README.md @@ -37,6 +37,10 @@ New project dialog ![New project](/images/Screenshot_New.png) +Font test dialog + +![Font tester](/images/Screenshot_Font-tester.png) + Export dialog ![Export](/images/Screenshot_Export.png) diff --git a/images/Screenshot_Font-tester.png b/images/Screenshot_Font-tester.png new file mode 100644 index 0000000000000000000000000000000000000000..18822f6588fc9e45f65fae2b6f25ca55d8270abc GIT binary patch literal 11583 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 literal 0 HcmV?d00001