From ad15f08233a056960cb80a7573c6f7c4f463b539 Mon Sep 17 00:00:00 2001 From: Anton Mukhin Date: Tue, 8 Jul 2025 17:00:55 +0300 Subject: [PATCH] TODO features: Application: - Special cursor to indicate baseline set - Special cursor when dragging canvas with middle mouse button Functionality: - Beside Baseline, also make top and mid lines Bugs: - Middle mouse button tries to change selection while dragging canvas with rectSelection tool active --- McBitFont/Form1.Designer.cs | 58 +++++++-- McBitFont/Form1.cs | 134 +++++++++++++++++---- McBitFont/Form1.resx | 3 + McBitFont/McBitFont.csproj | 6 +- McBitFont/McCursor.cs | 41 +++++++ McBitFont/Properties/Resources.Designer.cs | 30 +++++ McBitFont/Properties/Resources.resx | 33 +++-- McBitFont/Resources/fam_lines.png | Bin 0 -> 174 bytes McBitFont/Resources/fam_mid.png | Bin 0 -> 137 bytes McBitFont/Resources/fam_top.png | Bin 0 -> 136 bytes TODO.txt | 5 +- examples/Cursors.mbfont | Bin 0 -> 1658 bytes examples/Font_9x17_Alagard_cyr_vw.mbfont | Bin 36211 -> 37249 bytes examples/SelectionCursor.mbfont | Bin 1045 -> 0 bytes icons/famfamfam/fam_lines.png | Bin 0 -> 174 bytes icons/famfamfam/fam_mid.png | Bin 0 -> 137 bytes icons/famfamfam/fam_top.png | Bin 0 -> 136 bytes 17 files changed, 259 insertions(+), 51 deletions(-) create mode 100644 McBitFont/Resources/fam_lines.png create mode 100644 McBitFont/Resources/fam_mid.png create mode 100644 McBitFont/Resources/fam_top.png create mode 100644 examples/Cursors.mbfont delete mode 100644 examples/SelectionCursor.mbfont create mode 100644 icons/famfamfam/fam_lines.png create mode 100644 icons/famfamfam/fam_mid.png create mode 100644 icons/famfamfam/fam_top.png diff --git a/McBitFont/Form1.Designer.cs b/McBitFont/Form1.Designer.cs index c99abea..d858208 100644 --- a/McBitFont/Form1.Designer.cs +++ b/McBitFont/Form1.Designer.cs @@ -124,6 +124,10 @@ pnlRightButtons = new System.Windows.Forms.Panel(); lblBrush = new System.Windows.Forms.Label(); pnlInfo = new System.Windows.Forms.Panel(); + cmBaseline = new System.Windows.Forms.ContextMenuStrip(components); + tsmiBaseline = new System.Windows.Forms.ToolStripMenuItem(); + tsmiMidline = new System.Windows.Forms.ToolStripMenuItem(); + tsmiTopline = new System.Windows.Forms.ToolStripMenuItem(); ((System.ComponentModel.ISupportInitialize)nudX).BeginInit(); ((System.ComponentModel.ISupportInitialize)nudY).BeginInit(); panel1.SuspendLayout(); @@ -132,6 +136,7 @@ ((System.ComponentModel.ISupportInitialize)nudBrush).BeginInit(); pnlRightButtons.SuspendLayout(); pnlInfo.SuspendLayout(); + cmBaseline.SuspendLayout(); SuspendLayout(); // // dotPanel @@ -688,7 +693,7 @@ undoToolStripMenuItem.Image = Properties.Resources.arrow_undo; undoToolStripMenuItem.Name = "undoToolStripMenuItem"; undoToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Z; - undoToolStripMenuItem.Size = new System.Drawing.Size(180, 22); + undoToolStripMenuItem.Size = new System.Drawing.Size(164, 22); undoToolStripMenuItem.Text = "Undo"; undoToolStripMenuItem.ToolTipText = "Undo last canvas change"; undoToolStripMenuItem.Click += undoToolStripMenuItem_Click; @@ -698,7 +703,7 @@ redoToolStripMenuItem.Image = Properties.Resources.arrow_redo; redoToolStripMenuItem.Name = "redoToolStripMenuItem"; redoToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Y; - redoToolStripMenuItem.Size = new System.Drawing.Size(180, 22); + redoToolStripMenuItem.Size = new System.Drawing.Size(164, 22); redoToolStripMenuItem.Text = "Redo"; redoToolStripMenuItem.ToolTipText = "Redo canvas change"; redoToolStripMenuItem.Click += redoToolStripMenuItem_Click; @@ -709,7 +714,7 @@ copyToolStripMenuItem.Name = "copyToolStripMenuItem"; copyToolStripMenuItem.ShortcutKeyDisplayString = ""; copyToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.C; - copyToolStripMenuItem.Size = new System.Drawing.Size(180, 22); + copyToolStripMenuItem.Size = new System.Drawing.Size(164, 22); copyToolStripMenuItem.Text = "Copy"; copyToolStripMenuItem.ToolTipText = "Copy current symbol to clipboard"; copyToolStripMenuItem.Click += copyToolStripMenuItem_Click; @@ -720,7 +725,7 @@ pasteToolStripMenuItem.Name = "pasteToolStripMenuItem"; pasteToolStripMenuItem.ShortcutKeyDisplayString = ""; pasteToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.V; - pasteToolStripMenuItem.Size = new System.Drawing.Size(180, 22); + pasteToolStripMenuItem.Size = new System.Drawing.Size(164, 22); pasteToolStripMenuItem.Text = "Paste"; pasteToolStripMenuItem.ToolTipText = "Paste from clipboard to current symbol"; pasteToolStripMenuItem.Click += pasteToolStripMenuItem_Click; @@ -730,7 +735,7 @@ selectToolStripMenuItem.Image = Properties.Resources.fam_rectt; selectToolStripMenuItem.Name = "selectToolStripMenuItem"; selectToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.R; - selectToolStripMenuItem.Size = new System.Drawing.Size(180, 22); + selectToolStripMenuItem.Size = new System.Drawing.Size(164, 22); selectToolStripMenuItem.Text = "Select"; selectToolStripMenuItem.ToolTipText = "Toggle Rectangle selection tool"; selectToolStripMenuItem.Click += selectToolStripMenuItem_Click; @@ -741,7 +746,7 @@ selectAllToolStripMenuItem.Image = Properties.Resources.arrow_out; selectAllToolStripMenuItem.Name = "selectAllToolStripMenuItem"; selectAllToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.A; - selectAllToolStripMenuItem.Size = new System.Drawing.Size(180, 22); + selectAllToolStripMenuItem.Size = new System.Drawing.Size(164, 22); selectAllToolStripMenuItem.Text = "Select All"; selectAllToolStripMenuItem.ToolTipText = "Select entire canvas"; selectAllToolStripMenuItem.Click += selectAllToolStripMenuItem_Click; @@ -1021,18 +1026,18 @@ // // btnBaseline // - btnBaseline.Image = Properties.Resources.fam_base; - btnBaseline.ImageAlign = System.Drawing.ContentAlignment.MiddleRight; + btnBaseline.Image = Properties.Resources.fam_lines; btnBaseline.Location = new System.Drawing.Point(94, 81); btnBaseline.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); btnBaseline.Name = "btnBaseline"; btnBaseline.Size = new System.Drawing.Size(88, 27); btnBaseline.TabIndex = 18; - btnBaseline.Text = " Baseline"; + btnBaseline.Text = " Lines"; btnBaseline.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText; toolTip1.SetToolTip(btnBaseline, "Set irtual base line for the font"); btnBaseline.UseVisualStyleBackColor = true; btnBaseline.Click += btnBaseline_Click; + btnBaseline.Paint += btnBaseline_Paint; // // toolTip1 // @@ -1207,6 +1212,36 @@ pnlInfo.Size = new System.Drawing.Size(103, 154); pnlInfo.TabIndex = 28; // + // cmBaseline + // + cmBaseline.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { tsmiTopline, tsmiMidline, tsmiBaseline }); + cmBaseline.Name = "cmBaseline"; + cmBaseline.Size = new System.Drawing.Size(181, 92); + // + // tsmiBaseline + // + tsmiBaseline.Image = Properties.Resources.fam_base; + tsmiBaseline.Name = "tsmiBaseline"; + tsmiBaseline.Size = new System.Drawing.Size(180, 22); + tsmiBaseline.Text = "Base line"; + tsmiBaseline.Click += tsmiBaseline_Click; + // + // tsmiMidline + // + tsmiMidline.Image = Properties.Resources.fam_mid; + tsmiMidline.Name = "tsmiMidline"; + tsmiMidline.Size = new System.Drawing.Size(180, 22); + tsmiMidline.Text = "Mid line"; + tsmiMidline.Click += tsmiMidline_Click; + // + // tsmiTopline + // + tsmiTopline.Image = Properties.Resources.fam_top; + tsmiTopline.Name = "tsmiTopline"; + tsmiTopline.Size = new System.Drawing.Size(180, 22); + tsmiTopline.Text = "Top line"; + tsmiTopline.Click += tsmiTopline_Click; + // // MainForm // AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); @@ -1244,6 +1279,7 @@ pnlRightButtons.PerformLayout(); pnlInfo.ResumeLayout(false); pnlInfo.PerformLayout(); + cmBaseline.ResumeLayout(false); ResumeLayout(false); PerformLayout(); @@ -1350,6 +1386,10 @@ private System.Windows.Forms.Label lblBrush; private System.Windows.Forms.ToolStripMenuItem frameScreenshotToolStripMenuItem; private System.Windows.Forms.TextBox tbFrameNote; + private System.Windows.Forms.ContextMenuStrip cmBaseline; + private System.Windows.Forms.ToolStripMenuItem tsmiBaseline; + private System.Windows.Forms.ToolStripMenuItem tsmiMidline; + private System.Windows.Forms.ToolStripMenuItem tsmiTopline; } } diff --git a/McBitFont/Form1.cs b/McBitFont/Form1.cs index 44fb827..01d977b 100644 --- a/McBitFont/Form1.cs +++ b/McBitFont/Form1.cs @@ -45,11 +45,22 @@ namespace McBitFont { [Key(5)] public int codepage; [Key(6)] - public int baseline; + public int baseline1; + [Key(9)] + public int baseline2; + [Key(10)] + public int baseline3; [Key(7)] public List frames; } + public enum SetLines { + SL_None = 0, + SL_Base, + SL_Mid, + SL_Top + } + public FrameMiniature f; public List frames = new List(); //private CanvasHistory history = new(); @@ -62,14 +73,14 @@ namespace McBitFont { public bool monospaced = false; private bool modified = false; private bool prjModified = false; - public const string version = "2.8"; + public const string version = "2.9"; public string prjName = "Untitled"; public string prjFileName = ""; public int codepage = 1251; private FrameMiniature fbuf; private readonly DataFormats.Format clpbFormat = DataFormats.GetFormat("McBitFontFrame"); - private int baseline = 0; - private bool set_base = false; + private int baseline1 = 0, baseline2 = 0, baseline3 = 0; + private SetLines set_lines = SetLines.SL_None; private Point selection1, selection2; private Point[,] sidebarLocs = new Point[2, 3]; @@ -173,7 +184,7 @@ namespace McBitFont { SideBarRecalc(); // Create default cursor - dotPanel.Cursor = McCursor.GetCursor((int)nudBrush.Value, cellSize, gap); + SetPanelCursor(); } @@ -351,7 +362,7 @@ namespace McBitFont { vScroll.Enabled = true; } - if (!chkRectSelect.Checked) dotPanel.Cursor = McCursor.GetCursor((int)nudBrush.Value, cellSize, gap); + SetPanelCursor(); dotPanel.Refresh(); } @@ -490,16 +501,22 @@ namespace McBitFont { mouseDownMiddle = true; mouseX = e.X; mouseY = e.Y; + SetPanelCursor(); } if (mouseDownMiddle && e.Button == MouseButtons.None) { mouseDownMiddle = false; + SetPanelCursor(); } } // Moving baseline Rectangle rect1, rect2; - if (set_base) { + if (set_lines > SetLines.SL_None) { + int baseline = 0; + if (set_lines == SetLines.SL_Base) baseline = baseline1; + if (set_lines == SetLines.SL_Mid) baseline = baseline2; + if (set_lines == SetLines.SL_Top) baseline = baseline3; int yy = pixelOffset + baseline * (cellSize + gap) - vScroll.Value - 1; rect1 = new Rectangle(pixelOffset, yy, w, 2); @@ -511,11 +528,17 @@ namespace McBitFont { yy = pixelOffset + baseline * (cellSize + gap) - vScroll.Value - 1; rect2 = new Rectangle(pixelOffset, yy, w, 2); + if (set_lines == SetLines.SL_Base) baseline1 = baseline; + if (set_lines == SetLines.SL_Mid) baseline2 = baseline; + if (set_lines == SetLines.SL_Top) baseline3 = baseline; + dotPanel.Invalidate(rect1); dotPanel.Invalidate(rect2); if (e.Button == MouseButtons.Left) { - set_base = false; + set_lines = SetLines.SL_None; + SetPanelCursor(); + SetModified(true, true); return; } } @@ -534,7 +557,7 @@ namespace McBitFont { selection2.Y = j; } } - if (e.Button != MouseButtons.None && !mouseDown) { + if ((e.Button == MouseButtons.Left || e.Button == MouseButtons.Right) && !mouseDown) { // Started to move a mouse with button held mouseDown = true; if (rectSel) { @@ -774,21 +797,36 @@ namespace McBitFont { // Fill the cell with color if (f.data[i, j]) sb = sbb; else sb = sbw; - g.FillRectangle(sb, x, (baseline == j ? y + 1 : y), cellSize, (baseline == j ? cellSize - 1 : cellSize)); + g.FillRectangle(sb, x, ((baseline1 == j || baseline2 == j || baseline3 == j) ? y + 1 : y), cellSize, ((baseline1 == j || baseline2 == j || baseline3 == j) ? cellSize - 1 : cellSize)); } } - // Draw the baseline - if (baseline > 0 && gap > 0) { + // Draw the base lines + if (baseline1 > 0 || baseline2 > 0 || baseline3 > 0) { x = pixelOffset - hScroll.Value; - y = pixelOffset + baseline * (cellSize + gap) - vScroll.Value; - - Pen sbBase = new(Color.Blue, 2); - g.DrawLine(sbBase, x, y, w, y); + // Base line + if (baseline1 > 0) { + Pen sbBase = new(Color.Blue, gap > 0 ? 2 : 1); + y = pixelOffset + baseline1 * (cellSize + gap) - vScroll.Value; + g.DrawLine(sbBase, x, y, w, y); + } + // Mid line + if (baseline2 > 0) { + Pen sbBase = new(Color.MediumPurple, gap > 0 ? 2 : 1); + y = pixelOffset + baseline2 * (cellSize + gap) - vScroll.Value; + g.DrawLine(sbBase, x, y, w, y); + } + // Top line + if (baseline3 > 0) { + Pen sbBase = new(Color.FromArgb(0x16, 0x8b, 0x76), gap > 0 ? 2 : 1); + y = pixelOffset + baseline3 * (cellSize + gap) - vScroll.Value; + g.DrawLine(sbBase, x, y, w, y); + } } + // Draw the Rect selection - if (chkRectSelect.Checked) { + if (chkRectSelect.Checked || CAKeyDown) { Point p1 = new(selection1.X, selection1.Y); Point p2 = new(selection2.X, selection2.Y); NormPoints(ref p1, ref p2); @@ -903,7 +941,9 @@ namespace McBitFont { f = CopyFrame(frames.First()); form.Dispose(); - baseline = 0; + baseline1 = 0; + baseline2 = 0; + baseline3 = 0; prjName = "Untitled"; prjFileName = ""; @@ -1004,7 +1044,9 @@ namespace McBitFont { } monospaced = sav.monospaced; codepage = sav.codepage; - baseline = sav.baseline; + baseline1 = sav.baseline1; + baseline2 = sav.baseline2; + baseline3 = sav.baseline3; lblType.Text = monospaced ? "Monospaced" : "Variable width / Single"; frames = sav.frames; makeVarWidthToolStripMenuItem.Visible = monospaced; @@ -1053,7 +1095,9 @@ namespace McBitFont { sav.monospaced = monospaced; sav.frames = frames; sav.codepage = codepage; - sav.baseline = baseline; + sav.baseline1 = baseline1; + sav.baseline2 = baseline2; + sav.baseline3 = baseline3; using (Stream ms = File.OpenWrite(filename)) { MessagePackSerializer.Serialize(ms, sav); @@ -1187,7 +1231,7 @@ namespace McBitFont { } private void btnBaseline_Click(object sender, EventArgs e) { - set_base = !set_base; + cmBaseline.Show(btnBaseline, new Point(0, btnBaseline.Height)); } // Check modified / Save frame @@ -1403,8 +1447,7 @@ namespace McBitFont { lblSelection.Visible = lblSelectionLabel.Visible = chkRectSelect.Checked; selectAllToolStripMenuItem.Enabled = chkRectSelect.Checked; - if (chkRectSelect.Checked) dotPanel.Cursor = McCursor.GetCursorSelect(); - else dotPanel.Cursor = McCursor.GetCursor((int)nudBrush.Value, cellSize, gap); + SetPanelCursor(); dotPanel.Refresh(); } @@ -1534,7 +1577,7 @@ namespace McBitFont { } private void TestFont_Click(object sender, EventArgs e) { - var tester = new FontTester(codepage, dotHeight, baseline, frames); + var tester = new FontTester(codepage, dotHeight, baseline1, frames); tester.ShowDialog(); } @@ -1700,7 +1743,7 @@ namespace McBitFont { } private void nudBrush_ValueChanged(object sender, EventArgs e) { - if (!chkRectSelect.Checked) dotPanel.Cursor = McCursor.GetCursor((int)nudBrush.Value, cellSize, gap); + SetPanelCursor(); } private void frameScreenshotToolStripMenuItem_Click(object sender, EventArgs e) { @@ -1720,9 +1763,9 @@ namespace McBitFont { private void MainForm_KeyDown(object sender, KeyEventArgs e) { if (CAKeyDown) return; if (chkRectSelect.Checked && e.Control && e.Alt) { - //MessageBox.Show("Down: Alt!"); chkRectSelect.Checked = false; CAKeyDown = true; + dotPanel.Invalidate(); e.Handled = true; } } @@ -1734,5 +1777,44 @@ namespace McBitFont { e.Handled = true; } } + + private void btnBaseline_Paint(object sender, PaintEventArgs e) { + Button btn = (sender as Button); + int arrowX = btn.ClientRectangle.Width - btn.Padding.Right - 14; + int arrowY = btn.ClientRectangle.Height / 2 - 1; + + Color color = btn.Enabled ? ForeColor : SystemColors.ControlDark; + using Brush brush = new SolidBrush(color); + using Pen pen = new Pen(color); + Point[] arrow = [new Point(arrowX, arrowY), new Point(arrowX + 7, arrowY), new Point(arrowX + 3, arrowY + 4)]; + + e.Graphics.FillPolygon(brush, arrow); + e.Graphics.DrawLine(pen, arrowX - 5, btn.ClientRectangle.Top + 4, arrowX - 5, btn.ClientRectangle.Bottom - 4); + } + + private void tsmiBaseline_Click(object sender, EventArgs e) { + if (set_lines == SetLines.SL_Base) set_lines = SetLines.SL_None; + else set_lines = SetLines.SL_Base; + SetPanelCursor(); + } + + private void tsmiMidline_Click(object sender, EventArgs e) { + if (set_lines == SetLines.SL_Mid) set_lines = SetLines.SL_None; + else set_lines = SetLines.SL_Mid; + SetPanelCursor(); + } + + private void tsmiTopline_Click(object sender, EventArgs e) { + if (set_lines == SetLines.SL_Top) set_lines = SetLines.SL_None; + else set_lines = SetLines.SL_Top; + SetPanelCursor(); + } + + private void SetPanelCursor() { + if (mouseDownMiddle) dotPanel.Cursor = McCursor.GetCursorDrag(); + else if (set_lines > SetLines.SL_None) dotPanel.Cursor = McCursor.GetCursorLines(); + else if (chkRectSelect.Checked) dotPanel.Cursor = McCursor.GetCursorSelect(); + else dotPanel.Cursor = McCursor.GetCursor((int)nudBrush.Value, cellSize, gap); + } } } diff --git a/McBitFont/Form1.resx b/McBitFont/Form1.resx index 5800d67..293aef1 100644 --- a/McBitFont/Form1.resx +++ b/McBitFont/Form1.resx @@ -138,6 +138,9 @@ 644, 17 + + 763, 17 + diff --git a/McBitFont/McBitFont.csproj b/McBitFont/McBitFont.csproj index 945ed93..094edfd 100644 --- a/McBitFont/McBitFont.csproj +++ b/McBitFont/McBitFont.csproj @@ -20,9 +20,9 @@ true true icon_64.ico - 2.8.0.0 - 2.8.0.0 - $(VersionPrefix)2.8.0 + 2.9.0.0 + 2.9.0.0 + $(VersionPrefix)2.9.0 Anton Mukhin diff --git a/McBitFont/McCursor.cs b/McBitFont/McCursor.cs index a2cb6e4..d93d40f 100644 --- a/McBitFont/McCursor.cs +++ b/McBitFont/McCursor.cs @@ -127,5 +127,46 @@ namespace McBitFont { return CreateCursorNoResize(bmp, 1, 1); } + public static Cursor GetCursorLines() { + Point[] arrow = { new(1, 1), new(12, 12), new(11, 13), new(6, 13), new(2, 17), new(1, 16) }; + Rectangle line = new(0, 18, 20, 5); + + Bitmap bmp = new(21, 24); + Pen pb = new(Color.Black, 1); + Pen pw = new(Color.White, 1); + SolidBrush bw = new(Color.White); + SolidBrush bb = new(Color.Black); + using (Graphics g = Graphics.FromImage(bmp)) { + g.FillPolygon(bw, arrow); + g.DrawPolygon(pb, arrow); + g.FillRectangle(bb, line); + g.DrawRectangle(pw, line); + } + + return CreateCursorNoResize(bmp, 1, 1); + } + + public static Cursor GetCursorDrag() { + Point[] arrow1 = { new(11, 0), new(15, 4), new(13, 4), new(13, 7), new(9, 7), new(9, 4), new(7, 4) }; + Point[] arrow2 = { new(22, 11), new(18, 15), new(18, 13), new(15, 13), new(15, 9), new(18, 9), new(18, 7) }; + Point[] arrow3 = { new(11, 22), new(7, 18), new(9, 18), new(9, 15), new(13, 15), new(13, 18), new(15, 18) }; + Point[] arrow4 = { new(0, 11), new(4, 7), new(4, 9), new(7, 9), new(7, 13), new(4, 13), new(4, 15) }; + + Bitmap bmp = new(23, 23); + Pen pb = new(Color.Black, 1); + SolidBrush bw = new(Color.White); + using (Graphics g = Graphics.FromImage(bmp)) { + g.FillPolygon(bw, arrow1); + g.DrawPolygon(pb, arrow1); + g.FillPolygon(bw, arrow2); + g.DrawPolygon(pb, arrow2); + g.FillPolygon(bw, arrow3); + g.DrawPolygon(pb, arrow3); + g.FillPolygon(bw, arrow4); + g.DrawPolygon(pb, arrow4); + } + return CreateCursorNoResize(bmp, 11, 11); + } + } } diff --git a/McBitFont/Properties/Resources.Designer.cs b/McBitFont/Properties/Resources.Designer.cs index 80aefdd..17896b4 100644 --- a/McBitFont/Properties/Resources.Designer.cs +++ b/McBitFont/Properties/Resources.Designer.cs @@ -180,6 +180,26 @@ namespace McBitFont.Properties { } } + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap fam_lines { + get { + object obj = ResourceManager.GetObject("fam_lines", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap fam_mid { + get { + object obj = ResourceManager.GetObject("fam_mid", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// @@ -190,6 +210,16 @@ namespace McBitFont.Properties { } } + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap fam_top { + get { + object obj = ResourceManager.GetObject("fam_top", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// diff --git a/McBitFont/Properties/Resources.resx b/McBitFont/Properties/Resources.resx index b1cad7e..060b557 100644 --- a/McBitFont/Properties/Resources.resx +++ b/McBitFont/Properties/Resources.resx @@ -118,6 +118,9 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + ..\Resources\fam_mid.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + ..\Resources\arrow_left.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a @@ -130,6 +133,9 @@ ..\Resources\Famfamfam-Silk-Page-paste.16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\folder_table.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + ..\Resources\folder_open.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a @@ -145,12 +151,12 @@ ..\Resources\font.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\picture_save.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + ..\Resources\redo.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Resources\Famfamfam-Silk-Disk.16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - ..\Resources\icon.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a @@ -169,9 +175,6 @@ ..\Resources\Canvas_Clear.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Resources\text_letterspacing2.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - ..\Resources\arrow_up.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a @@ -196,6 +199,9 @@ ..\Resources\icon_32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\fam_lines.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + ..\Resources\tick.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a @@ -211,17 +217,20 @@ ..\Resources\fam_rectt.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\Famfamfam-Silk-Page-white.16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + ..\Resources\delete.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\arrow_turn_right.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Resources\Famfamfam-Silk-Page-white.16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\Famfamfam-Silk-Disk.16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Resources\folder_table.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\text_letterspacing2.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Canvas_Fill.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a @@ -244,7 +253,7 @@ ..\Resources\icon_64.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Resources\picture_save.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\fam_top.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a \ No newline at end of file diff --git a/McBitFont/Resources/fam_lines.png b/McBitFont/Resources/fam_lines.png new file mode 100644 index 0000000000000000000000000000000000000000..437bfc018762b5aaebbaa85165873fffe6920c38 GIT binary patch literal 174 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9GG!XV7ZFl&wkP%y#M z#WBR9H(BJh-tY4cj0uSe2?-w4t}1zdzH|J##0-s%vhSL9_OG9q%kcRBe-Tzj(LEOy zR!sU7@!(s%$FyhbrJt@8;f^;yH97adf#XbzyDmDPN>)7cn=x`$cy6c!OB@4(y}gXV Uz0Y$*fOau>y85}Sb4q9e0IIw^)c^nh literal 0 HcmV?d00001 diff --git a/McBitFont/Resources/fam_mid.png b/McBitFont/Resources/fam_mid.png new file mode 100644 index 0000000000000000000000000000000000000000..3b82f680e70c64cf83336b011fe599d7b8b205c0 GIT binary patch literal 137 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9GG!XV7ZFl&wkP|(`b z#WBR9H~G*1|MtwP4V_AN7qc0Fz=jfyc}p~;A|!xd$6xtLOMkw0tJJDsOcUDKP-vpc b$HdIA|!S3j3^P6E%)P;R=F#tQcE#7LQ#3FTpo~*F z8Aya(_Asg|>UutJu vVkrf~{#gyul)<2k^9*DXL7lZ5n6eK&T6&g

