diff --git a/.gitignore b/.gitignore index a11f506..f635fe4 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,8 @@ ## ## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore +examples/tests/32x32/ + # User-specific files *.rsuser *.suo diff --git a/McBitFont/About.Designer.cs b/McBitFont/About.Designer.cs index ba1b0f7..e7fe392 100644 --- a/McBitFont/About.Designer.cs +++ b/McBitFont/About.Designer.cs @@ -24,103 +24,112 @@ /// private void InitializeComponent() { System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(About)); - this.lblVersion = new System.Windows.Forms.Label(); - this.label1 = new System.Windows.Forms.Label(); - this.label2 = new System.Windows.Forms.Label(); - this.pictureBox1 = new System.Windows.Forms.PictureBox(); - this.linkLabel1 = new System.Windows.Forms.LinkLabel(); - this.button1 = new System.Windows.Forms.Button(); - ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); - this.SuspendLayout(); + lblVersion = new System.Windows.Forms.Label(); + label1 = new System.Windows.Forms.Label(); + label2 = new System.Windows.Forms.Label(); + pictureBox1 = new System.Windows.Forms.PictureBox(); + linkLabel1 = new System.Windows.Forms.LinkLabel(); + button1 = new System.Windows.Forms.Button(); + ((System.ComponentModel.ISupportInitialize)pictureBox1).BeginInit(); + SuspendLayout(); // // lblVersion // - this.lblVersion.AutoSize = true; - this.lblVersion.Location = new System.Drawing.Point(12, 189); - this.lblVersion.Name = "lblVersion"; - this.lblVersion.Size = new System.Drawing.Size(63, 13); - this.lblVersion.TabIndex = 0; - this.lblVersion.Text = "Version: 1.1"; + lblVersion.AutoSize = true; + lblVersion.Location = new System.Drawing.Point(14, 210); + lblVersion.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + lblVersion.Name = "lblVersion"; + lblVersion.Size = new System.Drawing.Size(66, 15); + lblVersion.TabIndex = 0; + lblVersion.Text = "Version: 0.0"; // // label1 // - this.label1.Font = new System.Drawing.Font("Microsoft Sans Serif", 18F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(204))); - this.label1.Location = new System.Drawing.Point(0, 80); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(384, 35); - this.label1.TabIndex = 1; - this.label1.Text = "McBitFont"; - this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + label1.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right; + label1.Font = new System.Drawing.Font("Microsoft Sans Serif", 18F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, 204); + label1.Location = new System.Drawing.Point(0, 77); + label1.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + label1.Name = "label1"; + label1.Size = new System.Drawing.Size(448, 36); + label1.TabIndex = 1; + label1.Text = "McBitFont"; + label1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; // // label2 // - this.label2.Font = new System.Drawing.Font("Microsoft Sans Serif", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(204))); - this.label2.Location = new System.Drawing.Point(0, 115); - this.label2.Name = "label2"; - this.label2.Size = new System.Drawing.Size(384, 25); - this.label2.TabIndex = 2; - this.label2.Text = "McFLY\'s Bit Font and Image Editor"; - this.label2.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + label2.Font = new System.Drawing.Font("Microsoft Sans Serif", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, 204); + label2.Location = new System.Drawing.Point(0, 118); + label2.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + label2.Name = "label2"; + label2.Size = new System.Drawing.Size(448, 29); + label2.TabIndex = 2; + label2.Text = "McFLY's Bit Font and Image Editor"; + label2.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; // // pictureBox1 // - this.pictureBox1.Dock = System.Windows.Forms.DockStyle.Top; - this.pictureBox1.Image = global::McBitFont.Properties.Resources.icon_64; - this.pictureBox1.Location = new System.Drawing.Point(0, 0); - this.pictureBox1.Margin = new System.Windows.Forms.Padding(3, 10, 3, 3); - this.pictureBox1.Name = "pictureBox1"; - this.pictureBox1.Size = new System.Drawing.Size(384, 75); - this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage; - this.pictureBox1.TabIndex = 3; - this.pictureBox1.TabStop = false; + pictureBox1.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right; + pictureBox1.Image = Properties.Resources.icon_64; + pictureBox1.Location = new System.Drawing.Point(0, 0); + pictureBox1.Margin = new System.Windows.Forms.Padding(4, 12, 4, 3); + pictureBox1.Name = "pictureBox1"; + pictureBox1.Size = new System.Drawing.Size(448, 74); + pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage; + pictureBox1.TabIndex = 3; + pictureBox1.TabStop = false; // // linkLabel1 // - this.linkLabel1.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); - this.linkLabel1.LinkBehavior = System.Windows.Forms.LinkBehavior.HoverUnderline; - this.linkLabel1.Location = new System.Drawing.Point(0, 140); - this.linkLabel1.Name = "linkLabel1"; - this.linkLabel1.Size = new System.Drawing.Size(384, 23); - this.linkLabel1.TabIndex = 4; - this.linkLabel1.Text = "mcfly@mcflyer.ru"; - this.linkLabel1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; - this.linkLabel1.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabel1_LinkClicked); + linkLabel1.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right; + linkLabel1.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 204); + linkLabel1.LinkBehavior = System.Windows.Forms.LinkBehavior.HoverUnderline; + linkLabel1.Location = new System.Drawing.Point(0, 155); + linkLabel1.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + linkLabel1.Name = "linkLabel1"; + linkLabel1.Size = new System.Drawing.Size(448, 24); + linkLabel1.TabIndex = 4; + linkLabel1.TabStop = true; + linkLabel1.Text = "mcfly@mcflyer.ru"; + linkLabel1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + linkLabel1.LinkClicked += linkLabel1_LinkClicked; // // button1 // - this.button1.DialogResult = System.Windows.Forms.DialogResult.OK; - this.button1.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(204))); - this.button1.Location = new System.Drawing.Point(146, 175); - this.button1.Name = "button1"; - this.button1.Size = new System.Drawing.Size(89, 27); - this.button1.TabIndex = 5; - this.button1.Text = "OK"; - this.button1.UseVisualStyleBackColor = true; + button1.DialogResult = System.Windows.Forms.DialogResult.OK; + button1.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, 204); + button1.Location = new System.Drawing.Point(170, 194); + button1.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + button1.Name = "button1"; + button1.Size = new System.Drawing.Size(104, 31); + button1.TabIndex = 5; + button1.Text = "OK"; + button1.UseVisualStyleBackColor = true; // // About // - this.AcceptButton = this.button1; - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(384, 211); - this.Controls.Add(this.button1); - this.Controls.Add(this.linkLabel1); - this.Controls.Add(this.pictureBox1); - this.Controls.Add(this.label2); - this.Controls.Add(this.label1); - this.Controls.Add(this.lblVersion); - this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); - this.MaximizeBox = false; - this.MinimizeBox = false; - this.Name = "About"; - this.ShowInTaskbar = false; - this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; - this.Text = "About"; - this.Load += new System.EventHandler(this.About_Load); - ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); - this.ResumeLayout(false); - this.PerformLayout(); + AcceptButton = button1; + AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); + AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + ClientSize = new System.Drawing.Size(448, 236); + Controls.Add(button1); + Controls.Add(linkLabel1); + Controls.Add(pictureBox1); + Controls.Add(label2); + Controls.Add(label1); + Controls.Add(lblVersion); + FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + Icon = (System.Drawing.Icon)resources.GetObject("$this.Icon"); + Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + MaximizeBox = false; + MinimizeBox = false; + Name = "About"; + ShowInTaskbar = false; + StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + Text = "About McBitFont"; + Load += About_Load; + ((System.ComponentModel.ISupportInitialize)pictureBox1).EndInit(); + ResumeLayout(false); + PerformLayout(); } diff --git a/McBitFont/About.resx b/McBitFont/About.resx index abd8138..0c65f2c 100644 --- a/McBitFont/About.resx +++ b/McBitFont/About.resx @@ -1,17 +1,17 @@  - diff --git a/McBitFont/CanvasHistory.cs b/McBitFont/CanvasHistory.cs new file mode 100644 index 0000000..887d258 --- /dev/null +++ b/McBitFont/CanvasHistory.cs @@ -0,0 +1,85 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using System.Text; +using System.Threading.Tasks; + + +namespace McBitFont { + internal class CanvasHistory { + private List stack; + public int Depth { get; set; } + public int Index { get; set; } + public int Count { + get { return stack.Count - 1; } + } + public int Redos { + get { + var r = Count - Index - 1; + + return r < 0 ? 0 : r; + } + } + public int Undos { + get { + return Index + 1; + } + } + + + public CanvasHistory(int depth = 50) { + Depth = depth; + Index = -1; + stack = []; + } + + public void Clear() { + stack.Clear(); + Index = -1; + } + + public void AddPre(MainForm.FrameMiniature f, bool useIndex = true) { + if (Count < 0) stack.Add(new bool[f.width, f.height]); + if (Index < Count - 1) { + stack.RemoveRange(Index + 1, Count - Index - 1); + } + bool[,] d = new bool[f.width, f.height]; + Array.Copy(f.data, d, f.data.Length); + stack.Insert(Count, d); + if (useIndex) { + if (Count > Depth) stack.RemoveAt(0); + else Index++; + } + } + + public void AddPost(MainForm.FrameMiniature f) { + var d = stack.ElementAt(Count); + Array.Copy(f.data, d, f.data.Length); + } + + public void ApplyAdded() { + while (Count > Depth) stack.RemoveAt(0); + Index = Count - 1; + } + + public void Remove(bool useIndex = true) { + stack.RemoveAt(Count - 1); + if (useIndex) Index--; + } + + public void Undo(MainForm.FrameMiniature f) { + if (Index < 0) return; + var d = stack.ElementAt(Index); + Array.Copy(d, f.data, d.Length); + Index--; + } + + public void Redo(MainForm.FrameMiniature f) { + if (Index >= Count - 1) return; + Index++; + var d = stack.ElementAt(Index + 1); + Array.Copy(d, f.data, d.Length); + } + } +} diff --git a/McBitFont/CodeShift.Designer.cs b/McBitFont/CodeShift.Designer.cs new file mode 100644 index 0000000..1ded990 --- /dev/null +++ b/McBitFont/CodeShift.Designer.cs @@ -0,0 +1,187 @@ +namespace McBitFont { + partial class CodeShift { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) { + if (disposing && (components != null)) { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + components = new System.ComponentModel.Container(); + rbShiftLeft = new System.Windows.Forms.RadioButton(); + rbShiftRight = new System.Windows.Forms.RadioButton(); + rbSpecify = new System.Windows.Forms.RadioButton(); + lblValue = new System.Windows.Forms.Label(); + nudValue = new System.Windows.Forms.NumericUpDown(); + btnOK = new System.Windows.Forms.Button(); + btnCancel = new System.Windows.Forms.Button(); + lblMessage = new System.Windows.Forms.Label(); + lblRange = new System.Windows.Forms.Label(); + toolTip1 = new System.Windows.Forms.ToolTip(components); + ((System.ComponentModel.ISupportInitialize)nudValue).BeginInit(); + SuspendLayout(); + // + // rbShiftLeft + // + rbShiftLeft.AutoSize = true; + rbShiftLeft.Location = new System.Drawing.Point(12, 12); + rbShiftLeft.Name = "rbShiftLeft"; + rbShiftLeft.Size = new System.Drawing.Size(134, 19); + rbShiftLeft.TabIndex = 0; + rbShiftLeft.Text = "Shift Left (towards 0)"; + toolTip1.SetToolTip(rbShiftLeft, "Shift all symbols left on the code sequence decreasing codes"); + rbShiftLeft.UseVisualStyleBackColor = true; + rbShiftLeft.CheckedChanged += ModeChanged; + // + // rbShiftRight + // + rbShiftRight.AutoSize = true; + rbShiftRight.Location = new System.Drawing.Point(12, 37); + rbShiftRight.Name = "rbShiftRight"; + rbShiftRight.Size = new System.Drawing.Size(154, 19); + rbShiftRight.TabIndex = 1; + rbShiftRight.Text = "Shift Right (towards 255)"; + toolTip1.SetToolTip(rbShiftRight, "Shift all symbols right on the code sequence increasing codes"); + rbShiftRight.UseVisualStyleBackColor = true; + rbShiftRight.CheckedChanged += ModeChanged; + // + // rbSpecify + // + rbSpecify.AutoSize = true; + rbSpecify.Location = new System.Drawing.Point(12, 62); + rbSpecify.Name = "rbSpecify"; + rbSpecify.Size = new System.Drawing.Size(118, 19); + rbSpecify.TabIndex = 2; + rbSpecify.Text = "Specify start code"; + toolTip1.SetToolTip(rbSpecify, "Specify the code for the first symbol in sequence"); + rbSpecify.UseVisualStyleBackColor = true; + rbSpecify.CheckedChanged += ModeChanged; + // + // lblValue + // + lblValue.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right; + lblValue.Location = new System.Drawing.Point(156, 8); + lblValue.Name = "lblValue"; + lblValue.Size = new System.Drawing.Size(110, 15); + lblValue.TabIndex = 3; + lblValue.Text = "Shift by:"; + lblValue.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // nudValue + // + nudValue.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right; + nudValue.Location = new System.Drawing.Point(185, 27); + nudValue.Maximum = new decimal(new int[] { 254, 0, 0, 0 }); + nudValue.Minimum = new decimal(new int[] { 1, 0, 0, 0 }); + nudValue.Name = "nudValue"; + nudValue.Size = new System.Drawing.Size(50, 23); + nudValue.TabIndex = 5; + nudValue.Value = new decimal(new int[] { 1, 0, 0, 0 }); + nudValue.ValueChanged += nudValue_ValueChanged; + // + // btnOK + // + btnOK.Location = new System.Drawing.Point(24, 155); + btnOK.Name = "btnOK"; + btnOK.Size = new System.Drawing.Size(88, 27); + btnOK.TabIndex = 6; + btnOK.Text = "OK"; + btnOK.UseVisualStyleBackColor = true; + btnOK.Click += btnOK_Click; + // + // btnCancel + // + btnCancel.Location = new System.Drawing.Point(156, 155); + btnCancel.Name = "btnCancel"; + btnCancel.Size = new System.Drawing.Size(88, 27); + btnCancel.TabIndex = 7; + btnCancel.Text = "Cancel"; + btnCancel.UseVisualStyleBackColor = true; + btnCancel.Click += btnCancel_Click; + // + // lblMessage + // + lblMessage.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right; + lblMessage.Font = new System.Drawing.Font("Segoe UI Semibold", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, 204); + lblMessage.ForeColor = System.Drawing.Color.DarkRed; + lblMessage.Location = new System.Drawing.Point(0, 84); + lblMessage.Name = "lblMessage"; + lblMessage.Size = new System.Drawing.Size(268, 68); + lblMessage.TabIndex = 8; + lblMessage.Text = "Message"; + lblMessage.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // lblRange + // + lblRange.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right; + lblRange.Location = new System.Drawing.Point(183, 53); + lblRange.Name = "lblRange"; + lblRange.Size = new System.Drawing.Size(62, 31); + lblRange.TabIndex = 9; + lblRange.Text = "min: 222\r\nmax: 222"; + // + // toolTip1 + // + toolTip1.AutoPopDelay = 10000; + toolTip1.InitialDelay = 500; + toolTip1.ReshowDelay = 100; + // + // CodeShift + // + AcceptButton = btnOK; + AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); + AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + CancelButton = btnCancel; + ClientSize = new System.Drawing.Size(268, 191); + Controls.Add(lblRange); + Controls.Add(lblMessage); + Controls.Add(btnCancel); + Controls.Add(btnOK); + Controls.Add(nudValue); + Controls.Add(lblValue); + Controls.Add(rbSpecify); + Controls.Add(rbShiftRight); + Controls.Add(rbShiftLeft); + FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + MaximizeBox = false; + MinimizeBox = false; + Name = "CodeShift"; + ShowIcon = false; + ShowInTaskbar = false; + StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + Text = "Code Shift"; + Load += CodeShift_Load; + ((System.ComponentModel.ISupportInitialize)nudValue).EndInit(); + ResumeLayout(false); + PerformLayout(); + } + + #endregion + private System.Windows.Forms.Label lblValue; + private System.Windows.Forms.Button btnOK; + private System.Windows.Forms.Button btnCancel; + public System.Windows.Forms.RadioButton rbShiftLeft; + public System.Windows.Forms.RadioButton rbShiftRight; + public System.Windows.Forms.RadioButton rbSpecify; + public System.Windows.Forms.NumericUpDown nudValue; + private System.Windows.Forms.Label lblMessage; + private System.Windows.Forms.Label lblRange; + private System.Windows.Forms.ToolTip toolTip1; + } +} \ No newline at end of file diff --git a/McBitFont/CodeShift.cs b/McBitFont/CodeShift.cs new file mode 100644 index 0000000..344ddf5 --- /dev/null +++ b/McBitFont/CodeShift.cs @@ -0,0 +1,99 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace McBitFont { + public partial class CodeShift : Form { + + private int maxLeft, maxRight, maxSC, count; + public int sc; + + public CodeShift(MainForm parent) { + InitializeComponent(); + + count = parent.frames.Count; + sc = parent.frames.First().code; + maxLeft = sc; + maxRight = 255 - sc - count + 1; + maxSC = sc + maxRight; + } + + private void CodeShift_Load(object sender, EventArgs e) { + byte enabled = 7; + string msg = ""; + if (maxLeft < 1) { + rbShiftLeft.Enabled = false; + enabled -= 1; + msg += "Cannot shift left: Start code is " + sc.ToString() + "."; + } + if (maxRight < 1) { + rbShiftRight.Enabled = false; + enabled -= 2; + msg += "\nCannot shift right: Last code is " + (sc + count - 1).ToString() + "."; + } + if (maxSC <= 0) { + rbSpecify.Enabled = false; + enabled -= 4; + msg += "\nCannot shift: The font is full." + (sc + count - 1).ToString(); + } + lblMessage.Text = msg; + + if ((enabled & 1) > 0) rbShiftLeft.Checked = true; + else if ((enabled & 2) > 0) rbShiftRight.Checked = true; + else if ((enabled & 4) > 0) rbSpecify.Checked = true; + else { + btnOK.Enabled = false; + nudValue.Enabled = false; + } + + + //ModeChanged(rbShiftLeft, null); + //nudValue.Minimum = 1; + //nudValue.Maximum = maxLeft; + } + + private void ModeChanged(object sender, EventArgs e) { + if (rbSpecify.Checked) { + lblValue.Text = "New start code:"; + nudValue.Minimum = 0; + nudValue.Maximum = maxSC; + nudValue.Value = 0; + lblRange.Text = "min: 0\nmax: " + maxSC.ToString(); + } else { + lblValue.Text = "Shift by:"; + nudValue.Minimum = 1; + nudValue.Value = 1; + if (rbShiftLeft.Checked) { + nudValue.Maximum = maxLeft; + lblRange.Text = "min: 1\nmax: " + maxLeft.ToString(); + } + if (rbShiftRight.Checked) { + nudValue.Maximum = maxRight; + lblRange.Text = "min: 1\nmax: " + maxRight.ToString(); + } + } + + } + + private void nudValue_ValueChanged(object sender, EventArgs e) { + if (rbSpecify.Checked) { + if (nudValue.Value == sc) btnOK.Enabled = false; + else btnOK.Enabled = true; + } + } + + private void btnOK_Click(object sender, EventArgs e) { + DialogResult = DialogResult.OK; + } + + private void btnCancel_Click(object sender, EventArgs e) { + DialogResult = DialogResult.Cancel; + } + } +} diff --git a/McBitFont/CodeShift.resx b/McBitFont/CodeShift.resx new file mode 100644 index 0000000..dcfd08d --- /dev/null +++ b/McBitFont/CodeShift.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + \ No newline at end of file diff --git a/McBitFont/Export.Designer.cs b/McBitFont/Export.Designer.cs index 6853331..d258383 100644 --- a/McBitFont/Export.Designer.cs +++ b/McBitFont/Export.Designer.cs @@ -23,331 +23,337 @@ /// the contents of this method with the code editor. /// private void InitializeComponent() { - this.components = new System.ComponentModel.Container(); - this.txtOutput = new System.Windows.Forms.RichTextBox(); - this.gbScan = new System.Windows.Forms.GroupBox(); - this.cbVDir = new System.Windows.Forms.ComboBox(); - this.cbHDir = new System.Windows.Forms.ComboBox(); - this.cbOrder = new System.Windows.Forms.ComboBox(); - this.gbOptions = new System.Windows.Forms.GroupBox(); - this.cbZeroes = new System.Windows.Forms.CheckBox(); - this.cbHeader = new System.Windows.Forms.CheckBox(); - this.cbComments = new System.Windows.Forms.CheckBox(); - this.gbNumbers = new System.Windows.Forms.GroupBox(); - this.cbBitOrder = new System.Windows.Forms.ComboBox(); - this.cbNumSize = new System.Windows.Forms.ComboBox(); - this.cbNumBase = new System.Windows.Forms.ComboBox(); - this.gbText = new System.Windows.Forms.GroupBox(); - this.lblXLines = new System.Windows.Forms.Label(); - this.nudXLines = new System.Windows.Forms.NumericUpDown(); - this.cbLines = new System.Windows.Forms.ComboBox(); - this.cbFormat = new System.Windows.Forms.ComboBox(); - this.btnGenerate = new System.Windows.Forms.Button(); - this.btnClose = new System.Windows.Forms.Button(); - this.toolTip1 = new System.Windows.Forms.ToolTip(this.components); - this.gbScan.SuspendLayout(); - this.gbOptions.SuspendLayout(); - this.gbNumbers.SuspendLayout(); - this.gbText.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.nudXLines)).BeginInit(); - this.SuspendLayout(); + components = new System.ComponentModel.Container(); + txtOutput = new System.Windows.Forms.RichTextBox(); + gbScan = new System.Windows.Forms.GroupBox(); + cbVDir = new System.Windows.Forms.ComboBox(); + cbHDir = new System.Windows.Forms.ComboBox(); + cbOrder = new System.Windows.Forms.ComboBox(); + gbOptions = new System.Windows.Forms.GroupBox(); + cbPacked = new System.Windows.Forms.CheckBox(); + cbZeroes = new System.Windows.Forms.CheckBox(); + cbHeader = new System.Windows.Forms.CheckBox(); + cbComments = new System.Windows.Forms.CheckBox(); + gbNumbers = new System.Windows.Forms.GroupBox(); + cbBitOrder = new System.Windows.Forms.ComboBox(); + cbNumSize = new System.Windows.Forms.ComboBox(); + cbNumBase = new System.Windows.Forms.ComboBox(); + gbText = new System.Windows.Forms.GroupBox(); + lblXLines = new System.Windows.Forms.Label(); + nudXLines = new System.Windows.Forms.NumericUpDown(); + cbLines = new System.Windows.Forms.ComboBox(); + cbFormat = new System.Windows.Forms.ComboBox(); + btnGenerate = new System.Windows.Forms.Button(); + btnClose = new System.Windows.Forms.Button(); + toolTip1 = new System.Windows.Forms.ToolTip(components); + gbScan.SuspendLayout(); + gbOptions.SuspendLayout(); + gbNumbers.SuspendLayout(); + gbText.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)nudXLines).BeginInit(); + SuspendLayout(); // // txtOutput // - this.txtOutput.AcceptsTab = true; - this.txtOutput.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.txtOutput.AutoWordSelection = true; - this.txtOutput.DetectUrls = false; - this.txtOutput.Font = new System.Drawing.Font("Courier New", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); - this.txtOutput.HideSelection = false; - this.txtOutput.Location = new System.Drawing.Point(151, 12); - this.txtOutput.Name = "txtOutput"; - this.txtOutput.Size = new System.Drawing.Size(529, 507); - this.txtOutput.TabIndex = 0; - this.txtOutput.Text = ""; - this.txtOutput.WordWrap = false; + txtOutput.AcceptsTab = true; + txtOutput.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right; + txtOutput.AutoWordSelection = true; + txtOutput.DetectUrls = false; + txtOutput.Font = new System.Drawing.Font("Courier New", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 204); + txtOutput.HideSelection = false; + txtOutput.Location = new System.Drawing.Point(176, 14); + txtOutput.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + txtOutput.Name = "txtOutput"; + txtOutput.Size = new System.Drawing.Size(616, 584); + txtOutput.TabIndex = 0; + txtOutput.Text = ""; + txtOutput.WordWrap = false; // // gbScan // - this.gbScan.Controls.Add(this.cbVDir); - this.gbScan.Controls.Add(this.cbHDir); - this.gbScan.Controls.Add(this.cbOrder); - this.gbScan.Location = new System.Drawing.Point(5, 12); - this.gbScan.Name = "gbScan"; - this.gbScan.Size = new System.Drawing.Size(140, 105); - this.gbScan.TabIndex = 1; - this.gbScan.TabStop = false; - this.gbScan.Text = "Scan"; + gbScan.Controls.Add(cbVDir); + gbScan.Controls.Add(cbHDir); + gbScan.Controls.Add(cbOrder); + gbScan.Location = new System.Drawing.Point(6, 14); + gbScan.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + gbScan.Name = "gbScan"; + gbScan.Padding = new System.Windows.Forms.Padding(4, 3, 4, 3); + gbScan.Size = new System.Drawing.Size(163, 121); + gbScan.TabIndex = 1; + gbScan.TabStop = false; + gbScan.Text = "Scan"; // // cbVDir // - this.cbVDir.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.cbVDir.FormattingEnabled = true; - this.cbVDir.Items.AddRange(new object[] { - "Top to Bottom", - "Bottom to Top"}); - this.cbVDir.Location = new System.Drawing.Point(10, 73); - this.cbVDir.Name = "cbVDir"; - this.cbVDir.Size = new System.Drawing.Size(121, 21); - this.cbVDir.TabIndex = 2; + cbVDir.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + cbVDir.FormattingEnabled = true; + cbVDir.Items.AddRange(new object[] { "Top to Bottom", "Bottom to Top" }); + cbVDir.Location = new System.Drawing.Point(12, 84); + cbVDir.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + cbVDir.Name = "cbVDir"; + cbVDir.Size = new System.Drawing.Size(140, 23); + cbVDir.TabIndex = 2; // // cbHDir // - this.cbHDir.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.cbHDir.FormattingEnabled = true; - this.cbHDir.Items.AddRange(new object[] { - "Left to Right", - "Right to Left"}); - this.cbHDir.Location = new System.Drawing.Point(10, 46); - this.cbHDir.Name = "cbHDir"; - this.cbHDir.Size = new System.Drawing.Size(121, 21); - this.cbHDir.TabIndex = 1; + cbHDir.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + cbHDir.FormattingEnabled = true; + cbHDir.Items.AddRange(new object[] { "Left to Right", "Right to Left" }); + cbHDir.Location = new System.Drawing.Point(12, 53); + cbHDir.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + cbHDir.Name = "cbHDir"; + cbHDir.Size = new System.Drawing.Size(140, 23); + cbHDir.TabIndex = 1; // // cbOrder // - this.cbOrder.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.cbOrder.FormattingEnabled = true; - this.cbOrder.Items.AddRange(new object[] { - "Columns", - "Rows"}); - this.cbOrder.Location = new System.Drawing.Point(10, 19); - this.cbOrder.Name = "cbOrder"; - this.cbOrder.Size = new System.Drawing.Size(121, 21); - this.cbOrder.TabIndex = 0; - this.cbOrder.SelectedIndexChanged += new System.EventHandler(this.cbOrder_SelectedIndexChanged); + cbOrder.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + cbOrder.FormattingEnabled = true; + cbOrder.Items.AddRange(new object[] { "Columns", "Rows" }); + cbOrder.Location = new System.Drawing.Point(12, 22); + cbOrder.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + cbOrder.Name = "cbOrder"; + cbOrder.Size = new System.Drawing.Size(140, 23); + cbOrder.TabIndex = 0; + cbOrder.SelectedIndexChanged += cbOrder_SelectedIndexChanged; // // gbOptions // - this.gbOptions.Controls.Add(this.cbZeroes); - this.gbOptions.Controls.Add(this.cbHeader); - this.gbOptions.Controls.Add(this.cbComments); - this.gbOptions.Location = new System.Drawing.Point(5, 345); - this.gbOptions.Name = "gbOptions"; - this.gbOptions.Size = new System.Drawing.Size(140, 88); - this.gbOptions.TabIndex = 3; - this.gbOptions.TabStop = false; - this.gbOptions.Text = "Options"; + gbOptions.Controls.Add(cbPacked); + gbOptions.Controls.Add(cbZeroes); + gbOptions.Controls.Add(cbHeader); + gbOptions.Controls.Add(cbComments); + gbOptions.Location = new System.Drawing.Point(6, 398); + gbOptions.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + gbOptions.Name = "gbOptions"; + gbOptions.Padding = new System.Windows.Forms.Padding(4, 3, 4, 3); + gbOptions.Size = new System.Drawing.Size(163, 116); + gbOptions.TabIndex = 3; + gbOptions.TabStop = false; + gbOptions.Text = "Options"; + // + // cbPacked + // + cbPacked.AutoSize = true; + cbPacked.Location = new System.Drawing.Point(7, 90); + cbPacked.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + cbPacked.Name = "cbPacked"; + cbPacked.Size = new System.Drawing.Size(89, 19); + cbPacked.TabIndex = 3; + cbPacked.Text = "Packed font"; + toolTip1.SetToolTip(cbPacked, "Pack symbols utilizing all bits within a symbol"); + cbPacked.UseVisualStyleBackColor = true; + cbPacked.CheckedChanged += cbPacked_CheckedChanged; // // cbZeroes // - this.cbZeroes.AutoSize = true; - this.cbZeroes.Checked = true; - this.cbZeroes.CheckState = System.Windows.Forms.CheckState.Checked; - this.cbZeroes.Location = new System.Drawing.Point(6, 65); - this.cbZeroes.Name = "cbZeroes"; - this.cbZeroes.Size = new System.Drawing.Size(98, 17); - this.cbZeroes.TabIndex = 2; - this.cbZeroes.Text = "Leading zeroes"; - this.toolTip1.SetToolTip(this.cbZeroes, "Add leading zeroes: 0x01 / 0x1"); - this.cbZeroes.UseVisualStyleBackColor = true; + cbZeroes.AutoSize = true; + cbZeroes.Checked = true; + cbZeroes.CheckState = System.Windows.Forms.CheckState.Checked; + cbZeroes.Location = new System.Drawing.Point(7, 66); + cbZeroes.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + cbZeroes.Name = "cbZeroes"; + cbZeroes.Size = new System.Drawing.Size(104, 19); + cbZeroes.TabIndex = 2; + cbZeroes.Text = "Leading zeroes"; + toolTip1.SetToolTip(cbZeroes, "Add leading zeroes: 0x01 / 0x1"); + cbZeroes.UseVisualStyleBackColor = true; // // cbHeader // - this.cbHeader.AutoSize = true; - this.cbHeader.Checked = true; - this.cbHeader.CheckState = System.Windows.Forms.CheckState.Checked; - this.cbHeader.Location = new System.Drawing.Point(6, 19); - this.cbHeader.Name = "cbHeader"; - this.cbHeader.Size = new System.Drawing.Size(86, 17); - this.cbHeader.TabIndex = 1; - this.cbHeader.Text = "Meta header"; - this.toolTip1.SetToolTip(this.cbHeader, "Add meta header with meta data"); - this.cbHeader.UseVisualStyleBackColor = true; - this.cbHeader.CheckedChanged += new System.EventHandler(this.cbFormat_SelectedIndexChanged); + cbHeader.AutoSize = true; + cbHeader.Checked = true; + cbHeader.CheckState = System.Windows.Forms.CheckState.Checked; + cbHeader.Location = new System.Drawing.Point(7, 18); + cbHeader.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + cbHeader.Name = "cbHeader"; + cbHeader.Size = new System.Drawing.Size(92, 19); + cbHeader.TabIndex = 1; + cbHeader.Text = "Meta header"; + toolTip1.SetToolTip(cbHeader, "Add meta header with meta data"); + cbHeader.UseVisualStyleBackColor = true; + cbHeader.CheckedChanged += cbFormat_SelectedIndexChanged; // // cbComments // - this.cbComments.AutoSize = true; - this.cbComments.Checked = true; - this.cbComments.CheckState = System.Windows.Forms.CheckState.Checked; - this.cbComments.Location = new System.Drawing.Point(6, 42); - this.cbComments.Name = "cbComments"; - this.cbComments.Size = new System.Drawing.Size(75, 17); - this.cbComments.TabIndex = 0; - this.cbComments.Text = "Comments"; - this.toolTip1.SetToolTip(this.cbComments, "Add descriptive comments"); - this.cbComments.UseVisualStyleBackColor = true; + cbComments.AutoSize = true; + cbComments.Checked = true; + cbComments.CheckState = System.Windows.Forms.CheckState.Checked; + cbComments.Location = new System.Drawing.Point(7, 42); + cbComments.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + cbComments.Name = "cbComments"; + cbComments.Size = new System.Drawing.Size(85, 19); + cbComments.TabIndex = 0; + cbComments.Text = "Comments"; + toolTip1.SetToolTip(cbComments, "Add descriptive comments"); + cbComments.UseVisualStyleBackColor = true; // // gbNumbers // - this.gbNumbers.Controls.Add(this.cbBitOrder); - this.gbNumbers.Controls.Add(this.cbNumSize); - this.gbNumbers.Controls.Add(this.cbNumBase); - this.gbNumbers.Location = new System.Drawing.Point(5, 123); - this.gbNumbers.Name = "gbNumbers"; - this.gbNumbers.Size = new System.Drawing.Size(140, 105); - this.gbNumbers.TabIndex = 4; - this.gbNumbers.TabStop = false; - this.gbNumbers.Text = "Numbers"; + gbNumbers.Controls.Add(cbBitOrder); + gbNumbers.Controls.Add(cbNumSize); + gbNumbers.Controls.Add(cbNumBase); + gbNumbers.Location = new System.Drawing.Point(6, 142); + gbNumbers.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + gbNumbers.Name = "gbNumbers"; + gbNumbers.Padding = new System.Windows.Forms.Padding(4, 3, 4, 3); + gbNumbers.Size = new System.Drawing.Size(163, 121); + gbNumbers.TabIndex = 4; + gbNumbers.TabStop = false; + gbNumbers.Text = "Numbers"; // // cbBitOrder // - this.cbBitOrder.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.cbBitOrder.FormattingEnabled = true; - this.cbBitOrder.Items.AddRange(new object[] { - "LSB Top", - "MSB Top"}); - this.cbBitOrder.Location = new System.Drawing.Point(10, 19); - this.cbBitOrder.Name = "cbBitOrder"; - this.cbBitOrder.Size = new System.Drawing.Size(121, 21); - this.cbBitOrder.TabIndex = 5; + cbBitOrder.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + cbBitOrder.FormattingEnabled = true; + cbBitOrder.Items.AddRange(new object[] { "LSB Top", "MSB Top" }); + cbBitOrder.Location = new System.Drawing.Point(12, 22); + cbBitOrder.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + cbBitOrder.Name = "cbBitOrder"; + cbBitOrder.Size = new System.Drawing.Size(140, 23); + cbBitOrder.TabIndex = 5; // // cbNumSize // - this.cbNumSize.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.cbNumSize.FormattingEnabled = true; - this.cbNumSize.Items.AddRange(new object[] { - "8 bit", - "16 bit", - "32 bit"}); - this.cbNumSize.Location = new System.Drawing.Point(10, 73); - this.cbNumSize.Name = "cbNumSize"; - this.cbNumSize.Size = new System.Drawing.Size(121, 21); - this.cbNumSize.TabIndex = 4; + cbNumSize.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + cbNumSize.FormattingEnabled = true; + cbNumSize.Items.AddRange(new object[] { "8 bit", "16 bit", "32 bit" }); + cbNumSize.Location = new System.Drawing.Point(12, 84); + cbNumSize.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + cbNumSize.Name = "cbNumSize"; + cbNumSize.Size = new System.Drawing.Size(140, 23); + cbNumSize.TabIndex = 4; // // cbNumBase // - this.cbNumBase.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.cbNumBase.FormattingEnabled = true; - this.cbNumBase.Items.AddRange(new object[] { - "Hexadecimal", - "Binary", - "Decimal"}); - this.cbNumBase.Location = new System.Drawing.Point(10, 46); - this.cbNumBase.Name = "cbNumBase"; - this.cbNumBase.Size = new System.Drawing.Size(121, 21); - this.cbNumBase.TabIndex = 3; + cbNumBase.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + cbNumBase.FormattingEnabled = true; + cbNumBase.Items.AddRange(new object[] { "Hexadecimal", "Binary", "Decimal" }); + cbNumBase.Location = new System.Drawing.Point(12, 53); + cbNumBase.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + cbNumBase.Name = "cbNumBase"; + cbNumBase.Size = new System.Drawing.Size(140, 23); + cbNumBase.TabIndex = 3; // // gbText // - this.gbText.Controls.Add(this.lblXLines); - this.gbText.Controls.Add(this.nudXLines); - this.gbText.Controls.Add(this.cbLines); - this.gbText.Controls.Add(this.cbFormat); - this.gbText.Location = new System.Drawing.Point(5, 234); - this.gbText.Name = "gbText"; - this.gbText.Size = new System.Drawing.Size(140, 105); - this.gbText.TabIndex = 5; - this.gbText.TabStop = false; - this.gbText.Text = "Text format"; + gbText.Controls.Add(lblXLines); + gbText.Controls.Add(nudXLines); + gbText.Controls.Add(cbLines); + gbText.Controls.Add(cbFormat); + gbText.Location = new System.Drawing.Point(6, 270); + gbText.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + gbText.Name = "gbText"; + gbText.Padding = new System.Windows.Forms.Padding(4, 3, 4, 3); + gbText.Size = new System.Drawing.Size(163, 121); + gbText.TabIndex = 5; + gbText.TabStop = false; + gbText.Text = "Text format"; // // lblXLines // - this.lblXLines.AutoSize = true; - this.lblXLines.Enabled = false; - this.lblXLines.Location = new System.Drawing.Point(10, 76); - this.lblXLines.Name = "lblXLines"; - this.lblXLines.Size = new System.Drawing.Size(60, 13); - this.lblXLines.TabIndex = 9; - this.lblXLines.Text = "X numbers:"; + lblXLines.AutoSize = true; + lblXLines.Enabled = false; + lblXLines.Location = new System.Drawing.Point(12, 88); + lblXLines.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + lblXLines.Name = "lblXLines"; + lblXLines.Size = new System.Drawing.Size(67, 15); + lblXLines.TabIndex = 9; + lblXLines.Text = "X numbers:"; // // nudXLines // - this.nudXLines.Enabled = false; - this.nudXLines.Location = new System.Drawing.Point(76, 73); - this.nudXLines.Maximum = new decimal(new int[] { - 64, - 0, - 0, - 0}); - this.nudXLines.Minimum = new decimal(new int[] { - 1, - 0, - 0, - 0}); - this.nudXLines.Name = "nudXLines"; - this.nudXLines.Size = new System.Drawing.Size(55, 20); - this.nudXLines.TabIndex = 8; - this.nudXLines.Value = new decimal(new int[] { - 8, - 0, - 0, - 0}); + nudXLines.Enabled = false; + nudXLines.Location = new System.Drawing.Point(89, 84); + nudXLines.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + nudXLines.Maximum = new decimal(new int[] { 64, 0, 0, 0 }); + nudXLines.Minimum = new decimal(new int[] { 1, 0, 0, 0 }); + nudXLines.Name = "nudXLines"; + nudXLines.Size = new System.Drawing.Size(64, 23); + nudXLines.TabIndex = 8; + nudXLines.Value = new decimal(new int[] { 8, 0, 0, 0 }); // // cbLines // - this.cbLines.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.cbLines.FormattingEnabled = true; - this.cbLines.Items.AddRange(new object[] { - "1 Column per line", - "1 Symbol per line", - "X Numbers per line"}); - this.cbLines.Location = new System.Drawing.Point(10, 46); - this.cbLines.Name = "cbLines"; - this.cbLines.Size = new System.Drawing.Size(121, 21); - this.cbLines.TabIndex = 7; - this.cbLines.SelectedIndexChanged += new System.EventHandler(this.cbLines_SelectedIndexChanged); + cbLines.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + cbLines.FormattingEnabled = true; + cbLines.Items.AddRange(new object[] { "1 Column per line", "1 Symbol per line", "X Numbers per line" }); + cbLines.Location = new System.Drawing.Point(12, 53); + cbLines.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + cbLines.Name = "cbLines"; + cbLines.Size = new System.Drawing.Size(140, 23); + cbLines.TabIndex = 7; + cbLines.SelectedIndexChanged += cbLines_SelectedIndexChanged; // // cbFormat // - this.cbFormat.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.cbFormat.FormattingEnabled = true; - this.cbFormat.Items.AddRange(new object[] { - "1D C array", - "2D C array", - "Comma separated"}); - this.cbFormat.Location = new System.Drawing.Point(10, 19); - this.cbFormat.Name = "cbFormat"; - this.cbFormat.Size = new System.Drawing.Size(121, 21); - this.cbFormat.TabIndex = 6; - this.cbFormat.SelectedIndexChanged += new System.EventHandler(this.cbFormat_SelectedIndexChanged); + cbFormat.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + cbFormat.FormattingEnabled = true; + cbFormat.Items.AddRange(new object[] { "1D C array", "2D C array", "Comma separated" }); + cbFormat.Location = new System.Drawing.Point(12, 22); + cbFormat.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + cbFormat.Name = "cbFormat"; + cbFormat.Size = new System.Drawing.Size(140, 23); + cbFormat.TabIndex = 6; + cbFormat.SelectedIndexChanged += cbFormat_SelectedIndexChanged; // // btnGenerate // - this.btnGenerate.Location = new System.Drawing.Point(5, 439); - this.btnGenerate.Name = "btnGenerate"; - this.btnGenerate.Size = new System.Drawing.Size(140, 30); - this.btnGenerate.TabIndex = 6; - this.btnGenerate.Text = "Generate"; - this.btnGenerate.UseVisualStyleBackColor = true; - this.btnGenerate.Click += new System.EventHandler(this.btnGenerate_Click); + btnGenerate.Location = new System.Drawing.Point(6, 520); + btnGenerate.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + btnGenerate.Name = "btnGenerate"; + btnGenerate.Size = new System.Drawing.Size(163, 35); + btnGenerate.TabIndex = 6; + btnGenerate.Text = "Generate"; + btnGenerate.UseVisualStyleBackColor = true; + btnGenerate.Click += btnGenerate_Click; // // btnClose // - this.btnClose.DialogResult = System.Windows.Forms.DialogResult.Cancel; - this.btnClose.Location = new System.Drawing.Point(5, 487); - this.btnClose.Name = "btnClose"; - this.btnClose.Size = new System.Drawing.Size(140, 30); - this.btnClose.TabIndex = 7; - this.btnClose.Text = "Close"; - this.btnClose.UseVisualStyleBackColor = true; + btnClose.DialogResult = System.Windows.Forms.DialogResult.Cancel; + btnClose.Location = new System.Drawing.Point(6, 562); + btnClose.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + btnClose.Name = "btnClose"; + btnClose.Size = new System.Drawing.Size(163, 35); + btnClose.TabIndex = 7; + btnClose.Text = "Close"; + btnClose.UseVisualStyleBackColor = true; // // toolTip1 // - this.toolTip1.AutoPopDelay = 10000; - this.toolTip1.InitialDelay = 500; - this.toolTip1.ReshowDelay = 100; + toolTip1.AutoPopDelay = 10000; + toolTip1.InitialDelay = 500; + toolTip1.ReshowDelay = 100; // // Export // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.CancelButton = this.btnClose; - this.ClientSize = new System.Drawing.Size(692, 531); - this.Controls.Add(this.btnClose); - this.Controls.Add(this.btnGenerate); - this.Controls.Add(this.gbText); - this.Controls.Add(this.gbNumbers); - this.Controls.Add(this.gbOptions); - this.Controls.Add(this.gbScan); - this.Controls.Add(this.txtOutput); - this.MinimumSize = new System.Drawing.Size(700, 570); - this.Name = "Export"; - this.ShowIcon = false; - this.ShowInTaskbar = false; - this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; - this.Text = "Export"; - this.Load += new System.EventHandler(this.Export_Load); - this.gbScan.ResumeLayout(false); - this.gbOptions.ResumeLayout(false); - this.gbOptions.PerformLayout(); - this.gbNumbers.ResumeLayout(false); - this.gbText.ResumeLayout(false); - this.gbText.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.nudXLines)).EndInit(); - this.ResumeLayout(false); + AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); + AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + CancelButton = btnClose; + ClientSize = new System.Drawing.Size(807, 613); + Controls.Add(btnClose); + Controls.Add(btnGenerate); + Controls.Add(gbText); + Controls.Add(gbNumbers); + Controls.Add(gbOptions); + Controls.Add(gbScan); + Controls.Add(txtOutput); + Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + MinimumSize = new System.Drawing.Size(814, 652); + Name = "Export"; + ShowIcon = false; + ShowInTaskbar = false; + StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + Text = "Export"; + Load += Export_Load; + gbScan.ResumeLayout(false); + gbOptions.ResumeLayout(false); + gbOptions.PerformLayout(); + gbNumbers.ResumeLayout(false); + gbText.ResumeLayout(false); + gbText.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)nudXLines).EndInit(); + ResumeLayout(false); } @@ -374,5 +380,6 @@ private System.Windows.Forms.Button btnClose; private System.Windows.Forms.CheckBox cbZeroes; private System.Windows.Forms.ToolTip toolTip1; + private System.Windows.Forms.CheckBox cbPacked; } } \ No newline at end of file diff --git a/McBitFont/Export.cs b/McBitFont/Export.cs index 2cf596f..73c8bc5 100644 --- a/McBitFont/Export.cs +++ b/McBitFont/Export.cs @@ -33,25 +33,26 @@ namespace McBitFont { } } comments.Add("header", - "// File generated by McBitFont " + MainForm.version + "\n" + + "// File generated by McBitFont v" + MainForm.version + "\n" + "// made by Anton Mukhin (mcfly@mcflyer.ru)\n" + "//\n" + "//\n" ); - comments.Add("scan_order", "// Scan order: "); - comments.Add("scan_hdir", "// Horizontal direction: "); - comments.Add("scan_vdir", "// Vertical direction: "); + comments.Add("scan_order", "// Scan order: "); + comments.Add("scan_hdir", "// Horizontal direction: "); + comments.Add("scan_vdir", "// Vertical direction: "); comments.Add("num_bit_order", "// Bit order: "); - comments.Add("num_base", "// Numbers base: "); - comments.Add("num_size", "// Numbers size: "); + comments.Add("num_base", "// Numbers base: "); + comments.Add("num_size", "// Numbers size: "); - comments.Add("text_format", "// Text format: "); - comments.Add("text_lines", "// Numbers per line: "); + comments.Add("text_format", "// Text format: "); + comments.Add("text_lines", "// Numbers per line: "); comments.Add("font_header_map", "// Font header map:\n" + - "// width; // Font width in pixels\n" + + "// packed; // Flag for packed font\n" + + "// width; // Font width in pixels (0 - variable width)\n" + "// height; // Font height in pixels\n" + "// space; // Font space in pixels\n" + "// first; // First character code\n" + @@ -76,9 +77,11 @@ namespace McBitFont { private void btnGenerate_Click(object sender, EventArgs e) { string output = ""; + int bTotal = 0; txtOutput.Clear(); bool com = cbComments.Checked; bool hdr = cbHeader.Checked; + bool packed = cbPacked.Checked; int lines = cbLines.SelectedIndex; int format = cbFormat.SelectedIndex; bool mono = mainForm.monospaced; @@ -89,7 +92,7 @@ namespace McBitFont { if (com) { // Header comments - output += comments["header"]; + //output += comments["header"]; output += comments["scan_order"] + cbOrder.Text + "\n"; output += comments["scan_hdir"] + cbHDir.Text + "\n"; output += comments["scan_vdir"] + cbVDir.Text + "\n\n"; @@ -156,7 +159,7 @@ namespace McBitFont { } } - + // C data type selection ushort bits = 8; string dataType = "uint8_t"; switch (cbNumSize.SelectedIndex) { @@ -197,30 +200,32 @@ namespace McBitFont { } // Array definition - if ( format == 0 || format == 1 ) output += "const " + dataType + " " + mainForm.prjName + "[]" + (format==1?"[]":"") + " = {\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" + + " " + (packed ? "1" : "0") + ", // Is it a packed font?\n" + + " " + (mono || mainForm.frames.Count == 1 ? 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" ; + bTotal += 6*bits / 8; // Count bytes total } - + // Brackets for 2D array definition string obracket = format == 1 ? "{ " : ""; string cbracket = format == 1 ? " }" : ""; // Number output counter int numcount = 0; - + if (com) output += " // Data:\n"; MainForm.FrameMiniature flast = mainForm.frames.Last(); - foreach ( MainForm.FrameMiniature f in mainForm.frames) { + foreach (MainForm.FrameMiniature f in mainForm.frames) { // For each frame uint b = 0; // current number bits int t, x, y; // t - calculated bit number; x - actual x; y - actual y @@ -241,6 +246,7 @@ namespace McBitFont { // Should we post a prefix to the number? pref = (!cbZeroes.Checked && ((f.width < 10 && nbase == 16) || (f.width < 2 && nbase == 2))) ? "" : prefix; output += (lines != 1 ? " " : "") + pref + Convert.ToString(f.width, nbase).PadLeft(pad, '0') + (lines != 0 ? (lines == 1 ? ", " : "") : ",\n"); + bTotal += bits / 8; // Count bytes total // Count posted numbers numcount++; if (lines != 2) numcount = 0; @@ -289,6 +295,7 @@ namespace McBitFont { } } + t = jdir < 0 ? bits+1 : -1; for (int i = imin; i != imax; i += idir) { if (lines == 0) { // "Column/Row per line" - new line offset @@ -296,8 +303,13 @@ namespace McBitFont { numcount = 0; } for (int j = jmin; j != jmax; j += jdir) { - if (jdir < 0) t = jmin - j; - else t = j; + if (packed) { + t += jdir; + if (t < 0 || t % bits == 0) t = jdir < 0 ? bits : 0; + } else { + if (jdir < 0) t = jmin - j; + else t = j; + } if (t % bits == 0) b = 0; if (cbOrder.SelectedIndex == 0) { // Columns @@ -314,9 +326,9 @@ namespace McBitFont { // MSB on top/Left b |= (uint)(1 << (bits - (t % bits) - 1)); } - + } - if (((t + 1) % bits == 0) || j + jdir == jmax) { + if (((t + 1) % bits == 0) || (j + jdir == jmax && !packed)) { // we have filled a number with bits - let's post it // should we post a comma before the number? @@ -325,6 +337,7 @@ namespace McBitFont { // should we post a prefix to the number? pref = (!cbZeroes.Checked && ((b < 10 && nbase == 16) || (b < 2 && nbase == 2))) ? "" : prefix; output += pref + Convert.ToString(b, nbase).PadLeft(pad, '0'); + bTotal += bits / 8; // Count bytes total // count posted numbers numcount++; @@ -337,9 +350,20 @@ namespace McBitFont { } if (lines == 0) { // "Column/Row per line" - closing line - output += cbracket + ((i+idir==imax) && f.Equals(flast) ? "" : ",") + "\n"; + output += cbracket + ((i + idir == imax) && f.Equals(flast) ? "" : ",") + "\n"; } } + if (packed && (f.width * f.height) % bits > 0) { + // post leftovers in last number + + // should we post a prefix to the number? + pref = (!cbZeroes.Checked && ((b < 10 && nbase == 16) || (b < 2 && nbase == 2))) ? "" : prefix; + output += (numcount > 0? ", " : "") + pref + Convert.ToString(b, nbase).PadLeft(pad, '0'); + bTotal += bits / 8; // Count bytes total + + // count posted numbers + numcount++; + } if (lines == 1) { // "1 symbol per line" - closing line if (!f.Equals(flast) && f.width > 0) output += ","; @@ -359,6 +383,12 @@ namespace McBitFont { // Close array definition output += "};\n"; + // Add header and bytes total counter + if (com) { + output = "// Bytes total: " + bTotal.ToString() + "\n" + output; + output = comments["header"] + output; + } + txtOutput.Text = output; txtOutput.SelectionStart = 0; txtOutput.ScrollToCaret(); @@ -382,6 +412,10 @@ namespace McBitFont { } private void cbLines_SelectedIndexChanged(object sender, EventArgs e) { + if (cbLines.SelectedIndex == 0 && cbPacked.Checked) { + MessageBox.Show("Cannot make one line per column/row in packed font as there are bytes used in several columns/rows!\n(Setting text format to 1 Symbol per line)", "No 1 Symbol per line for packed fonts!", MessageBoxButtons.OK, MessageBoxIcon.Information); + cbLines.SelectedIndex = 1; + } if (cbLines.SelectedIndex == 2) { nudXLines.Enabled = true; lblXLines.Enabled = true; @@ -390,5 +424,9 @@ namespace McBitFont { lblXLines.Enabled = false; } } + + private void cbPacked_CheckedChanged(object sender, EventArgs e) { + if (cbPacked.Checked && cbLines.SelectedIndex == 0) cbLines.SelectedIndex = 1; + } } } diff --git a/McBitFont/Export.resx b/McBitFont/Export.resx index d54ad1e..dcfd08d 100644 --- a/McBitFont/Export.resx +++ b/McBitFont/Export.resx @@ -1,17 +1,17 @@  - @@ -120,7 +120,4 @@ 17, 17 - - 17, 17 - \ No newline at end of file diff --git a/McBitFont/FodyWeavers.xml b/McBitFont/FodyWeavers.xml new file mode 100644 index 0000000..5029e70 --- /dev/null +++ b/McBitFont/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/McBitFont/Form1.Designer.cs b/McBitFont/Form1.Designer.cs index 9a10dc0..14f469d 100644 --- a/McBitFont/Form1.Designer.cs +++ b/McBitFont/Form1.Designer.cs @@ -23,766 +23,999 @@ /// содержимое этого метода с помощью редактора кода. /// private void InitializeComponent() { - this.components = new System.ComponentModel.Container(); + components = new System.ComponentModel.Container(); System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm)); - this.dotPanel = new System.Windows.Forms.Panel(); - this.nudX = new System.Windows.Forms.NumericUpDown(); - this.nudY = new System.Windows.Forms.NumericUpDown(); - this.label1 = new System.Windows.Forms.Label(); - this.label2 = new System.Windows.Forms.Label(); - this.lblType = new System.Windows.Forms.Label(); - this.cbZoom = new System.Windows.Forms.ComboBox(); - this.label4 = new System.Windows.Forms.Label(); - this.panel1 = new System.Windows.Forms.Panel(); - this.btnClear = new System.Windows.Forms.Button(); - this.btnMirrorY = new System.Windows.Forms.Button(); - this.btnMirrorX = new System.Windows.Forms.Button(); - this.btnInvert = new System.Windows.Forms.Button(); - this.btnShiftDown = new System.Windows.Forms.Button(); - this.btnShiftUp = new System.Windows.Forms.Button(); - this.btnShiftRight = new System.Windows.Forms.Button(); - this.btnShiftLeft = new System.Windows.Forms.Button(); - this.btnExport = new System.Windows.Forms.Button(); - this.miniList = new System.Windows.Forms.ListView(); - this.ilMiniatures = new System.Windows.Forms.ImageList(this.components); - this.btnApply = new System.Windows.Forms.Button(); - this.hScroll = new System.Windows.Forms.HScrollBar(); - this.vScroll = new System.Windows.Forms.VScrollBar(); - this.label5 = new System.Windows.Forms.Label(); - this.menuStrip1 = new System.Windows.Forms.MenuStrip(); - this.fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.newToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.openToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.saveDEVToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.saveToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.saveAsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.exitToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.editToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.copyToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.pasteToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.prependSymbolToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.appendSymbolToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.removeSymbolToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.applyToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.toolsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.ClearToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.shiftUpToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.shiftDownToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.shiftLeftToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.shiftRightToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.invertToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.mirrorXToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.mirrorYToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.exportToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.aboutToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.dlgSave = new System.Windows.Forms.SaveFileDialog(); - this.dlgOpen = new System.Windows.Forms.OpenFileDialog(); - this.btnBaseline = new System.Windows.Forms.Button(); - this.toolTip1 = new System.Windows.Forms.ToolTip(this.components); - this.chkLeftSide = new System.Windows.Forms.CheckBox(); - this.chkTopSide = new System.Windows.Forms.CheckBox(); - this.openDEVToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - ((System.ComponentModel.ISupportInitialize)(this.nudX)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.nudY)).BeginInit(); - this.panel1.SuspendLayout(); - this.menuStrip1.SuspendLayout(); - this.SuspendLayout(); + dotPanel = new System.Windows.Forms.Panel(); + nudX = new System.Windows.Forms.NumericUpDown(); + nudY = new System.Windows.Forms.NumericUpDown(); + label1 = new System.Windows.Forms.Label(); + label2 = new System.Windows.Forms.Label(); + lblType = new System.Windows.Forms.Label(); + cbZoom = new System.Windows.Forms.ComboBox(); + label4 = new System.Windows.Forms.Label(); + panel1 = new System.Windows.Forms.Panel(); + btnFill = new System.Windows.Forms.Button(); + btnClear = new System.Windows.Forms.Button(); + btnMirrorY = new System.Windows.Forms.Button(); + btnMirrorX = new System.Windows.Forms.Button(); + btnInvert = new System.Windows.Forms.Button(); + btnShiftDown = new System.Windows.Forms.Button(); + btnShiftUp = new System.Windows.Forms.Button(); + btnShiftRight = new System.Windows.Forms.Button(); + btnShiftLeft = new System.Windows.Forms.Button(); + btnExport = new System.Windows.Forms.Button(); + miniList = new System.Windows.Forms.ListView(); + cmMinilist = new System.Windows.Forms.ContextMenuStrip(components); + tsmiMakeVarWidth = new System.Windows.Forms.ToolStripMenuItem(); + tsmiPrepensSymbol = new System.Windows.Forms.ToolStripMenuItem(); + tsmiAppendSymbol = new System.Windows.Forms.ToolStripMenuItem(); + tsmiRemoveSymbol = new System.Windows.Forms.ToolStripMenuItem(); + tsmiRemoveBefore = new System.Windows.Forms.ToolStripMenuItem(); + tsmiRemoveAfter = new System.Windows.Forms.ToolStripMenuItem(); + tsmiCodeShift = new System.Windows.Forms.ToolStripMenuItem(); + ilMiniatures = new System.Windows.Forms.ImageList(components); + btnApply = new System.Windows.Forms.Button(); + hScroll = new System.Windows.Forms.HScrollBar(); + vScroll = new System.Windows.Forms.VScrollBar(); + lblCoords = new System.Windows.Forms.Label(); + menuStrip1 = new System.Windows.Forms.MenuStrip(); + fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + newToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + openToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + saveToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + saveAsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + importTextToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); + importImageToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + exportToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + exitToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + editToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + undoToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + redoToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + copyToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + pasteToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + selectToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + fontToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + makeVarWidthToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + prependSymbolToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + appendSymbolToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + removeSymbolToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + removeBeforeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + removeAfterToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + CodeShiftToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + canvasToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + ClearToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + FillToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + shiftUpToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + shiftDownToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + shiftLeftToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + shiftRightToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + invertToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + mirrorXToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + mirrorYToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + applyToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + aboutToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + dlgSave = new System.Windows.Forms.SaveFileDialog(); + dlgOpen = new System.Windows.Forms.OpenFileDialog(); + btnBaseline = new System.Windows.Forms.Button(); + toolTip1 = new System.Windows.Forms.ToolTip(components); + chkLeftSide = new System.Windows.Forms.CheckBox(); + chkTopSide = new System.Windows.Forms.CheckBox(); + chkHexCodes = new System.Windows.Forms.CheckBox(); + chkRectSelect = new System.Windows.Forms.CheckBox(); + label3 = new System.Windows.Forms.Label(); + ((System.ComponentModel.ISupportInitialize)nudX).BeginInit(); + ((System.ComponentModel.ISupportInitialize)nudY).BeginInit(); + panel1.SuspendLayout(); + cmMinilist.SuspendLayout(); + menuStrip1.SuspendLayout(); + SuspendLayout(); // // dotPanel // - this.dotPanel.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.dotPanel.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.dotPanel.BackColor = System.Drawing.SystemColors.ControlDark; - this.dotPanel.Location = new System.Drawing.Point(12, 27); - this.dotPanel.Name = "dotPanel"; - this.dotPanel.Size = new System.Drawing.Size(389, 498); - this.dotPanel.TabIndex = 0; - this.dotPanel.Paint += new System.Windows.Forms.PaintEventHandler(this.dotPanel_Paint); - this.dotPanel.MouseDown += new System.Windows.Forms.MouseEventHandler(this.dotPanel_MouseMove); - this.dotPanel.MouseMove += new System.Windows.Forms.MouseEventHandler(this.dotPanel_MouseMove); - this.dotPanel.Resize += new System.EventHandler(this.cbZoom_SelectedIndexChanged); + dotPanel.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right; + dotPanel.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + dotPanel.BackColor = System.Drawing.Color.Gray; + dotPanel.Location = new System.Drawing.Point(14, 31); + dotPanel.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + dotPanel.Name = "dotPanel"; + dotPanel.Size = new System.Drawing.Size(427, 575); + dotPanel.TabIndex = 0; + dotPanel.Paint += dotPanel_Paint; + dotPanel.MouseDown += dotPanel_MouseMove; + dotPanel.MouseMove += dotPanel_MouseMove; + dotPanel.Resize += cbZoom_SelectedIndexChanged; // // nudX // - this.nudX.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.nudX.Location = new System.Drawing.Point(666, 27); - this.nudX.Maximum = new decimal(new int[] { - 255, - 0, - 0, - 0}); - this.nudX.Name = "nudX"; - this.nudX.Size = new System.Drawing.Size(40, 20); - this.nudX.TabIndex = 1; - this.toolTip1.SetToolTip(this.nudX, "Symbol width"); - this.nudX.Value = new decimal(new int[] { - 32, - 0, - 0, - 0}); - this.nudX.ValueChanged += new System.EventHandler(this.nudX_ValueChanged); + nudX.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right; + nudX.Location = new System.Drawing.Point(777, 31); + nudX.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + nudX.Maximum = new decimal(new int[] { 255, 0, 0, 0 }); + nudX.Name = "nudX"; + nudX.Size = new System.Drawing.Size(47, 23); + nudX.TabIndex = 1; + toolTip1.SetToolTip(nudX, "Symbol width"); + nudX.Value = new decimal(new int[] { 32, 0, 0, 0 }); + nudX.ValueChanged += nudX_ValueChanged; // // nudY // - this.nudY.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.nudY.Location = new System.Drawing.Point(666, 49); - this.nudY.Maximum = new decimal(new int[] { - 255, - 0, - 0, - 0}); - this.nudY.Minimum = new decimal(new int[] { - 1, - 0, - 0, - 0}); - this.nudY.Name = "nudY"; - this.nudY.Size = new System.Drawing.Size(40, 20); - this.nudY.TabIndex = 2; - this.toolTip1.SetToolTip(this.nudY, "Symbol height"); - this.nudY.Value = new decimal(new int[] { - 32, - 0, - 0, - 0}); - this.nudY.ValueChanged += new System.EventHandler(this.nudY_ValueChanged); + nudY.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right; + nudY.Location = new System.Drawing.Point(777, 57); + nudY.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + nudY.Maximum = new decimal(new int[] { 255, 0, 0, 0 }); + nudY.Minimum = new decimal(new int[] { 1, 0, 0, 0 }); + nudY.Name = "nudY"; + nudY.Size = new System.Drawing.Size(47, 23); + nudY.TabIndex = 2; + toolTip1.SetToolTip(nudY, "Symbol height"); + nudY.Value = new decimal(new int[] { 32, 0, 0, 0 }); + nudY.ValueChanged += nudY_ValueChanged; // // label1 // - this.label1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.label1.AutoSize = true; - this.label1.Location = new System.Drawing.Point(622, 29); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(38, 13); - this.label1.TabIndex = 3; - this.label1.Text = "Width:"; + label1.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right; + label1.AutoSize = true; + label1.Location = new System.Drawing.Point(726, 33); + label1.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + label1.Name = "label1"; + label1.Size = new System.Drawing.Size(42, 15); + label1.TabIndex = 3; + label1.Text = "Width:"; // // label2 // - this.label2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.label2.AutoSize = true; - this.label2.Location = new System.Drawing.Point(619, 51); - this.label2.Name = "label2"; - this.label2.Size = new System.Drawing.Size(41, 13); - this.label2.TabIndex = 4; - this.label2.Text = "Height:"; + label2.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right; + label2.AutoSize = true; + label2.Location = new System.Drawing.Point(722, 59); + label2.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + label2.Name = "label2"; + label2.Size = new System.Drawing.Size(46, 15); + label2.TabIndex = 4; + label2.Text = "Height:"; // // lblType // - this.lblType.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.lblType.Location = new System.Drawing.Point(554, 138); - this.lblType.Name = "lblType"; - this.lblType.Size = new System.Drawing.Size(217, 13); - this.lblType.TabIndex = 0; - this.lblType.Text = "Monospaced"; - this.lblType.TextAlign = System.Drawing.ContentAlignment.TopRight; + lblType.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right; + lblType.Location = new System.Drawing.Point(718, 159); + lblType.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + lblType.Name = "lblType"; + lblType.Size = new System.Drawing.Size(181, 15); + lblType.TabIndex = 0; + lblType.Text = "Monospaced"; + lblType.TextAlign = System.Drawing.ContentAlignment.TopRight; // // cbZoom // - this.cbZoom.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.cbZoom.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.cbZoom.FormattingEnabled = true; - this.cbZoom.Items.AddRange(new object[] { - "2", - "3", - "5", - "10", - "15", - "20", - "25", - "30", - "35", - "40", - "45", - "50"}); - this.cbZoom.Location = new System.Drawing.Point(554, 45); - this.cbZoom.Name = "cbZoom"; - this.cbZoom.Size = new System.Drawing.Size(59, 21); - this.cbZoom.TabIndex = 6; - this.cbZoom.TabStop = false; - this.toolTip1.SetToolTip(this.cbZoom, "Canvas zoom level"); - this.cbZoom.SelectedIndexChanged += new System.EventHandler(this.cbZoom_SelectedIndexChanged); + cbZoom.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right; + 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(619, 52); + cbZoom.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + cbZoom.Name = "cbZoom"; + cbZoom.Size = new System.Drawing.Size(75, 23); + cbZoom.TabIndex = 6; + cbZoom.TabStop = false; + toolTip1.SetToolTip(cbZoom, "Canvas zoom level"); // // label4 // - this.label4.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.label4.AutoSize = true; - this.label4.Location = new System.Drawing.Point(553, 29); - this.label4.Name = "label4"; - this.label4.Size = new System.Drawing.Size(62, 13); - this.label4.TabIndex = 7; - this.label4.Text = "Zoom level:"; + label4.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right; + label4.AutoSize = true; + label4.Location = new System.Drawing.Point(618, 33); + label4.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + label4.Name = "label4"; + label4.Size = new System.Drawing.Size(69, 15); + label4.TabIndex = 7; + label4.Text = "Zoom level:"; // // panel1 // - this.panel1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.panel1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; - this.panel1.Controls.Add(this.btnClear); - this.panel1.Controls.Add(this.btnMirrorY); - this.panel1.Controls.Add(this.btnMirrorX); - this.panel1.Controls.Add(this.btnInvert); - this.panel1.Controls.Add(this.btnShiftDown); - this.panel1.Controls.Add(this.btnShiftUp); - this.panel1.Controls.Add(this.btnShiftRight); - this.panel1.Controls.Add(this.btnShiftLeft); - this.panel1.Location = new System.Drawing.Point(428, 27); - this.panel1.Name = "panel1"; - this.panel1.Size = new System.Drawing.Size(120, 121); - this.panel1.TabIndex = 9; + panel1.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right; + panel1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + panel1.Controls.Add(btnFill); + panel1.Controls.Add(btnClear); + panel1.Controls.Add(btnMirrorY); + panel1.Controls.Add(btnMirrorX); + panel1.Controls.Add(btnInvert); + panel1.Controls.Add(btnShiftDown); + panel1.Controls.Add(btnShiftUp); + panel1.Controls.Add(btnShiftRight); + panel1.Controls.Add(btnShiftLeft); + panel1.Location = new System.Drawing.Point(472, 31); + panel1.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + panel1.Name = "panel1"; + panel1.Size = new System.Drawing.Size(140, 139); + panel1.TabIndex = 9; + // + // btnFill + // + btnFill.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, 204); + btnFill.Location = new System.Drawing.Point(92, 9); + btnFill.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + btnFill.Name = "btnFill"; + btnFill.Size = new System.Drawing.Size(35, 35); + btnFill.TabIndex = 8; + btnFill.Text = "⬤"; + toolTip1.SetToolTip(btnFill, "Paint canvas black"); + btnFill.UseVisualStyleBackColor = true; + btnFill.Click += btnFill_Click; // // btnClear // - this.btnClear.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(204))); - this.btnClear.Location = new System.Drawing.Point(7, 8); - this.btnClear.Name = "btnClear"; - this.btnClear.Size = new System.Drawing.Size(30, 30); - this.btnClear.TabIndex = 7; - this.btnClear.Text = "○"; - this.toolTip1.SetToolTip(this.btnClear, "Clear canvas"); - this.btnClear.UseVisualStyleBackColor = true; - this.btnClear.Click += new System.EventHandler(this.btnClear_Click); + btnClear.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, 204); + btnClear.Location = new System.Drawing.Point(8, 9); + btnClear.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + btnClear.Name = "btnClear"; + btnClear.Size = new System.Drawing.Size(35, 35); + btnClear.TabIndex = 7; + btnClear.Text = "○"; + toolTip1.SetToolTip(btnClear, "Paint canvas white"); + btnClear.UseVisualStyleBackColor = true; + btnClear.Click += btnClear_Click; // // btnMirrorY // - this.btnMirrorY.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(204))); - this.btnMirrorY.Location = new System.Drawing.Point(79, 80); - this.btnMirrorY.Name = "btnMirrorY"; - this.btnMirrorY.Size = new System.Drawing.Size(30, 30); - this.btnMirrorY.TabIndex = 6; - this.btnMirrorY.Text = "⩥"; - this.toolTip1.SetToolTip(this.btnMirrorY, "Mirror by Y axis (vertical)"); - this.btnMirrorY.UseVisualStyleBackColor = true; - this.btnMirrorY.Click += new System.EventHandler(this.btnMirrorY_Click); + btnMirrorY.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, 204); + btnMirrorY.Location = new System.Drawing.Point(92, 92); + btnMirrorY.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + btnMirrorY.Name = "btnMirrorY"; + btnMirrorY.Size = new System.Drawing.Size(35, 35); + btnMirrorY.TabIndex = 6; + btnMirrorY.Text = "⩥"; + toolTip1.SetToolTip(btnMirrorY, "Mirror by Y axis (vertical)"); + btnMirrorY.UseVisualStyleBackColor = true; + btnMirrorY.Click += btnMirrorY_Click; // // btnMirrorX // - this.btnMirrorX.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(204))); - this.btnMirrorX.Location = new System.Drawing.Point(43, 80); - this.btnMirrorX.Name = "btnMirrorX"; - this.btnMirrorX.Size = new System.Drawing.Size(30, 30); - this.btnMirrorX.TabIndex = 5; - this.btnMirrorX.Text = "◮"; - this.toolTip1.SetToolTip(this.btnMirrorX, "Mirror by X axis (horizontal)"); - this.btnMirrorX.UseVisualStyleBackColor = true; - this.btnMirrorX.Click += new System.EventHandler(this.btnMirrorX_Click); + btnMirrorX.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, 204); + btnMirrorX.Location = new System.Drawing.Point(50, 92); + btnMirrorX.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + btnMirrorX.Name = "btnMirrorX"; + btnMirrorX.Size = new System.Drawing.Size(35, 35); + btnMirrorX.TabIndex = 5; + btnMirrorX.Text = "◮"; + toolTip1.SetToolTip(btnMirrorX, "Mirror by X axis (horizontal)"); + btnMirrorX.UseVisualStyleBackColor = true; + btnMirrorX.Click += btnMirrorX_Click; // // btnInvert // - this.btnInvert.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(204))); - this.btnInvert.Location = new System.Drawing.Point(7, 80); - this.btnInvert.Name = "btnInvert"; - this.btnInvert.Size = new System.Drawing.Size(30, 30); - this.btnInvert.TabIndex = 4; - this.btnInvert.Text = "◪"; - this.toolTip1.SetToolTip(this.btnInvert, "Invert pixel colors"); - this.btnInvert.UseVisualStyleBackColor = true; - this.btnInvert.Click += new System.EventHandler(this.btnInvert_Click); + btnInvert.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, 204); + btnInvert.Location = new System.Drawing.Point(8, 92); + btnInvert.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + btnInvert.Name = "btnInvert"; + btnInvert.Size = new System.Drawing.Size(35, 35); + btnInvert.TabIndex = 4; + btnInvert.Text = "◪"; + toolTip1.SetToolTip(btnInvert, "Invert pixel colors"); + btnInvert.UseVisualStyleBackColor = true; + btnInvert.Click += btnInvert_Click; // // btnShiftDown // - this.btnShiftDown.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(204))); - this.btnShiftDown.Location = new System.Drawing.Point(43, 44); - this.btnShiftDown.Name = "btnShiftDown"; - this.btnShiftDown.Size = new System.Drawing.Size(30, 30); - this.btnShiftDown.TabIndex = 3; - this.btnShiftDown.Text = "▼"; - this.toolTip1.SetToolTip(this.btnShiftDown, "Shift pixels down"); - this.btnShiftDown.UseVisualStyleBackColor = true; - this.btnShiftDown.Click += new System.EventHandler(this.btnShiftDown_Click); + btnShiftDown.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, 204); + btnShiftDown.Location = new System.Drawing.Point(50, 51); + btnShiftDown.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + btnShiftDown.Name = "btnShiftDown"; + btnShiftDown.Size = new System.Drawing.Size(35, 35); + btnShiftDown.TabIndex = 3; + btnShiftDown.Text = "▼"; + toolTip1.SetToolTip(btnShiftDown, "Shift pixels down"); + btnShiftDown.UseVisualStyleBackColor = true; + btnShiftDown.Click += btnShiftDown_Click; // // btnShiftUp // - this.btnShiftUp.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(204))); - this.btnShiftUp.Location = new System.Drawing.Point(43, 8); - this.btnShiftUp.Name = "btnShiftUp"; - this.btnShiftUp.Size = new System.Drawing.Size(30, 30); - this.btnShiftUp.TabIndex = 2; - this.btnShiftUp.Text = "▲"; - this.toolTip1.SetToolTip(this.btnShiftUp, "Shift pixels up"); - this.btnShiftUp.UseVisualStyleBackColor = true; - this.btnShiftUp.Click += new System.EventHandler(this.btnShiftUp_Click); + btnShiftUp.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, 204); + btnShiftUp.Location = new System.Drawing.Point(50, 9); + btnShiftUp.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + btnShiftUp.Name = "btnShiftUp"; + btnShiftUp.Size = new System.Drawing.Size(35, 35); + btnShiftUp.TabIndex = 2; + btnShiftUp.Text = "▲"; + toolTip1.SetToolTip(btnShiftUp, "Shift pixels up"); + btnShiftUp.UseVisualStyleBackColor = true; + btnShiftUp.Click += btnShiftUp_Click; // // btnShiftRight // - this.btnShiftRight.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(204))); - this.btnShiftRight.Location = new System.Drawing.Point(79, 44); - this.btnShiftRight.Name = "btnShiftRight"; - this.btnShiftRight.Size = new System.Drawing.Size(30, 30); - this.btnShiftRight.TabIndex = 1; - this.btnShiftRight.Text = "▶"; - this.toolTip1.SetToolTip(this.btnShiftRight, "Shift pixels right"); - this.btnShiftRight.UseVisualStyleBackColor = true; - this.btnShiftRight.Click += new System.EventHandler(this.btnShiftRight_Click); + btnShiftRight.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, 204); + btnShiftRight.Location = new System.Drawing.Point(92, 51); + btnShiftRight.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + btnShiftRight.Name = "btnShiftRight"; + btnShiftRight.Size = new System.Drawing.Size(35, 35); + btnShiftRight.TabIndex = 1; + btnShiftRight.Text = "▶"; + toolTip1.SetToolTip(btnShiftRight, "Shift pixels right"); + btnShiftRight.UseVisualStyleBackColor = true; + btnShiftRight.Click += btnShiftRight_Click; // // btnShiftLeft // - this.btnShiftLeft.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(204))); - this.btnShiftLeft.Location = new System.Drawing.Point(7, 44); - this.btnShiftLeft.Name = "btnShiftLeft"; - this.btnShiftLeft.Size = new System.Drawing.Size(30, 30); - this.btnShiftLeft.TabIndex = 0; - this.btnShiftLeft.Text = "◀"; - this.toolTip1.SetToolTip(this.btnShiftLeft, "Shift pixels left"); - this.btnShiftLeft.UseVisualStyleBackColor = true; - this.btnShiftLeft.Click += new System.EventHandler(this.btnShiftLeft_Click); + btnShiftLeft.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, 204); + btnShiftLeft.Location = new System.Drawing.Point(8, 51); + btnShiftLeft.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + btnShiftLeft.Name = "btnShiftLeft"; + btnShiftLeft.Size = new System.Drawing.Size(35, 35); + btnShiftLeft.TabIndex = 0; + btnShiftLeft.Text = "◀"; + toolTip1.SetToolTip(btnShiftLeft, "Shift pixels left"); + btnShiftLeft.UseVisualStyleBackColor = true; + btnShiftLeft.Click += btnShiftLeft_Click; // // btnExport // - this.btnExport.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.btnExport.Location = new System.Drawing.Point(696, 109); - this.btnExport.Name = "btnExport"; - this.btnExport.Size = new System.Drawing.Size(75, 23); - this.btnExport.TabIndex = 10; - this.btnExport.Text = "Export"; - this.toolTip1.SetToolTip(this.btnExport, "Configure and export data"); - this.btnExport.UseVisualStyleBackColor = true; - this.btnExport.Click += new System.EventHandler(this.button1_Click); + btnExport.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right; + btnExport.Image = Properties.Resources.z_export; + btnExport.Location = new System.Drawing.Point(812, 126); + btnExport.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + btnExport.Name = "btnExport"; + btnExport.Size = new System.Drawing.Size(88, 27); + btnExport.TabIndex = 10; + btnExport.Text = " Export"; + btnExport.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + btnExport.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText; + toolTip1.SetToolTip(btnExport, "Configure and export data"); + btnExport.UseVisualStyleBackColor = true; + btnExport.Click += button1_Click; // // miniList // - this.miniList.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Right))); - this.miniList.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(204))); - this.miniList.GridLines = true; - this.miniList.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.None; - this.miniList.HideSelection = false; - this.miniList.LargeImageList = this.ilMiniatures; - this.miniList.Location = new System.Drawing.Point(428, 154); - this.miniList.MultiSelect = false; - this.miniList.Name = "miniList"; - this.miniList.ShowGroups = false; - this.miniList.Size = new System.Drawing.Size(343, 395); - this.miniList.SmallImageList = this.ilMiniatures; - this.miniList.Sorting = System.Windows.Forms.SortOrder.Ascending; - this.miniList.TabIndex = 12; - this.miniList.TabStop = false; - this.miniList.TileSize = new System.Drawing.Size(50, 50); - this.miniList.UseCompatibleStateImageBehavior = false; - this.miniList.SelectedIndexChanged += new System.EventHandler(this.miniList_SelectedIndexChanged); + miniList.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right; + miniList.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + miniList.ContextMenuStrip = cmMinilist; + miniList.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, 204); + miniList.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.None; + miniList.LargeImageList = ilMiniatures; + miniList.Location = new System.Drawing.Point(472, 178); + miniList.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + miniList.MultiSelect = false; + miniList.Name = "miniList"; + miniList.ShowGroups = false; + miniList.Size = new System.Drawing.Size(427, 455); + miniList.SmallImageList = ilMiniatures; + miniList.Sorting = System.Windows.Forms.SortOrder.Ascending; + miniList.TabIndex = 12; + miniList.TabStop = false; + miniList.TileSize = new System.Drawing.Size(50, 50); + miniList.UseCompatibleStateImageBehavior = false; + miniList.SelectedIndexChanged += MiniList_SelectedIndexChanged; + // + // cmMinilist + // + cmMinilist.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { tsmiMakeVarWidth, tsmiPrepensSymbol, tsmiAppendSymbol, tsmiRemoveSymbol, tsmiRemoveBefore, tsmiRemoveAfter, tsmiCodeShift }); + cmMinilist.Name = "cmMinilist"; + cmMinilist.Size = new System.Drawing.Size(216, 158); + // + // tsmiMakeVarWidth + // + tsmiMakeVarWidth.Image = Properties.Resources.z_asterisk; + tsmiMakeVarWidth.Name = "tsmiMakeVarWidth"; + tsmiMakeVarWidth.Size = new System.Drawing.Size(215, 22); + tsmiMakeVarWidth.Text = "Make Variable Width"; + tsmiMakeVarWidth.ToolTipText = "Make Font Variable width one"; + tsmiMakeVarWidth.Click += makeVarWidthToolStripMenuItem_Click; + // + // tsmiPrepensSymbol + // + tsmiPrepensSymbol.Enabled = false; + tsmiPrepensSymbol.Image = Properties.Resources.add; + tsmiPrepensSymbol.Name = "tsmiPrepensSymbol"; + tsmiPrepensSymbol.Size = new System.Drawing.Size(215, 22); + tsmiPrepensSymbol.Text = "Prepend symbol"; + tsmiPrepensSymbol.ToolTipText = "Add a symbol to the beginning of the sequence"; + tsmiPrepensSymbol.Click += prependSymbolToolStripMenuItem_Click; + // + // tsmiAppendSymbol + // + tsmiAppendSymbol.Enabled = false; + tsmiAppendSymbol.Image = Properties.Resources.add; + tsmiAppendSymbol.Name = "tsmiAppendSymbol"; + tsmiAppendSymbol.Size = new System.Drawing.Size(215, 22); + tsmiAppendSymbol.Text = "Append symbol"; + tsmiAppendSymbol.ToolTipText = "Add a symbol to the end of the sequence"; + tsmiAppendSymbol.Click += prependSymbolToolStripMenuItem_Click; + // + // tsmiRemoveSymbol + // + tsmiRemoveSymbol.Enabled = false; + tsmiRemoveSymbol.Image = Properties.Resources.delete; + tsmiRemoveSymbol.Name = "tsmiRemoveSymbol"; + tsmiRemoveSymbol.Size = new System.Drawing.Size(215, 22); + tsmiRemoveSymbol.Text = "Remove symbol"; + tsmiRemoveSymbol.ToolTipText = "Remove selected symbol"; + tsmiRemoveSymbol.Click += removeSymbolToolStripMenuItem_Click; + // + // tsmiRemoveBefore + // + tsmiRemoveBefore.Enabled = false; + tsmiRemoveBefore.Image = Properties.Resources.delete; + tsmiRemoveBefore.Name = "tsmiRemoveBefore"; + tsmiRemoveBefore.Size = new System.Drawing.Size(215, 22); + tsmiRemoveBefore.Text = "Remove all before selected"; + tsmiRemoveBefore.ToolTipText = "Remove all symbols before current one"; + tsmiRemoveBefore.Click += removeBeforeToolStripMenuItem_Click; + // + // tsmiRemoveAfter + // + tsmiRemoveAfter.Enabled = false; + tsmiRemoveAfter.Image = Properties.Resources.delete; + tsmiRemoveAfter.Name = "tsmiRemoveAfter"; + tsmiRemoveAfter.Size = new System.Drawing.Size(215, 22); + tsmiRemoveAfter.Text = "Remove all after selected"; + tsmiRemoveAfter.ToolTipText = "Remove all symbols after current one"; + tsmiRemoveAfter.Click += removeAfterToolStripMenuItem_Click; + // + // tsmiCodeShift + // + tsmiCodeShift.Image = Properties.Resources.z_align_center; + tsmiCodeShift.Name = "tsmiCodeShift"; + tsmiCodeShift.Size = new System.Drawing.Size(215, 22); + tsmiCodeShift.Text = "Code Shift"; + tsmiCodeShift.ToolTipText = "Shift the font on the code line"; + tsmiCodeShift.Click += CodeShiftToolStripMenuItem_Click; // // ilMiniatures // - this.ilMiniatures.ColorDepth = System.Windows.Forms.ColorDepth.Depth4Bit; - this.ilMiniatures.ImageSize = new System.Drawing.Size(50, 50); - this.ilMiniatures.TransparentColor = System.Drawing.Color.Transparent; + ilMiniatures.ColorDepth = System.Windows.Forms.ColorDepth.Depth4Bit; + ilMiniatures.ImageSize = new System.Drawing.Size(50, 50); + ilMiniatures.TransparentColor = System.Drawing.Color.Transparent; // // btnApply // - this.btnApply.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.btnApply.Location = new System.Drawing.Point(615, 109); - this.btnApply.Name = "btnApply"; - this.btnApply.Size = new System.Drawing.Size(75, 23); - this.btnApply.TabIndex = 13; - this.btnApply.Text = "Apply"; - this.toolTip1.SetToolTip(this.btnApply, "Apply changes made to the symbol"); - this.btnApply.UseVisualStyleBackColor = true; - this.btnApply.Click += new System.EventHandler(this.button2_Click); + btnApply.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right; + btnApply.Image = Properties.Resources.z_tick; + btnApply.Location = new System.Drawing.Point(718, 126); + btnApply.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + btnApply.Name = "btnApply"; + btnApply.Size = new System.Drawing.Size(88, 27); + btnApply.TabIndex = 13; + btnApply.Text = " Apply"; + btnApply.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + btnApply.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText; + toolTip1.SetToolTip(btnApply, "Apply changes made to the symbol"); + btnApply.UseVisualStyleBackColor = true; + btnApply.Click += button2_Click; // // hScroll // - this.hScroll.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.hScroll.Location = new System.Drawing.Point(12, 528); - this.hScroll.Name = "hScroll"; - this.hScroll.Size = new System.Drawing.Size(389, 21); - this.hScroll.TabIndex = 14; - this.hScroll.ValueChanged += new System.EventHandler(this.scroll_ValueChanged); + hScroll.Anchor = System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right; + hScroll.Location = new System.Drawing.Point(14, 609); + hScroll.Name = "hScroll"; + hScroll.Size = new System.Drawing.Size(427, 21); + hScroll.TabIndex = 14; + hScroll.ValueChanged += scroll_ValueChanged; // // vScroll // - this.vScroll.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Right))); - this.vScroll.LargeChange = 25; - this.vScroll.Location = new System.Drawing.Point(404, 27); - this.vScroll.Name = "vScroll"; - this.vScroll.Size = new System.Drawing.Size(21, 498); - this.vScroll.TabIndex = 15; - this.vScroll.ValueChanged += new System.EventHandler(this.scroll_ValueChanged); + 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(444, 31); + vScroll.Name = "vScroll"; + vScroll.Size = new System.Drawing.Size(21, 575); + vScroll.TabIndex = 15; + vScroll.ValueChanged += scroll_ValueChanged; // - // label5 + // lblCoords // - this.label5.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.label5.AutoSize = true; - this.label5.Location = new System.Drawing.Point(554, 114); - this.label5.Name = "label5"; - this.label5.Size = new System.Drawing.Size(24, 13); - this.label5.TabIndex = 16; - this.label5.Text = "X,Y"; - this.label5.TextAlign = System.Drawing.ContentAlignment.TopRight; + lblCoords.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right; + lblCoords.AutoSize = true; + lblCoords.Location = new System.Drawing.Point(616, 138); + lblCoords.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + lblCoords.Name = "lblCoords"; + lblCoords.Size = new System.Drawing.Size(24, 15); + lblCoords.TabIndex = 16; + lblCoords.Text = "X,Y"; + lblCoords.TextAlign = System.Drawing.ContentAlignment.TopRight; // // menuStrip1 // - this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.fileToolStripMenuItem, - this.editToolStripMenuItem, - this.toolsToolStripMenuItem, - this.aboutToolStripMenuItem}); - this.menuStrip1.Location = new System.Drawing.Point(0, 0); - this.menuStrip1.Name = "menuStrip1"; - this.menuStrip1.Size = new System.Drawing.Size(784, 24); - this.menuStrip1.TabIndex = 17; - this.menuStrip1.Text = "menuStrip1"; + menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { fileToolStripMenuItem, editToolStripMenuItem, fontToolStripMenuItem, canvasToolStripMenuItem, aboutToolStripMenuItem }); + menuStrip1.Location = new System.Drawing.Point(0, 0); + menuStrip1.Name = "menuStrip1"; + menuStrip1.Padding = new System.Windows.Forms.Padding(7, 2, 0, 2); + menuStrip1.Size = new System.Drawing.Size(915, 24); + menuStrip1.TabIndex = 17; + menuStrip1.Text = "menuStrip1"; // // fileToolStripMenuItem // - this.fileToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.newToolStripMenuItem, - this.openToolStripMenuItem, - this.openDEVToolStripMenuItem, - this.saveDEVToolStripMenuItem, - this.saveToolStripMenuItem, - this.saveAsToolStripMenuItem, - this.exitToolStripMenuItem}); - this.fileToolStripMenuItem.Name = "fileToolStripMenuItem"; - this.fileToolStripMenuItem.Size = new System.Drawing.Size(37, 20); - this.fileToolStripMenuItem.Text = "File"; + fileToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { newToolStripMenuItem, openToolStripMenuItem, saveToolStripMenuItem, saveAsToolStripMenuItem, importTextToolStripMenuItem1, importImageToolStripMenuItem, exportToolStripMenuItem, exitToolStripMenuItem }); + fileToolStripMenuItem.Name = "fileToolStripMenuItem"; + fileToolStripMenuItem.Size = new System.Drawing.Size(37, 20); + fileToolStripMenuItem.Text = "File"; // // newToolStripMenuItem // - this.newToolStripMenuItem.Image = global::McBitFont.Properties.Resources.file; - this.newToolStripMenuItem.Name = "newToolStripMenuItem"; - this.newToolStripMenuItem.ShortcutKeyDisplayString = "Ctrl+N"; - this.newToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.N))); - this.newToolStripMenuItem.Size = new System.Drawing.Size(184, 22); - this.newToolStripMenuItem.Text = "New"; - this.newToolStripMenuItem.Click += new System.EventHandler(this.newToolStripMenuItem_Click); + newToolStripMenuItem.Image = Properties.Resources.file; + newToolStripMenuItem.Name = "newToolStripMenuItem"; + newToolStripMenuItem.ShortcutKeyDisplayString = "Ctrl+N"; + newToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.N; + newToolStripMenuItem.Size = new System.Drawing.Size(224, 22); + newToolStripMenuItem.Text = "New"; + newToolStripMenuItem.ToolTipText = "Create new project"; + newToolStripMenuItem.Click += newToolStripMenuItem_Click; // // openToolStripMenuItem // - this.openToolStripMenuItem.Image = global::McBitFont.Properties.Resources.folder_open; - this.openToolStripMenuItem.Name = "openToolStripMenuItem"; - this.openToolStripMenuItem.ShortcutKeyDisplayString = "Ctrl+O"; - this.openToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.O))); - this.openToolStripMenuItem.Size = new System.Drawing.Size(184, 22); - this.openToolStripMenuItem.Text = "Open"; - this.openToolStripMenuItem.Click += new System.EventHandler(this.openToolStripMenuItem_Click); - // - // saveDEVToolStripMenuItem - // - this.saveDEVToolStripMenuItem.Name = "saveDEVToolStripMenuItem"; - this.saveDEVToolStripMenuItem.Size = new System.Drawing.Size(184, 22); - this.saveDEVToolStripMenuItem.Text = "Save as (new format)"; - this.saveDEVToolStripMenuItem.Click += new System.EventHandler(this.saveJSONToolStripMenuItem_Click); + openToolStripMenuItem.Image = Properties.Resources.folder_open; + openToolStripMenuItem.Name = "openToolStripMenuItem"; + openToolStripMenuItem.ShortcutKeyDisplayString = "Ctrl+O"; + openToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.O; + openToolStripMenuItem.Size = new System.Drawing.Size(224, 22); + openToolStripMenuItem.Text = "Open"; + openToolStripMenuItem.ToolTipText = "Open from file"; + openToolStripMenuItem.Click += openToolStripMenuItem_Click; // // saveToolStripMenuItem // - this.saveToolStripMenuItem.Image = global::McBitFont.Properties.Resources.Famfamfam_Silk_Disk_16; - this.saveToolStripMenuItem.Name = "saveToolStripMenuItem"; - this.saveToolStripMenuItem.ShortcutKeyDisplayString = "Ctrl+S"; - this.saveToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.S))); - this.saveToolStripMenuItem.Size = new System.Drawing.Size(184, 22); - this.saveToolStripMenuItem.Text = "Save"; - this.saveToolStripMenuItem.Click += new System.EventHandler(this.saveToolStripMenuItem_Click_1); + saveToolStripMenuItem.Image = Properties.Resources.Famfamfam_Silk_Disk_16; + saveToolStripMenuItem.Name = "saveToolStripMenuItem"; + saveToolStripMenuItem.ShortcutKeyDisplayString = "Ctrl+S"; + saveToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.S; + saveToolStripMenuItem.Size = new System.Drawing.Size(224, 22); + saveToolStripMenuItem.Text = "Save"; + saveToolStripMenuItem.ToolTipText = "Save changes"; + saveToolStripMenuItem.Click += saveToolStripMenuItem_Click_1; // // saveAsToolStripMenuItem // - this.saveAsToolStripMenuItem.Image = global::McBitFont.Properties.Resources.Famfamfam_Silk_Disk_16; - this.saveAsToolStripMenuItem.Name = "saveAsToolStripMenuItem"; - this.saveAsToolStripMenuItem.ShortcutKeyDisplayString = "Ctrl+Shift+S"; - this.saveAsToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)(((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Shift) - | System.Windows.Forms.Keys.S))); - this.saveAsToolStripMenuItem.Size = new System.Drawing.Size(184, 22); - this.saveAsToolStripMenuItem.Text = "Save as"; - this.saveAsToolStripMenuItem.Click += new System.EventHandler(this.saveToolStripMenuItem_Click); + saveAsToolStripMenuItem.Image = Properties.Resources.Famfamfam_Silk_Disk_16; + saveAsToolStripMenuItem.Name = "saveAsToolStripMenuItem"; + saveAsToolStripMenuItem.ShortcutKeyDisplayString = "Ctrl+Shift+S"; + saveAsToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Shift | System.Windows.Forms.Keys.S; + saveAsToolStripMenuItem.Size = new System.Drawing.Size(224, 22); + saveAsToolStripMenuItem.Text = "Save as"; + saveAsToolStripMenuItem.ToolTipText = "Save changes to another file"; + saveAsToolStripMenuItem.Click += SaveToolStripMenuItem_Click; // - // exitToolStripMenuItem + // importTextToolStripMenuItem1 // - this.exitToolStripMenuItem.Image = global::McBitFont.Properties.Resources.Famfamfam_Silk_Door_out_16; - this.exitToolStripMenuItem.Name = "exitToolStripMenuItem"; - this.exitToolStripMenuItem.ShortcutKeyDisplayString = "Alt+X"; - this.exitToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Alt | System.Windows.Forms.Keys.X))); - this.exitToolStripMenuItem.Size = new System.Drawing.Size(184, 22); - this.exitToolStripMenuItem.Text = "Exit"; - this.exitToolStripMenuItem.Click += new System.EventHandler(this.exitToolStripMenuItem_Click); + importTextToolStripMenuItem1.Image = Properties.Resources.folder_table; + importTextToolStripMenuItem1.Name = "importTextToolStripMenuItem1"; + importTextToolStripMenuItem1.Size = new System.Drawing.Size(224, 22); + importTextToolStripMenuItem1.Text = "Import text file (very limited)"; + importTextToolStripMenuItem1.Click += importTextToolStripMenuItem1_Click; // - // editToolStripMenuItem + // importImageToolStripMenuItem // - this.editToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.copyToolStripMenuItem, - this.pasteToolStripMenuItem, - this.prependSymbolToolStripMenuItem, - this.appendSymbolToolStripMenuItem, - this.removeSymbolToolStripMenuItem, - this.applyToolStripMenuItem}); - this.editToolStripMenuItem.Name = "editToolStripMenuItem"; - this.editToolStripMenuItem.Size = new System.Drawing.Size(39, 20); - this.editToolStripMenuItem.Text = "Edit"; - // - // copyToolStripMenuItem - // - this.copyToolStripMenuItem.Enabled = false; - this.copyToolStripMenuItem.Image = global::McBitFont.Properties.Resources.Famfamfam_Silk_Page_copy_16; - this.copyToolStripMenuItem.Name = "copyToolStripMenuItem"; - this.copyToolStripMenuItem.ShortcutKeyDisplayString = "Ctrl+C"; - this.copyToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.C))); - this.copyToolStripMenuItem.Size = new System.Drawing.Size(212, 22); - this.copyToolStripMenuItem.Text = "Copy"; - this.copyToolStripMenuItem.Click += new System.EventHandler(this.copyToolStripMenuItem_Click); - // - // pasteToolStripMenuItem - // - this.pasteToolStripMenuItem.Enabled = false; - this.pasteToolStripMenuItem.Image = global::McBitFont.Properties.Resources.Famfamfam_Silk_Page_paste_16; - this.pasteToolStripMenuItem.Name = "pasteToolStripMenuItem"; - this.pasteToolStripMenuItem.ShortcutKeyDisplayString = "Ctrl+V"; - this.pasteToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.V))); - this.pasteToolStripMenuItem.Size = new System.Drawing.Size(212, 22); - this.pasteToolStripMenuItem.Text = "Paste"; - this.pasteToolStripMenuItem.Click += new System.EventHandler(this.pasteToolStripMenuItem_Click); - // - // prependSymbolToolStripMenuItem - // - this.prependSymbolToolStripMenuItem.Enabled = false; - this.prependSymbolToolStripMenuItem.Image = global::McBitFont.Properties.Resources.action_add; - this.prependSymbolToolStripMenuItem.Name = "prependSymbolToolStripMenuItem"; - this.prependSymbolToolStripMenuItem.ShortcutKeyDisplayString = "Ctrl+Ins"; - this.prependSymbolToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Insert))); - this.prependSymbolToolStripMenuItem.Size = new System.Drawing.Size(212, 22); - this.prependSymbolToolStripMenuItem.Text = "Prepend symbol"; - this.prependSymbolToolStripMenuItem.Click += new System.EventHandler(this.prependSymbolToolStripMenuItem_Click); - // - // appendSymbolToolStripMenuItem - // - this.appendSymbolToolStripMenuItem.Enabled = false; - this.appendSymbolToolStripMenuItem.Image = global::McBitFont.Properties.Resources.action_add; - this.appendSymbolToolStripMenuItem.Name = "appendSymbolToolStripMenuItem"; - this.appendSymbolToolStripMenuItem.ShortcutKeyDisplayString = "Ctrl+End"; - this.appendSymbolToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.End))); - this.appendSymbolToolStripMenuItem.Size = new System.Drawing.Size(212, 22); - this.appendSymbolToolStripMenuItem.Text = "Append symbol"; - this.appendSymbolToolStripMenuItem.Click += new System.EventHandler(this.prependSymbolToolStripMenuItem_Click); - // - // removeSymbolToolStripMenuItem - // - this.removeSymbolToolStripMenuItem.Enabled = false; - this.removeSymbolToolStripMenuItem.Image = global::McBitFont.Properties.Resources.action_remove; - this.removeSymbolToolStripMenuItem.Name = "removeSymbolToolStripMenuItem"; - this.removeSymbolToolStripMenuItem.ShortcutKeyDisplayString = "Ctrl+Del"; - this.removeSymbolToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Delete))); - this.removeSymbolToolStripMenuItem.Size = new System.Drawing.Size(212, 22); - this.removeSymbolToolStripMenuItem.Text = "Remove symbol"; - this.removeSymbolToolStripMenuItem.Click += new System.EventHandler(this.removeSymbolToolStripMenuItem_Click); - // - // applyToolStripMenuItem - // - this.applyToolStripMenuItem.Image = global::McBitFont.Properties.Resources.action_check; - this.applyToolStripMenuItem.Name = "applyToolStripMenuItem"; - this.applyToolStripMenuItem.ShortcutKeyDisplayString = "Ctrl+Space"; - this.applyToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Space))); - this.applyToolStripMenuItem.Size = new System.Drawing.Size(212, 22); - this.applyToolStripMenuItem.Text = "Apply"; - this.applyToolStripMenuItem.Click += new System.EventHandler(this.button2_Click); - // - // toolsToolStripMenuItem - // - this.toolsToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.ClearToolStripMenuItem, - this.shiftUpToolStripMenuItem, - this.shiftDownToolStripMenuItem, - this.shiftLeftToolStripMenuItem, - this.shiftRightToolStripMenuItem, - this.invertToolStripMenuItem, - this.mirrorXToolStripMenuItem, - this.mirrorYToolStripMenuItem, - this.exportToolStripMenuItem}); - this.toolsToolStripMenuItem.Name = "toolsToolStripMenuItem"; - this.toolsToolStripMenuItem.Size = new System.Drawing.Size(47, 20); - this.toolsToolStripMenuItem.Text = "Tools"; - // - // ClearToolStripMenuItem - // - this.ClearToolStripMenuItem.Name = "ClearToolStripMenuItem"; - this.ClearToolStripMenuItem.ShortcutKeyDisplayString = "Ctrl+W"; - this.ClearToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.W))); - this.ClearToolStripMenuItem.Size = new System.Drawing.Size(197, 22); - this.ClearToolStripMenuItem.Text = "Clear canvas"; - this.ClearToolStripMenuItem.Click += new System.EventHandler(this.btnClear_Click); - // - // shiftUpToolStripMenuItem - // - this.shiftUpToolStripMenuItem.Image = global::McBitFont.Properties.Resources.arrow_top; - this.shiftUpToolStripMenuItem.Name = "shiftUpToolStripMenuItem"; - this.shiftUpToolStripMenuItem.ShortcutKeyDisplayString = "Ctrl+Up"; - this.shiftUpToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Up))); - this.shiftUpToolStripMenuItem.Size = new System.Drawing.Size(197, 22); - this.shiftUpToolStripMenuItem.Text = "Shift Up"; - this.shiftUpToolStripMenuItem.Click += new System.EventHandler(this.btnShiftUp_Click); - // - // shiftDownToolStripMenuItem - // - this.shiftDownToolStripMenuItem.Image = global::McBitFont.Properties.Resources.arrow_down; - this.shiftDownToolStripMenuItem.Name = "shiftDownToolStripMenuItem"; - this.shiftDownToolStripMenuItem.ShortcutKeyDisplayString = "Ctrl+Down"; - this.shiftDownToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Down))); - this.shiftDownToolStripMenuItem.Size = new System.Drawing.Size(197, 22); - this.shiftDownToolStripMenuItem.Text = "Shift Down"; - this.shiftDownToolStripMenuItem.Click += new System.EventHandler(this.btnShiftDown_Click); - // - // shiftLeftToolStripMenuItem - // - this.shiftLeftToolStripMenuItem.Image = global::McBitFont.Properties.Resources.arrow_back; - this.shiftLeftToolStripMenuItem.Name = "shiftLeftToolStripMenuItem"; - this.shiftLeftToolStripMenuItem.ShortcutKeyDisplayString = "Ctrl+Left"; - this.shiftLeftToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Left))); - this.shiftLeftToolStripMenuItem.Size = new System.Drawing.Size(197, 22); - this.shiftLeftToolStripMenuItem.Text = "Shift left"; - this.shiftLeftToolStripMenuItem.Click += new System.EventHandler(this.btnShiftLeft_Click); - // - // shiftRightToolStripMenuItem - // - this.shiftRightToolStripMenuItem.Image = global::McBitFont.Properties.Resources.arrow_next; - this.shiftRightToolStripMenuItem.Name = "shiftRightToolStripMenuItem"; - this.shiftRightToolStripMenuItem.ShortcutKeyDisplayString = "Ctrl+Right"; - this.shiftRightToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Right))); - this.shiftRightToolStripMenuItem.Size = new System.Drawing.Size(197, 22); - this.shiftRightToolStripMenuItem.Text = "Shift Right"; - this.shiftRightToolStripMenuItem.Click += new System.EventHandler(this.btnShiftRight_Click); - // - // invertToolStripMenuItem - // - this.invertToolStripMenuItem.Image = global::McBitFont.Properties.Resources.Ionic_Ionicons_Invert_mode_outline_16; - this.invertToolStripMenuItem.Name = "invertToolStripMenuItem"; - this.invertToolStripMenuItem.ShortcutKeyDisplayString = "Ctrl+I"; - this.invertToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.I))); - this.invertToolStripMenuItem.Size = new System.Drawing.Size(197, 22); - this.invertToolStripMenuItem.Text = "Invert"; - this.invertToolStripMenuItem.Click += new System.EventHandler(this.btnInvert_Click); - // - // mirrorXToolStripMenuItem - // - this.mirrorXToolStripMenuItem.Image = global::McBitFont.Properties.Resources.Famfamfam_Silk_Shape_flip_horizontal_16; - this.mirrorXToolStripMenuItem.Name = "mirrorXToolStripMenuItem"; - this.mirrorXToolStripMenuItem.ShortcutKeyDisplayString = "Ctrl+X"; - this.mirrorXToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.X))); - this.mirrorXToolStripMenuItem.Size = new System.Drawing.Size(197, 22); - this.mirrorXToolStripMenuItem.Text = "Mirror X"; - this.mirrorXToolStripMenuItem.Click += new System.EventHandler(this.btnMirrorX_Click); - // - // mirrorYToolStripMenuItem - // - this.mirrorYToolStripMenuItem.Image = global::McBitFont.Properties.Resources.Famfamfam_Silk_Shape_flip_vertical_16; - this.mirrorYToolStripMenuItem.Name = "mirrorYToolStripMenuItem"; - this.mirrorYToolStripMenuItem.ShortcutKeyDisplayString = "Ctrl+Y"; - this.mirrorYToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Y))); - this.mirrorYToolStripMenuItem.Size = new System.Drawing.Size(197, 22); - this.mirrorYToolStripMenuItem.Text = "Mirror Y"; - this.mirrorYToolStripMenuItem.Click += new System.EventHandler(this.btnMirrorY_Click); + importImageToolStripMenuItem.Image = Properties.Resources.z_folder_image; + importImageToolStripMenuItem.Name = "importImageToolStripMenuItem"; + importImageToolStripMenuItem.Size = new System.Drawing.Size(224, 22); + importImageToolStripMenuItem.Text = "Import image"; + importImageToolStripMenuItem.ToolTipText = "Import image from a file"; + importImageToolStripMenuItem.Click += importImageToolStripMenuItem_Click; // // exportToolStripMenuItem // - this.exportToolStripMenuItem.Name = "exportToolStripMenuItem"; - this.exportToolStripMenuItem.ShortcutKeyDisplayString = "Ctrl+E"; - this.exportToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.E))); - this.exportToolStripMenuItem.Size = new System.Drawing.Size(197, 22); - this.exportToolStripMenuItem.Text = "Export"; - this.exportToolStripMenuItem.Click += new System.EventHandler(this.button1_Click); + exportToolStripMenuItem.Image = Properties.Resources.z_export; + exportToolStripMenuItem.Name = "exportToolStripMenuItem"; + exportToolStripMenuItem.ShortcutKeyDisplayString = ""; + exportToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.E; + exportToolStripMenuItem.Size = new System.Drawing.Size(224, 22); + exportToolStripMenuItem.Text = "Export"; + exportToolStripMenuItem.ToolTipText = "Configure and export data"; + exportToolStripMenuItem.Click += button1_Click; + // + // exitToolStripMenuItem + // + exitToolStripMenuItem.Image = Properties.Resources.Famfamfam_Silk_Door_out_16; + exitToolStripMenuItem.Name = "exitToolStripMenuItem"; + exitToolStripMenuItem.ShortcutKeyDisplayString = "Alt+X"; + exitToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.Alt | System.Windows.Forms.Keys.X; + exitToolStripMenuItem.Size = new System.Drawing.Size(224, 22); + exitToolStripMenuItem.Text = "Exit"; + exitToolStripMenuItem.ToolTipText = "Quit application"; + exitToolStripMenuItem.Click += exitToolStripMenuItem_Click; + // + // editToolStripMenuItem + // + editToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { undoToolStripMenuItem, redoToolStripMenuItem, copyToolStripMenuItem, pasteToolStripMenuItem, selectToolStripMenuItem }); + editToolStripMenuItem.Name = "editToolStripMenuItem"; + editToolStripMenuItem.Size = new System.Drawing.Size(39, 20); + editToolStripMenuItem.Text = "Edit"; + editToolStripMenuItem.DropDownOpening += editToolStripMenuItem_DropDownOpening; + // + // undoToolStripMenuItem + // + 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(144, 22); + undoToolStripMenuItem.Text = "Undo"; + undoToolStripMenuItem.ToolTipText = "Undo last canvas change"; + undoToolStripMenuItem.Click += undoToolStripMenuItem_Click; + // + // redoToolStripMenuItem + // + 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(144, 22); + redoToolStripMenuItem.Text = "Redo"; + redoToolStripMenuItem.ToolTipText = "Redo canvas change"; + redoToolStripMenuItem.Click += redoToolStripMenuItem_Click; + // + // copyToolStripMenuItem + // + copyToolStripMenuItem.Enabled = false; + copyToolStripMenuItem.Image = Properties.Resources.Famfamfam_Silk_Page_copy_16; + copyToolStripMenuItem.Name = "copyToolStripMenuItem"; + copyToolStripMenuItem.ShortcutKeyDisplayString = ""; + copyToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.C; + copyToolStripMenuItem.Size = new System.Drawing.Size(144, 22); + copyToolStripMenuItem.Text = "Copy"; + copyToolStripMenuItem.ToolTipText = "Copy current symbol to clipboard"; + copyToolStripMenuItem.Click += copyToolStripMenuItem_Click; + // + // pasteToolStripMenuItem + // + pasteToolStripMenuItem.Enabled = false; + pasteToolStripMenuItem.Image = Properties.Resources.Famfamfam_Silk_Page_paste_16; + pasteToolStripMenuItem.Name = "pasteToolStripMenuItem"; + pasteToolStripMenuItem.ShortcutKeyDisplayString = ""; + pasteToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.V; + pasteToolStripMenuItem.Size = new System.Drawing.Size(144, 22); + pasteToolStripMenuItem.Text = "Paste"; + pasteToolStripMenuItem.ToolTipText = "Paste from clipboard to current symbol"; + pasteToolStripMenuItem.Click += pasteToolStripMenuItem_Click; + // + // selectToolStripMenuItem + // + selectToolStripMenuItem.Image = Properties.Resources.fam_rectt; + selectToolStripMenuItem.Name = "selectToolStripMenuItem"; + selectToolStripMenuItem.Size = new System.Drawing.Size(144, 22); + selectToolStripMenuItem.Text = "Select"; + selectToolStripMenuItem.Click += selectToolStripMenuItem_Click; + // + // fontToolStripMenuItem + // + fontToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { makeVarWidthToolStripMenuItem, prependSymbolToolStripMenuItem, appendSymbolToolStripMenuItem, removeSymbolToolStripMenuItem, removeBeforeToolStripMenuItem, removeAfterToolStripMenuItem, CodeShiftToolStripMenuItem }); + fontToolStripMenuItem.Name = "fontToolStripMenuItem"; + fontToolStripMenuItem.Size = new System.Drawing.Size(43, 20); + fontToolStripMenuItem.Text = "Font"; + // + // makeVarWidthToolStripMenuItem + // + makeVarWidthToolStripMenuItem.Image = Properties.Resources.z_asterisk; + makeVarWidthToolStripMenuItem.Name = "makeVarWidthToolStripMenuItem"; + makeVarWidthToolStripMenuItem.Size = new System.Drawing.Size(215, 22); + makeVarWidthToolStripMenuItem.Text = "Make Variable Width"; + makeVarWidthToolStripMenuItem.ToolTipText = "Make Font Variable width one"; + makeVarWidthToolStripMenuItem.Visible = false; + makeVarWidthToolStripMenuItem.Click += makeVarWidthToolStripMenuItem_Click; + // + // prependSymbolToolStripMenuItem + // + prependSymbolToolStripMenuItem.Enabled = false; + prependSymbolToolStripMenuItem.Image = Properties.Resources.add; + prependSymbolToolStripMenuItem.Name = "prependSymbolToolStripMenuItem"; + prependSymbolToolStripMenuItem.ShortcutKeyDisplayString = "Ctrl+Ins"; + prependSymbolToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Insert; + prependSymbolToolStripMenuItem.Size = new System.Drawing.Size(215, 22); + prependSymbolToolStripMenuItem.Text = "Prepend symbol"; + prependSymbolToolStripMenuItem.ToolTipText = "Add a symbol to the beginning of the sequence"; + prependSymbolToolStripMenuItem.Click += prependSymbolToolStripMenuItem_Click; + // + // appendSymbolToolStripMenuItem + // + appendSymbolToolStripMenuItem.Enabled = false; + appendSymbolToolStripMenuItem.Image = Properties.Resources.add; + appendSymbolToolStripMenuItem.Name = "appendSymbolToolStripMenuItem"; + appendSymbolToolStripMenuItem.ShortcutKeyDisplayString = ""; + appendSymbolToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.End; + appendSymbolToolStripMenuItem.Size = new System.Drawing.Size(215, 22); + appendSymbolToolStripMenuItem.Text = "Append symbol"; + appendSymbolToolStripMenuItem.ToolTipText = "Add a symbol to the end of the sequence"; + appendSymbolToolStripMenuItem.Click += prependSymbolToolStripMenuItem_Click; + // + // removeSymbolToolStripMenuItem + // + removeSymbolToolStripMenuItem.Enabled = false; + removeSymbolToolStripMenuItem.Image = Properties.Resources.delete; + removeSymbolToolStripMenuItem.Name = "removeSymbolToolStripMenuItem"; + removeSymbolToolStripMenuItem.ShortcutKeyDisplayString = ""; + removeSymbolToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Delete; + removeSymbolToolStripMenuItem.Size = new System.Drawing.Size(215, 22); + removeSymbolToolStripMenuItem.Text = "Remove symbol"; + removeSymbolToolStripMenuItem.ToolTipText = "Remove current symbol (works only for first or last symbol in the sequence)"; + removeSymbolToolStripMenuItem.Click += removeSymbolToolStripMenuItem_Click; + // + // removeBeforeToolStripMenuItem + // + removeBeforeToolStripMenuItem.Enabled = false; + removeBeforeToolStripMenuItem.Image = Properties.Resources.delete; + removeBeforeToolStripMenuItem.Name = "removeBeforeToolStripMenuItem"; + removeBeforeToolStripMenuItem.Size = new System.Drawing.Size(215, 22); + removeBeforeToolStripMenuItem.Text = "Remove all before selected"; + removeBeforeToolStripMenuItem.ToolTipText = "Remove all symbols before current one"; + removeBeforeToolStripMenuItem.Click += removeBeforeToolStripMenuItem_Click; + // + // removeAfterToolStripMenuItem + // + removeAfterToolStripMenuItem.Enabled = false; + removeAfterToolStripMenuItem.Image = Properties.Resources.delete; + removeAfterToolStripMenuItem.Name = "removeAfterToolStripMenuItem"; + removeAfterToolStripMenuItem.Size = new System.Drawing.Size(215, 22); + removeAfterToolStripMenuItem.Text = "Remove all after selected"; + removeAfterToolStripMenuItem.ToolTipText = "Remove all symbols after current one"; + removeAfterToolStripMenuItem.Click += removeAfterToolStripMenuItem_Click; + // + // CodeShiftToolStripMenuItem + // + CodeShiftToolStripMenuItem.Image = Properties.Resources.z_align_center; + CodeShiftToolStripMenuItem.Name = "CodeShiftToolStripMenuItem"; + CodeShiftToolStripMenuItem.Size = new System.Drawing.Size(215, 22); + CodeShiftToolStripMenuItem.Text = "Code shift"; + CodeShiftToolStripMenuItem.ToolTipText = "Shift the font on the code line"; + CodeShiftToolStripMenuItem.Click += CodeShiftToolStripMenuItem_Click; + // + // canvasToolStripMenuItem + // + canvasToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { ClearToolStripMenuItem, FillToolStripMenuItem, shiftUpToolStripMenuItem, shiftDownToolStripMenuItem, shiftLeftToolStripMenuItem, shiftRightToolStripMenuItem, invertToolStripMenuItem, mirrorXToolStripMenuItem, mirrorYToolStripMenuItem, applyToolStripMenuItem }); + canvasToolStripMenuItem.Name = "canvasToolStripMenuItem"; + canvasToolStripMenuItem.Size = new System.Drawing.Size(57, 20); + canvasToolStripMenuItem.Text = "Canvas"; + // + // ClearToolStripMenuItem + // + ClearToolStripMenuItem.Image = Properties.Resources.Canvas_Clear; + ClearToolStripMenuItem.Name = "ClearToolStripMenuItem"; + ClearToolStripMenuItem.ShortcutKeyDisplayString = ""; + ClearToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.W; + ClearToolStripMenuItem.Size = new System.Drawing.Size(197, 22); + ClearToolStripMenuItem.Text = "Clear canvas"; + ClearToolStripMenuItem.ToolTipText = "Paint canvas white"; + ClearToolStripMenuItem.Click += btnClear_Click; + // + // FillToolStripMenuItem + // + FillToolStripMenuItem.Image = Properties.Resources.Canvas_Fill; + FillToolStripMenuItem.Name = "FillToolStripMenuItem"; + FillToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.B; + FillToolStripMenuItem.Size = new System.Drawing.Size(197, 22); + FillToolStripMenuItem.Text = "Fill canvas"; + FillToolStripMenuItem.ToolTipText = "Paint canvas black"; + FillToolStripMenuItem.Click += btnFill_Click; + // + // shiftUpToolStripMenuItem + // + shiftUpToolStripMenuItem.Image = Properties.Resources.z_uo; + shiftUpToolStripMenuItem.Name = "shiftUpToolStripMenuItem"; + shiftUpToolStripMenuItem.ShortcutKeyDisplayString = ""; + shiftUpToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Up; + shiftUpToolStripMenuItem.Size = new System.Drawing.Size(197, 22); + shiftUpToolStripMenuItem.Text = "Shift Up"; + shiftUpToolStripMenuItem.ToolTipText = "Shift pixels Up"; + shiftUpToolStripMenuItem.Click += btnShiftUp_Click; + // + // shiftDownToolStripMenuItem + // + shiftDownToolStripMenuItem.Image = Properties.Resources.z_down; + shiftDownToolStripMenuItem.Name = "shiftDownToolStripMenuItem"; + shiftDownToolStripMenuItem.ShortcutKeyDisplayString = ""; + shiftDownToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Down; + shiftDownToolStripMenuItem.Size = new System.Drawing.Size(197, 22); + shiftDownToolStripMenuItem.Text = "Shift Down"; + shiftDownToolStripMenuItem.ToolTipText = "Shift pixels Down"; + shiftDownToolStripMenuItem.Click += btnShiftDown_Click; + // + // shiftLeftToolStripMenuItem + // + shiftLeftToolStripMenuItem.Image = Properties.Resources.z_left; + shiftLeftToolStripMenuItem.Name = "shiftLeftToolStripMenuItem"; + shiftLeftToolStripMenuItem.ShortcutKeyDisplayString = ""; + shiftLeftToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Left; + shiftLeftToolStripMenuItem.Size = new System.Drawing.Size(197, 22); + shiftLeftToolStripMenuItem.Text = "Shift left"; + shiftLeftToolStripMenuItem.ToolTipText = "Shift pixels Left"; + shiftLeftToolStripMenuItem.Click += btnShiftLeft_Click; + // + // shiftRightToolStripMenuItem + // + shiftRightToolStripMenuItem.Image = Properties.Resources.z_right; + shiftRightToolStripMenuItem.Name = "shiftRightToolStripMenuItem"; + shiftRightToolStripMenuItem.ShortcutKeyDisplayString = ""; + shiftRightToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Right; + shiftRightToolStripMenuItem.Size = new System.Drawing.Size(197, 22); + shiftRightToolStripMenuItem.Text = "Shift Right"; + shiftRightToolStripMenuItem.ToolTipText = "Shift pixels Right"; + shiftRightToolStripMenuItem.Click += btnShiftRight_Click; + // + // invertToolStripMenuItem + // + invertToolStripMenuItem.Image = Properties.Resources.z_contrast; + invertToolStripMenuItem.Name = "invertToolStripMenuItem"; + invertToolStripMenuItem.ShortcutKeyDisplayString = ""; + invertToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.I; + invertToolStripMenuItem.Size = new System.Drawing.Size(197, 22); + invertToolStripMenuItem.Text = "Invert"; + invertToolStripMenuItem.ToolTipText = "Invert pixel colors"; + invertToolStripMenuItem.Click += btnInvert_Click; + // + // mirrorXToolStripMenuItem + // + mirrorXToolStripMenuItem.Image = Properties.Resources.Famfamfam_Silk_Shape_flip_horizontal_16; + mirrorXToolStripMenuItem.Name = "mirrorXToolStripMenuItem"; + mirrorXToolStripMenuItem.ShortcutKeyDisplayString = ""; + mirrorXToolStripMenuItem.Size = new System.Drawing.Size(197, 22); + mirrorXToolStripMenuItem.Text = "Mirror X"; + mirrorXToolStripMenuItem.ToolTipText = "Mirror by X axis (horizontal)"; + mirrorXToolStripMenuItem.Click += btnMirrorX_Click; + // + // mirrorYToolStripMenuItem + // + mirrorYToolStripMenuItem.Image = Properties.Resources.Famfamfam_Silk_Shape_flip_vertical_16; + mirrorYToolStripMenuItem.Name = "mirrorYToolStripMenuItem"; + mirrorYToolStripMenuItem.ShortcutKeyDisplayString = ""; + mirrorYToolStripMenuItem.Size = new System.Drawing.Size(197, 22); + mirrorYToolStripMenuItem.Text = "Mirror Y"; + mirrorYToolStripMenuItem.ToolTipText = "Mirror by Y axis (vertical)"; + mirrorYToolStripMenuItem.Click += btnMirrorY_Click; + // + // applyToolStripMenuItem + // + applyToolStripMenuItem.Image = Properties.Resources.z_tick; + applyToolStripMenuItem.Name = "applyToolStripMenuItem"; + applyToolStripMenuItem.ShortcutKeyDisplayString = "Ctrl+Space"; + applyToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Space; + applyToolStripMenuItem.Size = new System.Drawing.Size(197, 22); + applyToolStripMenuItem.Text = "Apply"; + applyToolStripMenuItem.ToolTipText = "Apply canvas changes"; + applyToolStripMenuItem.Click += button2_Click; // // aboutToolStripMenuItem // - this.aboutToolStripMenuItem.Name = "aboutToolStripMenuItem"; - this.aboutToolStripMenuItem.Size = new System.Drawing.Size(52, 20); - this.aboutToolStripMenuItem.Text = "About"; - this.aboutToolStripMenuItem.Click += new System.EventHandler(this.aboutToolStripMenuItem_Click); + aboutToolStripMenuItem.Name = "aboutToolStripMenuItem"; + aboutToolStripMenuItem.Size = new System.Drawing.Size(52, 20); + aboutToolStripMenuItem.Text = "About"; + aboutToolStripMenuItem.Click += aboutToolStripMenuItem_Click; // // dlgSave // - this.dlgSave.DefaultExt = "mbf"; - this.dlgSave.Filter = "McBitFont files|*.mbf|McBitFont new format|*.mbfont|All files|*.*"; + dlgSave.DefaultExt = "mbf"; + dlgSave.Filter = "McBitFont files|*.mbfont|All files|*.*"; // // dlgOpen // - this.dlgOpen.DefaultExt = "mbf"; - this.dlgOpen.Filter = "McBitFont files|*.mbf|All files|*.*"; + dlgOpen.DefaultExt = "mbf"; + dlgOpen.Filter = "McBitFont files|*.mbfont|All files|*.*"; // // btnBaseline // - this.btnBaseline.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.btnBaseline.Location = new System.Drawing.Point(615, 80); - this.btnBaseline.Name = "btnBaseline"; - this.btnBaseline.Size = new System.Drawing.Size(75, 23); - this.btnBaseline.TabIndex = 18; - this.btnBaseline.Text = "Baseline"; - this.toolTip1.SetToolTip(this.btnBaseline, "Set irtual base line for the font"); - this.btnBaseline.UseVisualStyleBackColor = true; - this.btnBaseline.Click += new System.EventHandler(this.btnBaseline_Click); + btnBaseline.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right; + btnBaseline.Image = Properties.Resources.fam_base; + btnBaseline.ImageAlign = System.Drawing.ContentAlignment.MiddleRight; + btnBaseline.Location = new System.Drawing.Point(718, 92); + 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.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText; + toolTip1.SetToolTip(btnBaseline, "Set irtual base line for the font"); + btnBaseline.UseVisualStyleBackColor = true; + btnBaseline.Click += btnBaseline_Click; // // toolTip1 // - this.toolTip1.AutoPopDelay = 10000; - this.toolTip1.InitialDelay = 500; - this.toolTip1.ReshowDelay = 100; + toolTip1.AutoPopDelay = 10000; + toolTip1.InitialDelay = 500; + toolTip1.ReshowDelay = 100; // // chkLeftSide // - this.chkLeftSide.AutoSize = true; - this.chkLeftSide.Location = new System.Drawing.Point(712, 29); - this.chkLeftSide.Name = "chkLeftSide"; - this.chkLeftSide.Size = new System.Drawing.Size(66, 17); - this.chkLeftSide.TabIndex = 19; - this.chkLeftSide.Text = "Left side"; - this.toolTip1.SetToolTip(this.chkLeftSide, "Width changes will be made on Left/Right side"); - this.chkLeftSide.UseVisualStyleBackColor = true; + chkLeftSide.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right; + chkLeftSide.AutoSize = true; + chkLeftSide.Location = new System.Drawing.Point(831, 33); + chkLeftSide.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + chkLeftSide.Name = "chkLeftSide"; + chkLeftSide.Size = new System.Drawing.Size(70, 19); + chkLeftSide.TabIndex = 19; + chkLeftSide.Text = "Left side"; + toolTip1.SetToolTip(chkLeftSide, "Width changes will be made on Left/Right side"); + chkLeftSide.UseVisualStyleBackColor = true; // // chkTopSide // - this.chkTopSide.AutoSize = true; - this.chkTopSide.Location = new System.Drawing.Point(712, 50); - this.chkTopSide.Name = "chkTopSide"; - this.chkTopSide.Size = new System.Drawing.Size(67, 17); - this.chkTopSide.TabIndex = 20; - this.chkTopSide.Text = "Top side"; - this.toolTip1.SetToolTip(this.chkTopSide, "Height changes will be made on Top/Bottom side"); - this.chkTopSide.UseVisualStyleBackColor = true; + chkTopSide.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right; + chkTopSide.AutoSize = true; + chkTopSide.Location = new System.Drawing.Point(831, 58); + chkTopSide.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + chkTopSide.Name = "chkTopSide"; + chkTopSide.Size = new System.Drawing.Size(70, 19); + chkTopSide.TabIndex = 20; + chkTopSide.Text = "Top side"; + toolTip1.SetToolTip(chkTopSide, "Height changes will be made on Top/Bottom side"); + chkTopSide.UseVisualStyleBackColor = true; // - // openDEVToolStripMenuItem + // chkHexCodes // - this.openDEVToolStripMenuItem.Name = "openDEVToolStripMenuItem"; - this.openDEVToolStripMenuItem.Size = new System.Drawing.Size(184, 22); - this.openDEVToolStripMenuItem.Text = "Open DEV"; - this.openDEVToolStripMenuItem.Visible = false; - this.openDEVToolStripMenuItem.Click += new System.EventHandler(this.openDEVToolStripMenuItem_Click); + chkHexCodes.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right; + chkHexCodes.AutoSize = true; + chkHexCodes.Location = new System.Drawing.Point(618, 155); + chkHexCodes.Name = "chkHexCodes"; + chkHexCodes.Size = new System.Drawing.Size(95, 19); + chkHexCodes.TabIndex = 22; + chkHexCodes.Text = "Codes in Hex"; + toolTip1.SetToolTip(chkHexCodes, "Option to show symbol codes in Hexadecimal"); + chkHexCodes.UseVisualStyleBackColor = true; + chkHexCodes.CheckedChanged += chkHexCodes_CheckedChanged; + // + // chkRectSelect + // + chkRectSelect.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right; + chkRectSelect.Appearance = System.Windows.Forms.Appearance.Button; + chkRectSelect.Image = Properties.Resources.fam_rectt; + chkRectSelect.ImageAlign = System.Drawing.ContentAlignment.MiddleRight; + chkRectSelect.Location = new System.Drawing.Point(620, 92); + chkRectSelect.Name = "chkRectSelect"; + chkRectSelect.Size = new System.Drawing.Size(74, 27); + chkRectSelect.TabIndex = 23; + chkRectSelect.Text = " Select"; + chkRectSelect.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + chkRectSelect.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText; + toolTip1.SetToolTip(chkRectSelect, "Turn on/off rectangle selection"); + chkRectSelect.UseVisualStyleBackColor = true; + chkRectSelect.CheckedChanged += chkRectSelect_CheckedChanged; + // + // label3 + // + label3.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right; + label3.AutoSize = true; + label3.Location = new System.Drawing.Point(615, 123); + label3.Name = "label3"; + label3.Size = new System.Drawing.Size(45, 15); + label3.TabIndex = 21; + label3.Text = "Cursor:"; // // MainForm // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(784, 561); - this.Controls.Add(this.chkTopSide); - this.Controls.Add(this.chkLeftSide); - this.Controls.Add(this.btnBaseline); - this.Controls.Add(this.btnApply); - this.Controls.Add(this.btnExport); - this.Controls.Add(this.label5); - this.Controls.Add(this.vScroll); - this.Controls.Add(this.hScroll); - this.Controls.Add(this.miniList); - this.Controls.Add(this.panel1); - this.Controls.Add(this.label4); - this.Controls.Add(this.cbZoom); - this.Controls.Add(this.lblType); - this.Controls.Add(this.label2); - this.Controls.Add(this.label1); - this.Controls.Add(this.nudY); - this.Controls.Add(this.nudX); - this.Controls.Add(this.dotPanel); - this.Controls.Add(this.menuStrip1); - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); - this.MainMenuStrip = this.menuStrip1; - this.MinimumSize = new System.Drawing.Size(800, 600); - this.Name = "MainForm"; - this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; - this.Text = "McBitFont"; - this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.MainForm_FormClosing); - this.Load += new System.EventHandler(this.Form1_Load); - ((System.ComponentModel.ISupportInitialize)(this.nudX)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.nudY)).EndInit(); - this.panel1.ResumeLayout(false); - this.menuStrip1.ResumeLayout(false); - this.menuStrip1.PerformLayout(); - this.ResumeLayout(false); - this.PerformLayout(); + AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); + AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + ClientSize = new System.Drawing.Size(915, 647); + Controls.Add(chkRectSelect); + Controls.Add(chkHexCodes); + Controls.Add(label3); + Controls.Add(chkTopSide); + Controls.Add(chkLeftSide); + Controls.Add(btnBaseline); + Controls.Add(btnApply); + Controls.Add(btnExport); + Controls.Add(lblCoords); + Controls.Add(vScroll); + Controls.Add(hScroll); + Controls.Add(miniList); + Controls.Add(panel1); + Controls.Add(label4); + Controls.Add(cbZoom); + Controls.Add(lblType); + Controls.Add(label2); + Controls.Add(label1); + Controls.Add(nudY); + Controls.Add(nudX); + Controls.Add(dotPanel); + Controls.Add(menuStrip1); + Icon = (System.Drawing.Icon)resources.GetObject("$this.Icon"); + MainMenuStrip = menuStrip1; + Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + MinimumSize = new System.Drawing.Size(931, 686); + Name = "MainForm"; + StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + Text = "McBitFont"; + FormClosing += MainForm_FormClosing; + Load += Form1_Load; + ((System.ComponentModel.ISupportInitialize)nudX).EndInit(); + ((System.ComponentModel.ISupportInitialize)nudY).EndInit(); + panel1.ResumeLayout(false); + cmMinilist.ResumeLayout(false); + menuStrip1.ResumeLayout(false); + menuStrip1.PerformLayout(); + ResumeLayout(false); + PerformLayout(); } @@ -810,7 +1043,7 @@ private System.Windows.Forms.Button btnApply; private System.Windows.Forms.HScrollBar hScroll; private System.Windows.Forms.VScrollBar vScroll; - private System.Windows.Forms.Label label5; + private System.Windows.Forms.Label lblCoords; private System.Windows.Forms.MenuStrip menuStrip1; private System.Windows.Forms.ToolStripMenuItem fileToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem newToolStripMenuItem; @@ -819,7 +1052,7 @@ private System.Windows.Forms.ToolStripMenuItem exitToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem editToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem removeSymbolToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem toolsToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem canvasToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem shiftUpToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem shiftDownToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem shiftLeftToolStripMenuItem; @@ -843,8 +1076,29 @@ private System.Windows.Forms.ToolStripMenuItem ClearToolStripMenuItem; private System.Windows.Forms.CheckBox chkLeftSide; private System.Windows.Forms.CheckBox chkTopSide; - private System.Windows.Forms.ToolStripMenuItem saveDEVToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem openDEVToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem removeBeforeToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem removeAfterToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem makeVarWidthToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem undoToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem redoToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem fontToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem CodeShiftToolStripMenuItem; + private System.Windows.Forms.ContextMenuStrip cmMinilist; + private System.Windows.Forms.ToolStripMenuItem tsmiRemoveBefore; + private System.Windows.Forms.ToolStripMenuItem tsmiRemoveAfter; + private System.Windows.Forms.ToolStripMenuItem tsmiRemoveSymbol; + private System.Windows.Forms.ToolStripMenuItem tsmiPrepensSymbol; + private System.Windows.Forms.ToolStripMenuItem tsmiAppendSymbol; + private System.Windows.Forms.ToolStripMenuItem tsmiCodeShift; + private System.Windows.Forms.ToolStripMenuItem tsmiMakeVarWidth; + private System.Windows.Forms.ToolStripMenuItem importImageToolStripMenuItem; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.CheckBox chkHexCodes; + private System.Windows.Forms.Button btnFill; + private System.Windows.Forms.ToolStripMenuItem FillToolStripMenuItem; + private System.Windows.Forms.CheckBox chkRectSelect; + private System.Windows.Forms.ToolStripMenuItem selectToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem importTextToolStripMenuItem1; } } diff --git a/McBitFont/Form1.cs b/McBitFont/Form1.cs index 4bc2635..a9b011f 100644 --- a/McBitFont/Form1.cs +++ b/McBitFont/Form1.cs @@ -1,21 +1,13 @@ using MessagePack; using System; using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Diagnostics; using System.Drawing; using System.Drawing.Drawing2D; using System.IO; using System.Linq; -using System.Reflection; using System.Runtime.InteropServices; -using System.Runtime.InteropServices.ComTypes; -using System.Runtime.Serialization.Formatters.Binary; using System.Text; -using System.Threading.Tasks; using System.Windows.Forms; -using System.Windows.Forms.VisualStyles; namespace McBitFont { @@ -56,36 +48,48 @@ namespace McBitFont { private FrameMiniature f; public List frames = new List(); + private CanvasHistory history = new(); private int cellSize = 10; public int dotWidth, dotHeight; private int pixelOffset = 5; private int gap; private int w, h; public bool monospaced = false; - bool modified = false; - bool prjModified = false; - public const string version = "1.7"; + private bool modified = false; + private bool prjModified = false; + public const string version = "2.0"; public string prjName = "Untitled"; public string prjFileName = ""; - public int codepage = 1251; + private int codepage = 1251; private FrameMiniature fbuf; private bool fbuffer = false; - public int baseline = 0; - public bool set_base = false; + private int baseline = 0; + private bool set_base = false; + private Point selection1, selection2; + public MainForm() { InitializeComponent(); - this.dotPanel.MouseWheel += new MouseEventHandler(this.dotPanel_MouseWheel); + this.dotPanel.MouseWheel += new MouseEventHandler(this.DotPanel_MouseWheel); + } + + private void SetNewWH() { + w = pixelOffset + dotWidth * (cellSize + gap); + h = pixelOffset + dotHeight * (cellSize + gap); } private void Form1_Load(object sender, EventArgs e) { lblType.Text = monospaced ? "Monospaced" : "Variable width / Single"; - dotWidth = (int)nudX.Value; + tsmiMakeVarWidth.Visible = monospaced; + makeVarWidthToolStripMenuItem.Visible = monospaced; + dotWidth = (int)nudX.Value; dotHeight = (int)nudY.Value; + selection1 = new Point(0, 0); + selection2 = new Point(dotWidth - 1, dotHeight - 1); + gap = (cellSize < 5) ? 0 : 1; - w = pixelOffset + dotWidth * (cellSize + gap); - h = pixelOffset + dotHeight * (cellSize + gap); + SetNewWH(); cbZoom.SelectedIndex = 3; @@ -96,40 +100,47 @@ namespace McBitFont { miniList.Refresh(); miniList.Items[0].Selected = true; miniList.Select(); - f = copyFrame(frames.Find(x => x.code == 0)); + f = CopyFrame(frames.Find(x => x.code == 0)); - ListViewItem_SetSpacing(miniList, 50 + 2, 50 + 22); + ListViewItem_SetSpacing(miniList, 50 + 1, 50 + 22); - this.Text = "McBitFont " + version + " - " + prjName; + SetWindowCap(); fbuf = new FrameMiniature(0, dotWidth, dotHeight); // Chek for arguments if (Environment.GetCommandLineArgs().Length > 1) { - loadProject(Environment.GetCommandLineArgs()[1]); + LoadProject(Environment.GetCommandLineArgs()[1]); } + lblType.Text = monospaced ? "Monospaced" : "Variable width / Single"; + tsmiMakeVarWidth.Visible = monospaced; + makeVarWidthToolStripMenuItem.Visible = monospaced; + tsmiCodeShift.Visible = frames.Count > 1; + CodeShiftToolStripMenuItem.Visible = frames.Count > 1; + + Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); } [DllImport("user32.dll")] public static extern int SendMessage(IntPtr hWnd, int msg, IntPtr wParam, IntPtr lParam); - - public int MakeLong(short lowPart, short highPart) { + + public static int MakeLong(short lowPart, short highPart) { return (int)(((ushort)lowPart) | (uint)(highPart << 16)); } - FrameMiniature copyFrame(FrameMiniature frame) { + private static FrameMiniature CopyFrame(FrameMiniature frame) { var ff = new FrameMiniature(frame.code, frame.width, frame.height); Array.Copy(frame.data, ff.data, frame.data.Length); return ff; } - public void ListViewItem_SetSpacing(ListView listview, short leftPadding, short topPadding) { + public static void ListViewItem_SetSpacing(ListView listview, short leftPadding, short topPadding) { const int LVM_FIRST = 0x1000; const int LVM_SETICONSPACING = LVM_FIRST + 53; SendMessage(listview.Handle, LVM_SETICONSPACING, IntPtr.Zero, (IntPtr)MakeLong(leftPadding, topPadding)); } - private void dotPanel_MouseWheel(object sender, MouseEventArgs e) { + private void DotPanel_MouseWheel(object sender, MouseEventArgs e) { int t = e.Delta / 120; if (e.Delta == 0) return; if (ModifierKeys.HasFlag(Keys.Control)) { @@ -155,39 +166,48 @@ namespace McBitFont { } private void nudX_ValueChanged(object sender, EventArgs e) { + Cursor.Current = Cursors.WaitCursor; if (monospaced) { Bitmap bmp; for (int i = 0; i < frames.Count; i++) { - frames[i] = frameResize(frames[i], (int)nudX.Value, dotHeight); - bmp = getMiniPictue(frames[i]); + frames[i] = FrameResize(frames[i], (int)nudX.Value, 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; } - } else { - if (nudX.Focused) modified = true; + prjModified = true; } - prjModified = true; - dotResize((int)nudX.Value, dotHeight); + if (nudX.Focused) { + modified = true; + } + + DotResize((int)nudX.Value, dotHeight); + Cursor.Current = Cursors.Default; } private void nudY_ValueChanged(object sender, EventArgs e) { + Cursor.Current = Cursors.WaitCursor; Bitmap bmp; for (int i = 0; i < frames.Count; i++) { - frames[i] = frameResize(frames[i], frames[i].width, (int)nudY.Value); - bmp = getMiniPictue(frames[i]); + frames[i] = FrameResize(frames[i], frames[i].width, (int)nudY.Value); + 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; } - if (nudY.Focused) modified = true; - prjModified = true; - dotResize(dotWidth, (int)nudY.Value); + if (nudY.Focused) { + modified = true; + prjModified = true; + } + + DotResize(dotWidth, (int)nudY.Value); + Cursor.Current = Cursors.Default; } - private FrameMiniature frameResize(FrameMiniature ff, int neww, int newh) { + private FrameMiniature FrameResize(FrameMiniature ff, int neww, int newh) { int oldw = ff.width; int oldh = ff.height; int di = 0, dj = 0; @@ -205,9 +225,9 @@ namespace McBitFont { ff.width = neww; ff.height = newh; t = new bool[neww, newh]; - for (int i=0; i= 0 && j+dj >= 0) t[i, j] = ff.data[i + di, j + dj]; + for (int i = 0; i < imax; i++) { + for (int j = 0; j < jmax; j++) { + if (i + di >= 0 && j + dj >= 0) t[i, j] = ff.data[i + di, j + dj]; } } ff.data = t; @@ -215,21 +235,24 @@ namespace McBitFont { return ff; } - private void dotResize(int ww, int hh) { - f = frameResize(f, ww, hh); + private void DotResize(int ww, int hh) { + f = FrameResize(f, ww, hh); dotWidth = ww; dotHeight = hh; - w = pixelOffset + dotWidth * (cellSize + gap); - h = pixelOffset + dotHeight * (cellSize + gap); + if (selection2.X > dotWidth - 1) selection2.X = dotWidth - 1; + if (selection2.Y > dotHeight - 1) selection2.Y = dotHeight - 1; + SetNewWH(); cbZoom_SelectedIndexChanged(cbZoom, null); + + // Re-create history object + history = new CanvasHistory(); } private void cbZoom_SelectedIndexChanged(object sender, EventArgs e) { cellSize = Convert.ToInt32(cbZoom.Text); gap = (cellSize < 5) ? 0 : 1; - w = pixelOffset + dotWidth * (cellSize + gap); - h = pixelOffset + dotHeight * (cellSize + gap); + SetNewWH(); if (w <= dotPanel.Width) { hScroll.Enabled = false; hScroll.Value = 0; @@ -238,7 +261,7 @@ namespace McBitFont { hScroll.Minimum = 0; hScroll.Enabled = true; } - + if (h <= dotPanel.Height) { vScroll.Enabled = false; vScroll.Value = 0; @@ -251,39 +274,117 @@ namespace McBitFont { dotPanel.Refresh(); } - private void btnShiftLeft_Click(object sender, EventArgs e) { + // Deconstruct selection coords from points + private (int x, int y, int x2, int y2) RectSelCoords() { + int x, y, x2, y2; + if (chkRectSelect.Checked) { + x = selection1.X; y = selection1.Y; + x2 = selection2.X; y2 = selection2.Y; + } else { + x = y = 0; + x2 = dotWidth - 1; y2 = dotHeight - 1; + } + return (x, y, x2, y2); + } + + private void btnShiftUp_Click(object sender, EventArgs e) { + int x, y, x2, y2; bool c; - for (int j = 0; j < dotHeight; j++) { - c = f.data[0, j]; - for (int i = 0; i < dotWidth; i++) { - if (i == dotWidth - 1) { + + (x, y, x2, y2) = RectSelCoords(); + + history.AddPre(f); + for (int i = x; i <= x2; i++) { + c = f.data[i, y]; + for (int j = y; j <= y2; j++) { + if (j == y2) { + f.data[i, j] = c; + } else { + f.data[i, j] = f.data[i, j + 1]; + } + } + } + history.AddPost(f); + CheckHistoryButtons(); + modified = true; + dotPanel.Refresh(); + } + + private void btnShiftDown_Click(object sender, EventArgs e) { + int x, y, x2, y2; + bool c; + + (x, y, x2, y2) = RectSelCoords(); + + history.AddPre(f); + for (int i = x; i <= x2; i++) { + c = f.data[i, y2]; + for (int j = y2; j >= y; j--) { + if (j == y) { + f.data[i, j] = c; + } else { + f.data[i, j] = f.data[i, j - 1]; + } + } + } + history.AddPost(f); + CheckHistoryButtons(); + modified = true; + dotPanel.Refresh(); + } + + private void btnShiftLeft_Click(object sender, EventArgs e) { + int x, y, x2, y2; + bool c; + + (x, y, x2, y2) = RectSelCoords(); + + history.AddPre(f); + for (int j = y; j <= y2; j++) { + c = f.data[x, j]; + for (int i = x; i <= x2; i++) { + if (i == x2) { f.data[i, j] = c; } else { f.data[i, j] = f.data[i + 1, j]; } } } + history.AddPost(f); + CheckHistoryButtons(); modified = true; dotPanel.Refresh(); } private void btnShiftRight_Click(object sender, EventArgs e) { + int x, y, x2, y2; bool c; - for (int j = 0; j < dotHeight; j++) { - c = f.data[dotWidth - 1, j]; - for (int i = dotWidth - 1; i >= 0; i--) { - if (i == 0) { + (x, y, x2, y2) = RectSelCoords(); + + history.AddPre(f); + for (int j = y; j <= y2; j++) { + c = f.data[x2, j]; + for (int i = x2; i >= x; i--) { + if (i == x) { f.data[i, j] = c; } else { f.data[i, j] = f.data[i - 1, j]; } } } + history.AddPost(f); + CheckHistoryButtons(); modified = true; dotPanel.Refresh(); } + private bool mouseDown = false; + private bool fChanged = false; private void dotPanel_MouseMove(object sender, MouseEventArgs e) { + var rectSel = chkRectSelect.Checked; + bool rectSelUpdated = false; + + // Moving baseline Rectangle rect1, rect2; if (set_base) { @@ -305,15 +406,80 @@ namespace McBitFont { return; } } + if (e.X >= w || e.X <= pixelOffset || e.Y >= h || e.Y <= pixelOffset) return; + // Change coordinates in the panel int i = (e.X - pixelOffset + hScroll.Value) / (cellSize + gap); int j = (e.Y - pixelOffset + vScroll.Value) / (cellSize + gap); - label5.Text = i.ToString() + ',' + j.ToString(); + lblCoords.Text = i.ToString() + ',' + j.ToString(); + // History and Rectangle selection management + if (rectSel && mouseDown && e.Button != MouseButtons.None) { + if (selection2.X != i || selection2.Y != j) { + rectSelUpdated = true; + selection2.X = i; + selection2.Y = j; + } + } + if (e.Button != MouseButtons.None && !mouseDown) { + mouseDown = true; + if (rectSel) { + selection1.X = i; + selection1.Y = j; + selection2.X = i; + selection2.Y = j; + dotPanel.Invalidate(); + } else history.AddPre(f, false); + } + if (e.Button == MouseButtons.None && mouseDown) { + mouseDown = false; + if (rectSel) { + NormPoints(ref selection1, ref selection2); + dotPanel.Invalidate(); + } else { + if (!fChanged) { + history.Remove(false); + } else { + fChanged = false; + history.ApplyAdded(); + history.AddPost(f); + } + CheckHistoryButtons(); + } + } + + if (rectSel) { + if (mouseDown && rectSelUpdated) { + int x, xx, x2, xx2, y, yy, y2, yy2; + + Point p1 = new(selection1.X, selection1.Y); + Point p2 = new(selection2.X, selection2.Y); + NormPoints(ref p1, ref p2); + x = pixelOffset + (p1.X - 1) * (cellSize + gap) - hScroll.Value - 1; + y = pixelOffset + (p1.Y - 1) * (cellSize + gap) - vScroll.Value - 1; + x2 = pixelOffset + (p2.X + 2) * (cellSize + gap) - hScroll.Value - 1; + y2 = pixelOffset + (p2.Y + 2) * (cellSize + gap) - vScroll.Value - 1; + xx = x + 2 * (cellSize + gap); + yy = y + 2 * (cellSize + gap); + xx2 = x2 - 2 * (cellSize + gap); + yy2 = y2 - 2 * (cellSize + gap); + + Region reg, reg2; + reg = new(new Rectangle(x, y, x2 - x + 1, y2 - y + 1)); + reg.Exclude(new Rectangle(x + 1, y + 1, x2 - x - 1, y2 - y - 1)); + reg2 = new(new Rectangle(xx, yy, xx2 - xx + 1, yy2 - yy + 1)); + reg2.Exclude(new Rectangle(xx + 1, yy + 1, xx2 - xx - 1, yy2 - yy - 1)); + reg.Union(reg2); + + dotPanel.Invalidate(reg); + } + return; + } + + // Paint black / white if (e.Button == MouseButtons.Left && !f.data[i, j]) { - Graphics g = dotPanel.CreateGraphics(); - SolidBrush sbb = new SolidBrush(Color.Black); f.data[i, j] = true; + fChanged = true; int x = pixelOffset + i * (cellSize + gap) - hScroll.Value; int y = pixelOffset + j * (cellSize + gap) - vScroll.Value; modified = true; @@ -321,9 +487,8 @@ namespace McBitFont { dotPanel.Invalidate(rect1); } if (e.Button == MouseButtons.Right && f.data[i, j]) { - Graphics g = dotPanel.CreateGraphics(); - SolidBrush sbw = new SolidBrush(Color.White); f.data[i, j] = false; + fChanged = true; int x = pixelOffset + i * (cellSize + gap) - hScroll.Value; int y = pixelOffset + j * (cellSize + gap) - vScroll.Value; modified = true; @@ -333,55 +498,35 @@ namespace McBitFont { } - private void btnShiftUp_Click(object sender, EventArgs e) { - bool c; - for (int i = 0; i < dotWidth; i++) { - c = f.data[i, 0]; - for (int j = 0; j < dotHeight; j++) { - if (j == dotHeight - 1) { - f.data[i, j] = c; - } else { - f.data[i, j] = f.data[i, j + 1]; - } - } - } - modified = true; - dotPanel.Refresh(); - } - - private void btnShiftDown_Click(object sender, EventArgs e) { - bool c; - for (int i = 0; i < dotWidth; i++) { - c = f.data[i, dotHeight - 1]; - for (int j = dotHeight-1; j >= 0; j--) { - if (j == 0) { - f.data[i, j] = c; - } else { - f.data[i, j] = f.data[i, j - 1]; - } - } - } - modified = true; - dotPanel.Refresh(); - } - private void btnInvert_Click(object sender, EventArgs e) { - for (int i = 0; i < dotWidth; i++) { - for (int j = 0; j < dotHeight; j++) { + int x, y, x2, y2; + + history.AddPre(f); + + (x, y, x2, y2) = RectSelCoords(); + + for (int i = x; i <= x2; i++) { + for (int j = y; j <= y2; j++) { f.data[i, j] = !f.data[i, j]; } } + + history.AddPost(f); + CheckHistoryButtons(); modified = true; dotPanel.Refresh(); } private void btnMirrorX_Click(object sender, EventArgs e) { - int a, b, j; + int a, b, j, x, y, x2, y2; bool c; - for (j = 0; j < dotHeight; j++) { - a = 0; - b = dotWidth - 1; + (x, y, x2, y2) = RectSelCoords(); + + history.AddPre(f); + for (j = y; j <= y2; j++) { + a = x; + b = x2; while (a < b) { c = f.data[a, j]; f.data[a, j] = f.data[b, j]; @@ -390,17 +535,22 @@ namespace McBitFont { b--; } } + history.AddPost(f); + CheckHistoryButtons(); modified = true; dotPanel.Refresh(); } private void btnMirrorY_Click(object sender, EventArgs e) { - int a, b, i; + int a, b, i, x, y, x2, y2; bool c; - for (i = 0; i < dotWidth; i++) { - a = 0; - b = dotHeight - 1; + (x, y, x2, y2) = RectSelCoords(); + + history.AddPre(f); + for (i = x; i <= x2; i++) { + a = y; + b = y2; while (a < b) { c = f.data[i, a]; f.data[i, a] = f.data[i, b]; @@ -409,6 +559,8 @@ namespace McBitFont { b--; } } + history.AddPost(f); + CheckHistoryButtons(); modified = true; dotPanel.Refresh(); } @@ -416,9 +568,9 @@ namespace McBitFont { private void button1_Click(object sender, EventArgs e) { if (modified) { if (MessageBox.Show("Current symbol is modified.\nDo you want to save the changes?", "Symbol was modified!", MessageBoxButtons.YesNo) == DialogResult.Yes) { - saveFrame(); + SaveFrame(); } else { - f = copyFrame(frames.Find(x => x.code == f.code)); + f = CopyFrame(frames.Find(x => x.code == f.code)); } modified = false; } @@ -429,14 +581,14 @@ namespace McBitFont { } private void button2_Click(object sender, EventArgs e) { - saveFrame(); + SaveFrame(); } - private void saveFrame() { + private void SaveFrame() { int index = frames.FindIndex(x => x.code == f.code); frames[index] = f; - var sizedBMP = getMiniPictue(f); + var sizedBMP = GetMiniPictue(f); string s = f.code.ToString().PadLeft(3, '0'); ilMiniatures.Images.RemoveByKey(s); ilMiniatures.Images.Add(s, (Image)sizedBMP); @@ -445,7 +597,7 @@ namespace McBitFont { prjModified = true; } - private Bitmap getMiniPictue(FrameMiniature m) { + private static Bitmap GetMiniPictue(FrameMiniature m) { int picSize = (m.width > m.height) ? m.width : m.height; var bmp = new Bitmap(picSize, picSize); int imin = m.width < picSize ? (picSize - m.width) / 2 : 0; @@ -454,12 +606,17 @@ namespace McBitFont { for (int i = 0; i < m.width; i++) { for (int j = 0; j < m.height; j++) { c = m.data[i, j] ? Color.Black : Color.White; - bmp.SetPixel(i+imin, j+jmin, c); + bmp.SetPixel(i + imin, j + jmin, c); } } - var sizedBMP = new Bitmap(bmp, new Size(50, 50)); + Bitmap sbmp = new Bitmap(50, 50); + using (Graphics g = Graphics.FromImage(sbmp)) { + g.InterpolationMode = InterpolationMode.NearestNeighbor; + g.PixelOffsetMode = PixelOffsetMode.Half; + g.DrawImage(bmp, 0, 0, 50, 50); + } bmp.Dispose(); - return sizedBMP; + return sbmp; } private void dotPanel_Paint(object sender, PaintEventArgs e) { @@ -467,34 +624,57 @@ namespace McBitFont { SolidBrush sbb = new SolidBrush(Color.Black); SolidBrush sbw = new SolidBrush(Color.White); SolidBrush sb; - Pen p = new Pen(Color.FromArgb(64, Color.Green)); + Pen p = new Pen(Color.FromArgb(100, 20, 120, 20)); int x, y; - for (int i=0; i 0 && i != 0 && (i % 8) == 0) { g.DrawLine(p, x - 1, pixelOffset - vScroll.Value, x - 1, h); } - for (int j=0; j 0 && i == 0 && j != 0 && (j % 8) == 0) { - g.DrawLine(p, pixelOffset - hScroll.Value, y-1, w, y-1); + g.DrawLine(p, pixelOffset - hScroll.Value, y - 1, w, y - 1); } + // 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, (baseline == j ? y + 1 : y), cellSize, (baseline == j ? cellSize - 1 : cellSize)); } } + // Draw the baseline if (baseline > 0 && gap > 0) { x = pixelOffset - hScroll.Value; y = pixelOffset + baseline * (cellSize + gap) - vScroll.Value; - g.DrawLine( - new Pen(Color.Blue, 2), - x, y, - w, y - ); + + Pen sbBase = new(Color.Blue, 2); + g.DrawLine(sbBase, x, y, w, y); } + + // Draw the Rect selection + if (chkRectSelect.Checked) { + Point p1 = new(selection1.X, selection1.Y); + Point p2 = new(selection2.X, selection2.Y); + NormPoints(ref p1, ref p2); + + Pen sbRect = new(Color.FromArgb(200, 0, 200, 0), 3); + x = pixelOffset + p1.X * (cellSize + gap) - hScroll.Value - 1; + y = pixelOffset + p1.Y * (cellSize + gap) - vScroll.Value - 1; + int ww = pixelOffset + (p2.X + 1) * (cellSize + gap) - hScroll.Value - x - 1; + int hh = pixelOffset + (p2.Y + 1) * (cellSize + gap) - vScroll.Value - y - 1; + g.DrawRectangle(sbRect, x, y, ww, hh); + } + } + + private static void NormPoints(ref Point a, ref Point b) { + int bot; + if (a.X > b.X) { bot = a.X; a.X = b.X; b.X = bot; } + if (a.Y > b.Y) { bot = a.Y; a.Y = b.Y; b.Y = bot; } } private void exitToolStripMenuItem_Click(object sender, EventArgs e) { @@ -507,7 +687,7 @@ namespace McBitFont { return enc.GetString(new byte[] { (byte)code }); } - private FrameMiniature fillFrame(FrameMiniature ff, Font font, int sx, int sy) { + private FrameMiniature DrawFrameChar(FrameMiniature ff, Font font, int sx, int sy) { string s = decodeSymbol(ff.code); Bitmap bmp = new Bitmap(ff.width, ff.height); Graphics g = Graphics.FromImage(bmp); @@ -531,15 +711,13 @@ namespace McBitFont { } private void newToolStripMenuItem_Click(object sender, EventArgs e) { - checkModifiedFrame(); - if (prjModified) { - if (MessageBox.Show("The project is modified.\nDo you want to save it first?", "Project was modified!", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) { - saveToolStripMenuItem.PerformClick(); - return; - } - } + CheckModifiedFrame(); + if (CheckModifiedProject()) return; + New form = new New(this); if (form.ShowDialog() == DialogResult.OK) { + Cursor.Current = Cursors.WaitCursor; + frames.Clear(); miniList.Clear(); ilMiniatures.Images.Clear(); @@ -551,7 +729,7 @@ namespace McBitFont { nudY.Value = newh; FrameMiniature newf; if (form.cbSingle.Checked) { - frames.Add( new FrameMiniature(0, neww, newh)); + frames.Add(new FrameMiniature(0, neww, newh)); //f = frames.Find(x => x.code == 0); append = "Single"; monospaced = false; @@ -563,60 +741,78 @@ namespace McBitFont { } else { if (form.cbNotPrintable.Checked) imin = 0; else if (form.cbLatin.Checked) imin = 32; - else imin = 128; + else imin = 128; if (form.cbExtended.Checked) imax = 255; else if (form.cbLatin.Checked) imax = 127; else imax = 31; } - + for (i = imin; i <= imax; i++) { newf = new FrameMiniature(i, neww, newh); - if (form.cbFontBased.Checked) newf = fillFrame(newf, form.dlgFont.Font, (int)form.nudShiftX.Value, (int)form.nudShiftY.Value); + if (form.cbFontBased.Checked) newf = DrawFrameChar(newf, form.dlgFont.Font, (int)form.nudShiftX.Value, (int)form.nudShiftY.Value); frames.Add(newf); } - + monospaced = form.rbMono.Checked; } + makeVarWidthToolStripMenuItem.Visible = monospaced; + tsmiMakeVarWidth.Visible = monospaced; + CodeShiftToolStripMenuItem.Visible = !form.cbSingle.Checked; + tsmiCodeShift.Visible = !form.cbSingle.Checked; lblType.Text = monospaced ? "Monospaced" : "Variable width / Single"; codepage = (form.cbEncoding.SelectedItem as New.EncodingItem).Code; foreach (FrameMiniature ff in frames) { var s = ff.code.ToString().PadLeft(3, '0'); - ilMiniatures.Images.Add(s, (Image)getMiniPictue(ff)); + ilMiniatures.Images.Add(s, (Image)GetMiniPictue(ff)); var sss = decodeSymbol(ff.code); - miniList.Items.Add(s, s+' '+append+sss, s); + miniList.Items.Add(s, s + ' ' + append + sss, s); } - f = copyFrame(frames.First()); - dotPanel.Refresh(); - miniList.Refresh(); + f = CopyFrame(frames.First()); form.Dispose(); baseline = 0; prjName = "Untitled"; prjFileName = ""; - this.Text = "McBitFont " + version + " - " + prjName; + SetWindowCap(); modified = false; - checkForAdd(); + CheckForAdd(); fbuffer = false; + miniList.Items[0].Selected = true; + miniList.Refresh(); dotPanel.Refresh(); + + // Re-create history object + history = new CanvasHistory(); + + Cursor.Current = Cursors.Default; } } - private void miniList_SelectedIndexChanged(object sender, EventArgs e) { + private void MiniList_SelectedIndexChanged(object sender, EventArgs e) { if (miniList.FocusedItem == null) return; - checkModifiedFrame(); + CheckModifiedFrame(); if (miniList.SelectedItems.Count == 0) { removeSymbolToolStripMenuItem.Enabled = false; + removeBeforeToolStripMenuItem.Enabled = false; + removeAfterToolStripMenuItem.Enabled = false; + tsmiRemoveSymbol.Enabled = false; + tsmiRemoveBefore.Enabled = false; + tsmiRemoveAfter.Enabled = false; copyToolStripMenuItem.Enabled = false; pasteToolStripMenuItem.Enabled = false; return; //miniList.Items[0].Selected = true; } + + // Clear history + history.Clear(); + var sel = miniList.SelectedItems[0]; int code = Convert.ToInt32(sel.ImageKey); - FrameMiniature ff = copyFrame(frames.Find(x => x.code == code)); + FrameMiniature ff = CopyFrame(frames.Find(x => x.code == code)); nudX.Value = ff.width; nudY.Value = ff.height; f = ff; @@ -624,40 +820,46 @@ namespace McBitFont { ff = frames.Find(x => x.code == code); if (frames.Count > 1 && (ff.Equals(frames.First()) || ff.Equals(frames.Last()))) { removeSymbolToolStripMenuItem.Enabled = true; + tsmiRemoveSymbol.Enabled = true; } else { removeSymbolToolStripMenuItem.Enabled = false; + tsmiRemoveSymbol.Enabled = false; } copyToolStripMenuItem.Enabled = true; + if (ff.Equals(frames.First())) { + removeBeforeToolStripMenuItem.Enabled = false; + removeAfterToolStripMenuItem.Enabled = true; + tsmiRemoveBefore.Enabled = false; + tsmiRemoveAfter.Enabled = true; + } else if (ff.Equals(frames.Last())) { + removeBeforeToolStripMenuItem.Enabled = true; + removeAfterToolStripMenuItem.Enabled = false; + tsmiRemoveBefore.Enabled = true; + tsmiRemoveAfter.Enabled = false; + } else { + removeBeforeToolStripMenuItem.Enabled = true; + removeAfterToolStripMenuItem.Enabled = true; + tsmiRemoveBefore.Enabled = true; + tsmiRemoveAfter.Enabled = true; + } + if (fbuffer) pasteToolStripMenuItem.Enabled = true; else pasteToolStripMenuItem.Enabled = false; } - private void saveToolStripMenuItem_Click(object sender, EventArgs e) { - checkModifiedFrame(); + private void SaveToolStripMenuItem_Click(object sender, EventArgs e) { + CheckModifiedFrame(); if (dlgSave.ShowDialog() == DialogResult.OK) { - SaveBlock sav; - sav.monospaced = monospaced; - sav.frames = frames; - sav.codepage = codepage; - sav.baseline = baseline; - BinaryFormatter formatter = new BinaryFormatter(); - using (Stream ms = File.OpenWrite(dlgSave.FileName)) { - formatter.Serialize(ms, sav); - ms.Close(); - } - prjModified = false; - prjName = Path.GetFileNameWithoutExtension(dlgSave.FileName); - prjFileName = dlgSave.FileName; - this.Text = "McBitFont " + version + " - " + prjName; + SaveProject(dlgSave.FileName); } } - private void loadProject(string filename) { + private void LoadProject(string filename) { SaveBlock sav; - BinaryFormatter formatter = new BinaryFormatter(); + Cursor.Current = Cursors.WaitCursor; using (FileStream fs = File.Open(filename, FileMode.Open)) { - sav = (SaveBlock)formatter.Deserialize(fs); + sav = MessagePackSerializer.Deserialize(fs); fs.Close(); } monospaced = sav.monospaced; @@ -665,22 +867,25 @@ namespace McBitFont { baseline = sav.baseline; lblType.Text = monospaced ? "Monospaced" : "Variable width / Single"; frames = sav.frames; + makeVarWidthToolStripMenuItem.Visible = monospaced; + tsmiMakeVarWidth.Visible = monospaced; miniList.Items.Clear(); ilMiniatures.Images.Clear(); foreach (FrameMiniature ff in frames) { var s = ff.code.ToString().PadLeft(3, '0'); + var sHex = 'x' + Convert.ToString(ff.code, 16).PadLeft(2, '0').ToUpper(); var sss = decodeSymbol(ff.code); - ilMiniatures.Images.Add(s, (Image)getMiniPictue(ff)); - miniList.Items.Add(s, s + ' ' + sss, s); + ilMiniatures.Images.Add(s, (Image)GetMiniPictue(ff)); + miniList.Items.Add(s, (chkHexCodes.Checked ? sHex : s) + ' ' + sss, s); } nudX.ValueChanged -= nudX_ValueChanged; nudY.ValueChanged -= nudY_ValueChanged; nudX.Value = frames.First().width; nudY.Value = frames.First().height; - dotResize((int)nudX.Value, (int)nudY.Value); + DotResize((int)nudX.Value, (int)nudY.Value); nudX.ValueChanged += nudX_ValueChanged; nudY.ValueChanged += nudY_ValueChanged; - f = copyFrame(frames.First()); + f = CopyFrame(frames.First()); dotPanel.Refresh(); miniList.Refresh(); modified = false; @@ -688,37 +893,53 @@ namespace McBitFont { prjFileName = filename; prjName = Path.GetFileNameWithoutExtension(filename); - this.Text = "McBitFont " + version + " - " + prjName; - checkForAdd(); + SetWindowCap(); + + miniList.Items[0].Selected = true; + + CheckForAdd(); fbuffer = false; + + // Re-create history object + history = new CanvasHistory(); + + tsmiMakeVarWidth.Visible = monospaced; + makeVarWidthToolStripMenuItem.Visible = monospaced; + tsmiCodeShift.Visible = frames.Count > 1; + CodeShiftToolStripMenuItem.Visible = frames.Count > 1; + Cursor.Current = Cursors.Default; } - private void saveProject(string filename) { + private void SaveProject(string filename) { SaveBlock sav; sav.monospaced = monospaced; sav.frames = frames; sav.codepage = codepage; sav.baseline = baseline; - BinaryFormatter formatter = new BinaryFormatter(); + using (Stream ms = File.OpenWrite(filename)) { - formatter.Serialize(ms, sav); + MessagePackSerializer.Serialize(ms, sav); ms.Close(); } prjModified = false; prjName = Path.GetFileNameWithoutExtension(filename); prjFileName = filename; - this.Text = "McBitFont " + version + " - " + prjName; + SetWindowCap(); } + private void SetWindowCap() { + this.Text = "McBitFont v" + version + " - " + prjName; + } + + + private void openToolStripMenuItem_Click(object sender, EventArgs e) { - if (prjModified) { - if (MessageBox.Show("The project is modified.\nDo you want to save it first?", "Project was modified!", MessageBoxButtons.YesNo) == DialogResult.Yes) { - saveAsToolStripMenuItem.PerformClick(); - return; - } - } + CheckModifiedFrame(); + if (CheckModifiedProject()) return; + + dlgOpen.FilterIndex = 1; if (dlgOpen.ShowDialog() == DialogResult.OK) { - loadProject(dlgOpen.FileName); + LoadProject(dlgOpen.FileName); } } @@ -737,36 +958,48 @@ namespace McBitFont { private void prependSymbolToolStripMenuItem_Click(object sender, EventArgs e) { FrameMiniature ff; - if (sender == prependSymbolToolStripMenuItem) { + if (sender == prependSymbolToolStripMenuItem || sender == tsmiPrepensSymbol) { ff = new FrameMiniature(frames.First().code - 1, dotWidth, dotHeight); frames.Insert(0, ff); } else { ff = new FrameMiniature(frames.Last().code + 1, dotWidth, dotHeight); frames.Add(ff); } - + var s = ff.code.ToString().PadLeft(3, '0'); - ilMiniatures.Images.Add(s, (Image)getMiniPictue(ff)); + ilMiniatures.Images.Add(s, (Image)GetMiniPictue(ff)); var sss = decodeSymbol(ff.code); miniList.Items.Add(s, s + ' ' + sss, s); - checkForAdd(); + CheckForAdd(); } - private void checkForAdd() { + private void CheckForAdd() { if (frames.Count > 1) { - if (frames.First().code > 0) prependSymbolToolStripMenuItem.Enabled = true; - else prependSymbolToolStripMenuItem.Enabled = false; - if (frames.Last().code < 255) appendSymbolToolStripMenuItem.Enabled = true; - else appendSymbolToolStripMenuItem.Enabled = false; + if (frames.First().code > 0) { + prependSymbolToolStripMenuItem.Enabled = true; + tsmiPrepensSymbol.Enabled = true; + } else { + prependSymbolToolStripMenuItem.Enabled = false; + tsmiPrepensSymbol.Enabled = false; + } + if (frames.Last().code < 255) { + appendSymbolToolStripMenuItem.Enabled = true; + tsmiAppendSymbol.Enabled = true; + } else { + appendSymbolToolStripMenuItem.Enabled = false; + tsmiAppendSymbol.Enabled = false; + } } else { prependSymbolToolStripMenuItem.Enabled = false; appendSymbolToolStripMenuItem.Enabled = false; + tsmiPrepensSymbol.Enabled = false; + tsmiAppendSymbol.Enabled = false; } } private void copyToolStripMenuItem_Click(object sender, EventArgs e) { fbuffer = true; - fbuf = copyFrame(f); + fbuf = CopyFrame(f); pasteToolStripMenuItem.Enabled = true; } @@ -775,11 +1008,11 @@ namespace McBitFont { Array.Copy(fbuf.data, f.data, fbuf.data.Length); } else { var wmax = (fbuf.width > f.width) ? f.width : fbuf.width; - var hmax = (fbuf.height > f.height) ? f.height : fbuf.height; + var hmax = (fbuf.height > f.height) ? f.height : fbuf.height; for (int i = 0; i < wmax; i++) { for (int j = 0; j < hmax; j++) { - f.data[i,j] = fbuf.data[i,j]; + f.data[i, j] = fbuf.data[i, j]; } } } @@ -798,98 +1031,61 @@ namespace McBitFont { } // Check modified / Save frame - private void checkModifiedFrame() { + private void CheckModifiedFrame() { if (modified) { if (MessageBox.Show("Current symbol is modified.\nDo you want to save the changes?", "Symbol was modified!", MessageBoxButtons.YesNo) == DialogResult.Yes) { - saveFrame(); + SaveFrame(); } modified = false; } } + // Check if project was modified + private bool CheckModifiedProject() { + if (prjModified) { + if (MessageBox.Show("The project is modified.\nDo you want to save it first?", "Project was modified!", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) { + saveToolStripMenuItem.PerformClick(); + return true; + } + } + return false; + } + private void saveToolStripMenuItem_Click_1(object sender, EventArgs e) { if (prjFileName == "") { saveAsToolStripMenuItem.PerformClick(); } else { - checkModifiedFrame(); - saveProject(prjFileName); + CheckModifiedFrame(); + SaveProject(prjFileName); } - + } - private void btnClear_Click(object sender, EventArgs e) { - Array.Clear(f.data, 0, f.data.Length); + private void FillFrame(bool val) { + int x, y, x2, y2; + + history.AddPre(f); + + (x, y, x2, y2) = RectSelCoords(); + + for (int i = x; i <= x2; i++) { + for (int j = y; j <= y2; j++) { + f.data[i, j] = val; + } + } + + history.AddPost(f); + CheckHistoryButtons(); modified = true; dotPanel.Refresh(); } - private void saveJSONToolStripMenuItem_Click(object sender, EventArgs e) { - checkModifiedFrame(); - if (dlgSave.ShowDialog() == DialogResult.OK) { - SaveBlock sav; - sav.monospaced = monospaced; - sav.frames = frames; - sav.codepage = codepage; - sav.baseline = baseline; - using (Stream ms = File.OpenWrite(dlgSave.FileName)) { - // TODO: Serializer here - MessagePackSerializer.Serialize(ms, sav); - ms.Close(); - } - prjModified = false; - prjName = Path.GetFileNameWithoutExtension(dlgSave.FileName); - prjFileName = dlgSave.FileName; - this.Text = "McBitFont " + version + " - " + prjName; - } + private void btnClear_Click(object sender, EventArgs e) { + FillFrame(false); } - private void openDEVToolStripMenuItem_Click(object sender, EventArgs e) { - if (prjModified) { - if (MessageBox.Show("The project is modified.\nDo you want to save it first?", "Project was modified!", MessageBoxButtons.YesNo) == DialogResult.Yes) { - saveAsToolStripMenuItem.PerformClick(); - return; - } - } - if (dlgOpen.ShowDialog() == DialogResult.OK) { - SaveBlock sav; - - var filename = dlgOpen.FileName; - using (FileStream fs = File.Open(filename, FileMode.Open)) { - sav = MessagePackSerializer.Deserialize(fs); - fs.Close(); - } - monospaced = sav.monospaced; - codepage = sav.codepage; - baseline = sav.baseline; - lblType.Text = monospaced ? "Monospaced" : "Variable width / Single"; - frames = sav.frames; - miniList.Items.Clear(); - ilMiniatures.Images.Clear(); - foreach (FrameMiniature ff in frames) { - var s = ff.code.ToString().PadLeft(3, '0'); - var sss = decodeSymbol(ff.code); - ilMiniatures.Images.Add(s, (Image)getMiniPictue(ff)); - miniList.Items.Add(s, s + ' ' + sss, s); - } - nudX.ValueChanged -= nudX_ValueChanged; - nudY.ValueChanged -= nudY_ValueChanged; - nudX.Value = frames.First().width; - nudY.Value = frames.First().height; - dotResize((int)nudX.Value, (int)nudY.Value); - nudX.ValueChanged += nudX_ValueChanged; - nudY.ValueChanged += nudY_ValueChanged; - f = copyFrame(frames.First()); - dotPanel.Refresh(); - miniList.Refresh(); - modified = false; - prjModified = false; - - prjFileName = filename; - prjName = Path.GetFileNameWithoutExtension(filename); - this.Text = "McBitFont " + version + " - " + prjName; - checkForAdd(); - fbuffer = false; - } + private void btnFill_Click(object sender, EventArgs e) { + FillFrame(true); } private void MainForm_FormClosing(object sender, FormClosingEventArgs e) { @@ -906,5 +1102,261 @@ namespace McBitFont { dotPanel.Refresh(); } + // Remove all before or after specified symbol + private void removeBA(bool before) { + if (miniList.SelectedItems.Count == 0) { + removeBeforeToolStripMenuItem.Enabled = false; + removeAfterToolStripMenuItem.Enabled = false; + return; + } + int step = before ? -1 : 1; + var sel = miniList.SelectedItems[0].ImageKey; + int code = Convert.ToInt32(sel); + int findex; + + while (miniList.Items.ContainsKey((code + step).ToString().PadLeft(3, '0'))) { + code += step; + findex = frames.FindIndex(x => x.code == code); + frames.RemoveAt(findex); + miniList.Items.RemoveByKey(code.ToString().PadLeft(3, '0')); + } + //dotPanel.Refresh(); + miniList.Refresh(); + prjModified = true; + } + + private void removeBeforeToolStripMenuItem_Click(object sender, EventArgs e) { + removeBA(true); + } + + private void removeAfterToolStripMenuItem_Click(object sender, EventArgs e) { + removeBA(false); + } + + private void makeVarWidthToolStripMenuItem_Click(object sender, EventArgs e) { + monospaced = false; + makeVarWidthToolStripMenuItem.Visible = false; + tsmiMakeVarWidth.Visible = false; + lblType.Text = "Variable width / Single"; + prjModified = true; + } + + public void CheckHistoryButtons() { + undoToolStripMenuItem.Enabled = history.Undos > 0; + redoToolStripMenuItem.Enabled = history.Redos > 0; + + undoToolStripMenuItem.Text = "Undo (" + history.Undos + ")"; + redoToolStripMenuItem.Text = "Redo (" + history.Redos + ")"; + } + + private void editToolStripMenuItem_DropDownOpening(object sender, EventArgs e) { + CheckHistoryButtons(); + } + + private void undoToolStripMenuItem_Click(object sender, EventArgs e) { + history.Undo(f); + dotPanel.Refresh(); + CheckHistoryButtons(); + } + + private void redoToolStripMenuItem_Click(object sender, EventArgs e) { + history.Redo(f); + dotPanel.Refresh(); + CheckHistoryButtons(); + } + + private void CodeShiftToolStripMenuItem_Click(object sender, EventArgs e) { + if (!monospaced && frames.Count == 1) return; + CheckModifiedFrame(); + + CodeShift csform = new CodeShift(this); + if (csform.ShowDialog() == DialogResult.OK) { + Cursor.Current = Cursors.WaitCursor; + + FrameMiniature ff; + int sel; + if (miniList.SelectedItems.Count > 0) sel = miniList.SelectedItems[0].Index; + else sel = 0; + var val = Convert.ToInt32(csform.nudValue.Value); + if (csform.rbSpecify.Checked) val -= csform.sc; + if (csform.rbShiftLeft.Checked) val *= -1; + + miniList.Clear(); + ilMiniatures.Images.Clear(); + for (int i = 0; i < frames.Count; i++) { + ff = frames[i]; + ff.code += val; + frames[i] = ff; + + var key = ff.code.ToString().PadLeft(3, '0'); + var text = decodeSymbol(ff.code); + ilMiniatures.Images.Add(key, (Image)GetMiniPictue(ff)); + miniList.Items.Add(key, key + ' ' + text, key); + } + + miniList.Refresh(); + miniList.Items[sel].Selected = true; + dotPanel.Refresh(); + + Cursor.Current = Cursors.Default; + } + csform.Dispose(); + + history.Clear(); + CheckForAdd(); + prjModified = true; + + } + + private void importImageToolStripMenuItem_Click(object sender, EventArgs e) { + ImageImporter iform = new ImageImporter(f.width, f.height); + if (iform.ShowDialog() == DialogResult.OK) { + history.AddPre(f); + for (int i = 0; i < iform.bmpScaled.Width; i++) { + for (int j = 0; j < iform.bmpScaled.Height; j++) { + f.data[i, j] = iform.bmpScaled.GetPixel(i, j).ToArgb().Equals(Color.Black.ToArgb()); + } + } + history.AddPost(f); + dotPanel.Refresh(); + modified = true; + } + iform.Dispose(); + } + + private void chkHexCodes_CheckedChanged(object sender, EventArgs e) { + if (frames.Count == 1) return; + foreach (ListViewItem item in miniList.Items) { + var code = Convert.ToInt32(item.ImageKey); + var symbol = decodeSymbol(code); + if (chkHexCodes.Checked) { + var sHex = 'x' + Convert.ToString(code, 16).PadLeft(2, '0').ToUpper(); + item.Text = sHex + ' ' + symbol; + } else { + item.Text = item.ImageKey + ' ' + symbol; + } + + } + } + + private void chkRectSelect_CheckedChanged(object sender, EventArgs e) { + dotPanel.Refresh(); + } + + private void selectToolStripMenuItem_Click(object sender, EventArgs e) { + chkRectSelect.Checked = !chkRectSelect.Checked; + selectToolStripMenuItem.Checked = !selectToolStripMenuItem.Checked; + } + + private void importTextToolStripMenuItem1_Click(object sender, EventArgs e) { + if (CheckModifiedProject()) return; + + dlgOpen.FilterIndex = 2; + if (dlgOpen.ShowDialog() == DialogResult.OK) { + var lines = File.ReadAllLines(dlgOpen.FileName); + int bits = 0; + List data = []; + foreach (var line in lines) { + if (line.TrimStart().StartsWith("//")) continue; // Ignore comments + if (line.Trim().Length < 1) continue; // Ignore empty lines + if (bits == 0) { + if (line.Contains("uint8_t")) bits = 8; // Found 8 bit array + if (line.Contains("uint16_t")) bits = 16; // Found 16 bit array + if (line.Contains("uint31_t")) bits = 32; // Found 32 bit array + } + string s = line; + if (s.Contains("//")) s = s[..s.IndexOf("//")]; // Remove comments + if (s.Contains('{')) s = s[(s.IndexOf('{') + 1)..]; // Remove everything before '{' + + var words = s.Split(','); // split a line by commas + string w; + foreach (var word in words) { + int numBase = 10; + + w = word.Trim(); + if (w.Length < 1) continue; + + if (w.Contains("0b") && !w.Contains("0x")) { // Check if value is written as binary + w = w.Remove(w.IndexOf("0b"), 2); + numBase = 2; + } + if (w.Contains("0x") ) { // Check if value is written as hexadecimal + w = w.Remove(w.IndexOf("0x"), 2); + numBase = 16; + } + + + try { // Try to convert a number from text + data.Add(Convert.ToUInt32(w, numBase)); + } + catch { + continue; + } + + //MessageBox.Show(w + ": Length: " + w.Length + " Bits: " + bits + " Converted: " + data.Last() + "\nData length: " + data.Count); + } + } + if (MessageBox.Show(bits + "-bit font found. " + data.Count + " numbers (" + data.Count * bits / 8 + " bytes) total\n" + "Start code: " + data.ElementAt(4) + " End code: " + data.ElementAt(5) + "\nDo you want to load it?", "Import from text file", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) { + // Font header + bool packed = data.ElementAt(0) == 1; + int width= (int)data.ElementAt(1); + int height = (int)data.ElementAt(2); + int first = (int)data.ElementAt(4); + int last = (int)data.ElementAt(5); + + frames.Clear(); + miniList.Clear(); + ilMiniatures.Images.Clear(); + + FrameMiniature newf = new(); + int neww = width; + int curFrame = -1; + bool newFrame = true; + int i = 0, j = 0; + for (int b = 6; b < data.Count; b++) { + if (newFrame) { + newFrame = false; + curFrame++; + i = 0; j = 0; + if (width == 0) neww = (int)data[b]; + newf = new(curFrame + first, neww, height); + if (width == 0 && neww != 0) continue; + } + // Fill frame data with current number + if (neww != 0) + for (int bit = 0; bit < bits; bit++) { + if (j >= height) { + j = 0; + i++; + if (!packed && bit != 0) break; + } + if (i >= neww) break; + newf.data[i, j] = (data[b] & (1 << bit)) > 0; + j++; + } + if (i >= neww || b == data.Count - 1 || (i == neww - 1 && j == height) || neww == 0) { + newFrame = true; + frames.Add(newf); + + var s = (last - first > 0) ? newf.code.ToString().PadLeft(3, '0') : "000"; + var sHex = (last - first > 0) ? 'x' + Convert.ToString(newf.code, 16).PadLeft(2, '0').ToUpper() : "0x0"; + var sss = (last - first > 0) ? decodeSymbol(newf.code) : "Single"; + ilMiniatures.Images.Add(s, (Image)GetMiniPictue(newf)); + miniList.Items.Add(s, (chkHexCodes.Checked ? sHex : s) + ' ' + sss, s); + } + } + prjModified = true; + if (miniList.Items.Count > 0) miniList.Items[0].Selected = true; + f = frames[0]; + dotWidth = f.width; + dotHeight = f.height; + SetNewWH(); + + miniList.Refresh(); + dotPanel.Refresh(); + } + //MessageBox.Show(bits + "-font found. " + data.Count + " numbers (" + data.Count * bits / 8 + " bytes) total\n" + "Start code: " + data.ElementAt(4) + " End code: " + data.ElementAt(5)); + } + } } } diff --git a/McBitFont/Form1.resx b/McBitFont/Form1.resx index 398ee74..fb11a13 100644 --- a/McBitFont/Form1.resx +++ b/McBitFont/Form1.resx @@ -1,17 +1,17 @@  - @@ -120,6 +120,9 @@ 436, 17 + + 534, 17 + 17, 17 @@ -132,9 +135,6 @@ 336, 17 - - 436, 17 - diff --git a/McBitFont/ImageImporter.Designer.cs b/McBitFont/ImageImporter.Designer.cs new file mode 100644 index 0000000..ff4c113 --- /dev/null +++ b/McBitFont/ImageImporter.Designer.cs @@ -0,0 +1,423 @@ +namespace McBitFont { + partial class ImageImporter { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) { + if (disposing && (components != null)) { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + components = new System.ComponentModel.Container(); + btnOK = new System.Windows.Forms.Button(); + btnCancel = new System.Windows.Forms.Button(); + pbOriginal = new System.Windows.Forms.PictureBox(); + pbProcessed = new System.Windows.Forms.PictureBox(); + btnLoadImage = new System.Windows.Forms.Button(); + dlgLoadImage = new System.Windows.Forms.OpenFileDialog(); + pbScaled = new System.Windows.Forms.PictureBox(); + btnConvert = new System.Windows.Forms.Button(); + tbPixelization = new System.Windows.Forms.TrackBar(); + lblPixelization = new System.Windows.Forms.Label(); + lblThreshold = new System.Windows.Forms.Label(); + tbThreshold = new System.Windows.Forms.TrackBar(); + lblWhite = new System.Windows.Forms.Label(); + lblBlack = new System.Windows.Forms.Label(); + btnResize = new System.Windows.Forms.Button(); + lblOrigSize = new System.Windows.Forms.Label(); + lblProcessedSize = new System.Windows.Forms.Label(); + lblScaledSize = new System.Windows.Forms.Label(); + label1 = new System.Windows.Forms.Label(); + label2 = new System.Windows.Forms.Label(); + label3 = new System.Windows.Forms.Label(); + label4 = new System.Windows.Forms.Label(); + lblTransparency = new System.Windows.Forms.Label(); + tbTransparency = new System.Windows.Forms.TrackBar(); + toolTip1 = new System.Windows.Forms.ToolTip(components); + label5 = new System.Windows.Forms.Label(); + label6 = new System.Windows.Forms.Label(); + ((System.ComponentModel.ISupportInitialize)pbOriginal).BeginInit(); + ((System.ComponentModel.ISupportInitialize)pbProcessed).BeginInit(); + ((System.ComponentModel.ISupportInitialize)pbScaled).BeginInit(); + ((System.ComponentModel.ISupportInitialize)tbPixelization).BeginInit(); + ((System.ComponentModel.ISupportInitialize)tbThreshold).BeginInit(); + ((System.ComponentModel.ISupportInitialize)tbTransparency).BeginInit(); + SuspendLayout(); + // + // btnOK + // + btnOK.Enabled = false; + btnOK.Location = new System.Drawing.Point(171, 345); + btnOK.Name = "btnOK"; + btnOK.Size = new System.Drawing.Size(88, 27); + btnOK.TabIndex = 0; + btnOK.Text = "OK"; + btnOK.UseVisualStyleBackColor = true; + btnOK.Click += btnOK_Click; + // + // btnCancel + // + btnCancel.Location = new System.Drawing.Point(377, 345); + btnCancel.Name = "btnCancel"; + btnCancel.Size = new System.Drawing.Size(88, 27); + btnCancel.TabIndex = 1; + btnCancel.Text = "Cancel"; + btnCancel.UseVisualStyleBackColor = true; + btnCancel.Click += btnCancel_Click; + // + // pbOriginal + // + pbOriginal.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + pbOriginal.Location = new System.Drawing.Point(12, 27); + pbOriginal.Name = "pbOriginal"; + pbOriginal.Size = new System.Drawing.Size(200, 200); + pbOriginal.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; + pbOriginal.TabIndex = 2; + pbOriginal.TabStop = false; + // + // pbProcessed + // + pbProcessed.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + pbProcessed.Location = new System.Drawing.Point(218, 27); + pbProcessed.Name = "pbProcessed"; + pbProcessed.Size = new System.Drawing.Size(200, 200); + pbProcessed.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; + pbProcessed.TabIndex = 3; + pbProcessed.TabStop = false; + // + // btnLoadImage + // + btnLoadImage.Image = Properties.Resources.folder_open; + btnLoadImage.Location = new System.Drawing.Point(57, 233); + btnLoadImage.Name = "btnLoadImage"; + btnLoadImage.Size = new System.Drawing.Size(110, 27); + btnLoadImage.TabIndex = 4; + btnLoadImage.Text = " Load Image"; + btnLoadImage.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + btnLoadImage.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText; + toolTip1.SetToolTip(btnLoadImage, "Load image from a file"); + btnLoadImage.UseVisualStyleBackColor = true; + btnLoadImage.Click += btnLoadImage_Click; + // + // dlgLoadImage + // + dlgLoadImage.AddExtension = false; + dlgLoadImage.Filter = "Images|*.bmp;*.png;*.gif;*.jpg;*.jpeg|All files|*.*"; + dlgLoadImage.ShowPreview = true; + // + // pbScaled + // + pbScaled.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + pbScaled.Location = new System.Drawing.Point(424, 27); + pbScaled.Name = "pbScaled"; + pbScaled.Size = new System.Drawing.Size(200, 200); + pbScaled.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; + pbScaled.TabIndex = 5; + pbScaled.TabStop = false; + // + // btnConvert + // + btnConvert.Enabled = false; + btnConvert.Image = Properties.Resources.calculator; + btnConvert.Location = new System.Drawing.Point(263, 233); + btnConvert.Name = "btnConvert"; + btnConvert.Size = new System.Drawing.Size(110, 27); + btnConvert.TabIndex = 6; + btnConvert.Text = " Convert"; + btnConvert.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + btnConvert.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText; + toolTip1.SetToolTip(btnConvert, "Convert image to pixelated black and white"); + btnConvert.UseVisualStyleBackColor = true; + btnConvert.Click += btnConvert_Click; + // + // tbPixelization + // + tbPixelization.AutoSize = false; + tbPixelization.Cursor = System.Windows.Forms.Cursors.SizeWE; + tbPixelization.LargeChange = 2; + tbPixelization.Location = new System.Drawing.Point(39, 296); + tbPixelization.Maximum = 25; + tbPixelization.Minimum = 1; + tbPixelization.Name = "tbPixelization"; + tbPixelization.Size = new System.Drawing.Size(128, 32); + tbPixelization.TabIndex = 7; + toolTip1.SetToolTip(tbPixelization, "Pixelization level. Higher value makes bigger pixels during conversion"); + tbPixelization.Value = 1; + tbPixelization.ValueChanged += tbPixelization_ValueChanged; + tbPixelization.KeyDown += tbPixelization_KeyDown; + // + // lblPixelization + // + lblPixelization.Location = new System.Drawing.Point(39, 323); + lblPixelization.Name = "lblPixelization"; + lblPixelization.Size = new System.Drawing.Size(128, 15); + lblPixelization.TabIndex = 8; + lblPixelization.Text = "Pixelization: 1"; + lblPixelization.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // lblThreshold + // + lblThreshold.Location = new System.Drawing.Point(263, 323); + lblThreshold.Name = "lblThreshold"; + lblThreshold.Size = new System.Drawing.Size(110, 15); + lblThreshold.TabIndex = 10; + lblThreshold.Text = "Threshold: 0"; + lblThreshold.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // tbThreshold + // + tbThreshold.AutoSize = false; + tbThreshold.Cursor = System.Windows.Forms.Cursors.SizeWE; + tbThreshold.LargeChange = 10; + tbThreshold.Location = new System.Drawing.Point(254, 296); + tbThreshold.Maximum = 127; + tbThreshold.Minimum = -128; + tbThreshold.Name = "tbThreshold"; + tbThreshold.Size = new System.Drawing.Size(128, 32); + tbThreshold.TabIndex = 9; + tbThreshold.TickFrequency = 8; + toolTip1.SetToolTip(tbThreshold, "Black / White conversion threshold"); + tbThreshold.ValueChanged += tbThreshold_ValueChanged; + tbThreshold.KeyDown += tbThreshold_KeyDown; + // + // lblWhite + // + lblWhite.AutoSize = true; + lblWhite.Location = new System.Drawing.Point(221, 282); + lblWhite.Name = "lblWhite"; + lblWhite.Size = new System.Drawing.Size(67, 15); + lblWhite.TabIndex = 11; + lblWhite.Text = "More white"; + lblWhite.TextAlign = System.Drawing.ContentAlignment.TopRight; + // + // lblBlack + // + lblBlack.AutoSize = true; + lblBlack.Location = new System.Drawing.Point(349, 282); + lblBlack.Name = "lblBlack"; + lblBlack.Size = new System.Drawing.Size(66, 15); + lblBlack.TabIndex = 12; + lblBlack.Text = "More black"; + // + // btnResize + // + btnResize.Enabled = false; + btnResize.Image = Properties.Resources.arrow_inout; + btnResize.Location = new System.Drawing.Point(464, 233); + btnResize.Name = "btnResize"; + btnResize.Size = new System.Drawing.Size(120, 27); + btnResize.TabIndex = 13; + btnResize.Text = " Resize to frame"; + btnResize.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + btnResize.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText; + toolTip1.SetToolTip(btnResize, "Resize converted image to fit the current frame"); + btnResize.UseVisualStyleBackColor = true; + btnResize.Click += btnResize_Click; + // + // lblOrigSize + // + lblOrigSize.AutoSize = true; + lblOrigSize.Location = new System.Drawing.Point(12, 9); + lblOrigSize.Name = "lblOrigSize"; + lblOrigSize.Size = new System.Drawing.Size(30, 15); + lblOrigSize.TabIndex = 14; + lblOrigSize.Text = "0 x 0"; + // + // lblProcessedSize + // + lblProcessedSize.AutoSize = true; + lblProcessedSize.Location = new System.Drawing.Point(218, 9); + lblProcessedSize.Name = "lblProcessedSize"; + lblProcessedSize.Size = new System.Drawing.Size(30, 15); + lblProcessedSize.TabIndex = 15; + lblProcessedSize.Text = "0 x 0"; + // + // lblScaledSize + // + lblScaledSize.AutoSize = true; + lblScaledSize.Location = new System.Drawing.Point(424, 9); + lblScaledSize.Name = "lblScaledSize"; + lblScaledSize.Size = new System.Drawing.Size(30, 15); + lblScaledSize.TabIndex = 16; + lblScaledSize.Text = "0 x 0"; + // + // label1 + // + label1.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D; + label1.Location = new System.Drawing.Point(6, 279); + label1.Name = "label1"; + label1.Size = new System.Drawing.Size(209, 2); + label1.TabIndex = 17; + // + // label2 + // + label2.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D; + label2.Location = new System.Drawing.Point(421, 279); + label2.Name = "label2"; + label2.Size = new System.Drawing.Size(209, 2); + label2.TabIndex = 18; + // + // label3 + // + label3.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D; + label3.Location = new System.Drawing.Point(421, 230); + label3.Name = "label3"; + label3.Size = new System.Drawing.Size(2, 51); + label3.TabIndex = 19; + // + // label4 + // + label4.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D; + label4.Location = new System.Drawing.Point(215, 230); + label4.Name = "label4"; + label4.Size = new System.Drawing.Size(2, 51); + label4.TabIndex = 20; + // + // lblTransparency + // + lblTransparency.Location = new System.Drawing.Point(438, 323); + lblTransparency.Name = "lblTransparency"; + lblTransparency.Size = new System.Drawing.Size(184, 15); + lblTransparency.TabIndex = 22; + lblTransparency.Text = "Transparency threshold: 32"; + lblTransparency.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // tbTransparency + // + tbTransparency.AutoSize = false; + tbTransparency.Cursor = System.Windows.Forms.Cursors.SizeWE; + tbTransparency.LargeChange = 16; + tbTransparency.Location = new System.Drawing.Point(464, 296); + tbTransparency.Maximum = 255; + tbTransparency.Name = "tbTransparency"; + tbTransparency.Size = new System.Drawing.Size(128, 32); + tbTransparency.SmallChange = 4; + tbTransparency.TabIndex = 21; + tbTransparency.TickFrequency = 8; + toolTip1.SetToolTip(tbTransparency, "Transparency threshold. Higher value makes more white"); + tbTransparency.Value = 4; + tbTransparency.ValueChanged += tbTransparency_ValueChanged; + tbTransparency.KeyDown += tbTransparency_KeyDown; + // + // toolTip1 + // + toolTip1.AutoPopDelay = 10000; + toolTip1.InitialDelay = 500; + toolTip1.ReshowDelay = 100; + // + // label5 + // + label5.AutoSize = true; + label5.Location = new System.Drawing.Point(438, 282); + label5.Name = "label5"; + label5.Size = new System.Drawing.Size(66, 15); + label5.TabIndex = 24; + label5.Text = "More black"; + // + // label6 + // + label6.AutoSize = true; + label6.Location = new System.Drawing.Point(555, 282); + label6.Name = "label6"; + label6.Size = new System.Drawing.Size(67, 15); + label6.TabIndex = 23; + label6.Text = "More white"; + label6.TextAlign = System.Drawing.ContentAlignment.TopRight; + // + // ImageImporter + // + AcceptButton = btnOK; + AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); + AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + CancelButton = btnCancel; + ClientSize = new System.Drawing.Size(634, 381); + Controls.Add(label5); + Controls.Add(label6); + Controls.Add(lblTransparency); + Controls.Add(tbTransparency); + Controls.Add(label4); + Controls.Add(label3); + Controls.Add(label2); + Controls.Add(label1); + Controls.Add(lblScaledSize); + Controls.Add(lblProcessedSize); + Controls.Add(lblOrigSize); + Controls.Add(btnResize); + Controls.Add(lblBlack); + Controls.Add(lblWhite); + Controls.Add(lblThreshold); + Controls.Add(tbThreshold); + Controls.Add(lblPixelization); + Controls.Add(tbPixelization); + Controls.Add(btnConvert); + Controls.Add(pbScaled); + Controls.Add(btnLoadImage); + Controls.Add(pbProcessed); + Controls.Add(pbOriginal); + Controls.Add(btnCancel); + Controls.Add(btnOK); + FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + MaximizeBox = false; + MinimizeBox = false; + Name = "ImageImporter"; + ShowIcon = false; + ShowInTaskbar = false; + StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + Text = "Import Image"; + Paint += ImageImporter_Paint; + ((System.ComponentModel.ISupportInitialize)pbOriginal).EndInit(); + ((System.ComponentModel.ISupportInitialize)pbProcessed).EndInit(); + ((System.ComponentModel.ISupportInitialize)pbScaled).EndInit(); + ((System.ComponentModel.ISupportInitialize)tbPixelization).EndInit(); + ((System.ComponentModel.ISupportInitialize)tbThreshold).EndInit(); + ((System.ComponentModel.ISupportInitialize)tbTransparency).EndInit(); + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private System.Windows.Forms.Button btnOK; + private System.Windows.Forms.Button btnCancel; + private System.Windows.Forms.PictureBox pbOriginal; + private System.Windows.Forms.PictureBox pbProcessed; + private System.Windows.Forms.Button btnLoadImage; + private System.Windows.Forms.OpenFileDialog dlgLoadImage; + private System.Windows.Forms.PictureBox pbScaled; + private System.Windows.Forms.Button btnConvert; + private System.Windows.Forms.TrackBar tbPixelization; + private System.Windows.Forms.Label lblPixelization; + private System.Windows.Forms.Label lblThreshold; + private System.Windows.Forms.TrackBar tbThreshold; + private System.Windows.Forms.Label lblWhite; + private System.Windows.Forms.Label lblBlack; + private System.Windows.Forms.Button btnResize; + private System.Windows.Forms.Label lblOrigSize; + private System.Windows.Forms.Label lblProcessedSize; + private System.Windows.Forms.Label lblScaledSize; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.Label lblTransparency; + private System.Windows.Forms.TrackBar tbTransparency; + private System.Windows.Forms.ToolTip toolTip1; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.Label label6; + } +} \ No newline at end of file diff --git a/McBitFont/ImageImporter.cs b/McBitFont/ImageImporter.cs new file mode 100644 index 0000000..527cca4 --- /dev/null +++ b/McBitFont/ImageImporter.cs @@ -0,0 +1,235 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.ComponentModel.DataAnnotations; +using System.Data; +using System.Drawing; +using System.Drawing.Drawing2D; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace McBitFont { + public partial class ImageImporter : Form { + + private int fw, fh, pixelization, threshold; + private Color[] colorPool = [Color.Black, Color.White]; + private Bitmap bmpOriginal, bmpProcessed; + public Bitmap bmpScaled; + + public ImageImporter(int width, int height) { + InitializeComponent(); + fw = width; + fh = height; + } + + private void UpdateControls(byte level) { + switch (level) { + case 1: + bmpProcessed = null; + bmpScaled = null; + pbProcessed.Image = null; + pbScaled.Image = null; + lblProcessedSize.Text = "0 x 0"; + lblScaledSize.Text = "0 x 0"; + btnResize.Enabled = false; + btnOK.Enabled = false; + btnConvert.Enabled = true; + break; + case 2: + bmpScaled = null; + pbScaled.Image = null; + lblScaledSize.Text = "0 x 0"; + btnOK.Enabled = false; + btnResize.Enabled = true; + break; + case 3: + btnOK.Enabled = true; + break; + } + } + + private void btnOK_Click(object sender, EventArgs e) { + DialogResult = DialogResult.OK; + } + + private void btnCancel_Click(object sender, EventArgs e) { + DialogResult = DialogResult.Cancel; + } + + // Pick a color from color pool that is closest to an average of given colors + private Color PickColor(Color[] colors) { + int i; + int r = 0; int g = 0; int b = 0; + + // Calculating average color amongst givet color set + for (i = 0; i < colors.Length; i++) { + r += colors[i].R; + g += colors[i].G; + b += colors[i].B; + } + r /= colors.Length; + g /= colors.Length; + b /= colors.Length; + + int near = 1000; + int ind = 0; + + // Picking a closts color from color pool + for (i = 0; i < colorPool.Length; i++) { + int valR = colorPool[i].R - r + threshold; + int valG = colorPool[i].R - g + threshold; + int valB = colorPool[i].R - b + threshold; + if (valR < 0) valR = -valR; + if (valG < 0) valG = -valG; + if (valB < 0) valB = -valB; + + threshold = tbThreshold.Value; + int total = valR + valG + valB; + + if (total < near) { + ind = i; + near = total; + } + } + return colorPool[ind]; + } + + private static void DrawArrow(Graphics g, Point from, Point to, float thickness = 1, Color? color = null) { + if (color == null) color = Color.Black; + var pen = new Pen((Color)color, thickness) { + CustomEndCap = new AdjustableArrowCap(4, 5) + }; + g.DrawLine(pen, from, to); + } + + private void tbPixelization_ValueChanged(object sender, EventArgs e) { + lblPixelization.Text = "Pixelization: " + tbPixelization.Value.ToString(); + } + + private void tbThreshold_ValueChanged(object sender, EventArgs e) { + lblThreshold.Text = "Threshold: " + tbThreshold.Value.ToString(); + } + + private void btnLoadImage_Click(object sender, EventArgs e) { + if (dlgLoadImage.ShowDialog() == DialogResult.OK) { + bmpOriginal = new Bitmap(dlgLoadImage.FileName); + + pbOriginal.Image = Draw200x200(bmpOriginal); + lblOrigSize.Text = bmpOriginal.Width.ToString() + " x " + bmpOriginal.Height.ToString() + + " (" + pbOriginal.Image.Width.ToString() + " x " + pbOriginal.Image.Height.ToString() + ")"; + + // Clear other images + UpdateControls(1); + } + } + + private void btnConvert_Click(object sender, EventArgs e) { + pixelization = tbPixelization.Value; + //Bitmap bmOrig = (Bitmap)pbOriginal.Image; + bmpProcessed = new Bitmap(bmpOriginal.Width, bmpOriginal.Height); + + // Processing image + using (Graphics g = Graphics.FromImage(bmpProcessed)) { + List block; + Rectangle rect = new Rectangle(); + SolidBrush sb = new SolidBrush(Color.Black); + Color final = Color.Black; + Color pixel; + + // Going through original image with steps = pixelization + for (int x = 0; x < bmpOriginal.Width; x += pixelization) { + for (int y = 0; y < bmpOriginal.Height; y += pixelization) { + block = []; + + // Going throug a block pixel by pixel to calculate its average color later + for (int v = 0; v < pixelization; v++) { + for (int c = 0; c < pixelization; c++) { + if (x + v < bmpOriginal.Width && y + c < bmpOriginal.Height) { + pixel = bmpOriginal.GetPixel(x + v, y + c); + if (pixel.A <= tbTransparency.Value) pixel = Color.White; + block.Add(pixel); + } + } + } + + // Getting a color from the color pool and painting the block + if (block.Count > 0) { + final = PickColor(block.ToArray()); + sb.Color = final; + + rect.X = x; + rect.Y = y; + rect.Width = pixelization; + rect.Height = pixelization; + + g.FillRectangle(sb, rect); + } + } + } + } + + pbProcessed.Image = Draw200x200(bmpProcessed); + lblProcessedSize.Text = bmpProcessed.Width.ToString() + " x " + bmpProcessed.Height.ToString() + + " (" + pbProcessed.Image.Width.ToString() + " x " + pbProcessed.Image.Height.ToString() + ")"; + + UpdateControls(2); + } + + private void btnResize_Click(object sender, EventArgs e) { + bmpScaled = DrawScaled(bmpProcessed, fw, fh); + + pbScaled.Image = Draw200x200(bmpScaled); + lblScaledSize.Text = bmpScaled.Width.ToString() + " x " + bmpScaled.Height.ToString() + + " (" + pbScaled.Image.Width.ToString() + " x " + pbScaled.Image.Height.ToString() + ")"; + UpdateControls(3); + } + + // Draw 200x200 bitmap for picturebox + private static Bitmap Draw200x200(Bitmap bmpRef) { + return DrawScaled(bmpRef, 200, 200); + } + + // Draw scaled bitmap keeping aspect ratio + private static Bitmap DrawScaled(Bitmap bmpRef, int w, int h) { + var scale = Math.Min(w / (double)bmpRef.Width, h / (double)bmpRef.Height); + var bmpNew = new Bitmap((int)(bmpRef.Width * scale), (int)(bmpRef.Height * scale)); + + using (Graphics g = Graphics.FromImage(bmpNew)) { + g.InterpolationMode = InterpolationMode.NearestNeighbor; + g.PixelOffsetMode = PixelOffsetMode.Half; + g.DrawImage(bmpRef, 0, 0, bmpNew.Width, bmpNew.Height); + } + + return bmpNew; + } + + private void tbThreshold_KeyDown(object sender, KeyEventArgs e) { + if (e.KeyCode == Keys.C) { + tbThreshold.Value = 0; + } + } + + private void tbPixelization_KeyDown(object sender, KeyEventArgs e) { + if (e.KeyCode == Keys.C) { + tbPixelization.Value = 1; + } + } + + private void tbTransparency_ValueChanged(object sender, EventArgs e) { + lblTransparency.Text = "Transparency threshold: " + tbTransparency.Value.ToString(); + } + + private void tbTransparency_KeyDown(object sender, KeyEventArgs e) { + if (e.KeyCode == Keys.C) { + tbTransparency.Value = 32; + } + } + + private void ImageImporter_Paint(object sender, PaintEventArgs e) { + DrawArrow(e.Graphics, new Point(175, 246), new Point(255, 246), 2, Color.SlateGray); + DrawArrow(e.Graphics, new Point(380, 246), new Point(455, 246), 2, Color.SlateGray); + } + } +} diff --git a/McBitFont/ImageImporter.resx b/McBitFont/ImageImporter.resx new file mode 100644 index 0000000..d3fcd46 --- /dev/null +++ b/McBitFont/ImageImporter.resx @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 147, 17 + + + 17, 17 + + + 147, 17 + + \ No newline at end of file diff --git a/McBitFont/McBitFont.csproj b/McBitFont/McBitFont.csproj index 8d5ff44..ec839cf 100644 --- a/McBitFont/McBitFont.csproj +++ b/McBitFont/McBitFont.csproj @@ -1,17 +1,7 @@ - - - + - Debug - AnyCPU - {7C01529E-4414-405F-9B57-19FA4AF8ED60} + net9.0-windows WinExe - McBitFont - McBitFont - v4.7.2 - 512 - true - true publish\ true Disk @@ -27,204 +17,34 @@ false false true - - - - - AnyCPU - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - AnyCPU - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - + true + true icon_64.ico + 2.0.0.0 + 2.0.0.0 + + + portable + + + portable - - - ..\packages\MessagePack.3.1.3\lib\net472\MessagePack.dll - - - ..\packages\MessagePack.Annotations.3.1.3\lib\netstandard2.0\MessagePack.Annotations.dll - - - ..\packages\Microsoft.Bcl.AsyncInterfaces.8.0.0\lib\net462\Microsoft.Bcl.AsyncInterfaces.dll - - - ..\packages\Microsoft.NET.StringTools.17.11.4\lib\net472\Microsoft.NET.StringTools.dll - - - - ..\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll - - - ..\packages\System.Collections.Immutable.8.0.0\lib\net462\System.Collections.Immutable.dll - - - - ..\packages\System.Memory.4.5.5\lib\net461\System.Memory.dll - - - - ..\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll - - - ..\packages\System.Runtime.CompilerServices.Unsafe.6.0.0\lib\net461\System.Runtime.CompilerServices.Unsafe.dll - - - ..\packages\System.Threading.Tasks.Extensions.4.5.4\lib\net461\System.Threading.Tasks.Extensions.dll - - - - - - - - - - - - - - Form - - - About.cs - - - Form - - - Export.cs - - - Form - - - Form1.cs - - - Form - - - New.cs - - - - - About.cs - - - Export.cs - - - Form1.cs - - - New.cs - - - ResXFileCodeGenerator - Resources.Designer.cs - Designer - - - True - Resources.resx - True - - - - SettingsSingleFileGenerator - Settings.Designer.cs - - - True - Settings.settings - True - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + + + + + @@ -238,12 +58,28 @@ false - - - - - This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. - - - + + + True + True + Resources.resx + + + True + True + Settings.settings + + + + + ResXFileCodeGenerator + Resources.Designer.cs + + + + + SettingsSingleFileGenerator + Settings.Designer.cs + + \ No newline at end of file diff --git a/McBitFont/Properties/AssemblyInfo.cs b/McBitFont/Properties/AssemblyInfo.cs deleted file mode 100644 index cb38638..0000000 --- a/McBitFont/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// Общие сведения об этой сборке предоставляются следующим набором -// набора атрибутов. Измените значения этих атрибутов для изменения сведений, -// связанных со сборкой. -[assembly: AssemblyTitle("McBitFont")] -[assembly: AssemblyDescription("McFLY's Bit Font and Image Editor")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("McBitFont")] -[assembly: AssemblyCopyright("© Anton Mukhin, 2023")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Установка значения False для параметра ComVisible делает типы в этой сборке невидимыми -// для компонентов COM. Если необходимо обратиться к типу в этой сборке через -// COM, следует установить атрибут ComVisible в TRUE для этого типа. -[assembly: ComVisible(false)] - -// Следующий GUID служит для идентификации библиотеки типов, если этот проект будет видимым для COM -[assembly: Guid("7c01529e-4414-405f-9b57-19fa4af8ed60")] - -// Сведения о версии сборки состоят из указанных ниже четырех значений: -// -// Основной номер версии -// Дополнительный номер версии -// Номер сборки -// Редакция -// -// Можно задать все значения или принять номера сборки и редакции по умолчанию -// используя "*", как показано ниже: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.7.0.0")] -[assembly: AssemblyFileVersion("1.7.0.0")] diff --git a/McBitFont/Properties/Resources.Designer.cs b/McBitFont/Properties/Resources.Designer.cs index dc105bc..97cde8f 100644 --- a/McBitFont/Properties/Resources.Designer.cs +++ b/McBitFont/Properties/Resources.Designer.cs @@ -1,10 +1,10 @@ //------------------------------------------------------------------------------ // -// Этот код создан программой. -// Исполняемая версия:4.0.30319.42000 +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 // -// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае -// повторной генерации кода. +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. // //------------------------------------------------------------------------------ @@ -13,12 +13,12 @@ namespace McBitFont.Properties { /// - /// Класс ресурса со строгой типизацией для поиска локализованных строк и т.д. + /// A strongly-typed resource class, for looking up localized strings, etc. /// - // Этот класс создан автоматически классом StronglyTypedResourceBuilder - // с помощью такого средства, как ResGen или Visual Studio. - // Чтобы добавить или удалить член, измените файл .ResX и снова запустите ResGen - // с параметром /str или перестройте свой проект VS. + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] @@ -33,7 +33,7 @@ namespace McBitFont.Properties { } /// - /// Возвращает кэшированный экземпляр ResourceManager, использованный этим классом. + /// Returns the cached ResourceManager instance used by this class. /// [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] internal static global::System.Resources.ResourceManager ResourceManager { @@ -47,8 +47,8 @@ namespace McBitFont.Properties { } /// - /// Перезаписывает свойство CurrentUICulture текущего потока для всех - /// обращений к ресурсу с помощью этого класса ресурса со строгой типизацией. + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. /// [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] internal static global::System.Globalization.CultureInfo Culture { @@ -61,77 +61,107 @@ namespace McBitFont.Properties { } /// - /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// Looks up a localized resource of type System.Drawing.Bitmap. /// - internal static System.Drawing.Bitmap action_add { + internal static System.Drawing.Bitmap add { get { - object obj = ResourceManager.GetObject("action_add", resourceCulture); + object obj = ResourceManager.GetObject("add", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } /// - /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// Looks up a localized resource of type System.Drawing.Bitmap. /// - internal static System.Drawing.Bitmap action_check { + internal static System.Drawing.Bitmap arrow_inout { get { - object obj = ResourceManager.GetObject("action_check", resourceCulture); + object obj = ResourceManager.GetObject("arrow_inout", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } /// - /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// Looks up a localized resource of type System.Drawing.Bitmap. /// - internal static System.Drawing.Bitmap action_remove { + internal static System.Drawing.Bitmap arrow_redo { get { - object obj = ResourceManager.GetObject("action_remove", resourceCulture); + object obj = ResourceManager.GetObject("arrow_redo", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } /// - /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// Looks up a localized resource of type System.Drawing.Bitmap. /// - internal static System.Drawing.Bitmap arrow_back { + internal static System.Drawing.Bitmap arrow_undo { get { - object obj = ResourceManager.GetObject("arrow_back", resourceCulture); + object obj = ResourceManager.GetObject("arrow_undo", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } /// - /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// Looks up a localized resource of type System.Drawing.Bitmap. /// - internal static System.Drawing.Bitmap arrow_down { + internal static System.Drawing.Bitmap calculator { get { - object obj = ResourceManager.GetObject("arrow_down", resourceCulture); + object obj = ResourceManager.GetObject("calculator", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } /// - /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// Looks up a localized resource of type System.Drawing.Bitmap. /// - internal static System.Drawing.Bitmap arrow_next { + internal static System.Drawing.Bitmap Canvas_Clear { get { - object obj = ResourceManager.GetObject("arrow_next", resourceCulture); + object obj = ResourceManager.GetObject("Canvas_Clear", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } /// - /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// Looks up a localized resource of type System.Drawing.Bitmap. /// - internal static System.Drawing.Bitmap arrow_top { + internal static System.Drawing.Bitmap Canvas_Fill { get { - object obj = ResourceManager.GetObject("arrow_top", resourceCulture); + object obj = ResourceManager.GetObject("Canvas_Fill", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } /// - /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap delete { + get { + object obj = ResourceManager.GetObject("delete", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap fam_base { + get { + object obj = ResourceManager.GetObject("fam_base", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap fam_rectt { + get { + object obj = ResourceManager.GetObject("fam_rectt", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. /// internal static System.Drawing.Bitmap Famfamfam_Silk_Disk_16 { get { @@ -141,7 +171,7 @@ namespace McBitFont.Properties { } /// - /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// Looks up a localized resource of type System.Drawing.Bitmap. /// internal static System.Drawing.Bitmap Famfamfam_Silk_Door_out_16 { get { @@ -151,27 +181,7 @@ namespace McBitFont.Properties { } /// - /// Поиск локализованного ресурса типа System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Famfamfam_Silk_Folder_16 { - get { - object obj = ResourceManager.GetObject("Famfamfam-Silk-Folder.16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Поиск локализованного ресурса типа System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Famfamfam_Silk_Folder_page_16 { - get { - object obj = ResourceManager.GetObject("Famfamfam-Silk-Folder-page.16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// Looks up a localized resource of type System.Drawing.Bitmap. /// internal static System.Drawing.Bitmap Famfamfam_Silk_Page_copy_16 { get { @@ -181,7 +191,7 @@ namespace McBitFont.Properties { } /// - /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// Looks up a localized resource of type System.Drawing.Bitmap. /// internal static System.Drawing.Bitmap Famfamfam_Silk_Page_paste_16 { get { @@ -191,7 +201,7 @@ namespace McBitFont.Properties { } /// - /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// Looks up a localized resource of type System.Drawing.Bitmap. /// internal static System.Drawing.Bitmap Famfamfam_Silk_Page_white_16 { get { @@ -201,7 +211,7 @@ namespace McBitFont.Properties { } /// - /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// Looks up a localized resource of type System.Drawing.Bitmap. /// internal static System.Drawing.Bitmap Famfamfam_Silk_Shape_flip_horizontal_16 { get { @@ -211,7 +221,7 @@ namespace McBitFont.Properties { } /// - /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// Looks up a localized resource of type System.Drawing.Bitmap. /// internal static System.Drawing.Bitmap Famfamfam_Silk_Shape_flip_vertical_16 { get { @@ -221,7 +231,7 @@ namespace McBitFont.Properties { } /// - /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// Looks up a localized resource of type System.Drawing.Bitmap. /// internal static System.Drawing.Bitmap file { get { @@ -231,7 +241,7 @@ namespace McBitFont.Properties { } /// - /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// Looks up a localized resource of type System.Drawing.Bitmap. /// internal static System.Drawing.Bitmap folder_open { get { @@ -241,7 +251,17 @@ namespace McBitFont.Properties { } /// - /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap folder_table { + get { + object obj = ResourceManager.GetObject("folder_table", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. /// internal static System.Drawing.Bitmap icon { get { @@ -251,7 +271,7 @@ namespace McBitFont.Properties { } /// - /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// Looks up a localized resource of type System.Drawing.Bitmap. /// internal static System.Drawing.Bitmap icon_32 { get { @@ -261,7 +281,7 @@ namespace McBitFont.Properties { } /// - /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// Looks up a localized resource of type System.Drawing.Bitmap. /// internal static System.Drawing.Bitmap icon_64 { get { @@ -271,21 +291,131 @@ namespace McBitFont.Properties { } /// - /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// Looks up a localized resource of type System.Drawing.Bitmap. /// - internal static System.Drawing.Bitmap Ionic_Ionicons_Invert_mode_outline_16 { + internal static System.Drawing.Bitmap z_align_center { get { - object obj = ResourceManager.GetObject("Ionic-Ionicons-Invert-mode-outline.16", resourceCulture); + object obj = ResourceManager.GetObject("z_align_center", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } /// - /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// Looks up a localized resource of type System.Drawing.Bitmap. /// - internal static System.Drawing.Bitmap save { + internal static System.Drawing.Bitmap z_asterisk { get { - object obj = ResourceManager.GetObject("save", resourceCulture); + object obj = ResourceManager.GetObject("z_asterisk", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap z_contrast { + get { + object obj = ResourceManager.GetObject("z_contrast", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap z_down { + get { + object obj = ResourceManager.GetObject("z_down", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap z_export { + get { + object obj = ResourceManager.GetObject("z_export", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap z_folder_image { + get { + object obj = ResourceManager.GetObject("z_folder_image", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap z_left { + get { + object obj = ResourceManager.GetObject("z_left", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap z_redo { + get { + object obj = ResourceManager.GetObject("z_redo", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap z_right { + get { + object obj = ResourceManager.GetObject("z_right", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap z_shading { + get { + object obj = ResourceManager.GetObject("z_shading", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap z_tick { + get { + object obj = ResourceManager.GetObject("z_tick", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap z_undo { + get { + object obj = ResourceManager.GetObject("z_undo", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap z_uo { + get { + object obj = ResourceManager.GetObject("z_uo", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } diff --git a/McBitFont/Properties/Resources.resx b/McBitFont/Properties/Resources.resx index cf25ab1..e072095 100644 --- a/McBitFont/Properties/Resources.resx +++ b/McBitFont/Properties/Resources.resx @@ -118,73 +118,112 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - ..\Resources\Ionic-Ionicons-Invert-mode-outline.16.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 - - ..\Resources\arrow_next.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\package_go.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Resources\Famfamfam-Silk-Page-copy.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\arrow_back.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\action_check.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\icon.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\save.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\Famfamfam-Silk-Door-out.16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\Famfamfam-Silk-Folder-page.16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\Famfamfam-Silk-Folder.16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\action_add.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 + + ..\Resources\contrast.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Famfamfam-Silk-Page-paste.16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Resources\action_remove.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 + + + ..\Resources\Famfamfam-Silk-Page-copy.16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\arrow_inout.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\icon.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\arrow_right.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\calculator.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\asterisk_orange.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\icons\famfamfam\arrow_down.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Canvas_Clear.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 + + + ..\Resources\Famfamfam-Silk-Door-out.16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\file.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Resources\Famfamfam-Silk-Shape-flip-vertical.16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\shape_align_center.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Resources\Famfamfam-Silk-Shape-flip-horizontal.16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\shading.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Resources\arrow_top.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\arrow_down.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\add.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\icon_32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\arrow_undo.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 + + + ..\Resources\delete.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\arrow_redo.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\fam_base.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\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\Famfamfam-Silk-Disk.16.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 + + + ..\Resources\Famfamfam-Silk-Shape-flip-horizontal.16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Famfamfam-Silk-Shape-flip-vertical.16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\folder_image.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\undo.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + ..\Resources\icon_64.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 + \ No newline at end of file diff --git a/McBitFont/Properties/Settings.Designer.cs b/McBitFont/Properties/Settings.Designer.cs index bfdecbb..f3dca9d 100644 --- a/McBitFont/Properties/Settings.Designer.cs +++ b/McBitFont/Properties/Settings.Designer.cs @@ -9,14 +9,14 @@ //------------------------------------------------------------------------------ namespace McBitFont.Properties { - - + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.14.0.0")] internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { - + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); - + public static Settings Default { get { return defaultInstance; diff --git a/McBitFont/Resources/Canvas_Clear.png b/McBitFont/Resources/Canvas_Clear.png new file mode 100644 index 0000000..ead2bd1 Binary files /dev/null and b/McBitFont/Resources/Canvas_Clear.png differ diff --git a/McBitFont/Resources/Canvas_Fill.png b/McBitFont/Resources/Canvas_Fill.png new file mode 100644 index 0000000..ddc5cd0 Binary files /dev/null and b/McBitFont/Resources/Canvas_Fill.png differ diff --git a/McBitFont/Resources/add.png b/McBitFont/Resources/add.png new file mode 100644 index 0000000..6332fef Binary files /dev/null and b/McBitFont/Resources/add.png differ diff --git a/McBitFont/Resources/arrow_inout.png b/McBitFont/Resources/arrow_inout.png new file mode 100644 index 0000000..1b76367 Binary files /dev/null and b/McBitFont/Resources/arrow_inout.png differ diff --git a/McBitFont/Resources/arrow_inout1.png b/McBitFont/Resources/arrow_inout1.png new file mode 100644 index 0000000..1b76367 Binary files /dev/null and b/McBitFont/Resources/arrow_inout1.png differ diff --git a/McBitFont/Resources/arrow_left.png b/McBitFont/Resources/arrow_left.png new file mode 100644 index 0000000..0f58984 Binary files /dev/null and b/McBitFont/Resources/arrow_left.png differ diff --git a/McBitFont/Resources/arrow_redo.png b/McBitFont/Resources/arrow_redo.png new file mode 100644 index 0000000..fdc394c Binary files /dev/null and b/McBitFont/Resources/arrow_redo.png differ diff --git a/McBitFont/Resources/arrow_right.png b/McBitFont/Resources/arrow_right.png new file mode 100644 index 0000000..bc153c8 Binary files /dev/null and b/McBitFont/Resources/arrow_right.png differ diff --git a/McBitFont/Resources/arrow_undo.png b/McBitFont/Resources/arrow_undo.png new file mode 100644 index 0000000..6972c5e Binary files /dev/null and b/McBitFont/Resources/arrow_undo.png differ diff --git a/McBitFont/Resources/arrow_up.png b/McBitFont/Resources/arrow_up.png new file mode 100644 index 0000000..1ebb193 Binary files /dev/null and b/McBitFont/Resources/arrow_up.png differ diff --git a/McBitFont/Resources/asterisk_orange.png b/McBitFont/Resources/asterisk_orange.png new file mode 100644 index 0000000..1ebebde Binary files /dev/null and b/McBitFont/Resources/asterisk_orange.png differ diff --git a/McBitFont/Resources/calculator.png b/McBitFont/Resources/calculator.png new file mode 100644 index 0000000..701a60a Binary files /dev/null and b/McBitFont/Resources/calculator.png differ diff --git a/McBitFont/Resources/contrast.png b/McBitFont/Resources/contrast.png new file mode 100644 index 0000000..e623c52 Binary files /dev/null and b/McBitFont/Resources/contrast.png differ diff --git a/McBitFont/Resources/delete.png b/McBitFont/Resources/delete.png new file mode 100644 index 0000000..08f2493 Binary files /dev/null and b/McBitFont/Resources/delete.png differ diff --git a/McBitFont/Resources/fam_base.png b/McBitFont/Resources/fam_base.png new file mode 100644 index 0000000..ed6cdcb Binary files /dev/null and b/McBitFont/Resources/fam_base.png differ diff --git a/McBitFont/Resources/fam_rectt.png b/McBitFont/Resources/fam_rectt.png new file mode 100644 index 0000000..796b520 Binary files /dev/null and b/McBitFont/Resources/fam_rectt.png differ diff --git a/McBitFont/Resources/folder_image.png b/McBitFont/Resources/folder_image.png new file mode 100644 index 0000000..d5df75b Binary files /dev/null and b/McBitFont/Resources/folder_image.png differ diff --git a/McBitFont/Resources/folder_table.png b/McBitFont/Resources/folder_table.png new file mode 100644 index 0000000..473cee3 Binary files /dev/null and b/McBitFont/Resources/folder_table.png differ diff --git a/McBitFont/Resources/package_go.png b/McBitFont/Resources/package_go.png new file mode 100644 index 0000000..aace63a Binary files /dev/null and b/McBitFont/Resources/package_go.png differ diff --git a/McBitFont/Resources/redo.png b/McBitFont/Resources/redo.png new file mode 100644 index 0000000..f350a23 Binary files /dev/null and b/McBitFont/Resources/redo.png differ diff --git a/McBitFont/Resources/shading.png b/McBitFont/Resources/shading.png new file mode 100644 index 0000000..09275f9 Binary files /dev/null and b/McBitFont/Resources/shading.png differ diff --git a/McBitFont/Resources/shape_align_center.png b/McBitFont/Resources/shape_align_center.png new file mode 100644 index 0000000..efe9a98 Binary files /dev/null and b/McBitFont/Resources/shape_align_center.png differ diff --git a/McBitFont/Resources/tick.png b/McBitFont/Resources/tick.png new file mode 100644 index 0000000..a9925a0 Binary files /dev/null and b/McBitFont/Resources/tick.png differ diff --git a/McBitFont/Resources/undo.png b/McBitFont/Resources/undo.png new file mode 100644 index 0000000..1bf10d6 Binary files /dev/null and b/McBitFont/Resources/undo.png differ diff --git a/McBitFont/packages.config b/McBitFont/packages.config deleted file mode 100644 index bb9683a..0000000 --- a/McBitFont/packages.config +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - \ No newline at end of file diff --git a/README.md b/README.md index 595106b..b2a4122 100644 --- a/README.md +++ b/README.md @@ -5,32 +5,46 @@ McFLY's Bit Font and Image Editor Features: - Generate a project based on a font installed in the system - Basic pixel manipulations: shift, flip, invert, etc... +- Import an image - Save / Load your project for later edits - Export as a C array in different formats -Requires .Net Framework 4.7+ +Requires: +- Windows 7+ +- .NET 9 Some basic hints on the interface: -- Mouse 1 to mark a puxel black -- Mouse 2 to mark a puxel white +- Mouse 1 to mark a pixel black +- Mouse 2 to mark a pixel white - Drag the mouse holding a button to draw pixels - Mouse Scroll to scroll up and down -- Crtl + scroll to zoom - Shift + scroll to scroll left and right +- Crtl + scroll to zoom -Download in the Releases section! +Download in the [Releases](https://gitea.mcflyer.ru/McFLY/McBitFont/releases) section! + +#### Important: +**Since v2.0 new save file format is implemented. You can use [McBitFont v1.7](https://gitea.mcflyer.ru/McFLY/McBitFont/releases/tag/v1.7) to convert old saved files to the new format.** ### Screenshots: Main window -![Main window](/images/Screenshot_01.png) +![Main window](/images/Screenshot_Main.png) New project dialog -![New project](/images/Screenshot_02.png) +![New project](/images/Screenshot_New.png) Export dialog -![Export](/images/Screenshot_03.png) +![Export](/images/Screenshot_Export.png) + +Import Image dialog + +![Import Image](/images/Screenshot_Import-image.png) + +Code Shift dialog + +![Code Shift](/images/Screenshot_Code-shift.png) diff --git a/TODO.txt b/TODO.txt index 9044326..cd2db92 100644 --- a/TODO.txt +++ b/TODO.txt @@ -1,15 +1,28 @@ Application: +V Migrate from .Net Framework 4.7 to .NET 9 +V New Save file format! Use McBitFont v1.7 to convert old save files to the new format. +V Better quality pictures in symbol list +V Spinning cursor when application is busy +V Change Menu icons +V Re-arranged menu items +V Option to display codes in Hex numbers +V Make symbol list wider to display 8 characters instead of 7 Functionality: -- Context menu in symbol navigator -- Delete symbols before/after selected -- Shift all symbols on code line (change symbol codes) -- Specify starting code (extends the shift) -- Ability to make monospaced font a variable width one -- Undo/Redo -- Image import from a file -- Import from a text array -- Rectangle selection to mass-paint, shift and mirror pixels -- "Packed" fonts export +V Fill canvas button +V Context menu in symbol navigator +V Delete symbols before/after selected +V Shift all symbols on code line (change symbol codes) +V Specify starting code (extends the shift) +V Ability to make monospaced font a variable width one +V Undo/Redo for canvas changes +V Image import from a file +V Import from a text array +V Rectangle selection to mass-paint, shift and mirror pixels etc... +V "Packed" fonts export +V "Bytes total comment in export Bugs: +V Improper bytes count for 16 or 32 bit numbers export +V Exception on Code Shift when nothing is selected in Symbols List +V Wrongly mark Project as modified on symbol selection diff --git a/examples/CP437_Cyr_8x16.mbfont b/examples/CP437_Cyr_8x16.mbfont new file mode 100644 index 0000000..c63f85c Binary files /dev/null and b/examples/CP437_Cyr_8x16.mbfont differ diff --git a/examples/Font_5x7.mbfont b/examples/Font_5x7.mbfont new file mode 100644 index 0000000..e2b67a6 Binary files /dev/null and b/examples/Font_5x7.mbfont differ diff --git a/examples/Numbers_11x16.mbfont b/examples/Numbers_11x16.mbfont new file mode 100644 index 0000000..e106b4f Binary files /dev/null and b/examples/Numbers_11x16.mbfont differ diff --git a/examples/Numbers_13x20.mbfont b/examples/Numbers_13x20.mbfont new file mode 100644 index 0000000..cdff571 Binary files /dev/null and b/examples/Numbers_13x20.mbfont differ diff --git a/examples/gyver_icons_7x7.mbfont b/examples/gyver_icons_7x7.mbfont new file mode 100644 index 0000000..22176ef Binary files /dev/null and b/examples/gyver_icons_7x7.mbfont differ diff --git a/examples/gyver_icons_8x8.mbfont b/examples/gyver_icons_8x8.mbfont new file mode 100644 index 0000000..3d849c1 Binary files /dev/null and b/examples/gyver_icons_8x8.mbfont differ diff --git a/examples/haxrcorp_4089_cyrillic_altgr.mbfont b/examples/haxrcorp_4089_cyrillic_altgr.mbfont new file mode 100644 index 0000000..5ffadf5 Binary files /dev/null and b/examples/haxrcorp_4089_cyrillic_altgr.mbfont differ diff --git a/examples/helvB08_PREFAB.mbfont b/examples/helvB08_PREFAB.mbfont new file mode 100644 index 0000000..d6fb4dd Binary files /dev/null and b/examples/helvB08_PREFAB.mbfont differ diff --git a/examples/helvB08_t_cyrillic.mbfont b/examples/helvB08_t_cyrillic.mbfont new file mode 100644 index 0000000..2205da1 Binary files /dev/null and b/examples/helvB08_t_cyrillic.mbfont differ diff --git a/examples/icons_9x9.mbfont b/examples/icons_9x9.mbfont new file mode 100644 index 0000000..71b51af Binary files /dev/null and b/examples/icons_9x9.mbfont differ diff --git a/examples/CP437_Cyr_8x16.mbf b/examples/old_format/CP437_Cyr_8x16.mbf similarity index 100% rename from examples/CP437_Cyr_8x16.mbf rename to examples/old_format/CP437_Cyr_8x16.mbf diff --git a/examples/Font_5x7.mbf b/examples/old_format/Font_5x7.mbf similarity index 100% rename from examples/Font_5x7.mbf rename to examples/old_format/Font_5x7.mbf diff --git a/examples/Numbers_11x16.mbf b/examples/old_format/Numbers_11x16.mbf similarity index 100% rename from examples/Numbers_11x16.mbf rename to examples/old_format/Numbers_11x16.mbf diff --git a/examples/Numbers_13x20.mbf b/examples/old_format/Numbers_13x20.mbf similarity index 100% rename from examples/Numbers_13x20.mbf rename to examples/old_format/Numbers_13x20.mbf diff --git a/examples/gyver_icons_7x7.mbf b/examples/old_format/gyver_icons_7x7.mbf similarity index 100% rename from examples/gyver_icons_7x7.mbf rename to examples/old_format/gyver_icons_7x7.mbf diff --git a/examples/gyver_icons_8x8.mbf b/examples/old_format/gyver_icons_8x8.mbf similarity index 100% rename from examples/gyver_icons_8x8.mbf rename to examples/old_format/gyver_icons_8x8.mbf diff --git a/examples/haxrcorp_4089_cyrillic_altgr.mbf b/examples/old_format/haxrcorp_4089_cyrillic_altgr.mbf similarity index 100% rename from examples/haxrcorp_4089_cyrillic_altgr.mbf rename to examples/old_format/haxrcorp_4089_cyrillic_altgr.mbf diff --git a/examples/old_format/helvB08_PREFAB.mbf b/examples/old_format/helvB08_PREFAB.mbf new file mode 100644 index 0000000..6e650fd Binary files /dev/null and b/examples/old_format/helvB08_PREFAB.mbf differ diff --git a/examples/helvB08_t_cyrillic.mbf b/examples/old_format/helvB08_t_cyrillic.mbf similarity index 100% rename from examples/helvB08_t_cyrillic.mbf rename to examples/old_format/helvB08_t_cyrillic.mbf diff --git a/examples/icons_9x9.mbf b/examples/old_format/icons_9x9.mbf similarity index 100% rename from examples/icons_9x9.mbf rename to examples/old_format/icons_9x9.mbf diff --git a/examples/tests/1310396764_rss.png b/examples/tests/1310396764_rss.png new file mode 100644 index 0000000..b44b1a0 Binary files /dev/null and b/examples/tests/1310396764_rss.png differ diff --git a/examples/tests/1310396765_msn.png b/examples/tests/1310396765_msn.png new file mode 100644 index 0000000..f069da5 Binary files /dev/null and b/examples/tests/1310396765_msn.png differ diff --git a/examples/tests/1310396769_gmail.png b/examples/tests/1310396769_gmail.png new file mode 100644 index 0000000..87af9a7 Binary files /dev/null and b/examples/tests/1310396769_gmail.png differ diff --git a/examples/tests/1310396774_facebook.png b/examples/tests/1310396774_facebook.png new file mode 100644 index 0000000..e718c15 Binary files /dev/null and b/examples/tests/1310396774_facebook.png differ diff --git a/examples/tests/1310396812_apple.png b/examples/tests/1310396812_apple.png new file mode 100644 index 0000000..ab2fd44 Binary files /dev/null and b/examples/tests/1310396812_apple.png differ diff --git a/examples/tests/1310396820_linux.png b/examples/tests/1310396820_linux.png new file mode 100644 index 0000000..42cc3b3 Binary files /dev/null and b/examples/tests/1310396820_linux.png differ diff --git a/examples/tests/1310396823_icq.png b/examples/tests/1310396823_icq.png new file mode 100644 index 0000000..44a722f Binary files /dev/null and b/examples/tests/1310396823_icq.png differ diff --git a/examples/tests/1310396825_YouTube.png b/examples/tests/1310396825_YouTube.png new file mode 100644 index 0000000..2c8eaca Binary files /dev/null and b/examples/tests/1310396825_YouTube.png differ diff --git a/examples/tests/derevya.jpg b/examples/tests/derevya.jpg new file mode 100644 index 0000000..e6fe82c Binary files /dev/null and b/examples/tests/derevya.jpg differ diff --git a/examples/tests/flipper.png b/examples/tests/flipper.png new file mode 100644 index 0000000..73ad23f Binary files /dev/null and b/examples/tests/flipper.png differ diff --git a/examples/tests/flipper_1.png b/examples/tests/flipper_1.png new file mode 100644 index 0000000..85cf0ed Binary files /dev/null and b/examples/tests/flipper_1.png differ diff --git a/examples/tests/flipper_2.png b/examples/tests/flipper_2.png new file mode 100644 index 0000000..e5e8678 Binary files /dev/null and b/examples/tests/flipper_2.png differ diff --git a/examples/tests/flipper_3.png b/examples/tests/flipper_3.png new file mode 100644 index 0000000..b491d33 Binary files /dev/null and b/examples/tests/flipper_3.png differ diff --git a/examples/tests/flipper_6.png b/examples/tests/flipper_6.png new file mode 100644 index 0000000..cbf46d3 Binary files /dev/null and b/examples/tests/flipper_6.png differ diff --git a/examples/tests/flipper_multiple.png b/examples/tests/flipper_multiple.png new file mode 100644 index 0000000..dfdaa95 Binary files /dev/null and b/examples/tests/flipper_multiple.png differ diff --git a/examples/tests/flipper_round.png b/examples/tests/flipper_round.png new file mode 100644 index 0000000..9ef9fb5 Binary files /dev/null and b/examples/tests/flipper_round.png differ diff --git a/examples/tests/panda.png b/examples/tests/panda.png new file mode 100644 index 0000000..50d9d12 Binary files /dev/null and b/examples/tests/panda.png differ diff --git a/examples/tests/single_3x5.mbfont b/examples/tests/single_3x5.mbfont new file mode 100644 index 0000000..3f7ee5b Binary files /dev/null and b/examples/tests/single_3x5.mbfont differ diff --git a/examples/tests/single_5x9.mbfont b/examples/tests/single_5x9.mbfont new file mode 100644 index 0000000..7e1a46e Binary files /dev/null and b/examples/tests/single_5x9.mbfont differ diff --git a/examples/tests/test16x16.mbfont b/examples/tests/test16x16.mbfont new file mode 100644 index 0000000..d725662 Binary files /dev/null and b/examples/tests/test16x16.mbfont differ diff --git a/examples/tests/test16x16.txt b/examples/tests/test16x16.txt new file mode 100644 index 0000000..c4a6478 --- /dev/null +++ b/examples/tests/test16x16.txt @@ -0,0 +1,51 @@ +// File generated by McBitFont v2.0 +// made by Anton Mukhin (mcfly@mcflyer.ru) +// +// +// Bytes total: 38 +// Scan order: Columns +// Horizontal direction: Left to Right +// Vertical direction: Top to Bottom + +// Bit order: LSB Top +// Numbers base: Hexadecimal +// Numbers size: 8 bit + +// Text format: 1D C array +// Numbers per line: 1 Column per line + +// Font header map: +// packed; // Flag for packed font +// width; // Font width in pixels (0 - variable width) +// height; // Font height in pixels +// space; // Font space in pixels +// first; // First character code +// last; // Last character code + + +const uint8_t test16x16[] = { + // Meta header + 0, // Is it a packed font? + 16, // Font width in pixels; 0 - variable width + 16, // Font height in pixels + 0, // Font space (between symbols) in pixels + 0, // First character code + 0, // Last character code + // Data: + 0xfc, 0x1f, + 0x00, 0x30, + 0x0c, 0xe0, + 0x06, 0x1c, + 0x02, 0x36, + 0x32, 0x23, + 0x32, 0x21, + 0x82, 0x21, + 0x82, 0x2c, + 0xc6, 0x2c, + 0x64, 0x20, + 0x3c, 0x30, + 0x00, 0x10, + 0x1f, 0x20, + 0xf0, 0x3f, + 0x00, 0x20 +}; diff --git a/examples/tests/testfont.txt b/examples/tests/testfont.txt new file mode 100644 index 0000000..727a511 --- /dev/null +++ b/examples/tests/testfont.txt @@ -0,0 +1,258 @@ +// File generated by McBitFont v2.0 +// made by Anton Mukhin (mcfly@mcflyer.ru) +// +// +// Bytes total: 1768 +// Scan order: Columns +// Horizontal direction: Left to Right +// Vertical direction: Top to Bottom + +// Bit order: LSB Top +// Numbers base: Hexadecimal +// Numbers size: 8 bit + +// Text format: 1D C array +// Numbers per line: 1 Symbol per line + +// Font header map: +// packed; // Flag for packed font// width; // Font width in pixels (0 - variable width) +// height; // Font height in pixels +// space; // Font space in pixels +// first; // First character code +// last; // Last character code + + +const uint8_t haxrcorp_4089_cyrillic_altgr[] = { + // Meta header + 0, // Is it a packed font? + 0, // Font width in pixels; 0 - variable width + 10, // Font height in pixels + 0, // Font space (between symbols) in pixels + 32, // First character code + 255, // Last character code + // Data: + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 32 --> + 0x01, 0xbe, 0x00, // 33 --> ! + 0x03, 0x0e, 0x00, 0x00, 0x00, 0x0e, 0x00, // 34 --> " + 0x05, 0x28, 0x00, 0x7c, 0x00, 0x28, 0x00, 0x7c, 0x00, 0x28, 0x00, // 35 --> # + 0x05, 0x4c, 0x00, 0x92, 0x00, 0xff, 0x01, 0x92, 0x00, 0x64, 0x00, // 36 --> $ + 0x07, 0x84, 0x00, 0x4a, 0x00, 0x24, 0x00, 0x10, 0x00, 0x48, 0x00, 0xa4, 0x00, 0x42, 0x00, // 37 --> % + 0x06, 0x6c, 0x00, 0x92, 0x00, 0x92, 0x00, 0xac, 0x00, 0x40, 0x00, 0xb0, 0x00, // 38 --> & + 0x01, 0x0e, 0x00, // 39 --> ' + 0x03, 0x7c, 0x00, 0x82, 0x00, 0x01, 0x01, // 40 --> ( + 0x03, 0x01, 0x01, 0x82, 0x00, 0x7c, 0x00, // 41 --> ) + 0x05, 0x14, 0x00, 0x08, 0x00, 0x3e, 0x00, 0x08, 0x00, 0x14, 0x00, // 42 --> * + 0x05, 0x10, 0x00, 0x10, 0x00, 0x7c, 0x00, 0x10, 0x00, 0x10, 0x00, // 43 --> + + 0x02, 0x00, 0x01, 0xc0, 0x00, // 44 --> , + 0x05, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, // 45 --> - + 0x01, 0x80, 0x00, // 46 --> . + 0x07, 0x80, 0x00, 0x40, 0x00, 0x20, 0x00, 0x10, 0x00, 0x08, 0x00, 0x04, 0x00, 0x02, 0x00, // 47 --> / + 0x05, 0x7c, 0x00, 0xa2, 0x00, 0x92, 0x00, 0x8a, 0x00, 0x7c, 0x00, // 48 --> 0 + 0x02, 0x04, 0x00, 0xfe, 0x00, // 49 --> 1 + 0x05, 0x84, 0x00, 0xc2, 0x00, 0xa2, 0x00, 0x92, 0x00, 0x8c, 0x00, // 50 --> 2 + 0x05, 0x44, 0x00, 0x82, 0x00, 0x92, 0x00, 0x92, 0x00, 0x6c, 0x00, // 51 --> 3 + 0x05, 0x30, 0x00, 0x28, 0x00, 0x24, 0x00, 0xfe, 0x00, 0x20, 0x00, // 52 --> 4 + 0x05, 0x4e, 0x00, 0x8a, 0x00, 0x8a, 0x00, 0x8a, 0x00, 0x72, 0x00, // 53 --> 5 + 0x05, 0x7c, 0x00, 0x92, 0x00, 0x92, 0x00, 0x92, 0x00, 0x64, 0x00, // 54 --> 6 + 0x05, 0x02, 0x00, 0x02, 0x00, 0xc2, 0x00, 0x32, 0x00, 0x0e, 0x00, // 55 --> 7 + 0x05, 0x6c, 0x00, 0x92, 0x00, 0x92, 0x00, 0x92, 0x00, 0x6c, 0x00, // 56 --> 8 + 0x05, 0x4c, 0x00, 0x92, 0x00, 0x92, 0x00, 0x92, 0x00, 0x7c, 0x00, // 57 --> 9 + 0x01, 0x48, 0x00, // 58 --> : + 0x02, 0x00, 0x01, 0xc8, 0x00, // 59 --> ; + 0x03, 0x10, 0x00, 0x28, 0x00, 0x44, 0x00, // 60 --> < + 0x05, 0x28, 0x00, 0x28, 0x00, 0x28, 0x00, 0x28, 0x00, 0x28, 0x00, // 61 --> = + 0x03, 0x44, 0x00, 0x28, 0x00, 0x10, 0x00, // 62 --> > + 0x05, 0x04, 0x00, 0x02, 0x00, 0xa2, 0x00, 0x12, 0x00, 0x0c, 0x00, // 63 --> ? + 0x08, 0x7e, 0x00, 0x81, 0x00, 0x99, 0x00, 0xa5, 0x00, 0xa5, 0x00, 0xbd, 0x00, 0xa1, 0x00, 0x1e, 0x00, // 64 --> @ + 0x05, 0xfc, 0x00, 0x12, 0x00, 0x12, 0x00, 0x12, 0x00, 0xfc, 0x00, // 65 --> A + 0x05, 0xfe, 0x00, 0x92, 0x00, 0x92, 0x00, 0x92, 0x00, 0x6c, 0x00, // 66 --> B + 0x05, 0x7c, 0x00, 0x82, 0x00, 0x82, 0x00, 0x82, 0x00, 0x44, 0x00, // 67 --> C + 0x05, 0xfe, 0x00, 0x82, 0x00, 0x82, 0x00, 0x82, 0x00, 0x7c, 0x00, // 68 --> D + 0x05, 0xfe, 0x00, 0x92, 0x00, 0x92, 0x00, 0x92, 0x00, 0x82, 0x00, // 69 --> E + 0x05, 0xfe, 0x00, 0x12, 0x00, 0x12, 0x00, 0x12, 0x00, 0x02, 0x00, // 70 --> F + 0x05, 0x7c, 0x00, 0x82, 0x00, 0x82, 0x00, 0x92, 0x00, 0x74, 0x00, // 71 --> G + 0x05, 0xfe, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0xfe, 0x00, // 72 --> H + 0x01, 0xfe, 0x00, // 73 --> I + 0x05, 0x40, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x7e, 0x00, // 74 --> J + 0x05, 0xfe, 0x00, 0x10, 0x00, 0x28, 0x00, 0x44, 0x00, 0x82, 0x00, // 75 --> K + 0x05, 0xfe, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, // 76 --> L + 0x07, 0xfe, 0x00, 0x04, 0x00, 0x08, 0x00, 0x10, 0x00, 0x08, 0x00, 0x04, 0x00, 0xfe, 0x00, // 77 --> M + 0x05, 0xfe, 0x00, 0x08, 0x00, 0x10, 0x00, 0x20, 0x00, 0xfe, 0x00, // 78 --> N + 0x05, 0x7c, 0x00, 0x82, 0x00, 0x82, 0x00, 0x82, 0x00, 0x7c, 0x00, // 79 --> O + 0x05, 0xfe, 0x00, 0x12, 0x00, 0x12, 0x00, 0x12, 0x00, 0x0c, 0x00, // 80 --> P + 0x05, 0x7c, 0x00, 0x82, 0x00, 0x82, 0x00, 0x82, 0x00, 0x7c, 0x01, // 81 --> Q + 0x05, 0xfe, 0x00, 0x12, 0x00, 0x32, 0x00, 0x52, 0x00, 0x8c, 0x00, // 82 --> R + 0x05, 0x4c, 0x00, 0x92, 0x00, 0x92, 0x00, 0x92, 0x00, 0x64, 0x00, // 83 --> S + 0x05, 0x02, 0x00, 0x02, 0x00, 0xfe, 0x00, 0x02, 0x00, 0x02, 0x00, // 84 --> T + 0x05, 0x7e, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x7e, 0x00, // 85 --> U + 0x05, 0x0e, 0x00, 0x30, 0x00, 0xc0, 0x00, 0x30, 0x00, 0x0e, 0x00, // 86 --> V + 0x07, 0x7e, 0x00, 0x80, 0x00, 0x80, 0x00, 0x7e, 0x00, 0x80, 0x00, 0x80, 0x00, 0x7e, 0x00, // 87 --> W + 0x05, 0xc6, 0x00, 0x28, 0x00, 0x10, 0x00, 0x28, 0x00, 0xc6, 0x00, // 88 --> X + 0x05, 0x06, 0x00, 0x08, 0x00, 0xf0, 0x00, 0x08, 0x00, 0x06, 0x00, // 89 --> Y + 0x05, 0xc2, 0x00, 0xa2, 0x00, 0x92, 0x00, 0x8a, 0x00, 0x86, 0x00, // 90 --> Z + 0x03, 0xff, 0x01, 0x01, 0x01, 0x01, 0x01, // 91 --> [ + 0x07, 0x02, 0x00, 0x04, 0x00, 0x08, 0x00, 0x10, 0x00, 0x20, 0x00, 0x40, 0x00, 0x80, 0x00, // 92 --> \ + 0x03, 0x01, 0x01, 0x01, 0x01, 0xff, 0x01, // 93 --> ] + 0x05, 0x08, 0x00, 0x04, 0x00, 0x02, 0x00, 0x04, 0x00, 0x08, 0x00, // 94 --> ^ + 0x05, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, // 95 --> _ + 0x03, 0x02, 0x00, 0x04, 0x00, 0x08, 0x00, // 96 --> ` + 0x04, 0x70, 0x00, 0x88, 0x00, 0x88, 0x00, 0xf8, 0x00, // 97 --> a + 0x04, 0xfe, 0x00, 0x88, 0x00, 0x88, 0x00, 0x70, 0x00, // 98 --> b + 0x04, 0x70, 0x00, 0x88, 0x00, 0x88, 0x00, 0x50, 0x00, // 99 --> c + 0x04, 0x70, 0x00, 0x88, 0x00, 0x88, 0x00, 0xfe, 0x00, // 100 --> d + 0x04, 0x70, 0x00, 0xa8, 0x00, 0xa8, 0x00, 0x30, 0x00, // 101 --> e + 0x02, 0xfc, 0x00, 0x12, 0x00, // 102 --> f + 0x04, 0x70, 0x00, 0x88, 0x02, 0x88, 0x02, 0xf8, 0x01, // 103 --> g + 0x04, 0xfe, 0x00, 0x08, 0x00, 0x08, 0x00, 0xf0, 0x00, // 104 --> h + 0x01, 0xfa, 0x00, // 105 --> i + 0x02, 0x00, 0x02, 0xfa, 0x01, // 106 --> j + 0x04, 0xfe, 0x00, 0x20, 0x00, 0x50, 0x00, 0x88, 0x00, // 107 --> k + 0x01, 0xfe, 0x00, // 108 --> l + 0x07, 0xf8, 0x00, 0x08, 0x00, 0x08, 0x00, 0xf0, 0x00, 0x08, 0x00, 0x08, 0x00, 0xf0, 0x00, // 109 --> m + 0x04, 0xf8, 0x00, 0x08, 0x00, 0x08, 0x00, 0xf0, 0x00, // 110 --> n + 0x04, 0x70, 0x00, 0x88, 0x00, 0x88, 0x00, 0x70, 0x00, // 111 --> o + 0x04, 0xf8, 0x03, 0x88, 0x00, 0x88, 0x00, 0x70, 0x00, // 112 --> p + 0x04, 0x70, 0x00, 0x88, 0x00, 0x88, 0x00, 0xf8, 0x03, // 113 --> q + 0x03, 0xf8, 0x00, 0x08, 0x00, 0x08, 0x00, // 114 --> r + 0x03, 0x90, 0x00, 0xa8, 0x00, 0x48, 0x00, // 115 --> s + 0x03, 0x08, 0x00, 0xfe, 0x00, 0x08, 0x00, // 116 --> t + 0x04, 0x78, 0x00, 0x80, 0x00, 0x80, 0x00, 0xf8, 0x00, // 117 --> u + 0x04, 0x78, 0x00, 0x80, 0x00, 0x80, 0x00, 0x78, 0x00, // 118 --> v + 0x07, 0x78, 0x00, 0x80, 0x00, 0x80, 0x00, 0x78, 0x00, 0x80, 0x00, 0x80, 0x00, 0x78, 0x00, // 119 --> w + 0x04, 0xd8, 0x00, 0x20, 0x00, 0x20, 0x00, 0xd8, 0x00, // 120 --> x + 0x04, 0x78, 0x00, 0x80, 0x02, 0x80, 0x02, 0xf8, 0x01, // 121 --> y + 0x04, 0xc8, 0x00, 0xa8, 0x00, 0xa8, 0x00, 0x98, 0x00, // 122 --> z + 0x03, 0x10, 0x00, 0xee, 0x00, 0x01, 0x01, // 123 --> { + 0x01, 0xff, 0x01, // 124 --> | + 0x03, 0x01, 0x01, 0xee, 0x00, 0x10, 0x00, // 125 --> } + 0x06, 0x10, 0x00, 0x08, 0x00, 0x08, 0x00, 0x10, 0x00, 0x10, 0x00, 0x08, 0x00, // 126 --> ~ + 0x00, // 127 -->  + 0x00, // 128 --> Ђ + 0x00, // 129 --> Ѓ + 0x00, // 130 --> ‚ + 0x00, // 131 --> ѓ + 0x00, // 132 --> „ + 0x00, // 133 --> … + 0x00, // 134 --> † + 0x00, // 135 --> ‡ + 0x00, // 136 --> € + 0x00, // 137 --> ‰ + 0x00, // 138 --> Љ + 0x00, // 139 --> ‹ + 0x00, // 140 --> Њ + 0x00, // 141 --> Ќ + 0x00, // 142 --> Ћ + 0x00, // 143 --> Џ + 0x00, // 144 --> ђ + 0x00, // 145 --> ‘ + 0x00, // 146 --> ’ + 0x00, // 147 --> “ + 0x00, // 148 --> ” + 0x04, 0x30, 0x00, 0x78, 0x00, 0x78, 0x00, 0x30, 0x00, // 149 --> • + 0x00, // 150 --> – + 0x00, // 151 --> — + 0x00, // 152 --> ˜ + 0x00, // 153 --> ™ + 0x00, // 154 --> љ + 0x00, // 155 --> › + 0x00, // 156 --> њ + 0x00, // 157 --> ќ + 0x00, // 158 --> ћ + 0x00, // 159 --> џ + 0x00, // 160 -->   + 0x00, // 161 --> Ў + 0x00, // 162 --> ў + 0x00, // 163 --> Ј + 0x00, // 164 --> ¤ + 0x00, // 165 --> Ґ + 0x01, 0xef, 0x01, // 166 --> ¦ + 0x00, // 167 --> § + 0x00, // 168 --> Ё + 0x07, 0x7c, 0x00, 0x82, 0x00, 0xba, 0x00, 0xaa, 0x00, 0xaa, 0x00, 0x82, 0x00, 0x7c, 0x00, // 169 --> © + 0x00, // 170 --> Є + 0x00, // 171 --> « + 0x00, // 172 --> ¬ + 0x00, // 173 --> ­ + 0x00, // 174 --> ® + 0x00, // 175 --> Ї + 0x04, 0x06, 0x00, 0x09, 0x00, 0x09, 0x00, 0x06, 0x00, // 176 --> ° + 0x05, 0x88, 0x00, 0x88, 0x00, 0xbe, 0x00, 0x88, 0x00, 0x88, 0x00, // 177 --> ± + 0x04, 0x12, 0x00, 0x19, 0x00, 0x15, 0x00, 0x12, 0x00, // 178 --> І + 0x00, // 179 --> і + 0x00, // 180 --> ґ + 0x00, // 181 --> µ + 0x00, // 182 --> ¶ + 0x00, // 183 --> · + 0x00, // 184 --> ё + 0x08, 0xfe, 0x00, 0x08, 0x00, 0x10, 0x00, 0x20, 0x00, 0xfe, 0x00, 0x24, 0x00, 0x2a, 0x00, 0x24, 0x00, // 185 --> № + 0x00, // 186 --> є + 0x00, // 187 --> » + 0x00, // 188 --> ј + 0x00, // 189 --> Ѕ + 0x00, // 190 --> ѕ + 0x00, // 191 --> ї + 0x05, 0xfc, 0x00, 0x12, 0x00, 0x12, 0x00, 0x12, 0x00, 0xfc, 0x00, // 192 --> А + 0x05, 0xfe, 0x00, 0x92, 0x00, 0x92, 0x00, 0x92, 0x00, 0x62, 0x00, // 193 --> Б + 0x05, 0xfe, 0x00, 0x92, 0x00, 0x92, 0x00, 0x92, 0x00, 0x6c, 0x00, // 194 --> В + 0x05, 0xfe, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, // 195 --> Г + 0x07, 0x80, 0x01, 0xfc, 0x00, 0x82, 0x00, 0x82, 0x00, 0x82, 0x00, 0xfc, 0x00, 0x80, 0x01, // 196 --> Д + 0x05, 0xfe, 0x00, 0x92, 0x00, 0x92, 0x00, 0x92, 0x00, 0x82, 0x00, // 197 --> Е + 0x07, 0xee, 0x00, 0x10, 0x00, 0x10, 0x00, 0xfe, 0x00, 0x10, 0x00, 0x10, 0x00, 0xee, 0x00, // 198 --> Ж + 0x05, 0x44, 0x00, 0x92, 0x00, 0x92, 0x00, 0x92, 0x00, 0x6c, 0x00, // 199 --> З + 0x05, 0xfe, 0x00, 0x20, 0x00, 0x10, 0x00, 0x08, 0x00, 0xfe, 0x00, // 200 --> И + 0x05, 0xfc, 0x00, 0x21, 0x00, 0x12, 0x00, 0x09, 0x00, 0xfc, 0x00, // 201 --> Й + 0x05, 0xfe, 0x00, 0x10, 0x00, 0x28, 0x00, 0x44, 0x00, 0x82, 0x00, // 202 --> К + 0x05, 0x80, 0x00, 0x7c, 0x00, 0x02, 0x00, 0x02, 0x00, 0xfe, 0x00, // 203 --> Л + 0x07, 0xfe, 0x00, 0x04, 0x00, 0x08, 0x00, 0x10, 0x00, 0x08, 0x00, 0x04, 0x00, 0xfe, 0x00, // 204 --> М + 0x05, 0xfe, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0xfe, 0x00, // 205 --> Н + 0x05, 0x7c, 0x00, 0x82, 0x00, 0x82, 0x00, 0x82, 0x00, 0x7c, 0x00, // 206 --> О + 0x05, 0xfe, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0xfe, 0x00, // 207 --> П + 0x05, 0xfe, 0x00, 0x12, 0x00, 0x12, 0x00, 0x12, 0x00, 0x0c, 0x00, // 208 --> Р + 0x05, 0x7c, 0x00, 0x82, 0x00, 0x82, 0x00, 0x82, 0x00, 0x44, 0x00, // 209 --> С + 0x05, 0x02, 0x00, 0x02, 0x00, 0xfe, 0x00, 0x02, 0x00, 0x02, 0x00, // 210 --> Т + 0x05, 0x4e, 0x00, 0x90, 0x00, 0x90, 0x00, 0x90, 0x00, 0x7e, 0x00, // 211 --> У + 0x07, 0x7c, 0x00, 0x82, 0x00, 0x82, 0x00, 0xff, 0x01, 0x82, 0x00, 0x82, 0x00, 0x7c, 0x00, // 212 --> Ф + 0x05, 0xc6, 0x00, 0x28, 0x00, 0x10, 0x00, 0x28, 0x00, 0xc6, 0x00, // 213 --> Х + 0x06, 0xfe, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0xfe, 0x00, 0x80, 0x01, // 214 --> Ц + 0x05, 0x0e, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0xfe, 0x00, // 215 --> Ч + 0x07, 0xfe, 0x00, 0x80, 0x00, 0x80, 0x00, 0xfe, 0x00, 0x80, 0x00, 0x80, 0x00, 0xfe, 0x00, // 216 --> Ш + 0x08, 0xfe, 0x00, 0x80, 0x00, 0x80, 0x00, 0xfe, 0x00, 0x80, 0x00, 0x80, 0x00, 0xfe, 0x00, 0x80, 0x01, // 217 --> Щ + 0x07, 0x02, 0x00, 0x02, 0x00, 0xfe, 0x00, 0x90, 0x00, 0x90, 0x00, 0x90, 0x00, 0x60, 0x00, // 218 --> Ъ + 0x07, 0xfe, 0x00, 0x90, 0x00, 0x90, 0x00, 0x90, 0x00, 0x60, 0x00, 0x00, 0x00, 0xfe, 0x00, // 219 --> Ы + 0x05, 0xfe, 0x00, 0x90, 0x00, 0x90, 0x00, 0x90, 0x00, 0x60, 0x00, // 220 --> Ь + 0x05, 0x44, 0x00, 0x82, 0x00, 0x92, 0x00, 0x92, 0x00, 0x7c, 0x00, // 221 --> Э + 0x08, 0xfe, 0x00, 0x10, 0x00, 0x10, 0x00, 0x7c, 0x00, 0x82, 0x00, 0x82, 0x00, 0x82, 0x00, 0x7c, 0x00, // 222 --> Ю + 0x05, 0x8c, 0x00, 0x52, 0x00, 0x32, 0x00, 0x12, 0x00, 0xfe, 0x00, // 223 --> Я + 0x04, 0x70, 0x00, 0x88, 0x00, 0x88, 0x00, 0xf8, 0x00, // 224 --> а + 0x04, 0x7c, 0x00, 0x8a, 0x00, 0x8a, 0x00, 0x72, 0x00, // 225 --> б + 0x04, 0xf8, 0x00, 0xa8, 0x00, 0xa8, 0x00, 0x50, 0x00, // 226 --> в + 0x04, 0xf8, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, // 227 --> г + 0x06, 0x80, 0x01, 0xf0, 0x00, 0x88, 0x00, 0x88, 0x00, 0xf0, 0x00, 0x80, 0x01, // 228 --> д + 0x04, 0x70, 0x00, 0xa8, 0x00, 0xa8, 0x00, 0x30, 0x00, // 229 --> е + 0x07, 0xd8, 0x00, 0x20, 0x00, 0x20, 0x00, 0xf8, 0x00, 0x20, 0x00, 0x20, 0x00, 0xd8, 0x00, // 230 --> ж + 0x04, 0x50, 0x00, 0x88, 0x00, 0xa8, 0x00, 0x50, 0x00, // 231 --> з + 0x05, 0xf8, 0x00, 0x40, 0x00, 0x20, 0x00, 0x10, 0x00, 0xf8, 0x00, // 232 --> и + 0x05, 0xf8, 0x00, 0x41, 0x00, 0x22, 0x00, 0x11, 0x00, 0xf8, 0x00, // 233 --> й + 0x04, 0xf8, 0x00, 0x20, 0x00, 0x50, 0x00, 0x88, 0x00, // 234 --> к + 0x04, 0x80, 0x00, 0x70, 0x00, 0x08, 0x00, 0xf8, 0x00, // 235 --> л + 0x05, 0xf8, 0x00, 0x10, 0x00, 0x20, 0x00, 0x10, 0x00, 0xf8, 0x00, // 236 --> м + 0x04, 0xf8, 0x00, 0x20, 0x00, 0x20, 0x00, 0xf8, 0x00, // 237 --> н + 0x04, 0x70, 0x00, 0x88, 0x00, 0x88, 0x00, 0x70, 0x00, // 238 --> о + 0x04, 0xf8, 0x00, 0x08, 0x00, 0x08, 0x00, 0xf8, 0x00, // 239 --> п + 0x04, 0xf8, 0x03, 0x88, 0x00, 0x88, 0x00, 0x70, 0x00, // 240 --> р + 0x04, 0x70, 0x00, 0x88, 0x00, 0x88, 0x00, 0x50, 0x00, // 241 --> с + 0x05, 0x08, 0x00, 0x08, 0x00, 0xf8, 0x00, 0x08, 0x00, 0x08, 0x00, // 242 --> т + 0x04, 0x78, 0x00, 0x80, 0x02, 0x80, 0x02, 0xf8, 0x01, // 243 --> у + 0x07, 0x70, 0x00, 0x88, 0x00, 0x88, 0x00, 0xfe, 0x03, 0x88, 0x00, 0x88, 0x00, 0x70, 0x00, // 244 --> ф + 0x04, 0xd8, 0x00, 0x20, 0x00, 0x20, 0x00, 0xd8, 0x00, // 245 --> х + 0x05, 0xf8, 0x00, 0x80, 0x00, 0x80, 0x00, 0xf8, 0x00, 0x80, 0x01, // 246 --> ц + 0x04, 0x18, 0x00, 0x20, 0x00, 0x20, 0x00, 0xf8, 0x00, // 247 --> ч + 0x07, 0xf8, 0x00, 0x80, 0x00, 0x80, 0x00, 0xf8, 0x00, 0x80, 0x00, 0x80, 0x00, 0xf8, 0x00, // 248 --> ш + 0x08, 0xf8, 0x00, 0x80, 0x00, 0x80, 0x00, 0xf8, 0x00, 0x80, 0x00, 0x80, 0x00, 0xf8, 0x00, 0x80, 0x01, // 249 --> щ + 0x05, 0x08, 0x00, 0xf8, 0x00, 0xa0, 0x00, 0xa0, 0x00, 0x40, 0x00, // 250 --> ъ + 0x06, 0xf8, 0x00, 0xa0, 0x00, 0xa0, 0x00, 0x40, 0x00, 0x00, 0x00, 0xf8, 0x00, // 251 --> ы + 0x04, 0xf8, 0x00, 0xa0, 0x00, 0xa0, 0x00, 0x40, 0x00, // 252 --> ь + 0x04, 0x50, 0x00, 0x88, 0x00, 0xa8, 0x00, 0x70, 0x00, // 253 --> э + 0x06, 0xf8, 0x00, 0x20, 0x00, 0x70, 0x00, 0x88, 0x00, 0x88, 0x00, 0x70, 0x00, // 254 --> ю + 0x04, 0x90, 0x00, 0x68, 0x00, 0x28, 0x00, 0xf8, 0x00 // 255 --> я +}; diff --git a/examples/tests/testfont_packed.txt b/examples/tests/testfont_packed.txt new file mode 100644 index 0000000..de1fad6 --- /dev/null +++ b/examples/tests/testfont_packed.txt @@ -0,0 +1,259 @@ +// File generated by McBitFont v2.0 +// made by Anton Mukhin (mcfly@mcflyer.ru) +// +// +// Bytes total: 1264 +// Scan order: Columns +// Horizontal direction: Left to Right +// Vertical direction: Top to Bottom + +// Bit order: LSB Top +// Numbers base: Hexadecimal +// Numbers size: 8 bit + +// Text format: 1D C array +// Numbers per line: 1 Symbol per line + +// Font header map: +// packed; // Flag for packed font +// width; // Font width in pixels (0 - variable width) +// height; // Font height in pixels +// space; // Font space in pixels +// first; // First character code +// last; // Last character code + + +const uint8_t haxrcorp_4089_cyrillic_altgr[] = { + // Meta header + 1, // Is it a packed font? + 0, // Font width in pixels; 0 - variable width + 10, // Font height in pixels + 0, // Font space (between symbols) in pixels + 32, // First character code + 255, // Last character code + // Data: + 0x03, 0x00, 0x00, 0x00, 0x00, // 32 --> + 0x01, 0xbe, 0x00, // 33 --> ! + 0x03, 0x0e, 0x00, 0xe0, 0x00, // 34 --> " + 0x05, 0x28, 0xf0, 0x81, 0x02, 0x1f, 0x28, 0x00, // 35 --> # + 0x05, 0x4c, 0x48, 0xf2, 0x9f, 0x24, 0x64, 0x00, // 36 --> $ + 0x07, 0x84, 0x28, 0x41, 0x02, 0x04, 0x48, 0x90, 0x22, 0x04, // 37 --> % + 0x06, 0x6c, 0x48, 0x22, 0x09, 0x2b, 0x40, 0xc0, 0x02, // 38 --> & + 0x01, 0x0e, 0x00, // 39 --> ' + 0x03, 0x7c, 0x08, 0x12, 0x10, // 40 --> ( + 0x03, 0x01, 0x09, 0xc2, 0x07, // 41 --> ) + 0x05, 0x14, 0x20, 0xe0, 0x03, 0x02, 0x14, 0x00, // 42 --> * + 0x05, 0x10, 0x40, 0xc0, 0x07, 0x04, 0x10, 0x00, // 43 --> + + 0x02, 0x00, 0x01, 0x03, // 44 --> , + 0x05, 0x10, 0x40, 0x00, 0x01, 0x04, 0x10, 0x00, // 45 --> - + 0x01, 0x80, 0x00, // 46 --> . + 0x07, 0x80, 0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x00, // 47 --> / + 0x05, 0x7c, 0x88, 0x22, 0x89, 0x22, 0x7c, 0x00, // 48 --> 0 + 0x02, 0x04, 0xf8, 0x03, // 49 --> 1 + 0x05, 0x84, 0x08, 0x23, 0x8a, 0x24, 0x8c, 0x00, // 50 --> 2 + 0x05, 0x44, 0x08, 0x22, 0x89, 0x24, 0x6c, 0x00, // 51 --> 3 + 0x05, 0x30, 0xa0, 0x40, 0x82, 0x3f, 0x20, 0x00, // 52 --> 4 + 0x05, 0x4e, 0x28, 0xa2, 0x88, 0x22, 0x72, 0x00, // 53 --> 5 + 0x05, 0x7c, 0x48, 0x22, 0x89, 0x24, 0x64, 0x00, // 54 --> 6 + 0x05, 0x02, 0x08, 0x20, 0x8c, 0x0c, 0x0e, 0x00, // 55 --> 7 + 0x05, 0x6c, 0x48, 0x22, 0x89, 0x24, 0x6c, 0x00, // 56 --> 8 + 0x05, 0x4c, 0x48, 0x22, 0x89, 0x24, 0x7c, 0x00, // 57 --> 9 + 0x01, 0x48, 0x00, // 58 --> : + 0x02, 0x00, 0x21, 0x03, // 59 --> ; + 0x03, 0x10, 0xa0, 0x40, 0x04, // 60 --> < + 0x05, 0x28, 0xa0, 0x80, 0x02, 0x0a, 0x28, 0x00, // 61 --> = + 0x03, 0x44, 0xa0, 0x00, 0x01, // 62 --> > + 0x05, 0x04, 0x08, 0x20, 0x8a, 0x04, 0x0c, 0x00, // 63 --> ? + 0x08, 0x7e, 0x04, 0x92, 0x49, 0x29, 0xa5, 0xf4, 0x12, 0x8a, 0x07, // 64 --> @ + 0x05, 0xfc, 0x48, 0x20, 0x81, 0x04, 0xfc, 0x00, // 65 --> A + 0x05, 0xfe, 0x48, 0x22, 0x89, 0x24, 0x6c, 0x00, // 66 --> B + 0x05, 0x7c, 0x08, 0x22, 0x88, 0x20, 0x44, 0x00, // 67 --> C + 0x05, 0xfe, 0x08, 0x22, 0x88, 0x20, 0x7c, 0x00, // 68 --> D + 0x05, 0xfe, 0x48, 0x22, 0x89, 0x24, 0x82, 0x00, // 69 --> E + 0x05, 0xfe, 0x48, 0x20, 0x81, 0x04, 0x02, 0x00, // 70 --> F + 0x05, 0x7c, 0x08, 0x22, 0x88, 0x24, 0x74, 0x00, // 71 --> G + 0x05, 0xfe, 0x40, 0x00, 0x01, 0x04, 0xfe, 0x00, // 72 --> H + 0x01, 0xfe, 0x00, // 73 --> I + 0x05, 0x40, 0x00, 0x02, 0x08, 0x20, 0x7e, 0x00, // 74 --> J + 0x05, 0xfe, 0x40, 0x80, 0x02, 0x11, 0x82, 0x00, // 75 --> K + 0x05, 0xfe, 0x00, 0x02, 0x08, 0x20, 0x80, 0x00, // 76 --> L + 0x07, 0xfe, 0x10, 0x80, 0x00, 0x04, 0x08, 0x10, 0xe0, 0x0f, // 77 --> M + 0x05, 0xfe, 0x20, 0x00, 0x01, 0x08, 0xfe, 0x00, // 78 --> N + 0x05, 0x7c, 0x08, 0x22, 0x88, 0x20, 0x7c, 0x00, // 79 --> O + 0x05, 0xfe, 0x48, 0x20, 0x81, 0x04, 0x0c, 0x00, // 80 --> P + 0x05, 0x7c, 0x08, 0x22, 0x88, 0x20, 0x7c, 0x01, // 81 --> Q + 0x05, 0xfe, 0x48, 0x20, 0x83, 0x14, 0x8c, 0x00, // 82 --> R + 0x05, 0x4c, 0x48, 0x22, 0x89, 0x24, 0x64, 0x00, // 83 --> S + 0x05, 0x02, 0x08, 0xe0, 0x8f, 0x00, 0x02, 0x00, // 84 --> T + 0x05, 0x7e, 0x00, 0x02, 0x08, 0x20, 0x7e, 0x00, // 85 --> U + 0x05, 0x0e, 0xc0, 0x00, 0x0c, 0x0c, 0x0e, 0x00, // 86 --> V + 0x07, 0x7e, 0x00, 0x02, 0x88, 0x1f, 0x80, 0x00, 0xe2, 0x07, // 87 --> W + 0x05, 0xc6, 0xa0, 0x00, 0x01, 0x0a, 0xc6, 0x00, // 88 --> X + 0x05, 0x06, 0x20, 0x00, 0x0f, 0x02, 0x06, 0x00, // 89 --> Y + 0x05, 0xc2, 0x88, 0x22, 0x89, 0x22, 0x86, 0x00, // 90 --> Z + 0x03, 0xff, 0x05, 0x14, 0x10, // 91 --> [ + 0x07, 0x02, 0x10, 0x80, 0x00, 0x04, 0x20, 0x00, 0x01, 0x08, // 92 --> \ + 0x03, 0x01, 0x05, 0xf4, 0x1f, // 93 --> ] + 0x05, 0x08, 0x10, 0x20, 0x00, 0x01, 0x08, 0x00, // 94 --> ^ + 0x05, 0x80, 0x00, 0x02, 0x08, 0x20, 0x80, 0x00, // 95 --> _ + 0x03, 0x02, 0x10, 0x80, 0x00, // 96 --> ` + 0x04, 0x70, 0x20, 0x82, 0x08, 0x3e, // 97 --> a + 0x04, 0xfe, 0x20, 0x82, 0x08, 0x1c, // 98 --> b + 0x04, 0x70, 0x20, 0x82, 0x08, 0x14, // 99 --> c + 0x04, 0x70, 0x20, 0x82, 0x88, 0x3f, // 100 --> d + 0x04, 0x70, 0xa0, 0x82, 0x0a, 0x0c, // 101 --> e + 0x02, 0xfc, 0x48, 0x00, // 102 --> f + 0x04, 0x70, 0x20, 0x8a, 0x28, 0x7e, // 103 --> g + 0x04, 0xfe, 0x20, 0x80, 0x00, 0x3c, // 104 --> h + 0x01, 0xfa, 0x00, // 105 --> i + 0x02, 0x00, 0xea, 0x07, // 106 --> j + 0x04, 0xfe, 0x80, 0x00, 0x05, 0x22, // 107 --> k + 0x01, 0xfe, 0x00, // 108 --> l + 0x07, 0xf8, 0x20, 0x80, 0x00, 0x3c, 0x08, 0x20, 0x00, 0x0f, // 109 --> m + 0x04, 0xf8, 0x20, 0x80, 0x00, 0x3c, // 110 --> n + 0x04, 0x70, 0x20, 0x82, 0x08, 0x1c, // 111 --> o + 0x04, 0xf8, 0x23, 0x82, 0x08, 0x1c, // 112 --> p + 0x04, 0x70, 0x20, 0x82, 0x08, 0xfe, // 113 --> q + 0x03, 0xf8, 0x20, 0x80, 0x00, // 114 --> r + 0x03, 0x90, 0xa0, 0x82, 0x04, // 115 --> s + 0x03, 0x08, 0xf8, 0x83, 0x00, // 116 --> t + 0x04, 0x78, 0x00, 0x02, 0x08, 0x3e, // 117 --> u + 0x04, 0x78, 0x00, 0x02, 0x08, 0x1e, // 118 --> v + 0x07, 0x78, 0x00, 0x02, 0x08, 0x1e, 0x80, 0x00, 0x82, 0x07, // 119 --> w + 0x04, 0xd8, 0x80, 0x00, 0x02, 0x36, // 120 --> x + 0x04, 0x78, 0x00, 0x0a, 0x28, 0x7e, // 121 --> y + 0x04, 0xc8, 0xa0, 0x82, 0x0a, 0x26, // 122 --> z + 0x03, 0x10, 0xb8, 0x13, 0x10, // 123 --> { + 0x01, 0xff, 0x01, // 124 --> | + 0x03, 0x01, 0xb9, 0x03, 0x01, // 125 --> } + 0x06, 0x10, 0x20, 0x80, 0x00, 0x04, 0x10, 0x20, 0x00, // 126 --> ~ + 0x00, // 127 -->  + 0x00, // 128 --> Ђ + 0x00, // 129 --> Ѓ + 0x00, // 130 --> ‚ + 0x00, // 131 --> ѓ + 0x00, // 132 --> „ + 0x00, // 133 --> … + 0x00, // 134 --> † + 0x00, // 135 --> ‡ + 0x00, // 136 --> € + 0x00, // 137 --> ‰ + 0x00, // 138 --> Љ + 0x00, // 139 --> ‹ + 0x00, // 140 --> Њ + 0x00, // 141 --> Ќ + 0x00, // 142 --> Ћ + 0x00, // 143 --> Џ + 0x00, // 144 --> ђ + 0x00, // 145 --> ‘ + 0x00, // 146 --> ’ + 0x00, // 147 --> “ + 0x00, // 148 --> ” + 0x04, 0x30, 0xe0, 0x81, 0x07, 0x0c, // 149 --> • + 0x00, // 150 --> – + 0x00, // 151 --> — + 0x00, // 152 --> ˜ + 0x00, // 153 --> ™ + 0x00, // 154 --> љ + 0x00, // 155 --> › + 0x00, // 156 --> њ + 0x00, // 157 --> ќ + 0x00, // 158 --> ћ + 0x00, // 159 --> џ + 0x00, // 160 -->   + 0x00, // 161 --> Ў + 0x00, // 162 --> ў + 0x00, // 163 --> Ј + 0x00, // 164 --> ¤ + 0x00, // 165 --> Ґ + 0x01, 0xef, 0x01, // 166 --> ¦ + 0x00, // 167 --> § + 0x00, // 168 --> Ё + 0x07, 0x7c, 0x08, 0xa2, 0x8b, 0x2a, 0xaa, 0x08, 0xc2, 0x07, // 169 --> © + 0x00, // 170 --> Є + 0x00, // 171 --> « + 0x00, // 172 --> ¬ + 0x00, // 173 --> ­ + 0x00, // 174 --> ® + 0x00, // 175 --> Ї + 0x04, 0x06, 0x24, 0x90, 0x80, 0x01, // 176 --> ° + 0x05, 0x88, 0x20, 0xe2, 0x0b, 0x22, 0x88, 0x00, // 177 --> ± + 0x04, 0x12, 0x64, 0x50, 0x81, 0x04, // 178 --> І + 0x00, // 179 --> і + 0x00, // 180 --> ґ + 0x00, // 181 --> µ + 0x00, // 182 --> ¶ + 0x00, // 183 --> · + 0x00, // 184 --> ё + 0x08, 0xfe, 0x20, 0x00, 0x01, 0x08, 0xfe, 0x90, 0xa0, 0x02, 0x09, // 185 --> № + 0x00, // 186 --> є + 0x00, // 187 --> » + 0x00, // 188 --> ј + 0x00, // 189 --> Ѕ + 0x00, // 190 --> ѕ + 0x00, // 191 --> ї + 0x05, 0xfc, 0x48, 0x20, 0x81, 0x04, 0xfc, 0x00, // 192 --> А + 0x05, 0xfe, 0x48, 0x22, 0x89, 0x24, 0x62, 0x00, // 193 --> Б + 0x05, 0xfe, 0x48, 0x22, 0x89, 0x24, 0x6c, 0x00, // 194 --> В + 0x05, 0xfe, 0x08, 0x20, 0x80, 0x00, 0x02, 0x00, // 195 --> Г + 0x07, 0x80, 0xf1, 0x23, 0x88, 0x20, 0x82, 0xf0, 0x03, 0x18, // 196 --> Д + 0x05, 0xfe, 0x48, 0x22, 0x89, 0x24, 0x82, 0x00, // 197 --> Е + 0x07, 0xee, 0x40, 0x00, 0x81, 0x3f, 0x10, 0x40, 0xe0, 0x0e, // 198 --> Ж + 0x05, 0x44, 0x48, 0x22, 0x89, 0x24, 0x6c, 0x00, // 199 --> З + 0x05, 0xfe, 0x80, 0x00, 0x01, 0x02, 0xfe, 0x00, // 200 --> И + 0x05, 0xfc, 0x84, 0x20, 0x41, 0x02, 0xfc, 0x00, // 201 --> Й + 0x05, 0xfe, 0x40, 0x80, 0x02, 0x11, 0x82, 0x00, // 202 --> К + 0x05, 0x80, 0xf0, 0x21, 0x80, 0x00, 0xfe, 0x00, // 203 --> Л + 0x07, 0xfe, 0x10, 0x80, 0x00, 0x04, 0x08, 0x10, 0xe0, 0x0f, // 204 --> М + 0x05, 0xfe, 0x40, 0x00, 0x01, 0x04, 0xfe, 0x00, // 205 --> Н + 0x05, 0x7c, 0x08, 0x22, 0x88, 0x20, 0x7c, 0x00, // 206 --> О + 0x05, 0xfe, 0x08, 0x20, 0x80, 0x00, 0xfe, 0x00, // 207 --> П + 0x05, 0xfe, 0x48, 0x20, 0x81, 0x04, 0x0c, 0x00, // 208 --> Р + 0x05, 0x7c, 0x08, 0x22, 0x88, 0x20, 0x44, 0x00, // 209 --> С + 0x05, 0x02, 0x08, 0xe0, 0x8f, 0x00, 0x02, 0x00, // 210 --> Т + 0x05, 0x4e, 0x40, 0x02, 0x09, 0x24, 0x7e, 0x00, // 211 --> У + 0x07, 0x7c, 0x08, 0x22, 0xc8, 0x7f, 0x82, 0x08, 0xc2, 0x07, // 212 --> Ф + 0x05, 0xc6, 0xa0, 0x00, 0x01, 0x0a, 0xc6, 0x00, // 213 --> Х + 0x06, 0xfe, 0x00, 0x02, 0x08, 0x20, 0xfe, 0x00, 0x06, // 214 --> Ц + 0x05, 0x0e, 0x40, 0x00, 0x01, 0x04, 0xfe, 0x00, // 215 --> Ч + 0x07, 0xfe, 0x00, 0x02, 0x88, 0x3f, 0x80, 0x00, 0xe2, 0x0f, // 216 --> Ш + 0x08, 0xfe, 0x00, 0x02, 0x88, 0x3f, 0x80, 0x00, 0xe2, 0x0f, 0x60, // 217 --> Щ + 0x07, 0x02, 0x08, 0xe0, 0x0f, 0x24, 0x90, 0x40, 0x02, 0x06, // 218 --> Ъ + 0x07, 0xfe, 0x40, 0x02, 0x09, 0x24, 0x60, 0x00, 0xe0, 0x0f, // 219 --> Ы + 0x05, 0xfe, 0x40, 0x02, 0x09, 0x24, 0x60, 0x00, // 220 --> Ь + 0x05, 0x44, 0x08, 0x22, 0x89, 0x24, 0x7c, 0x00, // 221 --> Э + 0x08, 0xfe, 0x40, 0x00, 0x01, 0x1f, 0x82, 0x08, 0x22, 0x08, 0x1f, // 222 --> Ю + 0x05, 0x8c, 0x48, 0x21, 0x83, 0x04, 0xfe, 0x00, // 223 --> Я + 0x04, 0x70, 0x20, 0x82, 0x08, 0x3e, // 224 --> а + 0x04, 0x7c, 0x28, 0xa2, 0x88, 0x1c, // 225 --> б + 0x04, 0xf8, 0xa0, 0x82, 0x0a, 0x14, // 226 --> в + 0x04, 0xf8, 0x20, 0x80, 0x00, 0x02, // 227 --> г + 0x06, 0x80, 0xc1, 0x83, 0x08, 0x22, 0xf0, 0x00, 0x06, // 228 --> д + 0x04, 0x70, 0xa0, 0x82, 0x0a, 0x0c, // 229 --> е + 0x07, 0xd8, 0x80, 0x00, 0x02, 0x3e, 0x20, 0x80, 0x80, 0x0d, // 230 --> ж + 0x04, 0x50, 0x20, 0x82, 0x0a, 0x14, // 231 --> з + 0x05, 0xf8, 0x00, 0x01, 0x02, 0x04, 0xf8, 0x00, // 232 --> и + 0x05, 0xf8, 0x04, 0x21, 0x42, 0x04, 0xf8, 0x00, // 233 --> й + 0x04, 0xf8, 0x80, 0x00, 0x05, 0x22, // 234 --> к + 0x04, 0x80, 0xc0, 0x81, 0x00, 0x3e, // 235 --> л + 0x05, 0xf8, 0x40, 0x00, 0x02, 0x04, 0xf8, 0x00, // 236 --> м + 0x04, 0xf8, 0x80, 0x00, 0x02, 0x3e, // 237 --> н + 0x04, 0x70, 0x20, 0x82, 0x08, 0x1c, // 238 --> о + 0x04, 0xf8, 0x20, 0x80, 0x00, 0x3e, // 239 --> п + 0x04, 0xf8, 0x23, 0x82, 0x08, 0x1c, // 240 --> р + 0x04, 0x70, 0x20, 0x82, 0x08, 0x14, // 241 --> с + 0x05, 0x08, 0x20, 0x80, 0x0f, 0x02, 0x08, 0x00, // 242 --> т + 0x04, 0x78, 0x00, 0x0a, 0x28, 0x7e, // 243 --> у + 0x07, 0x70, 0x20, 0x82, 0x88, 0xff, 0x88, 0x20, 0x02, 0x07, // 244 --> ф + 0x04, 0xd8, 0x80, 0x00, 0x02, 0x36, // 245 --> х + 0x05, 0xf8, 0x00, 0x02, 0x08, 0x3e, 0x80, 0x01, // 246 --> ц + 0x04, 0x18, 0x80, 0x00, 0x02, 0x3e, // 247 --> ч + 0x07, 0xf8, 0x00, 0x02, 0x08, 0x3e, 0x80, 0x00, 0x82, 0x0f, // 248 --> ш + 0x08, 0xf8, 0x00, 0x02, 0x08, 0x3e, 0x80, 0x00, 0x82, 0x0f, 0x60, // 249 --> щ + 0x05, 0x08, 0xe0, 0x03, 0x0a, 0x28, 0x40, 0x00, // 250 --> ъ + 0x06, 0xf8, 0x80, 0x02, 0x0a, 0x10, 0x00, 0xe0, 0x03, // 251 --> ы + 0x04, 0xf8, 0x80, 0x02, 0x0a, 0x10, // 252 --> ь + 0x04, 0x50, 0x20, 0x82, 0x0a, 0x1c, // 253 --> э + 0x06, 0xf8, 0x80, 0x00, 0x07, 0x22, 0x88, 0xc0, 0x01, // 254 --> ю + 0x04, 0x90, 0xa0, 0x81, 0x02, 0x3e // 255 --> я +}; diff --git a/examples/tests/testfont_packed_bin.txt b/examples/tests/testfont_packed_bin.txt new file mode 100644 index 0000000..c3ad287 --- /dev/null +++ b/examples/tests/testfont_packed_bin.txt @@ -0,0 +1,259 @@ +// File generated by McBitFont v2.0 +// made by Anton Mukhin (mcfly@mcflyer.ru) +// +// +// Bytes total: 1264 +// Scan order: Columns +// Horizontal direction: Left to Right +// Vertical direction: Top to Bottom + +// Bit order: LSB Top +// Numbers base: Binary +// Numbers size: 8 bit + +// Text format: 1D C array +// Numbers per line: 1 Symbol per line + +// Font header map: +// packed; // Flag for packed font +// width; // Font width in pixels (0 - variable width) +// height; // Font height in pixels +// space; // Font space in pixels +// first; // First character code +// last; // Last character code + + +const uint8_t haxrcorp_4089_cyrillic_altgr[] = { + // Meta header + 1, // Is it a packed font? + 0, // Font width in pixels; 0 - variable width + 10, // Font height in pixels + 0, // Font space (between symbols) in pixels + 32, // First character code + 255, // Last character code + // Data: + 0b00000011, 0b00000000, 0b00000000, 0b00000000, 0b00000000, // 32 --> + 0b00000001, 0b10111110, 0b00000000, // 33 --> ! + 0b00000011, 0b00001110, 0b00000000, 0b11100000, 0b00000000, // 34 --> " + 0b00000101, 0b00101000, 0b11110000, 0b10000001, 0b00000010, 0b00011111, 0b00101000, 0b00000000, // 35 --> # + 0b00000101, 0b01001100, 0b01001000, 0b11110010, 0b10011111, 0b00100100, 0b01100100, 0b00000000, // 36 --> $ + 0b00000111, 0b10000100, 0b00101000, 0b01000001, 0b00000010, 0b00000100, 0b01001000, 0b10010000, 0b00100010, 0b00000100, // 37 --> % + 0b00000110, 0b01101100, 0b01001000, 0b00100010, 0b00001001, 0b00101011, 0b01000000, 0b11000000, 0b00000010, // 38 --> & + 0b00000001, 0b00001110, 0b00000000, // 39 --> ' + 0b00000011, 0b01111100, 0b00001000, 0b00010010, 0b00010000, // 40 --> ( + 0b00000011, 0b00000001, 0b00001001, 0b11000010, 0b00000111, // 41 --> ) + 0b00000101, 0b00010100, 0b00100000, 0b11100000, 0b00000011, 0b00000010, 0b00010100, 0b00000000, // 42 --> * + 0b00000101, 0b00010000, 0b01000000, 0b11000000, 0b00000111, 0b00000100, 0b00010000, 0b00000000, // 43 --> + + 0b00000010, 0b00000000, 0b00000001, 0b00000011, // 44 --> , + 0b00000101, 0b00010000, 0b01000000, 0b00000000, 0b00000001, 0b00000100, 0b00010000, 0b00000000, // 45 --> - + 0b00000001, 0b10000000, 0b00000000, // 46 --> . + 0b00000111, 0b10000000, 0b00000000, 0b00000001, 0b00000010, 0b00000100, 0b00001000, 0b00010000, 0b00100000, 0b00000000, // 47 --> / + 0b00000101, 0b01111100, 0b10001000, 0b00100010, 0b10001001, 0b00100010, 0b01111100, 0b00000000, // 48 --> 0 + 0b00000010, 0b00000100, 0b11111000, 0b00000011, // 49 --> 1 + 0b00000101, 0b10000100, 0b00001000, 0b00100011, 0b10001010, 0b00100100, 0b10001100, 0b00000000, // 50 --> 2 + 0b00000101, 0b01000100, 0b00001000, 0b00100010, 0b10001001, 0b00100100, 0b01101100, 0b00000000, // 51 --> 3 + 0b00000101, 0b00110000, 0b10100000, 0b01000000, 0b10000010, 0b00111111, 0b00100000, 0b00000000, // 52 --> 4 + 0b00000101, 0b01001110, 0b00101000, 0b10100010, 0b10001000, 0b00100010, 0b01110010, 0b00000000, // 53 --> 5 + 0b00000101, 0b01111100, 0b01001000, 0b00100010, 0b10001001, 0b00100100, 0b01100100, 0b00000000, // 54 --> 6 + 0b00000101, 0b00000010, 0b00001000, 0b00100000, 0b10001100, 0b00001100, 0b00001110, 0b00000000, // 55 --> 7 + 0b00000101, 0b01101100, 0b01001000, 0b00100010, 0b10001001, 0b00100100, 0b01101100, 0b00000000, // 56 --> 8 + 0b00000101, 0b01001100, 0b01001000, 0b00100010, 0b10001001, 0b00100100, 0b01111100, 0b00000000, // 57 --> 9 + 0b00000001, 0b01001000, 0b00000000, // 58 --> : + 0b00000010, 0b00000000, 0b00100001, 0b00000011, // 59 --> ; + 0b00000011, 0b00010000, 0b10100000, 0b01000000, 0b00000100, // 60 --> < + 0b00000101, 0b00101000, 0b10100000, 0b10000000, 0b00000010, 0b00001010, 0b00101000, 0b00000000, // 61 --> = + 0b00000011, 0b01000100, 0b10100000, 0b00000000, 0b00000001, // 62 --> > + 0b00000101, 0b00000100, 0b00001000, 0b00100000, 0b10001010, 0b00000100, 0b00001100, 0b00000000, // 63 --> ? + 0b00001000, 0b01111110, 0b00000100, 0b10010010, 0b01001001, 0b00101001, 0b10100101, 0b11110100, 0b00010010, 0b10001010, 0b00000111, // 64 --> @ + 0b00000101, 0b11111100, 0b01001000, 0b00100000, 0b10000001, 0b00000100, 0b11111100, 0b00000000, // 65 --> A + 0b00000101, 0b11111110, 0b01001000, 0b00100010, 0b10001001, 0b00100100, 0b01101100, 0b00000000, // 66 --> B + 0b00000101, 0b01111100, 0b00001000, 0b00100010, 0b10001000, 0b00100000, 0b01000100, 0b00000000, // 67 --> C + 0b00000101, 0b11111110, 0b00001000, 0b00100010, 0b10001000, 0b00100000, 0b01111100, 0b00000000, // 68 --> D + 0b00000101, 0b11111110, 0b01001000, 0b00100010, 0b10001001, 0b00100100, 0b10000010, 0b00000000, // 69 --> E + 0b00000101, 0b11111110, 0b01001000, 0b00100000, 0b10000001, 0b00000100, 0b00000010, 0b00000000, // 70 --> F + 0b00000101, 0b01111100, 0b00001000, 0b00100010, 0b10001000, 0b00100100, 0b01110100, 0b00000000, // 71 --> G + 0b00000101, 0b11111110, 0b01000000, 0b00000000, 0b00000001, 0b00000100, 0b11111110, 0b00000000, // 72 --> H + 0b00000001, 0b11111110, 0b00000000, // 73 --> I + 0b00000101, 0b01000000, 0b00000000, 0b00000010, 0b00001000, 0b00100000, 0b01111110, 0b00000000, // 74 --> J + 0b00000101, 0b11111110, 0b01000000, 0b10000000, 0b00000010, 0b00010001, 0b10000010, 0b00000000, // 75 --> K + 0b00000101, 0b11111110, 0b00000000, 0b00000010, 0b00001000, 0b00100000, 0b10000000, 0b00000000, // 76 --> L + 0b00000111, 0b11111110, 0b00010000, 0b10000000, 0b00000000, 0b00000100, 0b00001000, 0b00010000, 0b11100000, 0b00001111, // 77 --> M + 0b00000101, 0b11111110, 0b00100000, 0b00000000, 0b00000001, 0b00001000, 0b11111110, 0b00000000, // 78 --> N + 0b00000101, 0b01111100, 0b00001000, 0b00100010, 0b10001000, 0b00100000, 0b01111100, 0b00000000, // 79 --> O + 0b00000101, 0b11111110, 0b01001000, 0b00100000, 0b10000001, 0b00000100, 0b00001100, 0b00000000, // 80 --> P + 0b00000101, 0b01111100, 0b00001000, 0b00100010, 0b10001000, 0b00100000, 0b01111100, 0b00000001, // 81 --> Q + 0b00000101, 0b11111110, 0b01001000, 0b00100000, 0b10000011, 0b00010100, 0b10001100, 0b00000000, // 82 --> R + 0b00000101, 0b01001100, 0b01001000, 0b00100010, 0b10001001, 0b00100100, 0b01100100, 0b00000000, // 83 --> S + 0b00000101, 0b00000010, 0b00001000, 0b11100000, 0b10001111, 0b00000000, 0b00000010, 0b00000000, // 84 --> T + 0b00000101, 0b01111110, 0b00000000, 0b00000010, 0b00001000, 0b00100000, 0b01111110, 0b00000000, // 85 --> U + 0b00000101, 0b00001110, 0b11000000, 0b00000000, 0b00001100, 0b00001100, 0b00001110, 0b00000000, // 86 --> V + 0b00000111, 0b01111110, 0b00000000, 0b00000010, 0b10001000, 0b00011111, 0b10000000, 0b00000000, 0b11100010, 0b00000111, // 87 --> W + 0b00000101, 0b11000110, 0b10100000, 0b00000000, 0b00000001, 0b00001010, 0b11000110, 0b00000000, // 88 --> X + 0b00000101, 0b00000110, 0b00100000, 0b00000000, 0b00001111, 0b00000010, 0b00000110, 0b00000000, // 89 --> Y + 0b00000101, 0b11000010, 0b10001000, 0b00100010, 0b10001001, 0b00100010, 0b10000110, 0b00000000, // 90 --> Z + 0b00000011, 0b11111111, 0b00000101, 0b00010100, 0b00010000, // 91 --> [ + 0b00000111, 0b00000010, 0b00010000, 0b10000000, 0b00000000, 0b00000100, 0b00100000, 0b00000000, 0b00000001, 0b00001000, // 92 --> \ + 0b00000011, 0b00000001, 0b00000101, 0b11110100, 0b00011111, // 93 --> ] + 0b00000101, 0b00001000, 0b00010000, 0b00100000, 0b00000000, 0b00000001, 0b00001000, 0b00000000, // 94 --> ^ + 0b00000101, 0b10000000, 0b00000000, 0b00000010, 0b00001000, 0b00100000, 0b10000000, 0b00000000, // 95 --> _ + 0b00000011, 0b00000010, 0b00010000, 0b10000000, 0b00000000, // 96 --> ` + 0b00000100, 0b01110000, 0b00100000, 0b10000010, 0b00001000, 0b00111110, // 97 --> a + 0b00000100, 0b11111110, 0b00100000, 0b10000010, 0b00001000, 0b00011100, // 98 --> b + 0b00000100, 0b01110000, 0b00100000, 0b10000010, 0b00001000, 0b00010100, // 99 --> c + 0b00000100, 0b01110000, 0b00100000, 0b10000010, 0b10001000, 0b00111111, // 100 --> d + 0b00000100, 0b01110000, 0b10100000, 0b10000010, 0b00001010, 0b00001100, // 101 --> e + 0b00000010, 0b11111100, 0b01001000, 0b00000000, // 102 --> f + 0b00000100, 0b01110000, 0b00100000, 0b10001010, 0b00101000, 0b01111110, // 103 --> g + 0b00000100, 0b11111110, 0b00100000, 0b10000000, 0b00000000, 0b00111100, // 104 --> h + 0b00000001, 0b11111010, 0b00000000, // 105 --> i + 0b00000010, 0b00000000, 0b11101010, 0b00000111, // 106 --> j + 0b00000100, 0b11111110, 0b10000000, 0b00000000, 0b00000101, 0b00100010, // 107 --> k + 0b00000001, 0b11111110, 0b00000000, // 108 --> l + 0b00000111, 0b11111000, 0b00100000, 0b10000000, 0b00000000, 0b00111100, 0b00001000, 0b00100000, 0b00000000, 0b00001111, // 109 --> m + 0b00000100, 0b11111000, 0b00100000, 0b10000000, 0b00000000, 0b00111100, // 110 --> n + 0b00000100, 0b01110000, 0b00100000, 0b10000010, 0b00001000, 0b00011100, // 111 --> o + 0b00000100, 0b11111000, 0b00100011, 0b10000010, 0b00001000, 0b00011100, // 112 --> p + 0b00000100, 0b01110000, 0b00100000, 0b10000010, 0b00001000, 0b11111110, // 113 --> q + 0b00000011, 0b11111000, 0b00100000, 0b10000000, 0b00000000, // 114 --> r + 0b00000011, 0b10010000, 0b10100000, 0b10000010, 0b00000100, // 115 --> s + 0b00000011, 0b00001000, 0b11111000, 0b10000011, 0b00000000, // 116 --> t + 0b00000100, 0b01111000, 0b00000000, 0b00000010, 0b00001000, 0b00111110, // 117 --> u + 0b00000100, 0b01111000, 0b00000000, 0b00000010, 0b00001000, 0b00011110, // 118 --> v + 0b00000111, 0b01111000, 0b00000000, 0b00000010, 0b00001000, 0b00011110, 0b10000000, 0b00000000, 0b10000010, 0b00000111, // 119 --> w + 0b00000100, 0b11011000, 0b10000000, 0b00000000, 0b00000010, 0b00110110, // 120 --> x + 0b00000100, 0b01111000, 0b00000000, 0b00001010, 0b00101000, 0b01111110, // 121 --> y + 0b00000100, 0b11001000, 0b10100000, 0b10000010, 0b00001010, 0b00100110, // 122 --> z + 0b00000011, 0b00010000, 0b10111000, 0b00010011, 0b00010000, // 123 --> { + 0b00000001, 0b11111111, 0b00000001, // 124 --> | + 0b00000011, 0b00000001, 0b10111001, 0b00000011, 0b00000001, // 125 --> } + 0b00000110, 0b00010000, 0b00100000, 0b10000000, 0b00000000, 0b00000100, 0b00010000, 0b00100000, 0b00000000, // 126 --> ~ + 0b00000000, // 127 -->  + 0b00000000, // 128 --> Ђ + 0b00000000, // 129 --> Ѓ + 0b00000000, // 130 --> ‚ + 0b00000000, // 131 --> ѓ + 0b00000000, // 132 --> „ + 0b00000000, // 133 --> … + 0b00000000, // 134 --> † + 0b00000000, // 135 --> ‡ + 0b00000000, // 136 --> € + 0b00000000, // 137 --> ‰ + 0b00000000, // 138 --> Љ + 0b00000000, // 139 --> ‹ + 0b00000000, // 140 --> Њ + 0b00000000, // 141 --> Ќ + 0b00000000, // 142 --> Ћ + 0b00000000, // 143 --> Џ + 0b00000000, // 144 --> ђ + 0b00000000, // 145 --> ‘ + 0b00000000, // 146 --> ’ + 0b00000000, // 147 --> “ + 0b00000000, // 148 --> ” + 0b00000100, 0b00110000, 0b11100000, 0b10000001, 0b00000111, 0b00001100, // 149 --> • + 0b00000000, // 150 --> – + 0b00000000, // 151 --> — + 0b00000000, // 152 --> ˜ + 0b00000000, // 153 --> ™ + 0b00000000, // 154 --> љ + 0b00000000, // 155 --> › + 0b00000000, // 156 --> њ + 0b00000000, // 157 --> ќ + 0b00000000, // 158 --> ћ + 0b00000000, // 159 --> џ + 0b00000000, // 160 -->   + 0b00000000, // 161 --> Ў + 0b00000000, // 162 --> ў + 0b00000000, // 163 --> Ј + 0b00000000, // 164 --> ¤ + 0b00000000, // 165 --> Ґ + 0b00000001, 0b11101111, 0b00000001, // 166 --> ¦ + 0b00000000, // 167 --> § + 0b00000000, // 168 --> Ё + 0b00000111, 0b01111100, 0b00001000, 0b10100010, 0b10001011, 0b00101010, 0b10101010, 0b00001000, 0b11000010, 0b00000111, // 169 --> © + 0b00000000, // 170 --> Є + 0b00000000, // 171 --> « + 0b00000000, // 172 --> ¬ + 0b00000000, // 173 --> ­ + 0b00000000, // 174 --> ® + 0b00000000, // 175 --> Ї + 0b00000100, 0b00000110, 0b00100100, 0b10010000, 0b10000000, 0b00000001, // 176 --> ° + 0b00000101, 0b10001000, 0b00100000, 0b11100010, 0b00001011, 0b00100010, 0b10001000, 0b00000000, // 177 --> ± + 0b00000100, 0b00010010, 0b01100100, 0b01010000, 0b10000001, 0b00000100, // 178 --> І + 0b00000000, // 179 --> і + 0b00000000, // 180 --> ґ + 0b00000000, // 181 --> µ + 0b00000000, // 182 --> ¶ + 0b00000000, // 183 --> · + 0b00000000, // 184 --> ё + 0b00001000, 0b11111110, 0b00100000, 0b00000000, 0b00000001, 0b00001000, 0b11111110, 0b10010000, 0b10100000, 0b00000010, 0b00001001, // 185 --> № + 0b00000000, // 186 --> є + 0b00000000, // 187 --> » + 0b00000000, // 188 --> ј + 0b00000000, // 189 --> Ѕ + 0b00000000, // 190 --> ѕ + 0b00000000, // 191 --> ї + 0b00000101, 0b11111100, 0b01001000, 0b00100000, 0b10000001, 0b00000100, 0b11111100, 0b00000000, // 192 --> А + 0b00000101, 0b11111110, 0b01001000, 0b00100010, 0b10001001, 0b00100100, 0b01100010, 0b00000000, // 193 --> Б + 0b00000101, 0b11111110, 0b01001000, 0b00100010, 0b10001001, 0b00100100, 0b01101100, 0b00000000, // 194 --> В + 0b00000101, 0b11111110, 0b00001000, 0b00100000, 0b10000000, 0b00000000, 0b00000010, 0b00000000, // 195 --> Г + 0b00000111, 0b10000000, 0b11110001, 0b00100011, 0b10001000, 0b00100000, 0b10000010, 0b11110000, 0b00000011, 0b00011000, // 196 --> Д + 0b00000101, 0b11111110, 0b01001000, 0b00100010, 0b10001001, 0b00100100, 0b10000010, 0b00000000, // 197 --> Е + 0b00000111, 0b11101110, 0b01000000, 0b00000000, 0b10000001, 0b00111111, 0b00010000, 0b01000000, 0b11100000, 0b00001110, // 198 --> Ж + 0b00000101, 0b01000100, 0b01001000, 0b00100010, 0b10001001, 0b00100100, 0b01101100, 0b00000000, // 199 --> З + 0b00000101, 0b11111110, 0b10000000, 0b00000000, 0b00000001, 0b00000010, 0b11111110, 0b00000000, // 200 --> И + 0b00000101, 0b11111100, 0b10000100, 0b00100000, 0b01000001, 0b00000010, 0b11111100, 0b00000000, // 201 --> Й + 0b00000101, 0b11111110, 0b01000000, 0b10000000, 0b00000010, 0b00010001, 0b10000010, 0b00000000, // 202 --> К + 0b00000101, 0b10000000, 0b11110000, 0b00100001, 0b10000000, 0b00000000, 0b11111110, 0b00000000, // 203 --> Л + 0b00000111, 0b11111110, 0b00010000, 0b10000000, 0b00000000, 0b00000100, 0b00001000, 0b00010000, 0b11100000, 0b00001111, // 204 --> М + 0b00000101, 0b11111110, 0b01000000, 0b00000000, 0b00000001, 0b00000100, 0b11111110, 0b00000000, // 205 --> Н + 0b00000101, 0b01111100, 0b00001000, 0b00100010, 0b10001000, 0b00100000, 0b01111100, 0b00000000, // 206 --> О + 0b00000101, 0b11111110, 0b00001000, 0b00100000, 0b10000000, 0b00000000, 0b11111110, 0b00000000, // 207 --> П + 0b00000101, 0b11111110, 0b01001000, 0b00100000, 0b10000001, 0b00000100, 0b00001100, 0b00000000, // 208 --> Р + 0b00000101, 0b01111100, 0b00001000, 0b00100010, 0b10001000, 0b00100000, 0b01000100, 0b00000000, // 209 --> С + 0b00000101, 0b00000010, 0b00001000, 0b11100000, 0b10001111, 0b00000000, 0b00000010, 0b00000000, // 210 --> Т + 0b00000101, 0b01001110, 0b01000000, 0b00000010, 0b00001001, 0b00100100, 0b01111110, 0b00000000, // 211 --> У + 0b00000111, 0b01111100, 0b00001000, 0b00100010, 0b11001000, 0b01111111, 0b10000010, 0b00001000, 0b11000010, 0b00000111, // 212 --> Ф + 0b00000101, 0b11000110, 0b10100000, 0b00000000, 0b00000001, 0b00001010, 0b11000110, 0b00000000, // 213 --> Х + 0b00000110, 0b11111110, 0b00000000, 0b00000010, 0b00001000, 0b00100000, 0b11111110, 0b00000000, 0b00000110, // 214 --> Ц + 0b00000101, 0b00001110, 0b01000000, 0b00000000, 0b00000001, 0b00000100, 0b11111110, 0b00000000, // 215 --> Ч + 0b00000111, 0b11111110, 0b00000000, 0b00000010, 0b10001000, 0b00111111, 0b10000000, 0b00000000, 0b11100010, 0b00001111, // 216 --> Ш + 0b00001000, 0b11111110, 0b00000000, 0b00000010, 0b10001000, 0b00111111, 0b10000000, 0b00000000, 0b11100010, 0b00001111, 0b01100000, // 217 --> Щ + 0b00000111, 0b00000010, 0b00001000, 0b11100000, 0b00001111, 0b00100100, 0b10010000, 0b01000000, 0b00000010, 0b00000110, // 218 --> Ъ + 0b00000111, 0b11111110, 0b01000000, 0b00000010, 0b00001001, 0b00100100, 0b01100000, 0b00000000, 0b11100000, 0b00001111, // 219 --> Ы + 0b00000101, 0b11111110, 0b01000000, 0b00000010, 0b00001001, 0b00100100, 0b01100000, 0b00000000, // 220 --> Ь + 0b00000101, 0b01000100, 0b00001000, 0b00100010, 0b10001001, 0b00100100, 0b01111100, 0b00000000, // 221 --> Э + 0b00001000, 0b11111110, 0b01000000, 0b00000000, 0b00000001, 0b00011111, 0b10000010, 0b00001000, 0b00100010, 0b00001000, 0b00011111, // 222 --> Ю + 0b00000101, 0b10001100, 0b01001000, 0b00100001, 0b10000011, 0b00000100, 0b11111110, 0b00000000, // 223 --> Я + 0b00000100, 0b01110000, 0b00100000, 0b10000010, 0b00001000, 0b00111110, // 224 --> а + 0b00000100, 0b01111100, 0b00101000, 0b10100010, 0b10001000, 0b00011100, // 225 --> б + 0b00000100, 0b11111000, 0b10100000, 0b10000010, 0b00001010, 0b00010100, // 226 --> в + 0b00000100, 0b11111000, 0b00100000, 0b10000000, 0b00000000, 0b00000010, // 227 --> г + 0b00000110, 0b10000000, 0b11000001, 0b10000011, 0b00001000, 0b00100010, 0b11110000, 0b00000000, 0b00000110, // 228 --> д + 0b00000100, 0b01110000, 0b10100000, 0b10000010, 0b00001010, 0b00001100, // 229 --> е + 0b00000111, 0b11011000, 0b10000000, 0b00000000, 0b00000010, 0b00111110, 0b00100000, 0b10000000, 0b10000000, 0b00001101, // 230 --> ж + 0b00000100, 0b01010000, 0b00100000, 0b10000010, 0b00001010, 0b00010100, // 231 --> з + 0b00000101, 0b11111000, 0b00000000, 0b00000001, 0b00000010, 0b00000100, 0b11111000, 0b00000000, // 232 --> и + 0b00000101, 0b11111000, 0b00000100, 0b00100001, 0b01000010, 0b00000100, 0b11111000, 0b00000000, // 233 --> й + 0b00000100, 0b11111000, 0b10000000, 0b00000000, 0b00000101, 0b00100010, // 234 --> к + 0b00000100, 0b10000000, 0b11000000, 0b10000001, 0b00000000, 0b00111110, // 235 --> л + 0b00000101, 0b11111000, 0b01000000, 0b00000000, 0b00000010, 0b00000100, 0b11111000, 0b00000000, // 236 --> м + 0b00000100, 0b11111000, 0b10000000, 0b00000000, 0b00000010, 0b00111110, // 237 --> н + 0b00000100, 0b01110000, 0b00100000, 0b10000010, 0b00001000, 0b00011100, // 238 --> о + 0b00000100, 0b11111000, 0b00100000, 0b10000000, 0b00000000, 0b00111110, // 239 --> п + 0b00000100, 0b11111000, 0b00100011, 0b10000010, 0b00001000, 0b00011100, // 240 --> р + 0b00000100, 0b01110000, 0b00100000, 0b10000010, 0b00001000, 0b00010100, // 241 --> с + 0b00000101, 0b00001000, 0b00100000, 0b10000000, 0b00001111, 0b00000010, 0b00001000, 0b00000000, // 242 --> т + 0b00000100, 0b01111000, 0b00000000, 0b00001010, 0b00101000, 0b01111110, // 243 --> у + 0b00000111, 0b01110000, 0b00100000, 0b10000010, 0b10001000, 0b11111111, 0b10001000, 0b00100000, 0b00000010, 0b00000111, // 244 --> ф + 0b00000100, 0b11011000, 0b10000000, 0b00000000, 0b00000010, 0b00110110, // 245 --> х + 0b00000101, 0b11111000, 0b00000000, 0b00000010, 0b00001000, 0b00111110, 0b10000000, 0b00000001, // 246 --> ц + 0b00000100, 0b00011000, 0b10000000, 0b00000000, 0b00000010, 0b00111110, // 247 --> ч + 0b00000111, 0b11111000, 0b00000000, 0b00000010, 0b00001000, 0b00111110, 0b10000000, 0b00000000, 0b10000010, 0b00001111, // 248 --> ш + 0b00001000, 0b11111000, 0b00000000, 0b00000010, 0b00001000, 0b00111110, 0b10000000, 0b00000000, 0b10000010, 0b00001111, 0b01100000, // 249 --> щ + 0b00000101, 0b00001000, 0b11100000, 0b00000011, 0b00001010, 0b00101000, 0b01000000, 0b00000000, // 250 --> ъ + 0b00000110, 0b11111000, 0b10000000, 0b00000010, 0b00001010, 0b00010000, 0b00000000, 0b11100000, 0b00000011, // 251 --> ы + 0b00000100, 0b11111000, 0b10000000, 0b00000010, 0b00001010, 0b00010000, // 252 --> ь + 0b00000100, 0b01010000, 0b00100000, 0b10000010, 0b00001010, 0b00011100, // 253 --> э + 0b00000110, 0b11111000, 0b10000000, 0b00000000, 0b00000111, 0b00100010, 0b10001000, 0b11000000, 0b00000001, // 254 --> ю + 0b00000100, 0b10010000, 0b10100000, 0b10000001, 0b00000010, 0b00111110 // 255 --> я +}; diff --git a/icons/fam_base.png b/icons/fam_base.png new file mode 100644 index 0000000..ea83977 Binary files /dev/null and b/icons/fam_base.png differ diff --git a/icons/fam_rectt.png b/icons/fam_rectt.png new file mode 100644 index 0000000..796b520 Binary files /dev/null and b/icons/fam_rectt.png differ diff --git a/icons/famfamfam/Canvas_Clear.png b/icons/famfamfam/Canvas_Clear.png new file mode 100644 index 0000000..ead2bd1 Binary files /dev/null and b/icons/famfamfam/Canvas_Clear.png differ diff --git a/icons/famfamfam/Canvas_Fill.png b/icons/famfamfam/Canvas_Fill.png new file mode 100644 index 0000000..ddc5cd0 Binary files /dev/null and b/icons/famfamfam/Canvas_Fill.png differ diff --git a/icons/Famfamfam-Silk-Disk.16.png b/icons/famfamfam/Famfamfam-Silk-Disk.16.png similarity index 100% rename from icons/Famfamfam-Silk-Disk.16.png rename to icons/famfamfam/Famfamfam-Silk-Disk.16.png diff --git a/icons/Famfamfam-Silk-Door-out.16.png b/icons/famfamfam/Famfamfam-Silk-Door-out.16.png similarity index 100% rename from icons/Famfamfam-Silk-Door-out.16.png rename to icons/famfamfam/Famfamfam-Silk-Door-out.16.png diff --git a/icons/Famfamfam-Silk-Folder-page.16.png b/icons/famfamfam/Famfamfam-Silk-Folder-page.16.png similarity index 100% rename from icons/Famfamfam-Silk-Folder-page.16.png rename to icons/famfamfam/Famfamfam-Silk-Folder-page.16.png diff --git a/icons/Famfamfam-Silk-Folder.16.png b/icons/famfamfam/Famfamfam-Silk-Folder.16.png similarity index 100% rename from icons/Famfamfam-Silk-Folder.16.png rename to icons/famfamfam/Famfamfam-Silk-Folder.16.png diff --git a/icons/Famfamfam-Silk-Page-copy.16.png b/icons/famfamfam/Famfamfam-Silk-Page-copy.16.png similarity index 100% rename from icons/Famfamfam-Silk-Page-copy.16.png rename to icons/famfamfam/Famfamfam-Silk-Page-copy.16.png diff --git a/icons/Famfamfam-Silk-Page-paste.16.png b/icons/famfamfam/Famfamfam-Silk-Page-paste.16.png similarity index 100% rename from icons/Famfamfam-Silk-Page-paste.16.png rename to icons/famfamfam/Famfamfam-Silk-Page-paste.16.png diff --git a/icons/Famfamfam-Silk-Page-white-copy.16.png b/icons/famfamfam/Famfamfam-Silk-Page-white-copy.16.png similarity index 100% rename from icons/Famfamfam-Silk-Page-white-copy.16.png rename to icons/famfamfam/Famfamfam-Silk-Page-white-copy.16.png diff --git a/icons/Famfamfam-Silk-Page-white.16.png b/icons/famfamfam/Famfamfam-Silk-Page-white.16.png similarity index 100% rename from icons/Famfamfam-Silk-Page-white.16.png rename to icons/famfamfam/Famfamfam-Silk-Page-white.16.png diff --git a/icons/Famfamfam-Silk-Shape-flip-horizontal.16.png b/icons/famfamfam/Famfamfam-Silk-Shape-flip-horizontal.16.png similarity index 100% rename from icons/Famfamfam-Silk-Shape-flip-horizontal.16.png rename to icons/famfamfam/Famfamfam-Silk-Shape-flip-horizontal.16.png diff --git a/icons/Famfamfam-Silk-Shape-flip-vertical.16.png b/icons/famfamfam/Famfamfam-Silk-Shape-flip-vertical.16.png similarity index 100% rename from icons/Famfamfam-Silk-Shape-flip-vertical.16.png rename to icons/famfamfam/Famfamfam-Silk-Shape-flip-vertical.16.png diff --git a/icons/famfamfam/add.png b/icons/famfamfam/add.png new file mode 100644 index 0000000..6332fef Binary files /dev/null and b/icons/famfamfam/add.png differ diff --git a/icons/famfamfam/arrow_down.png b/icons/famfamfam/arrow_down.png new file mode 100644 index 0000000..2c4e279 Binary files /dev/null and b/icons/famfamfam/arrow_down.png differ diff --git a/icons/famfamfam/arrow_inout.png b/icons/famfamfam/arrow_inout.png new file mode 100644 index 0000000..1b76367 Binary files /dev/null and b/icons/famfamfam/arrow_inout.png differ diff --git a/icons/famfamfam/arrow_left.png b/icons/famfamfam/arrow_left.png new file mode 100644 index 0000000..0f58984 Binary files /dev/null and b/icons/famfamfam/arrow_left.png differ diff --git a/icons/famfamfam/arrow_redo.png b/icons/famfamfam/arrow_redo.png new file mode 100644 index 0000000..fdc394c Binary files /dev/null and b/icons/famfamfam/arrow_redo.png differ diff --git a/icons/famfamfam/arrow_right.png b/icons/famfamfam/arrow_right.png new file mode 100644 index 0000000..bc153c8 Binary files /dev/null and b/icons/famfamfam/arrow_right.png differ diff --git a/icons/famfamfam/arrow_undo.png b/icons/famfamfam/arrow_undo.png new file mode 100644 index 0000000..6972c5e Binary files /dev/null and b/icons/famfamfam/arrow_undo.png differ diff --git a/icons/famfamfam/arrow_up.png b/icons/famfamfam/arrow_up.png new file mode 100644 index 0000000..1ebb193 Binary files /dev/null and b/icons/famfamfam/arrow_up.png differ diff --git a/icons/famfamfam/asterisk_orange.png b/icons/famfamfam/asterisk_orange.png new file mode 100644 index 0000000..1ebebde Binary files /dev/null and b/icons/famfamfam/asterisk_orange.png differ diff --git a/icons/famfamfam/calculator.png b/icons/famfamfam/calculator.png new file mode 100644 index 0000000..701a60a Binary files /dev/null and b/icons/famfamfam/calculator.png differ diff --git a/icons/famfamfam/contrast.png b/icons/famfamfam/contrast.png new file mode 100644 index 0000000..e623c52 Binary files /dev/null and b/icons/famfamfam/contrast.png differ diff --git a/icons/famfamfam/fam_base.png b/icons/famfamfam/fam_base.png new file mode 100644 index 0000000..ed6cdcb Binary files /dev/null and b/icons/famfamfam/fam_base.png differ diff --git a/icons/famfamfam/fam_rectt.png b/icons/famfamfam/fam_rectt.png new file mode 100644 index 0000000..796b520 Binary files /dev/null and b/icons/famfamfam/fam_rectt.png differ diff --git a/icons/famfamfam/folder_image.png b/icons/famfamfam/folder_image.png new file mode 100644 index 0000000..d5df75b Binary files /dev/null and b/icons/famfamfam/folder_image.png differ diff --git a/icons/famfamfam/folder_table.png b/icons/famfamfam/folder_table.png new file mode 100644 index 0000000..473cee3 Binary files /dev/null and b/icons/famfamfam/folder_table.png differ diff --git a/icons/famfamfam/package_go.png b/icons/famfamfam/package_go.png new file mode 100644 index 0000000..aace63a Binary files /dev/null and b/icons/famfamfam/package_go.png differ diff --git a/icons/famfamfam/shading.png b/icons/famfamfam/shading.png new file mode 100644 index 0000000..09275f9 Binary files /dev/null and b/icons/famfamfam/shading.png differ diff --git a/icons/famfamfam/shape_align_center.png b/icons/famfamfam/shape_align_center.png new file mode 100644 index 0000000..efe9a98 Binary files /dev/null and b/icons/famfamfam/shape_align_center.png differ diff --git a/icons/famfamfam/tick.png b/icons/famfamfam/tick.png new file mode 100644 index 0000000..a9925a0 Binary files /dev/null and b/icons/famfamfam/tick.png differ diff --git a/icons/redo.png b/icons/redo.png new file mode 100644 index 0000000..f350a23 Binary files /dev/null and b/icons/redo.png differ diff --git a/icons/undo.png b/icons/undo.png new file mode 100644 index 0000000..1bf10d6 Binary files /dev/null and b/icons/undo.png differ diff --git a/images/Screenshot_01.png b/images/Screenshot_01.png deleted file mode 100644 index a24d31f..0000000 Binary files a/images/Screenshot_01.png and /dev/null differ diff --git a/images/Screenshot_02.png b/images/Screenshot_02.png deleted file mode 100644 index 63ed91c..0000000 Binary files a/images/Screenshot_02.png and /dev/null differ diff --git a/images/Screenshot_03.png b/images/Screenshot_03.png deleted file mode 100644 index b8fcb5d..0000000 Binary files a/images/Screenshot_03.png and /dev/null differ diff --git a/images/Screenshot_Code-shift.png b/images/Screenshot_Code-shift.png new file mode 100644 index 0000000..a61a677 Binary files /dev/null and b/images/Screenshot_Code-shift.png differ diff --git a/images/Screenshot_Export.png b/images/Screenshot_Export.png new file mode 100644 index 0000000..03114e4 Binary files /dev/null and b/images/Screenshot_Export.png differ diff --git a/images/Screenshot_Import-image.png b/images/Screenshot_Import-image.png new file mode 100644 index 0000000..0bc3c1f Binary files /dev/null and b/images/Screenshot_Import-image.png differ diff --git a/images/Screenshot_Main.png b/images/Screenshot_Main.png new file mode 100644 index 0000000..ffad225 Binary files /dev/null and b/images/Screenshot_Main.png differ diff --git a/images/Screenshot_New.png b/images/Screenshot_New.png new file mode 100644 index 0000000..aadc590 Binary files /dev/null and b/images/Screenshot_New.png differ