From 691b87b8426ec205b6cf2e7d881bb18e444c517e Mon Sep 17 00:00:00 2001 From: Anton Mukhin Date: Fri, 12 May 2023 04:35:26 +0300 Subject: [PATCH] WIP: working on text formats --- McBitFont/Export.Designer.cs | 1 + McBitFont/Export.cs | 71 ++++++++++++++++++++++++++++++++++-- McBitFont/Form1.cs | 2 +- 3 files changed, 69 insertions(+), 5 deletions(-) diff --git a/McBitFont/Export.Designer.cs b/McBitFont/Export.Designer.cs index 8c138c2..b733b18 100644 --- a/McBitFont/Export.Designer.cs +++ b/McBitFont/Export.Designer.cs @@ -65,6 +65,7 @@ this.txtOutput.Size = new System.Drawing.Size(529, 507); this.txtOutput.TabIndex = 0; this.txtOutput.Text = ""; + this.txtOutput.WordWrap = false; // // gbScan // diff --git a/McBitFont/Export.cs b/McBitFont/Export.cs index 71460b3..33a3490 100644 --- a/McBitFont/Export.cs +++ b/McBitFont/Export.cs @@ -81,6 +81,9 @@ namespace McBitFont { bool hdr = cbHeader.Checked; int lines = cbLines.SelectedIndex; int format = cbFormat.SelectedIndex; + bool mono = mainForm.monospaced; + + int imin, jmin, imax, jmax, idir, jdir; if (com) { //Header comments @@ -102,7 +105,7 @@ namespace McBitFont { } } - int imin, jmin, imax, jmax, idir, jdir; + //Figure out mins and maxes if (cbOrder.SelectedIndex == 0) { if (cbHDir.SelectedIndex == 0) { // Columns; Left to right @@ -192,7 +195,19 @@ namespace McBitFont { } // Array definition - if ( format == 0 || format == 1 ) output += "const " + dataType + " " + mainForm.prjName + "[] = {\n"; + if ( format == 0 || format == 1 ) output += "const " + dataType + " " + mainForm.prjName + "[]" + (format==1?"[]":"") + " = {\n"; + + // Should we add the meta header? + if (hdr) { + output += + " // Meta header\n" + + " " + (mono ? mainForm.frames.First().width.ToString() : "0") + ", // Font width in pixels; 0 - variable width\n" + + " " + mainForm.frames.First().height.ToString() + ", // Font height in pixels\n" + + " 0, // Font space (between symbols) in pixels\n" + + " " + mainForm.frames.First().code.ToString() + ", // First character code\n" + + " " + mainForm.frames.Last().code.ToString() + ", // Last character code\n" + ; + } // Brackets for 2D array definition string obracket = format == 1 ? "{ " : ""; @@ -202,9 +217,9 @@ namespace McBitFont { int numcount = 0; if (com) output += " // Data:\n"; + MainForm.FrameMiniature flast = mainForm.frames.Last(); foreach ( MainForm.FrameMiniature f in mainForm.frames) { // For each frame - string str; uint b = 0; // current number bits int t, x, y; // t - calculated bit number; x - actual x; y - actual y @@ -218,6 +233,49 @@ namespace McBitFont { output += " "; numcount = 0; } + if (!mono && mainForm.frames.Count > 1) { + // Not a single image; Variable width font - lets post the width as a 1st number + + // Should we post a prefix to the number? + pref = (!cbZeroes.Checked && ((f.width < 10 && nbase == 16) || (f.width < 2 && nbase == 2))) ? "" : prefix; + output += " " + pref + Convert.ToString(f.width, nbase).PadLeft(pad, '0') + "," + (lines == 1 ? " " : "\n"); + } + + //Figure out mins and maxes for variable width fonts + if (!mono) { + if (cbOrder.SelectedIndex == 0) { + if (cbHDir.SelectedIndex == 0) { + // Columns; Left to right + imax = f.width; + } else { + // Columns; Right to left + imin = f.width - 1; + } + if (cbVDir.SelectedIndex == 0) { + // Columns; Top to bottom + jmax = f.height; + } else { + // Columns; Bottom to top + jmin = f.height - 1; + } + } else { + if (cbHDir.SelectedIndex == 0) { + // Rows; Left to right + jmax = f.height; + } else { + // Rows; Right to left + jmin = f.height - 1; + } + if (cbVDir.SelectedIndex == 0) { + // Rows; Top to bottom + imax = f.width; + } else { + // Rows; Bottom to top + imin = f.width - 1; + } + } + } + for (int i = imin; i != imax; i += idir) { if (lines == 0) { // "Column/Row per line" - new line offset @@ -261,11 +319,12 @@ namespace McBitFont { } if (lines == 0) { // "Column/Row per line" - closing line - output += cbracket + (i+idir!=imax ? "," : "") + "\n"; + output += cbracket + ((i+idir==imax) && f.Equals(flast) ? "" : ",") + "\n"; } } if (lines == 1) { // "1 symbol per line" - closing line + if (!f.Equals(flast)) output += ","; if (com) { //...with a comment output += " // " + f.code.ToString() + " --> " + mainForm.decodeSymbol(f.code); @@ -286,6 +345,10 @@ namespace McBitFont { MessageBox.Show("Cannot pack the font meta header into 2D array!\nChoose 1D array or disable the meta header.\n(Setting array format to 1D array)", "No header in 2D array!", MessageBoxButtons.OK, MessageBoxIcon.Information); cbFormat.SelectedIndex = 0; } + if (!mainForm.monospaced && cbFormat.SelectedIndex == 1) { + MessageBox.Show("Cannot pack the variable width font into 2D array!\n(Setting array format to 1D array)", "2D arrays are for monospaced fonts only!", MessageBoxButtons.OK, MessageBoxIcon.Information); + cbFormat.SelectedIndex = 0; + } if (cbFormat.SelectedIndex == 1) { cbLines.SelectedIndex = 0; cbLines.Enabled = false; diff --git a/McBitFont/Form1.cs b/McBitFont/Form1.cs index f582e7d..df83efb 100644 --- a/McBitFont/Form1.cs +++ b/McBitFont/Form1.cs @@ -46,7 +46,7 @@ namespace McBitFont { private int pixelOffset = 5; private int gap; private int w, h; - bool monospaced = false; + public bool monospaced = false; bool modified = false; bool prjModified = false; public const string version = "1.0";