WIP: Working on "zerofy widht for blank symbols" feature

This commit is contained in:
Anton Mukhin
2025-06-18 17:55:09 +03:00
parent 12593ef7ad
commit 87b46ec714
2 changed files with 53 additions and 13 deletions

View File

@@ -119,6 +119,7 @@
dlgSavePNG = new System.Windows.Forms.SaveFileDialog(); dlgSavePNG = new System.Windows.Forms.SaveFileDialog();
pnlRightButtons = new System.Windows.Forms.Panel(); pnlRightButtons = new System.Windows.Forms.Panel();
pnlInfo = new System.Windows.Forms.Panel(); pnlInfo = new System.Windows.Forms.Panel();
zerofyWidthToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
((System.ComponentModel.ISupportInitialize)nudX).BeginInit(); ((System.ComponentModel.ISupportInitialize)nudX).BeginInit();
((System.ComponentModel.ISupportInitialize)nudY).BeginInit(); ((System.ComponentModel.ISupportInitialize)nudY).BeginInit();
panel1.SuspendLayout(); panel1.SuspendLayout();
@@ -720,7 +721,7 @@
// //
// fontToolStripMenuItem // fontToolStripMenuItem
// //
fontToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { makeVarWidthToolStripMenuItem, prependSymbolToolStripMenuItem, appendSymbolToolStripMenuItem, removeSymbolToolStripMenuItem, removeBeforeToolStripMenuItem, removeAfterToolStripMenuItem, CodeShiftToolStripMenuItem, toolStripSeparator3, previousSymbolToolStripMenuItem, nextSymbolToolStripMenuItem, toolStripSeparator4, testFontToolStripMenuItem }); fontToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { makeVarWidthToolStripMenuItem, prependSymbolToolStripMenuItem, appendSymbolToolStripMenuItem, removeSymbolToolStripMenuItem, removeBeforeToolStripMenuItem, removeAfterToolStripMenuItem, zerofyWidthToolStripMenuItem, CodeShiftToolStripMenuItem, toolStripSeparator3, previousSymbolToolStripMenuItem, nextSymbolToolStripMenuItem, toolStripSeparator4, testFontToolStripMenuItem });
fontToolStripMenuItem.Name = "fontToolStripMenuItem"; fontToolStripMenuItem.Name = "fontToolStripMenuItem";
fontToolStripMenuItem.Size = new System.Drawing.Size(43, 20); fontToolStripMenuItem.Size = new System.Drawing.Size(43, 20);
fontToolStripMenuItem.Text = "Font"; fontToolStripMenuItem.Text = "Font";
@@ -730,7 +731,7 @@
// //
makeVarWidthToolStripMenuItem.Image = Properties.Resources.z_asterisk; makeVarWidthToolStripMenuItem.Image = Properties.Resources.z_asterisk;
makeVarWidthToolStripMenuItem.Name = "makeVarWidthToolStripMenuItem"; makeVarWidthToolStripMenuItem.Name = "makeVarWidthToolStripMenuItem";
makeVarWidthToolStripMenuItem.Size = new System.Drawing.Size(215, 22); makeVarWidthToolStripMenuItem.Size = new System.Drawing.Size(241, 22);
makeVarWidthToolStripMenuItem.Text = "Make Variable Width"; makeVarWidthToolStripMenuItem.Text = "Make Variable Width";
makeVarWidthToolStripMenuItem.ToolTipText = "Make Font Variable width one"; makeVarWidthToolStripMenuItem.ToolTipText = "Make Font Variable width one";
makeVarWidthToolStripMenuItem.Visible = false; makeVarWidthToolStripMenuItem.Visible = false;
@@ -743,7 +744,7 @@
prependSymbolToolStripMenuItem.Name = "prependSymbolToolStripMenuItem"; prependSymbolToolStripMenuItem.Name = "prependSymbolToolStripMenuItem";
prependSymbolToolStripMenuItem.ShortcutKeyDisplayString = "Ctrl+Ins"; prependSymbolToolStripMenuItem.ShortcutKeyDisplayString = "Ctrl+Ins";
prependSymbolToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Insert; prependSymbolToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Insert;
prependSymbolToolStripMenuItem.Size = new System.Drawing.Size(215, 22); prependSymbolToolStripMenuItem.Size = new System.Drawing.Size(241, 22);
prependSymbolToolStripMenuItem.Text = "Prepend symbol"; prependSymbolToolStripMenuItem.Text = "Prepend symbol";
prependSymbolToolStripMenuItem.ToolTipText = "Add a symbol to the beginning of the sequence"; prependSymbolToolStripMenuItem.ToolTipText = "Add a symbol to the beginning of the sequence";
prependSymbolToolStripMenuItem.Click += prependSymbolToolStripMenuItem_Click; prependSymbolToolStripMenuItem.Click += prependSymbolToolStripMenuItem_Click;
@@ -755,7 +756,7 @@
appendSymbolToolStripMenuItem.Name = "appendSymbolToolStripMenuItem"; appendSymbolToolStripMenuItem.Name = "appendSymbolToolStripMenuItem";
appendSymbolToolStripMenuItem.ShortcutKeyDisplayString = ""; appendSymbolToolStripMenuItem.ShortcutKeyDisplayString = "";
appendSymbolToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.End; appendSymbolToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.End;
appendSymbolToolStripMenuItem.Size = new System.Drawing.Size(215, 22); appendSymbolToolStripMenuItem.Size = new System.Drawing.Size(241, 22);
appendSymbolToolStripMenuItem.Text = "Append symbol"; appendSymbolToolStripMenuItem.Text = "Append symbol";
appendSymbolToolStripMenuItem.ToolTipText = "Add a symbol to the end of the sequence"; appendSymbolToolStripMenuItem.ToolTipText = "Add a symbol to the end of the sequence";
appendSymbolToolStripMenuItem.Click += prependSymbolToolStripMenuItem_Click; appendSymbolToolStripMenuItem.Click += prependSymbolToolStripMenuItem_Click;
@@ -767,7 +768,7 @@
removeSymbolToolStripMenuItem.Name = "removeSymbolToolStripMenuItem"; removeSymbolToolStripMenuItem.Name = "removeSymbolToolStripMenuItem";
removeSymbolToolStripMenuItem.ShortcutKeyDisplayString = ""; removeSymbolToolStripMenuItem.ShortcutKeyDisplayString = "";
removeSymbolToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Delete; removeSymbolToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Delete;
removeSymbolToolStripMenuItem.Size = new System.Drawing.Size(215, 22); removeSymbolToolStripMenuItem.Size = new System.Drawing.Size(241, 22);
removeSymbolToolStripMenuItem.Text = "Remove symbol"; removeSymbolToolStripMenuItem.Text = "Remove symbol";
removeSymbolToolStripMenuItem.ToolTipText = "Remove current symbol (works only for first or last symbol in the sequence)"; removeSymbolToolStripMenuItem.ToolTipText = "Remove current symbol (works only for first or last symbol in the sequence)";
removeSymbolToolStripMenuItem.Click += removeSymbolToolStripMenuItem_Click; removeSymbolToolStripMenuItem.Click += removeSymbolToolStripMenuItem_Click;
@@ -777,7 +778,7 @@
removeBeforeToolStripMenuItem.Enabled = false; removeBeforeToolStripMenuItem.Enabled = false;
removeBeforeToolStripMenuItem.Image = Properties.Resources.delete; removeBeforeToolStripMenuItem.Image = Properties.Resources.delete;
removeBeforeToolStripMenuItem.Name = "removeBeforeToolStripMenuItem"; removeBeforeToolStripMenuItem.Name = "removeBeforeToolStripMenuItem";
removeBeforeToolStripMenuItem.Size = new System.Drawing.Size(215, 22); removeBeforeToolStripMenuItem.Size = new System.Drawing.Size(241, 22);
removeBeforeToolStripMenuItem.Text = "Remove all before selected"; removeBeforeToolStripMenuItem.Text = "Remove all before selected";
removeBeforeToolStripMenuItem.ToolTipText = "Remove all symbols before current one"; removeBeforeToolStripMenuItem.ToolTipText = "Remove all symbols before current one";
removeBeforeToolStripMenuItem.Click += removeBeforeToolStripMenuItem_Click; removeBeforeToolStripMenuItem.Click += removeBeforeToolStripMenuItem_Click;
@@ -787,7 +788,7 @@
removeAfterToolStripMenuItem.Enabled = false; removeAfterToolStripMenuItem.Enabled = false;
removeAfterToolStripMenuItem.Image = Properties.Resources.delete; removeAfterToolStripMenuItem.Image = Properties.Resources.delete;
removeAfterToolStripMenuItem.Name = "removeAfterToolStripMenuItem"; removeAfterToolStripMenuItem.Name = "removeAfterToolStripMenuItem";
removeAfterToolStripMenuItem.Size = new System.Drawing.Size(215, 22); removeAfterToolStripMenuItem.Size = new System.Drawing.Size(241, 22);
removeAfterToolStripMenuItem.Text = "Remove all after selected"; removeAfterToolStripMenuItem.Text = "Remove all after selected";
removeAfterToolStripMenuItem.ToolTipText = "Remove all symbols after current one"; removeAfterToolStripMenuItem.ToolTipText = "Remove all symbols after current one";
removeAfterToolStripMenuItem.Click += removeAfterToolStripMenuItem_Click; removeAfterToolStripMenuItem.Click += removeAfterToolStripMenuItem_Click;
@@ -796,7 +797,7 @@
// //
CodeShiftToolStripMenuItem.Image = Properties.Resources.z_align_center; CodeShiftToolStripMenuItem.Image = Properties.Resources.z_align_center;
CodeShiftToolStripMenuItem.Name = "CodeShiftToolStripMenuItem"; CodeShiftToolStripMenuItem.Name = "CodeShiftToolStripMenuItem";
CodeShiftToolStripMenuItem.Size = new System.Drawing.Size(215, 22); CodeShiftToolStripMenuItem.Size = new System.Drawing.Size(241, 22);
CodeShiftToolStripMenuItem.Text = "Code shift"; CodeShiftToolStripMenuItem.Text = "Code shift";
CodeShiftToolStripMenuItem.ToolTipText = "Shift the font on the code line"; CodeShiftToolStripMenuItem.ToolTipText = "Shift the font on the code line";
CodeShiftToolStripMenuItem.Click += CodeShiftToolStripMenuItem_Click; CodeShiftToolStripMenuItem.Click += CodeShiftToolStripMenuItem_Click;
@@ -804,13 +805,13 @@
// toolStripSeparator3 // toolStripSeparator3
// //
toolStripSeparator3.Name = "toolStripSeparator3"; toolStripSeparator3.Name = "toolStripSeparator3";
toolStripSeparator3.Size = new System.Drawing.Size(212, 6); toolStripSeparator3.Size = new System.Drawing.Size(238, 6);
// //
// previousSymbolToolStripMenuItem // previousSymbolToolStripMenuItem
// //
previousSymbolToolStripMenuItem.Name = "previousSymbolToolStripMenuItem"; previousSymbolToolStripMenuItem.Name = "previousSymbolToolStripMenuItem";
previousSymbolToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.Alt | System.Windows.Forms.Keys.Left; previousSymbolToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.Alt | System.Windows.Forms.Keys.Left;
previousSymbolToolStripMenuItem.Size = new System.Drawing.Size(215, 22); previousSymbolToolStripMenuItem.Size = new System.Drawing.Size(241, 22);
previousSymbolToolStripMenuItem.Text = "Previous Symbol"; previousSymbolToolStripMenuItem.Text = "Previous Symbol";
previousSymbolToolStripMenuItem.Click += previousSymbolToolStripMenuItem_Click; previousSymbolToolStripMenuItem.Click += previousSymbolToolStripMenuItem_Click;
// //
@@ -818,20 +819,20 @@
// //
nextSymbolToolStripMenuItem.Name = "nextSymbolToolStripMenuItem"; nextSymbolToolStripMenuItem.Name = "nextSymbolToolStripMenuItem";
nextSymbolToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.Alt | System.Windows.Forms.Keys.Right; nextSymbolToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.Alt | System.Windows.Forms.Keys.Right;
nextSymbolToolStripMenuItem.Size = new System.Drawing.Size(215, 22); nextSymbolToolStripMenuItem.Size = new System.Drawing.Size(241, 22);
nextSymbolToolStripMenuItem.Text = "Next symbol"; nextSymbolToolStripMenuItem.Text = "Next symbol";
nextSymbolToolStripMenuItem.Click += nextSymbolToolStripMenuItem_Click; nextSymbolToolStripMenuItem.Click += nextSymbolToolStripMenuItem_Click;
// //
// toolStripSeparator4 // toolStripSeparator4
// //
toolStripSeparator4.Name = "toolStripSeparator4"; toolStripSeparator4.Name = "toolStripSeparator4";
toolStripSeparator4.Size = new System.Drawing.Size(212, 6); toolStripSeparator4.Size = new System.Drawing.Size(238, 6);
// //
// testFontToolStripMenuItem // testFontToolStripMenuItem
// //
testFontToolStripMenuItem.Image = Properties.Resources.font; testFontToolStripMenuItem.Image = Properties.Resources.font;
testFontToolStripMenuItem.Name = "testFontToolStripMenuItem"; testFontToolStripMenuItem.Name = "testFontToolStripMenuItem";
testFontToolStripMenuItem.Size = new System.Drawing.Size(215, 22); testFontToolStripMenuItem.Size = new System.Drawing.Size(241, 22);
testFontToolStripMenuItem.Text = "Test font"; testFontToolStripMenuItem.Text = "Test font";
testFontToolStripMenuItem.ToolTipText = "Open dialog where you can test the font with any text you type"; testFontToolStripMenuItem.ToolTipText = "Open dialog where you can test the font with any text you type";
testFontToolStripMenuItem.Click += TestFont_Click; testFontToolStripMenuItem.Click += TestFont_Click;
@@ -1140,6 +1141,13 @@
pnlInfo.Size = new System.Drawing.Size(103, 154); pnlInfo.Size = new System.Drawing.Size(103, 154);
pnlInfo.TabIndex = 28; pnlInfo.TabIndex = 28;
// //
// zerofyWidthToolStripMenuItem
//
zerofyWidthToolStripMenuItem.Name = "zerofyWidthToolStripMenuItem";
zerofyWidthToolStripMenuItem.Size = new System.Drawing.Size(241, 22);
zerofyWidthToolStripMenuItem.Text = "Make all blank symbols 0-width";
zerofyWidthToolStripMenuItem.Click += ZerofyBlankWidth;
//
// MainForm // MainForm
// //
AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
@@ -1273,6 +1281,7 @@
private System.Windows.Forms.Panel pnlInfo; private System.Windows.Forms.Panel pnlInfo;
private System.Windows.Forms.ToolStripMenuItem toggleBarToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem toggleBarToolStripMenuItem;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator4; private System.Windows.Forms.ToolStripSeparator toolStripSeparator4;
private System.Windows.Forms.ToolStripMenuItem zerofyWidthToolStripMenuItem;
} }
} }