%ii+-z3M_1n`+hJV}uZjR6P literal 0 HcmV?d00001 diff --git a/examples/Font_9x17_Alagard_cyr_vw.mbfont b/examples/Font_9x17_Alagard_cyr_vw.mbfont index 4720ecd3063d2a42dd11d1fce4df195582cac4c5..8e4603e93c90ee2d90c3c13ba4088a60642e90fd 100644 GIT binary patch delta 4014 zcma)9dr*|u6%WdO`(*d~*yW9|C|HpIyD(##$jew0V#2W2I1OrHA@M=M08unXkVPU< z&#HH?RBTJm>Lo`k8n)_D{}BcT61{bk>@qhVf%r7_lVac7kg#yhNKb z4ZaZ)5=vsuus9QQ!Zr6jC(b~eap{gfz`xal$h-^e^3?p_u^5OgVexQm6^kEyA?BJ| z*m}(LCX2P23_Gq3vNhkF$6}3H`es;UnZp*D;+jR`e$y%)E?ea~!nTlD`ZAO^`teAE zj&=5+u-%0j_X33S3`}Ys+_Kln#EuifHkU&ZNG;wIxIMs;}UVJC~h$_@(uV> z?bz#X<@DFxoc?}FUyYK(HcZBw3D$(0o)QsWN#SMCGh)L#H24f1dW=1s?ZnI>D=qJ< z!s`J++q*<7R?jyupW0ZAU&ec|E=kAGR~)v9iHSMNKFFX5b!H;s)ezbIAlJ1dN%G{y zqz~CTko=~|RZZ1CFXRC6<6bOJmAp8fDw$QCc1BdQ)@r~?)f_`$Z6X$?_lW3+G1c^{ zkk?@_d9F=Cs&+;*!r7@P+_Z-CXJ#Rd<2B)kx0_LoEXjt^tSV9NM!Nw!C3pj;7kI+i@!@PYrZjz4ipO&B)>{i1pjNJTdMOdnoR2_)2^C%O;x~Gl(nMu-SZ~e=XLp2~9pUUm#_G(L2mfp~ zAJ7JBwxEKJ)?y8(>TMXxDHlkO;&e?uM(*^$ySR*j>K4muA9jCeg5U*)1jxafPT zXjm8g%bvH)T?Frhq6$}6xa=g`_o+@js`9j|>{pduRe2_=F!0OwjItP9E_3v${{5Z@eL4^^ihsmcp<68Wl)MPKzUU6A2Ln*kf$ z3ol{NMaNEy#l} zTLSwq8-D#iUe@kS=h^i)${j7|0{-|mEoMRZup0$i+PLPCEg$jccRBXU2NjMeZ9K{1 zbfY{%lVXl24`bO%_)?E>mBm z_EccX;-D88ftDst`+HhX7Q96cv@E45z{e98L$tMCWU;dCBNly6$T~idbBfWD8{T1> zonYT1=KHqybCOHM77wbn(5Tu-&uC$K_)ZPw+Z{9r#^Z%2z|Yu zpFb(nUX|0u)!k*>>JME8Ty$aF#yS5+eBbP*_t1n$p}`XYO{->lJ9S)ss+#c&_DIk_ z|3B|77y1{)*@^OI10&mPI1;eXX_))H)p0L7|CQMooi;f0jZV2aAIr^YOHHQN+Dui` zRNv*I`NlOj<7HSdm6C+k6q>uc9%A5YvsFaLl0c?|b}k-Mi!w0WsiCeQEjk{st=qT#qxLZ9p8T+4j-Ty1L|7`zx7Wekb72lNq z9ZfIIK(He#oK1sVCjEhw34bUDtZ9gyh%rphy;?vZ_qQ1+;XmV-5%;le?A w3`Y9GY%T8ZW{!L=r)hsrCh;PL&YB5hW+yexG<&}0hBY~|?l~mdF>adoAGa>B4gdfE delta 2934 zcmZ`*dvKIj6)zwA{JzcZej$&|J4;9i9L9VY$ieG70sIko$6u4+uS>add2 zf~5r>WEPpx*QjB@>+CMl4;94U#nC1hSTy03Vobr7m=erX8pt@ITq8X)@h#PuI#I_& zS}Gl9N$8z1Ehe>@1^ud7D2|$cPI}ZboAj!sTQv$59SYSaqqi<2W@u>0DAIIjvVjY$`%6sTkX@QedH7 zoP5qsu`*SMO4~1^F_413j##v+Te=C? zEPUINfhV1*sxjNF!%R~v;oXshe^t70yVZ2G=ADZmqLW_oh>LQ0J;7 zz3ieN{umuGRQ?nCixV)Ap(5x$uNd<%FF6i%?nxNXEf{Dw;iKw+V$7#Yy^8T5`s)b` zu(ZjG%;~A9R4j0(n=rOH7XBI=4z6(FfpitVNoKr0sZ=q(6cG(c7!O9`rzyrm^1NbHBvh%!!_i1zPcDbA zz{xw=6K5;NA}Kc+p}cf7l(VEdG@MVIry7q$tL-x#J56Pvr->=l&5E%Y=UV5&nWV#) zR7zZ{7>{CfV-9ne3`e64V>!Yn8%DD-;I?W=neIg>A(JQjlbN!LarfE6jZg|pcA0c3 zEfUN9sR7kkZr5RFy4jKzVHUmt-W%yL%D-InFnjU7C@x)?lB(eUjRz^vMf0`Q=(;cWP zv7jQemM#uv(#6#@pUK8^pvPoFIN*RU*@89Y@#xt~UZ)9FJDdo6A5e|Qqpn|edaz=0 zCvE(3vgobCEYVdrv&8>JQ;w;|nrII#&8~qzdnGr{XN#u0ogGw+wc`SoNDoc$Cs;6& zvzkH$Q(2?yZ8~hc&K~r76A+-=ff^0LP$nkk&QpvHD4eM^+UN7VYXfVKl@-_^@S zUJ)<%WVD*9^XH=Q>&y&0Zh&QsTj>Pl!IW0j?rR0GCM|f4Zh$U z3jD2@_FAHOtIkhD)n-**)&*aQ7bmC~Xjc)=Q;}iKV&!W1XqOu=Xjb^^%rsJ8Dx&{| zGBH9flreJc(MvU25-?|v6~PHkw9ZJPz~LErq;Jj;0ZA!m@os~DfA2(NI4H4G;&zEU z1X9>_|8Yv~lB?=jV)e9Kotk}`t8Yn-y%P6H+%KhcztA}-xm^-N61ycHk_dr3w{L;a zdPZ`em3Ua<5h?ZQLgB$txvF|t=zK@Yd{^T05?_$mBe7TFF^R_o^5msUgq80}?)N3W zDDel8LJDk1M#-`kN}pUNJa}2`YR2#@(c`T>08E>ikslUK2=5!OBDAo|CJ= zHNx%%Df5QJfzNvjc(cLi6wqtp(YMLV+2+QXwaaPOx$ZdW*>$H$8`oc<)r&Gp?7~yl zn#B{y`URUm9hpfsTxhdk&lAn$y?JNeQE_DBMRI<1SD)T9&AIpMh-+ze9BRQ>7LqHY)jV=PM=9jpM2vzN?($eBJT&+Bh(f_c%)7wY;@cxdK}@F6!dsSW1XxQ zf%z@ zD{R;96X|(uzp(OedXvF2&@r|%3mIK&xZ^%}h4jONhe&sJb&_hKi#+LeG)tYknT5u9 UXx;U29Ppr_Tg4)W*6qvvFI@#~Pyhe` diff --git a/examples/SelectionCursor.mbfont b/examples/SelectionCursor.mbfont deleted file mode 100644 index dcd90e2e7587e933464f6a014cb9a1947e22e6c0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1045 zcmdTkChJMm!fz~ z3fXH+QtJ_uf|#=16BGJgk5qrPZKw;V!h0R-2p~eje?0hle=22yc7`&+@A`J4R~#64 JKi+=3VNd6969@nR diff --git a/icons/famfamfam/fam_lines.png b/icons/famfamfam/fam_lines.png new file mode 100644 index 0000000000000000000000000000000000000000..437bfc018762b5aaebbaa85165873fffe6920c38 GIT binary patch literal 174 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9GG!XV7ZFl&wkP%y#M z#WBR9H(BJh-tY4cj0uSe2?-w4t}1zdzH|J##0-s%vhSL9_OG9q%kcRBe-Tzj(LEOy zR!sU7@!(s%$FyhbrJt@8;f^;yH97adf#XbzyDmDPN>)7cn=x`$cy6c!OB@4(y}gXV Uz0Y$*fOau>y85}Sb4q9e0IIw^)c^nh literal 0 HcmV?d00001 diff --git a/icons/famfamfam/fam_mid.png b/icons/famfamfam/fam_mid.png new file mode 100644 index 0000000000000000000000000000000000000000..3b82f680e70c64cf83336b011fe599d7b8b205c0 GIT binary patch literal 137 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9GG!XV7ZFl&wkP|(`b z#WBR9H~G*1|MtwP4V_AN7qc0Fz=jfyc}p~;A|!xd$6xtLOMkw0tJJDsOcUDKP-vpc b$HdIA|!S3j3^P6