View File

@@ -98,6 +98,17 @@ namespace McBitFont {
} }
} }
// Check if a frame is "blank"
private static bool IsFrameBlank(FrameMiniature frame) {
if (frame.code == 32) return false; // Space character is always blank, so skip it
for (int i = 0; i < frame.width; i++) {
for (int j = 0; j < frame.height; j++) {
if (frame.data[i, j]) return false;
}
}
return true;
}
// Remember sidebar panels locations // Remember sidebar panels locations
private void SideBarRecalc() { private void SideBarRecalc() {
@@ -1633,5 +1644,25 @@ namespace McBitFont {
} }
PrevNextMenuCheck(); PrevNextMenuCheck();
} }
private void ZerofyBlankWidth(object sender, EventArgs e) {
if (monospaced) return; // Does not work for monospaced fonts
if (frames.Count < 2) return; // Does not work for single images
for (int i = 0; i < frames.Count; i++) {
if (IsFrameBlank(frames[i])) {
Bitmap bmp;
frames[i] = FrameResize(frames[i], 0, dotHeight);
bmp = GetMiniPictue(frames[i]);
string s = frames[i].code.ToString().PadLeft(3, '0');
ilMiniatures.Images.RemoveByKey(s);
ilMiniatures.Images.Add(s, (Image)bmp);
miniList.Items[s].ImageKey = s;
SetModified(true, true);
}
}
}
} }
} }