45 Commits
v2.3 ... v2.7

Author SHA1 Message Date
7aa75224ee Merge branch 'dev' - v2.7
Changes:

Application:
- Cursor for rectangular selection tool
- Icons for tool buttons
- Tooltips now has keyboard shortcuts info

Bugs:
- Fix selection info: change comma to x

Other:
- Examples update
- C library example
2025-07-01 00:09:23 +03:00
4fe2af03b0 TODO features:
V Cursor for rectangular selection tool
V Icons for tool buttons
V Tooltips now has keyboard shortcuts info

V Fix selection info: change comma to x
2025-07-01 00:07:01 +03:00
Anton Mukhin
fc4822065a mctext library fix 2025-06-27 12:45:31 +03:00
Anton Mukhin
3778a753fb Update TODO 2025-06-27 12:18:27 +03:00
Anton Mukhin
20bd7095dd mctext.c library fix 2025-06-26 14:42:19 +03:00
8ed1e33f22 Alagard 9x17 font finished 2025-06-25 02:00:28 +03:00
Anton Mukhin
1eb463c94f STM32 HAL library example 2025-06-23 12:31:24 +03:00
30142fda26 Examples update 2025-06-21 03:53:12 +03:00
Anton Mukhin
70a4d34d69 quick file rename 2025-06-20 17:52:45 +03:00
Anton Mukhin
c913525b31 More font examples 2025-06-20 17:21:13 +03:00
Anton Mukhin
42c72b907f Update TODO 2025-06-20 17:20:39 +03:00
Anton Mukhin
32a8ffd749 Merge branch 'dev' - v2.6
Changes

Application:
- Option to hide symbols list to narrow the side bar
- Buttons to select previous/next symbol with shortcuts
- Custom cursor showing painting brush size

Functionality:
- Fix straight (Ctrl/Shift) lines paint to reset coordinate on mouse-up even if Ctrl/Shift is still held
- Command to make all blank symbols zero-width
- Alt-Scroll to change painting brush size
2025-06-20 11:38:20 +03:00
Anton Mukhin
c092aebeca v2.6 release preps 2025-06-20 11:35:00 +03:00
Anton Mukhin
346088b532 TODO features:
- Custom cursor showing painting size
- Alt-Scroll to change painting size
2025-06-19 17:30:30 +03:00
Anton Mukhin
ac7981d40a TODO update 2025-06-19 10:34:15 +03:00
Anton Mukhin
dd3ecfcf3e TODO feature: Fix straight (Ctrl/Shift) lines paint to reset coordinate on mouse-up even if Ctrl/Shift is still held 2025-06-19 10:14:57 +03:00
Anton Mukhin
6ba4a56197 TODO feature: Command to make all blank symbols zero-width 2025-06-19 10:09:35 +03:00
Anton Mukhin
87b46ec714 WIP: Working on "zerofy widht for blank symbols" feature 2025-06-18 17:55:09 +03:00
Anton Mukhin
12593ef7ad TODO update; new font example 2025-06-18 17:05:19 +03:00
Anton Mukhin
b01bff86b9 basis33 font example 2025-06-18 11:09:31 +03:00
3e734432f4 WIP: New font
https://www.1001fonts.com/bitmap+cyrillic+pixel-fonts.html
2025-06-18 03:15:21 +03:00
aa5b8354d6 Pixel 3x5 cyr font 2025-06-17 21:54:57 +03:00
Anton Mukhin
7952263595 TODO features:
- Option to hide symbols list to narrow the side bar
- Buttons to select previous/next symbol with shortcuts
2025-06-17 17:03:08 +03:00
07906b8abc 2 new Latin font examples 2025-06-10 22:00:55 +03:00
25e54c35e7 WIP: foldable side bar 2025-06-03 22:47:39 +03:00
fc3ef33f3e WIP: foldable side bar 2025-06-03 22:20:47 +03:00
Anton Mukhin
780f92ccf5 Merge branch 'dev' - v2.5
Changes:

Functionality:
- Middle mouse - drag the canvas
- Straight line painting (hold Shift / Ctrl)
- A button to Copy from Test font dialog to then paste into another frame

Bugs fixed:
- Nothing selected after removing a symbol. Potential error throw on "Apply"
2025-06-03 11:50:38 +03:00
Anton Mukhin
cebbdc63c8 Bug fixed: Nothing selected after removing a symbol. Potential error throw on "Apply" 2025-06-03 11:46:30 +03:00
Anton Mukhin
8ca83b7edc Update README.md; Update Font-tester screenshot; Version number in-code update 2025-06-03 11:35:40 +03:00
Anton Mukhin
9cfe8ef5c3 Version changed to 2.5; TODO feature: Straight line painting (hold Shift / Ctrl) 2025-06-03 11:30:12 +03:00
76ca7ccf35 TODO feature: Middle mouse - drag the canvas 2025-06-02 23:37:22 +03:00
Anton Mukhin
3c656b36a7 TODO feature: A button to Copy from Test font dialog to then paste into another frame 2025-06-02 18:03:52 +03:00
Anton Mukhin
9f6f5ba5d7 More to TODO 2025-06-02 17:19:51 +03:00
Anton Mukhin
4fa3d9bc49 Update TODO 2025-06-02 17:12:26 +03:00
Anton Mukhin
1a26a2d16b Hotfix: history object creation time 2025-06-02 14:09:06 +03:00
Anton Mukhin
e0a4a6194c Removed old history class 2025-06-02 13:43:03 +03:00
Anton Mukhin
6971686f88 Merge branch 'dev' - v2.4 2025-06-02 13:40:47 +03:00
Anton Mukhin
ac2e345397 Merge branch 'dev-history-extension' into dev 2025-06-02 13:38:47 +03:00
Anton Mukhin
d1d653bc34 TODO features:
Functionality:
- Rewrite history class so it tracks all changes, not only a canvas changes

Bugs fixed:
- In some cases after switching to a symbol dotPanel mouse move causes "Out of range" exception (history.Pre after width change?)
2025-06-02 13:37:35 +03:00
1c034fded1 ljhgfljiukghlkuyfgiyu 2025-06-01 21:18:15 +03:00
Anton Mukhin
a05352acf7 WIP: working on new history class 2025-05-30 16:56:38 +03:00
2f86598a2a WIP: working on a new history class 2025-05-30 07:15:43 +03:00
Anton Mukhin
313f35bb3e Update TODO 2025-05-29 19:48:56 +03:00
Anton Mukhin
679b4fc61d Version changed to 2.4; TODO features:
Application:
- Copy-Paste now uses System clipboard and it is possible to copy-paste from/to different instances of running program

Bugs fixed:
- Switching between symbols while select tool is active and small area selected trows an error
- Full frame Copy in Clipboard does not respect selection on Paste operation
2025-05-29 19:44:33 +03:00
Anton Mukhin
eda7af8f67 README.md update 2025-05-29 17:04:38 +03:00
43 changed files with 1260 additions and 378 deletions

View File

@@ -15,7 +15,7 @@ namespace McBitFont {
} }
private void About_Load(object sender, EventArgs e) { private void About_Load(object sender, EventArgs e) {
lblVersion.Text = "Version: v" + MainForm.version; lblVersion.Text = "Version: " + MainForm.version;
} }
private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) {

View File

@@ -1,85 +0,0 @@
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<bool[,]> 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);
}
}
}

304
McBitFont/ChangeHistory.cs Normal file
View File

@@ -0,0 +1,304 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using static McBitFont.MainForm;
namespace McBitFont {
internal class ChangeHistory {
private MainForm mainForm;
private List<ChangeEvent> timeline = [];
private List<FrameMiniature> canvasChanges = [];
private List<List<FrameMiniature>> fontChanges = [];
private List<int> selectionChanges = [];
private int canvasIndex = 0;
private int fontIndex = 0;
private int selectionIndex = 0;
public int Depth { get; set; }
public int Index { get; set; } = -1;
public int Count {
get { return timeline.Count; }
}
public int Undos {
get { return Index < 0 ? 0 : Index + 1; }
}
public int Redos {
get { return Index < 0 ? Count : Count - Index - 1; }
}
public bool Doing { get; set; } = false;
// Constructor
public ChangeHistory(MainForm form, int depth = 100) {
timeline = [];
canvasChanges = [];
fontChanges = [];
selectionChanges = [];
mainForm = form;
Depth = depth;
ResetIndices();
Add();
Doing = false;
}
private void ResetIndices() {
Index = -1;
canvasIndex = 0;
fontIndex = 0;
selectionIndex = 0;
}
public enum ChangeType {
None = 0,
Canvas = 1, // Changes made to canvas
Font = 2, // Symbol width has been changed
Selection = 3 // Selected another frame
}
public class ChangeEvent(ChangeType type, FrameMiniature? canvas = null) {
public ChangeType Type { get; set; } = type;
public FrameMiniature? Canvas { get; set; } = canvas;
}
public static FrameMiniature CopyFrameSimple(FrameMiniature f) {
FrameMiniature newf = new(f.code, f.width, f.height);
Array.Copy(f.data, newf.data, f.data.Length);
return newf;
}
public void Clear() {
timeline.Clear();
canvasChanges.Clear();
fontChanges.Clear();
selectionChanges.Clear();
ResetIndices();
Add();
}
// Remove from a proper list by change type
private bool RemoveByType(ChangeEvent ce, bool first = true) {
switch (ce.Type) {
case ChangeType.Canvas:
if (canvasChanges.Count <= 1) return false;
if ((first && canvasIndex > 0) || (!first && canvasIndex == canvasChanges.Count - 1)) canvasIndex--;
canvasChanges.RemoveAt(first ? 0 : canvasChanges.Count - 1);
break;
case ChangeType.Font:
if (fontChanges.Count <= 1) return false;
if ((first && fontIndex > 0) || (!first && fontIndex == fontChanges.Count - 1)) fontIndex--;
if (ce.Canvas != null) {
if ((first && canvasIndex > 0) || (!first && canvasIndex == canvasChanges.Count - 1)) canvasIndex--;
canvasChanges.Remove((FrameMiniature)ce.Canvas);
}
fontChanges.RemoveAt(first ? 0 : fontChanges.Count - 1);
break;
case ChangeType.Selection:
if (selectionChanges.Count <= 1) return false;
if ((first && selectionIndex > 0) || (!first && selectionIndex == selectionChanges.Count - 1)) selectionIndex--;
if (ce.Canvas != null) {
if ((first && canvasIndex > 0) || (!first && canvasIndex == canvasChanges.Count - 1)) canvasIndex--;
canvasChanges.Remove((FrameMiniature)ce.Canvas);
}
selectionChanges.RemoveAt(first ? 0 : selectionChanges.Count - 1);
break;
default:
return false;
}
if ((first && Index > 0) || (!first && Index == Count - 1) || Count == 1) Index--;
timeline.RemoveAt(first ? 0 : Count - 1);
return true;
}
// Remove oldest event
private bool RemoveOldest() {
if (Count == 0) return false;
ChangeEvent ce = timeline.First();
RemoveByType(ce);
return true;
}
// Remove last event
public bool RemoveLast() {
if (Count == 0) return false;
var ce = timeline.Last();
RemoveByType(ce, false);
return true;
}
// Remove history tail
private void TruncateTail() {
// Check if the Index does not point to the last event
//while (Index < Count - 1) Remove
if (Index >= -1 && Index < Count - 1) {
timeline.RemoveRange( Index + 1, Count - Index - 1);
canvasChanges.RemoveRange( canvasIndex + 1, canvasChanges.Count - canvasIndex - 1);
fontChanges.RemoveRange( fontIndex + 1, fontChanges.Count - fontIndex - 1);
selectionChanges.RemoveRange(selectionIndex + 1, selectionChanges.Count - selectionIndex - 1);
}
}
// Add first states to all lists
private void Add() {
Add(mainForm.f, false);
Add(mainForm.frames, false);
var fff = mainForm.f; // Marshal-by-reference warning workaround
int ccс = fff.code; //
Add(ccс, false);
}
// Add canvas change
public FrameMiniature? Add(FrameMiniature f, bool useIndex = true) {
if (Doing) return null ;
TruncateTail();
if (Count >= Depth) RemoveOldest();
canvasChanges.Add(CopyFrameSimple(f));
if (useIndex) {
timeline.Add(new ChangeEvent(ChangeType.Canvas));
Index++;
canvasIndex++;
}
return canvasChanges.Last();
}
// Add Font change
public void Add(List<FrameMiniature> ff, bool useIndex = true) {
if (Doing) return;
TruncateTail();
var l = new List<FrameMiniature>();
foreach (var f in ff) {
l.Add(CopyFrameSimple(f));
}
if (Count >= Depth) RemoveOldest();
fontChanges.Add(l);
if (useIndex) {
var canv = Add(mainForm.f, false);
canvasIndex++;
timeline.Add(new ChangeEvent(ChangeType.Font, canv));
Index++;
fontIndex++;
}
}
// Add Frame selection change
public void Add(int code, bool useIndex = true) {
if (Doing) return;
TruncateTail();
if (Count >= Depth) RemoveOldest();
selectionChanges.Add(code);
if (useIndex) {
var canv = Add(mainForm.f, false);
canvasIndex++;
timeline.Add(new ChangeEvent(ChangeType.Selection, canv));
Index++;
selectionIndex++;
}
}
private void Do(bool undo = true) {
if (!undo && Index >= Count - 1) return;
Doing = true;
var ce = timeline.ElementAt(Index + (undo ? 0 : 1));
int dIndex = undo ? -1 : 1;
FrameMiniature fff;
switch (ce.Type) {
case ChangeType.Canvas:
canvasIndex += dIndex;
mainForm.f = CopyFrameSimple(canvasChanges[canvasIndex]);
mainForm.SetModified();
mainForm.nudX.ValueChanged -= mainForm.nudX_ValueChanged;
mainForm.nudY.ValueChanged -= mainForm.nudY_ValueChanged;
mainForm.nudY.Value = mainForm.dotHeight = canvasChanges[canvasIndex].height;
mainForm.nudX.Value = mainForm.dotWidth = canvasChanges[canvasIndex].width;
mainForm.SetNewWH();
mainForm.nudX.ValueChanged += mainForm.nudX_ValueChanged;
mainForm.nudY.ValueChanged += mainForm.nudY_ValueChanged;
break;
case ChangeType.Font:
Cursor.Current = Cursors.WaitCursor;
string selItem = "";
int selCode = 0;
if (mainForm.miniList.SelectedItems.Count > 0) {
selItem = mainForm.miniList.SelectedItems[0].Name;
selCode = Convert.ToInt32(selItem);
}
fontIndex += dIndex;
canvasIndex += dIndex;
mainForm.frames.Clear();
mainForm.miniList.Clear();
mainForm.ilMiniatures.Images.Clear();
foreach (var f in fontChanges[fontIndex]) {
mainForm.frames.Add(CopyFrameSimple(f));
}
mainForm.FillFrameLists();
if (selItem != "") {
var selection = mainForm.miniList.Items.Find(selItem, false);
if (selection.Length > 0) selection[0].Selected = true;
fff = mainForm.frames.Find(x => x.code == selCode);
} else {
mainForm.miniList.Items[0].Selected = true;
fff = mainForm.frames[0];
}
mainForm.f = mainForm.CopyFrame(fff);
mainForm.nudX.ValueChanged -= mainForm.nudX_ValueChanged;
mainForm.nudY.ValueChanged -= mainForm.nudY_ValueChanged;
mainForm.nudY.Value = mainForm.dotHeight = fff.height;
mainForm.nudX.Value = mainForm.dotWidth = fff.width;
mainForm.SetNewWH();
mainForm.nudX.ValueChanged += mainForm.nudX_ValueChanged;
mainForm.nudY.ValueChanged += mainForm.nudY_ValueChanged;
Cursor.Current = Cursors.Default;
break;
case ChangeType.Selection:
selectionIndex += dIndex;
canvasIndex += dIndex;
var s = selectionChanges[selectionIndex].ToString().PadLeft(3, '0');
var sel = mainForm.miniList.Items.Find(s, false);
if (sel.Length > 0) sel[0].Selected = true;
fff = mainForm.frames.Find(x => x.code == selectionChanges[selectionIndex]);
mainForm.f = CopyFrameSimple(fff);
mainForm.nudX.ValueChanged -= mainForm.nudX_ValueChanged;
mainForm.nudY.ValueChanged -= mainForm.nudY_ValueChanged;
mainForm.nudY.Value = mainForm.dotHeight = fff.height;
mainForm.nudX.Value = mainForm.dotWidth = fff.width;
mainForm.SetNewWH();
mainForm.nudX.ValueChanged += mainForm.nudX_ValueChanged;
mainForm.nudY.ValueChanged += mainForm.nudY_ValueChanged;
break;
default:
break;
}
Index += dIndex;
Doing = false;
}
// Undo last change
public bool Undo() {
if (Undos < 1) return false;
Do();
return true;
}
// Redo last ondone change
public bool Redo() {
if (Redos < 1) return false;
Do(false);
return true;
}
}
}

View File

@@ -34,6 +34,7 @@
lblZoom = new System.Windows.Forms.Label(); lblZoom = new System.Windows.Forms.Label();
cbZoom = new System.Windows.Forms.ComboBox(); cbZoom = new System.Windows.Forms.ComboBox();
toolTip1 = new System.Windows.Forms.ToolTip(components); toolTip1 = new System.Windows.Forms.ToolTip(components);
btnCopy = new System.Windows.Forms.Button();
chkBaseline = new System.Windows.Forms.CheckBox(); chkBaseline = new System.Windows.Forms.CheckBox();
((System.ComponentModel.ISupportInitialize)nudSpace).BeginInit(); ((System.ComponentModel.ISupportInitialize)nudSpace).BeginInit();
SuspendLayout(); SuspendLayout();
@@ -53,7 +54,7 @@
nudSpace.Maximum = new decimal(new int[] { 255, 0, 0, 0 }); nudSpace.Maximum = new decimal(new int[] { 255, 0, 0, 0 });
nudSpace.Name = "nudSpace"; nudSpace.Name = "nudSpace";
nudSpace.Size = new System.Drawing.Size(40, 23); nudSpace.Size = new System.Drawing.Size(40, 23);
nudSpace.TabIndex = 1; nudSpace.TabIndex = 2;
toolTip1.SetToolTip(nudSpace, "Space between symbols in pixels"); toolTip1.SetToolTip(nudSpace, "Space between symbols in pixels");
nudSpace.Value = new decimal(new int[] { 1, 0, 0, 0 }); nudSpace.Value = new decimal(new int[] { 1, 0, 0, 0 });
nudSpace.ValueChanged += Scrolling; nudSpace.ValueChanged += Scrolling;
@@ -74,7 +75,7 @@
tbText.Location = new System.Drawing.Point(12, 55); tbText.Location = new System.Drawing.Point(12, 55);
tbText.Name = "tbText"; tbText.Name = "tbText";
tbText.Size = new System.Drawing.Size(260, 29); tbText.Size = new System.Drawing.Size(260, 29);
tbText.TabIndex = 3; tbText.TabIndex = 1;
toolTip1.SetToolTip(tbText, "Text to test the font with"); toolTip1.SetToolTip(tbText, "Text to test the font with");
tbText.TextChanged += Text_Changed; tbText.TextChanged += Text_Changed;
// //
@@ -98,7 +99,7 @@
vScroll.LargeChange = 25; vScroll.LargeChange = 25;
vScroll.Location = new System.Drawing.Point(251, 84); vScroll.Location = new System.Drawing.Point(251, 84);
vScroll.Name = "vScroll"; vScroll.Name = "vScroll";
vScroll.Size = new System.Drawing.Size(21, 125); vScroll.Size = new System.Drawing.Size(21, 104);
vScroll.TabIndex = 17; vScroll.TabIndex = 17;
vScroll.ValueChanged += Scrolling; vScroll.ValueChanged += Scrolling;
// //
@@ -124,12 +125,12 @@
// //
cbZoom.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; cbZoom.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
cbZoom.FormattingEnabled = true; cbZoom.FormattingEnabled = true;
cbZoom.Items.AddRange(new object[] { "2", "3", "5", "10", "15", "20", "25", "30", "35", "40", "45", "50" }); cbZoom.Items.AddRange(new object[] { "1", "2", "3", "5", "10", "15", "20", "25", "30", "35", "40", "45", "50" });
cbZoom.Location = new System.Drawing.Point(222, 6); cbZoom.Location = new System.Drawing.Point(222, 6);
cbZoom.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); cbZoom.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
cbZoom.Name = "cbZoom"; cbZoom.Name = "cbZoom";
cbZoom.Size = new System.Drawing.Size(50, 23); cbZoom.Size = new System.Drawing.Size(50, 23);
cbZoom.TabIndex = 19; cbZoom.TabIndex = 3;
cbZoom.TabStop = false; cbZoom.TabStop = false;
toolTip1.SetToolTip(cbZoom, "Zoom level"); toolTip1.SetToolTip(cbZoom, "Zoom level");
cbZoom.SelectedIndexChanged += ZoomChanged; cbZoom.SelectedIndexChanged += ZoomChanged;
@@ -140,13 +141,28 @@
toolTip1.InitialDelay = 500; toolTip1.InitialDelay = 500;
toolTip1.ReshowDelay = 100; toolTip1.ReshowDelay = 100;
// //
// btnCopy
//
btnCopy.Anchor = System.Windows.Forms.AnchorStyles.Bottom;
btnCopy.Image = Properties.Resources.Famfamfam_Silk_Page_copy_16;
btnCopy.ImageAlign = System.Drawing.ContentAlignment.MiddleRight;
btnCopy.Location = new System.Drawing.Point(110, 214);
btnCopy.Name = "btnCopy";
btnCopy.Size = new System.Drawing.Size(80, 30);
btnCopy.TabIndex = 5;
btnCopy.Text = " Copy";
btnCopy.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText;
toolTip1.SetToolTip(btnCopy, "Copy BitPixels you see to Clipboard");
btnCopy.UseVisualStyleBackColor = true;
btnCopy.MouseClick += Copy_Click;
//
// chkBaseline // chkBaseline
// //
chkBaseline.AutoSize = true; chkBaseline.AutoSize = true;
chkBaseline.Location = new System.Drawing.Point(203, 36); chkBaseline.Location = new System.Drawing.Point(203, 36);
chkBaseline.Name = "chkBaseline"; chkBaseline.Name = "chkBaseline";
chkBaseline.Size = new System.Drawing.Size(69, 19); chkBaseline.Size = new System.Drawing.Size(69, 19);
chkBaseline.TabIndex = 20; chkBaseline.TabIndex = 4;
chkBaseline.Text = "Baseline"; chkBaseline.Text = "Baseline";
chkBaseline.UseVisualStyleBackColor = true; chkBaseline.UseVisualStyleBackColor = true;
chkBaseline.CheckedChanged += Scrolling; chkBaseline.CheckedChanged += Scrolling;
@@ -155,7 +171,8 @@
// //
AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
ClientSize = new System.Drawing.Size(284, 221); ClientSize = new System.Drawing.Size(284, 251);
Controls.Add(btnCopy);
Controls.Add(chkBaseline); Controls.Add(chkBaseline);
Controls.Add(cbZoom); Controls.Add(cbZoom);
Controls.Add(lblZoom); Controls.Add(lblZoom);
@@ -168,13 +185,14 @@
Controls.Add(lblSpace); Controls.Add(lblSpace);
MaximizeBox = false; MaximizeBox = false;
MinimizeBox = false; MinimizeBox = false;
MinimumSize = new System.Drawing.Size(260, 260); MinimumSize = new System.Drawing.Size(300, 290);
Name = "FontTester"; Name = "FontTester";
ShowIcon = false; ShowIcon = false;
ShowInTaskbar = false; ShowInTaskbar = false;
StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
Text = "Font Tester"; Text = "Font Tester";
Load += FontTester_Load; Load += FontTester_Load;
Resize += Form_Resize;
((System.ComponentModel.ISupportInitialize)nudSpace).EndInit(); ((System.ComponentModel.ISupportInitialize)nudSpace).EndInit();
ResumeLayout(false); ResumeLayout(false);
PerformLayout(); PerformLayout();
@@ -193,5 +211,6 @@
private System.Windows.Forms.ToolTip toolTip1; private System.Windows.Forms.ToolTip toolTip1;
private System.Windows.Forms.ComboBox cbZoom; private System.Windows.Forms.ComboBox cbZoom;
private System.Windows.Forms.CheckBox chkBaseline; private System.Windows.Forms.CheckBox chkBaseline;
private System.Windows.Forms.Button btnCopy;
} }
} }

View File

@@ -1,4 +1,5 @@
using System; using MessagePack;
using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel; using System.ComponentModel;
using System.Data; using System.Data;
@@ -24,6 +25,8 @@ namespace McBitFont {
private int cellSize; private int cellSize;
private int width; private int width;
private readonly DataFormats.Format clpbFormat = DataFormats.GetFormat("McBitFontFrame");
public FontTester(int codepage, int height, int baseline, List<MainForm.FrameMiniature> frames) { public FontTester(int codepage, int height, int baseline, List<MainForm.FrameMiniature> frames) {
InitializeComponent(); InitializeComponent();
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
@@ -53,7 +56,7 @@ namespace McBitFont {
int space = (int)nudSpace.Value; int space = (int)nudSpace.Value;
int index = 0; int index = 0;
for (int c = 0; c < encoded.Length; c++) { for (int c = 0; c < encoded.Length; c++) {
// Check if we have suck symbol // Check if we have such symbol
var f = frames.FindAll(x => x.code == encoded[c]); var f = frames.FindAll(x => x.code == encoded[c]);
if (f.Count == 1) { if (f.Count == 1) {
// Draw the symbol // Draw the symbol
@@ -160,6 +163,42 @@ namespace McBitFont {
private void Scrolling(object sender, EventArgs e) { private void Scrolling(object sender, EventArgs e) {
dotPanel.Invalidate(); dotPanel.Invalidate();
} }
private void Form_Resize(object sender, EventArgs e) {
btnCopy.Left = this.Width / 2 - 40;
}
private void Copy_Click(object sender, MouseEventArgs e) {
if (encoded.Length < 1) {
MessageBox.Show("Nothing to copy! Type some symbols first.", "Error!", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
// Sycle through ecoded bytes of test text
int space = (int)nudSpace.Value;
int index = 0;
int i, j;
MainForm.FrameMiniature ff = new(0, width, frames[0].height);
for (int c = 0; c < encoded.Length; c++) {
// Check if we have such symbol
var f = frames.FindAll(x => x.code == encoded[c]);
if (f.Count == 1) {
// Draw the symbol
for (i = 0; i < f[0].width; i++) {
for (j = 0; j < f[0].height; j++) {
// Fill the frame with data
ff.data[index + i, j] = f[0].data[i, j];
}
}
index += (f[0].width > 0 ? f[0].width + space : 0);
} else {
index += 5 + space;
}
}
// Copy the frame we made into Clipboard
var bb = MessagePackSerializer.Serialize(ChangeHistory.CopyFrameSimple(ff));
DataObject clpbObj = new DataObject(clpbFormat.Name, bb);
Clipboard.SetDataObject(clpbObj, true);
}
} }

View File

@@ -28,8 +28,8 @@
dotPanel = new System.Windows.Forms.Panel(); dotPanel = new System.Windows.Forms.Panel();
nudX = new System.Windows.Forms.NumericUpDown(); nudX = new System.Windows.Forms.NumericUpDown();
nudY = new System.Windows.Forms.NumericUpDown(); nudY = new System.Windows.Forms.NumericUpDown();
label1 = new System.Windows.Forms.Label(); lblWidth = new System.Windows.Forms.Label();
label2 = new System.Windows.Forms.Label(); lblHeight = new System.Windows.Forms.Label();
lblType = new System.Windows.Forms.Label(); lblType = new System.Windows.Forms.Label();
cbZoom = new System.Windows.Forms.ComboBox(); cbZoom = new System.Windows.Forms.ComboBox();
label4 = new System.Windows.Forms.Label(); label4 = new System.Windows.Forms.Label();
@@ -64,10 +64,12 @@
openToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); openToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
saveToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); saveToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
saveAsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); saveAsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();
importTextToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); importTextToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem();
importImageToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); importImageToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
exportToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); exportToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
exportFontLayoutPNGToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); exportFontLayoutPNGToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator();
exitToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); exitToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
editToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); editToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
undoToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); undoToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
@@ -83,7 +85,12 @@
removeSymbolToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); removeSymbolToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
removeBeforeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); removeBeforeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
removeAfterToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); removeAfterToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
zerofyWidthToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
CodeShiftToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); CodeShiftToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator();
previousSymbolToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
nextSymbolToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
toolStripSeparator4 = new System.Windows.Forms.ToolStripSeparator();
testFontToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); testFontToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
canvasToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); canvasToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
ClearToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); ClearToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
@@ -97,6 +104,7 @@
mirrorYToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); mirrorYToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
applyToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); applyToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
aboutToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); aboutToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
toggleBarToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
dlgSave = new System.Windows.Forms.SaveFileDialog(); dlgSave = new System.Windows.Forms.SaveFileDialog();
dlgOpen = new System.Windows.Forms.OpenFileDialog(); dlgOpen = new System.Windows.Forms.OpenFileDialog();
btnBaseline = new System.Windows.Forms.Button(); btnBaseline = new System.Windows.Forms.Button();
@@ -105,19 +113,23 @@
chkTopSide = new System.Windows.Forms.CheckBox(); chkTopSide = new System.Windows.Forms.CheckBox();
chkHexCodes = new System.Windows.Forms.CheckBox(); chkHexCodes = new System.Windows.Forms.CheckBox();
chkRectSelect = new System.Windows.Forms.CheckBox(); chkRectSelect = new System.Windows.Forms.CheckBox();
nudBrush = new System.Windows.Forms.NumericUpDown();
label3 = new System.Windows.Forms.Label(); label3 = new System.Windows.Forms.Label();
lblSelectionLabel = new System.Windows.Forms.Label(); lblSelectionLabel = new System.Windows.Forms.Label();
lblSelection = new System.Windows.Forms.Label(); lblSelection = new System.Windows.Forms.Label();
lblModified = new System.Windows.Forms.Label(); lblModified = new System.Windows.Forms.Label();
dlgSavePNG = new System.Windows.Forms.SaveFileDialog(); dlgSavePNG = new System.Windows.Forms.SaveFileDialog();
toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator(); pnlRightButtons = new System.Windows.Forms.Panel();
toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator(); lblBrush = new System.Windows.Forms.Label();
toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator(); pnlInfo = new System.Windows.Forms.Panel();
((System.ComponentModel.ISupportInitialize)nudX).BeginInit(); ((System.ComponentModel.ISupportInitialize)nudX).BeginInit();
((System.ComponentModel.ISupportInitialize)nudY).BeginInit(); ((System.ComponentModel.ISupportInitialize)nudY).BeginInit();
panel1.SuspendLayout(); panel1.SuspendLayout();
cmMinilist.SuspendLayout(); cmMinilist.SuspendLayout();
menuStrip1.SuspendLayout(); menuStrip1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)nudBrush).BeginInit();
pnlRightButtons.SuspendLayout();
pnlInfo.SuspendLayout();
SuspendLayout(); SuspendLayout();
// //
// dotPanel // dotPanel
@@ -137,8 +149,7 @@
// //
// nudX // nudX
// //
nudX.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right; nudX.Location = new System.Drawing.Point(59, 3);
nudX.Location = new System.Drawing.Point(777, 31);
nudX.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); nudX.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
nudX.Maximum = new decimal(new int[] { 255, 0, 0, 0 }); nudX.Maximum = new decimal(new int[] { 255, 0, 0, 0 });
nudX.Name = "nudX"; nudX.Name = "nudX";
@@ -150,8 +161,7 @@
// //
// nudY // nudY
// //
nudY.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right; nudY.Location = new System.Drawing.Point(59, 27);
nudY.Location = new System.Drawing.Point(777, 57);
nudY.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); nudY.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
nudY.Maximum = new decimal(new int[] { 255, 0, 0, 0 }); nudY.Maximum = new decimal(new int[] { 255, 0, 0, 0 });
nudY.Minimum = new decimal(new int[] { 1, 0, 0, 0 }); nudY.Minimum = new decimal(new int[] { 1, 0, 0, 0 });
@@ -162,32 +172,29 @@
nudY.Value = new decimal(new int[] { 32, 0, 0, 0 }); nudY.Value = new decimal(new int[] { 32, 0, 0, 0 });
nudY.ValueChanged += nudY_ValueChanged; nudY.ValueChanged += nudY_ValueChanged;
// //
// label1 // lblWidth
// //
label1.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right; lblWidth.AutoSize = true;
label1.AutoSize = true; lblWidth.Location = new System.Drawing.Point(8, 5);
label1.Location = new System.Drawing.Point(726, 33); lblWidth.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
label1.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); lblWidth.Name = "lblWidth";
label1.Name = "label1"; lblWidth.Size = new System.Drawing.Size(42, 15);
label1.Size = new System.Drawing.Size(42, 15); lblWidth.TabIndex = 3;
label1.TabIndex = 3; lblWidth.Text = "Width:";
label1.Text = "Width:";
// //
// label2 // lblHeight
// //
label2.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right; lblHeight.AutoSize = true;
label2.AutoSize = true; lblHeight.Location = new System.Drawing.Point(4, 29);
label2.Location = new System.Drawing.Point(722, 59); lblHeight.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
label2.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); lblHeight.Name = "lblHeight";
label2.Name = "label2"; lblHeight.Size = new System.Drawing.Size(46, 15);
label2.Size = new System.Drawing.Size(46, 15); lblHeight.TabIndex = 4;
label2.TabIndex = 4; lblHeight.Text = "Height:";
label2.Text = "Height:";
// //
// lblType // lblType
// //
lblType.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right; lblType.Location = new System.Drawing.Point(2, 136);
lblType.Location = new System.Drawing.Point(718, 159);
lblType.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); lblType.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
lblType.Name = "lblType"; lblType.Name = "lblType";
lblType.Size = new System.Drawing.Size(181, 15); lblType.Size = new System.Drawing.Size(181, 15);
@@ -201,19 +208,19 @@
cbZoom.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; cbZoom.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
cbZoom.FormattingEnabled = true; cbZoom.FormattingEnabled = true;
cbZoom.Items.AddRange(new object[] { "2", "3", "5", "10", "15", "20", "25", "30", "35", "40", "45", "50" }); 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.Location = new System.Drawing.Point(7, 28);
cbZoom.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); cbZoom.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
cbZoom.Name = "cbZoom"; cbZoom.Name = "cbZoom";
cbZoom.Size = new System.Drawing.Size(75, 23); cbZoom.Size = new System.Drawing.Size(75, 23);
cbZoom.TabIndex = 6; cbZoom.TabIndex = 6;
cbZoom.TabStop = false; cbZoom.TabStop = false;
toolTip1.SetToolTip(cbZoom, "Canvas zoom level"); toolTip1.SetToolTip(cbZoom, "Canvas zoom level (Ctrl+Scroll)");
// //
// label4 // label4
// //
label4.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right; label4.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right;
label4.AutoSize = true; label4.AutoSize = true;
label4.Location = new System.Drawing.Point(618, 33); label4.Location = new System.Drawing.Point(6, 9);
label4.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); label4.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
label4.Name = "label4"; label4.Name = "label4";
label4.Size = new System.Drawing.Size(69, 15); label4.Size = new System.Drawing.Size(69, 15);
@@ -242,38 +249,38 @@
// btnFill // btnFill
// //
btnFill.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, 204); btnFill.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, 204);
btnFill.Image = Properties.Resources.Canvas_Fill;
btnFill.Location = new System.Drawing.Point(92, 9); btnFill.Location = new System.Drawing.Point(92, 9);
btnFill.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); btnFill.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
btnFill.Name = "btnFill"; btnFill.Name = "btnFill";
btnFill.Size = new System.Drawing.Size(35, 35); btnFill.Size = new System.Drawing.Size(35, 35);
btnFill.TabIndex = 8; btnFill.TabIndex = 8;
btnFill.Text = "⬤"; toolTip1.SetToolTip(btnFill, "Paint canvas black (Ctrl+B)");
toolTip1.SetToolTip(btnFill, "Paint canvas black");
btnFill.UseVisualStyleBackColor = true; btnFill.UseVisualStyleBackColor = true;
btnFill.Click += btnFill_Click; btnFill.Click += btnFill_Click;
// //
// btnClear // btnClear
// //
btnClear.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, 204); btnClear.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, 204);
btnClear.Image = Properties.Resources.Canvas_Clear;
btnClear.Location = new System.Drawing.Point(8, 9); btnClear.Location = new System.Drawing.Point(8, 9);
btnClear.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); btnClear.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
btnClear.Name = "btnClear"; btnClear.Name = "btnClear";
btnClear.Size = new System.Drawing.Size(35, 35); btnClear.Size = new System.Drawing.Size(35, 35);
btnClear.TabIndex = 7; btnClear.TabIndex = 7;
btnClear.Text = "○"; toolTip1.SetToolTip(btnClear, "Paint canvas white (Ctrl+W)");
toolTip1.SetToolTip(btnClear, "Paint canvas white");
btnClear.UseVisualStyleBackColor = true; btnClear.UseVisualStyleBackColor = true;
btnClear.Click += btnClear_Click; btnClear.Click += btnClear_Click;
// //
// btnMirrorY // btnMirrorY
// //
btnMirrorY.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, 204); btnMirrorY.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, 204);
btnMirrorY.Image = Properties.Resources.Famfamfam_Silk_Shape_flip_vertical_16;
btnMirrorY.Location = new System.Drawing.Point(92, 92); btnMirrorY.Location = new System.Drawing.Point(92, 92);
btnMirrorY.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); btnMirrorY.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
btnMirrorY.Name = "btnMirrorY"; btnMirrorY.Name = "btnMirrorY";
btnMirrorY.Size = new System.Drawing.Size(35, 35); btnMirrorY.Size = new System.Drawing.Size(35, 35);
btnMirrorY.TabIndex = 6; btnMirrorY.TabIndex = 6;
btnMirrorY.Text = "⩥";
toolTip1.SetToolTip(btnMirrorY, "Mirror by Y axis (vertical)"); toolTip1.SetToolTip(btnMirrorY, "Mirror by Y axis (vertical)");
btnMirrorY.UseVisualStyleBackColor = true; btnMirrorY.UseVisualStyleBackColor = true;
btnMirrorY.Click += btnMirrorY_Click; btnMirrorY.Click += btnMirrorY_Click;
@@ -281,12 +288,12 @@
// btnMirrorX // btnMirrorX
// //
btnMirrorX.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, 204); btnMirrorX.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, 204);
btnMirrorX.Image = Properties.Resources.Famfamfam_Silk_Shape_flip_horizontal_16;
btnMirrorX.Location = new System.Drawing.Point(50, 92); btnMirrorX.Location = new System.Drawing.Point(50, 92);
btnMirrorX.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); btnMirrorX.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
btnMirrorX.Name = "btnMirrorX"; btnMirrorX.Name = "btnMirrorX";
btnMirrorX.Size = new System.Drawing.Size(35, 35); btnMirrorX.Size = new System.Drawing.Size(35, 35);
btnMirrorX.TabIndex = 5; btnMirrorX.TabIndex = 5;
btnMirrorX.Text = "◮";
toolTip1.SetToolTip(btnMirrorX, "Mirror by X axis (horizontal)"); toolTip1.SetToolTip(btnMirrorX, "Mirror by X axis (horizontal)");
btnMirrorX.UseVisualStyleBackColor = true; btnMirrorX.UseVisualStyleBackColor = true;
btnMirrorX.Click += btnMirrorX_Click; btnMirrorX.Click += btnMirrorX_Click;
@@ -294,73 +301,72 @@
// btnInvert // btnInvert
// //
btnInvert.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, 204); btnInvert.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, 204);
btnInvert.Image = Properties.Resources.z_contrast;
btnInvert.Location = new System.Drawing.Point(8, 92); btnInvert.Location = new System.Drawing.Point(8, 92);
btnInvert.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); btnInvert.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
btnInvert.Name = "btnInvert"; btnInvert.Name = "btnInvert";
btnInvert.Size = new System.Drawing.Size(35, 35); btnInvert.Size = new System.Drawing.Size(35, 35);
btnInvert.TabIndex = 4; btnInvert.TabIndex = 4;
btnInvert.Text = "◪"; toolTip1.SetToolTip(btnInvert, "Invert pixel colors (Ctrl+I)");
toolTip1.SetToolTip(btnInvert, "Invert pixel colors");
btnInvert.UseVisualStyleBackColor = true; btnInvert.UseVisualStyleBackColor = true;
btnInvert.Click += btnInvert_Click; btnInvert.Click += btnInvert_Click;
// //
// btnShiftDown // btnShiftDown
// //
btnShiftDown.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, 204); btnShiftDown.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, 204);
btnShiftDown.Image = Properties.Resources.z_down;
btnShiftDown.Location = new System.Drawing.Point(50, 51); btnShiftDown.Location = new System.Drawing.Point(50, 51);
btnShiftDown.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); btnShiftDown.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
btnShiftDown.Name = "btnShiftDown"; btnShiftDown.Name = "btnShiftDown";
btnShiftDown.Size = new System.Drawing.Size(35, 35); btnShiftDown.Size = new System.Drawing.Size(35, 35);
btnShiftDown.TabIndex = 3; btnShiftDown.TabIndex = 3;
btnShiftDown.Text = "▼"; toolTip1.SetToolTip(btnShiftDown, "Shift pixels down (Ctrl+Down)");
toolTip1.SetToolTip(btnShiftDown, "Shift pixels down");
btnShiftDown.UseVisualStyleBackColor = true; btnShiftDown.UseVisualStyleBackColor = true;
btnShiftDown.Click += btnShiftDown_Click; btnShiftDown.Click += btnShiftDown_Click;
// //
// btnShiftUp // btnShiftUp
// //
btnShiftUp.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, 204); btnShiftUp.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, 204);
btnShiftUp.Image = Properties.Resources.z_uo;
btnShiftUp.Location = new System.Drawing.Point(50, 9); btnShiftUp.Location = new System.Drawing.Point(50, 9);
btnShiftUp.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); btnShiftUp.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
btnShiftUp.Name = "btnShiftUp"; btnShiftUp.Name = "btnShiftUp";
btnShiftUp.Size = new System.Drawing.Size(35, 35); btnShiftUp.Size = new System.Drawing.Size(35, 35);
btnShiftUp.TabIndex = 2; btnShiftUp.TabIndex = 2;
btnShiftUp.Text = "▲"; toolTip1.SetToolTip(btnShiftUp, "Shift pixels up (Ctrl+Up)");
toolTip1.SetToolTip(btnShiftUp, "Shift pixels up");
btnShiftUp.UseVisualStyleBackColor = true; btnShiftUp.UseVisualStyleBackColor = true;
btnShiftUp.Click += btnShiftUp_Click; btnShiftUp.Click += btnShiftUp_Click;
// //
// btnShiftRight // btnShiftRight
// //
btnShiftRight.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, 204); btnShiftRight.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, 204);
btnShiftRight.Image = Properties.Resources.z_right;
btnShiftRight.Location = new System.Drawing.Point(92, 51); btnShiftRight.Location = new System.Drawing.Point(92, 51);
btnShiftRight.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); btnShiftRight.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
btnShiftRight.Name = "btnShiftRight"; btnShiftRight.Name = "btnShiftRight";
btnShiftRight.Size = new System.Drawing.Size(35, 35); btnShiftRight.Size = new System.Drawing.Size(35, 35);
btnShiftRight.TabIndex = 1; btnShiftRight.TabIndex = 1;
btnShiftRight.Text = "▶"; toolTip1.SetToolTip(btnShiftRight, "Shift pixels right (Ctrl+Right)");
toolTip1.SetToolTip(btnShiftRight, "Shift pixels right");
btnShiftRight.UseVisualStyleBackColor = true; btnShiftRight.UseVisualStyleBackColor = true;
btnShiftRight.Click += btnShiftRight_Click; btnShiftRight.Click += btnShiftRight_Click;
// //
// btnShiftLeft // btnShiftLeft
// //
btnShiftLeft.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, 204); btnShiftLeft.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, 204);
btnShiftLeft.Image = Properties.Resources.z_left;
btnShiftLeft.Location = new System.Drawing.Point(8, 51); btnShiftLeft.Location = new System.Drawing.Point(8, 51);
btnShiftLeft.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); btnShiftLeft.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
btnShiftLeft.Name = "btnShiftLeft"; btnShiftLeft.Name = "btnShiftLeft";
btnShiftLeft.Size = new System.Drawing.Size(35, 35); btnShiftLeft.Size = new System.Drawing.Size(35, 35);
btnShiftLeft.TabIndex = 0; btnShiftLeft.TabIndex = 0;
btnShiftLeft.Text = "◀"; toolTip1.SetToolTip(btnShiftLeft, "Shift pixels left (Ctrl+Left)");
toolTip1.SetToolTip(btnShiftLeft, "Shift pixels left");
btnShiftLeft.UseVisualStyleBackColor = true; btnShiftLeft.UseVisualStyleBackColor = true;
btnShiftLeft.Click += btnShiftLeft_Click; btnShiftLeft.Click += btnShiftLeft_Click;
// //
// btnExport // btnExport
// //
btnExport.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right;
btnExport.Image = Properties.Resources.z_export; btnExport.Image = Properties.Resources.z_export;
btnExport.Location = new System.Drawing.Point(812, 126); btnExport.Location = new System.Drawing.Point(94, 109);
btnExport.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); btnExport.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
btnExport.Name = "btnExport"; btnExport.Name = "btnExport";
btnExport.Size = new System.Drawing.Size(88, 27); btnExport.Size = new System.Drawing.Size(88, 27);
@@ -368,9 +374,9 @@
btnExport.Text = " Export"; btnExport.Text = " Export";
btnExport.TextAlign = System.Drawing.ContentAlignment.MiddleRight; btnExport.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
btnExport.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText; btnExport.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText;
toolTip1.SetToolTip(btnExport, "Configure and export data"); toolTip1.SetToolTip(btnExport, "Configure and export data (Ctrl+E)");
btnExport.UseVisualStyleBackColor = true; btnExport.UseVisualStyleBackColor = true;
btnExport.Click += button1_Click; btnExport.Click += Export_Click;
// //
// miniList // miniList
// //
@@ -476,9 +482,8 @@
// //
// btnApply // btnApply
// //
btnApply.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right;
btnApply.Image = Properties.Resources.z_tick; btnApply.Image = Properties.Resources.z_tick;
btnApply.Location = new System.Drawing.Point(718, 126); btnApply.Location = new System.Drawing.Point(4, 109);
btnApply.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); btnApply.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
btnApply.Name = "btnApply"; btnApply.Name = "btnApply";
btnApply.Size = new System.Drawing.Size(88, 27); btnApply.Size = new System.Drawing.Size(88, 27);
@@ -486,14 +491,17 @@
btnApply.Text = " Apply"; btnApply.Text = " Apply";
btnApply.TextAlign = System.Drawing.ContentAlignment.MiddleRight; btnApply.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
btnApply.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText; btnApply.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText;
toolTip1.SetToolTip(btnApply, "Apply changes made to the symbol"); toolTip1.SetToolTip(btnApply, "Apply changes made to the symbol (Ctrl+Space)");
btnApply.UseVisualStyleBackColor = true; btnApply.UseVisualStyleBackColor = true;
btnApply.Click += button2_Click; btnApply.Click += button2_Click;
// //
// hScroll // hScroll
// //
hScroll.Anchor = System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right; hScroll.Anchor = System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right;
hScroll.Enabled = false;
hScroll.LargeChange = 2;
hScroll.Location = new System.Drawing.Point(14, 609); hScroll.Location = new System.Drawing.Point(14, 609);
hScroll.Maximum = 1;
hScroll.Name = "hScroll"; hScroll.Name = "hScroll";
hScroll.Size = new System.Drawing.Size(427, 21); hScroll.Size = new System.Drawing.Size(427, 21);
hScroll.TabIndex = 14; hScroll.TabIndex = 14;
@@ -502,8 +510,10 @@
// vScroll // vScroll
// //
vScroll.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right; vScroll.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right;
vScroll.LargeChange = 25; vScroll.Enabled = false;
vScroll.LargeChange = 2;
vScroll.Location = new System.Drawing.Point(444, 31); vScroll.Location = new System.Drawing.Point(444, 31);
vScroll.Maximum = 1;
vScroll.Name = "vScroll"; vScroll.Name = "vScroll";
vScroll.Size = new System.Drawing.Size(21, 575); vScroll.Size = new System.Drawing.Size(21, 575);
vScroll.TabIndex = 15; vScroll.TabIndex = 15;
@@ -513,7 +523,7 @@
// //
lblCoords.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right; lblCoords.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right;
lblCoords.AutoSize = true; lblCoords.AutoSize = true;
lblCoords.Location = new System.Drawing.Point(616, 138); lblCoords.Location = new System.Drawing.Point(4, 114);
lblCoords.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); lblCoords.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
lblCoords.Name = "lblCoords"; lblCoords.Name = "lblCoords";
lblCoords.Size = new System.Drawing.Size(24, 15); lblCoords.Size = new System.Drawing.Size(24, 15);
@@ -523,7 +533,7 @@
// //
// menuStrip1 // menuStrip1
// //
menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { fileToolStripMenuItem, editToolStripMenuItem, fontToolStripMenuItem, canvasToolStripMenuItem, aboutToolStripMenuItem }); menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { fileToolStripMenuItem, editToolStripMenuItem, fontToolStripMenuItem, canvasToolStripMenuItem, aboutToolStripMenuItem, toggleBarToolStripMenuItem });
menuStrip1.Location = new System.Drawing.Point(0, 0); menuStrip1.Location = new System.Drawing.Point(0, 0);
menuStrip1.Name = "menuStrip1"; menuStrip1.Name = "menuStrip1";
menuStrip1.Padding = new System.Windows.Forms.Padding(7, 2, 0, 2); menuStrip1.Padding = new System.Windows.Forms.Padding(7, 2, 0, 2);
@@ -535,7 +545,7 @@
// //
fileToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { newToolStripMenuItem, openToolStripMenuItem, saveToolStripMenuItem, saveAsToolStripMenuItem, toolStripSeparator1, importTextToolStripMenuItem1, importImageToolStripMenuItem, exportToolStripMenuItem, exportFontLayoutPNGToolStripMenuItem, toolStripSeparator2, exitToolStripMenuItem }); fileToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { newToolStripMenuItem, openToolStripMenuItem, saveToolStripMenuItem, saveAsToolStripMenuItem, toolStripSeparator1, importTextToolStripMenuItem1, importImageToolStripMenuItem, exportToolStripMenuItem, exportFontLayoutPNGToolStripMenuItem, toolStripSeparator2, exitToolStripMenuItem });
fileToolStripMenuItem.Name = "fileToolStripMenuItem"; fileToolStripMenuItem.Name = "fileToolStripMenuItem";
fileToolStripMenuItem.Size = new System.Drawing.Size(122, 20); fileToolStripMenuItem.Size = new System.Drawing.Size(37, 20);
fileToolStripMenuItem.Text = "File"; fileToolStripMenuItem.Text = "File";
// //
// newToolStripMenuItem // newToolStripMenuItem
@@ -582,6 +592,11 @@
saveAsToolStripMenuItem.ToolTipText = "Save changes to another file"; saveAsToolStripMenuItem.ToolTipText = "Save changes to another file";
saveAsToolStripMenuItem.Click += SaveToolStripMenuItem_Click; saveAsToolStripMenuItem.Click += SaveToolStripMenuItem_Click;
// //
// toolStripSeparator1
//
toolStripSeparator1.Name = "toolStripSeparator1";
toolStripSeparator1.Size = new System.Drawing.Size(221, 6);
//
// importTextToolStripMenuItem1 // importTextToolStripMenuItem1
// //
importTextToolStripMenuItem1.Image = Properties.Resources.folder_table; importTextToolStripMenuItem1.Image = Properties.Resources.folder_table;
@@ -609,7 +624,7 @@
exportToolStripMenuItem.Size = new System.Drawing.Size(224, 22); exportToolStripMenuItem.Size = new System.Drawing.Size(224, 22);
exportToolStripMenuItem.Text = "Export"; exportToolStripMenuItem.Text = "Export";
exportToolStripMenuItem.ToolTipText = "Configure and export data"; exportToolStripMenuItem.ToolTipText = "Configure and export data";
exportToolStripMenuItem.Click += button1_Click; exportToolStripMenuItem.Click += Export_Click;
// //
// exportFontLayoutPNGToolStripMenuItem // exportFontLayoutPNGToolStripMenuItem
// //
@@ -620,6 +635,11 @@
exportFontLayoutPNGToolStripMenuItem.ToolTipText = "Create an image with all a table showing all 256 symbols"; exportFontLayoutPNGToolStripMenuItem.ToolTipText = "Create an image with all a table showing all 256 symbols";
exportFontLayoutPNGToolStripMenuItem.Click += ExportPNG; exportFontLayoutPNGToolStripMenuItem.Click += ExportPNG;
// //
// toolStripSeparator2
//
toolStripSeparator2.Name = "toolStripSeparator2";
toolStripSeparator2.Size = new System.Drawing.Size(221, 6);
//
// exitToolStripMenuItem // exitToolStripMenuItem
// //
exitToolStripMenuItem.Image = Properties.Resources.Famfamfam_Silk_Door_out_16; exitToolStripMenuItem.Image = Properties.Resources.Famfamfam_Silk_Door_out_16;
@@ -644,7 +664,7 @@
undoToolStripMenuItem.Image = Properties.Resources.arrow_undo; undoToolStripMenuItem.Image = Properties.Resources.arrow_undo;
undoToolStripMenuItem.Name = "undoToolStripMenuItem"; undoToolStripMenuItem.Name = "undoToolStripMenuItem";
undoToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Z; undoToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Z;
undoToolStripMenuItem.Size = new System.Drawing.Size(180, 22); undoToolStripMenuItem.Size = new System.Drawing.Size(164, 22);
undoToolStripMenuItem.Text = "Undo"; undoToolStripMenuItem.Text = "Undo";
undoToolStripMenuItem.ToolTipText = "Undo last canvas change"; undoToolStripMenuItem.ToolTipText = "Undo last canvas change";
undoToolStripMenuItem.Click += undoToolStripMenuItem_Click; undoToolStripMenuItem.Click += undoToolStripMenuItem_Click;
@@ -654,7 +674,7 @@
redoToolStripMenuItem.Image = Properties.Resources.arrow_redo; redoToolStripMenuItem.Image = Properties.Resources.arrow_redo;
redoToolStripMenuItem.Name = "redoToolStripMenuItem"; redoToolStripMenuItem.Name = "redoToolStripMenuItem";
redoToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Y; redoToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Y;
redoToolStripMenuItem.Size = new System.Drawing.Size(180, 22); redoToolStripMenuItem.Size = new System.Drawing.Size(164, 22);
redoToolStripMenuItem.Text = "Redo"; redoToolStripMenuItem.Text = "Redo";
redoToolStripMenuItem.ToolTipText = "Redo canvas change"; redoToolStripMenuItem.ToolTipText = "Redo canvas change";
redoToolStripMenuItem.Click += redoToolStripMenuItem_Click; redoToolStripMenuItem.Click += redoToolStripMenuItem_Click;
@@ -665,19 +685,18 @@
copyToolStripMenuItem.Name = "copyToolStripMenuItem"; copyToolStripMenuItem.Name = "copyToolStripMenuItem";
copyToolStripMenuItem.ShortcutKeyDisplayString = ""; copyToolStripMenuItem.ShortcutKeyDisplayString = "";
copyToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.C; copyToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.C;
copyToolStripMenuItem.Size = new System.Drawing.Size(180, 22); copyToolStripMenuItem.Size = new System.Drawing.Size(164, 22);
copyToolStripMenuItem.Text = "Copy"; copyToolStripMenuItem.Text = "Copy";
copyToolStripMenuItem.ToolTipText = "Copy current symbol to clipboard"; copyToolStripMenuItem.ToolTipText = "Copy current symbol to clipboard";
copyToolStripMenuItem.Click += copyToolStripMenuItem_Click; copyToolStripMenuItem.Click += copyToolStripMenuItem_Click;
// //
// pasteToolStripMenuItem // pasteToolStripMenuItem
// //
pasteToolStripMenuItem.Enabled = false;
pasteToolStripMenuItem.Image = Properties.Resources.Famfamfam_Silk_Page_paste_16; pasteToolStripMenuItem.Image = Properties.Resources.Famfamfam_Silk_Page_paste_16;
pasteToolStripMenuItem.Name = "pasteToolStripMenuItem"; pasteToolStripMenuItem.Name = "pasteToolStripMenuItem";
pasteToolStripMenuItem.ShortcutKeyDisplayString = ""; pasteToolStripMenuItem.ShortcutKeyDisplayString = "";
pasteToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.V; pasteToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.V;
pasteToolStripMenuItem.Size = new System.Drawing.Size(180, 22); pasteToolStripMenuItem.Size = new System.Drawing.Size(164, 22);
pasteToolStripMenuItem.Text = "Paste"; pasteToolStripMenuItem.Text = "Paste";
pasteToolStripMenuItem.ToolTipText = "Paste from clipboard to current symbol"; pasteToolStripMenuItem.ToolTipText = "Paste from clipboard to current symbol";
pasteToolStripMenuItem.Click += pasteToolStripMenuItem_Click; pasteToolStripMenuItem.Click += pasteToolStripMenuItem_Click;
@@ -687,7 +706,7 @@
selectToolStripMenuItem.Image = Properties.Resources.fam_rectt; selectToolStripMenuItem.Image = Properties.Resources.fam_rectt;
selectToolStripMenuItem.Name = "selectToolStripMenuItem"; selectToolStripMenuItem.Name = "selectToolStripMenuItem";
selectToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.R; selectToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.R;
selectToolStripMenuItem.Size = new System.Drawing.Size(180, 22); selectToolStripMenuItem.Size = new System.Drawing.Size(164, 22);
selectToolStripMenuItem.Text = "Select"; selectToolStripMenuItem.Text = "Select";
selectToolStripMenuItem.ToolTipText = "Toggle Rectangle selection tool"; selectToolStripMenuItem.ToolTipText = "Toggle Rectangle selection tool";
selectToolStripMenuItem.Click += selectToolStripMenuItem_Click; selectToolStripMenuItem.Click += selectToolStripMenuItem_Click;
@@ -698,23 +717,24 @@
selectAllToolStripMenuItem.Image = Properties.Resources.arrow_out; selectAllToolStripMenuItem.Image = Properties.Resources.arrow_out;
selectAllToolStripMenuItem.Name = "selectAllToolStripMenuItem"; selectAllToolStripMenuItem.Name = "selectAllToolStripMenuItem";
selectAllToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.A; selectAllToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.A;
selectAllToolStripMenuItem.Size = new System.Drawing.Size(180, 22); selectAllToolStripMenuItem.Size = new System.Drawing.Size(164, 22);
selectAllToolStripMenuItem.Text = "Select All"; selectAllToolStripMenuItem.Text = "Select All";
selectAllToolStripMenuItem.ToolTipText = "Select entire canvas"; selectAllToolStripMenuItem.ToolTipText = "Select entire canvas";
selectAllToolStripMenuItem.Click += selectAllToolStripMenuItem_Click; selectAllToolStripMenuItem.Click += selectAllToolStripMenuItem_Click;
// //
// fontToolStripMenuItem // fontToolStripMenuItem
// //
fontToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { makeVarWidthToolStripMenuItem, prependSymbolToolStripMenuItem, appendSymbolToolStripMenuItem, removeSymbolToolStripMenuItem, removeBeforeToolStripMenuItem, removeAfterToolStripMenuItem, CodeShiftToolStripMenuItem, toolStripSeparator3, testFontToolStripMenuItem }); fontToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { makeVarWidthToolStripMenuItem, prependSymbolToolStripMenuItem, appendSymbolToolStripMenuItem, removeSymbolToolStripMenuItem, removeBeforeToolStripMenuItem, removeAfterToolStripMenuItem, zerofyWidthToolStripMenuItem, CodeShiftToolStripMenuItem, toolStripSeparator3, previousSymbolToolStripMenuItem, nextSymbolToolStripMenuItem, toolStripSeparator4, testFontToolStripMenuItem });
fontToolStripMenuItem.Name = "fontToolStripMenuItem"; fontToolStripMenuItem.Name = "fontToolStripMenuItem";
fontToolStripMenuItem.Size = new System.Drawing.Size(43, 20); fontToolStripMenuItem.Size = new System.Drawing.Size(43, 20);
fontToolStripMenuItem.Text = "Font"; fontToolStripMenuItem.Text = "Font";
fontToolStripMenuItem.DropDownOpening += fontToolStripMenuItem_DropDownOpening;
// //
// makeVarWidthToolStripMenuItem // makeVarWidthToolStripMenuItem
// //
makeVarWidthToolStripMenuItem.Image = Properties.Resources.z_asterisk; makeVarWidthToolStripMenuItem.Image = Properties.Resources.z_asterisk;
makeVarWidthToolStripMenuItem.Name = "makeVarWidthToolStripMenuItem"; makeVarWidthToolStripMenuItem.Name = "makeVarWidthToolStripMenuItem";
makeVarWidthToolStripMenuItem.Size = new System.Drawing.Size(215, 22); makeVarWidthToolStripMenuItem.Size = new System.Drawing.Size(241, 22);
makeVarWidthToolStripMenuItem.Text = "Make Variable Width"; makeVarWidthToolStripMenuItem.Text = "Make Variable Width";
makeVarWidthToolStripMenuItem.ToolTipText = "Make Font Variable width one"; makeVarWidthToolStripMenuItem.ToolTipText = "Make Font Variable width one";
makeVarWidthToolStripMenuItem.Visible = false; makeVarWidthToolStripMenuItem.Visible = false;
@@ -727,7 +747,7 @@
prependSymbolToolStripMenuItem.Name = "prependSymbolToolStripMenuItem"; prependSymbolToolStripMenuItem.Name = "prependSymbolToolStripMenuItem";
prependSymbolToolStripMenuItem.ShortcutKeyDisplayString = "Ctrl+Ins"; prependSymbolToolStripMenuItem.ShortcutKeyDisplayString = "Ctrl+Ins";
prependSymbolToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Insert; prependSymbolToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Insert;
prependSymbolToolStripMenuItem.Size = new System.Drawing.Size(215, 22); prependSymbolToolStripMenuItem.Size = new System.Drawing.Size(241, 22);
prependSymbolToolStripMenuItem.Text = "Prepend symbol"; prependSymbolToolStripMenuItem.Text = "Prepend symbol";
prependSymbolToolStripMenuItem.ToolTipText = "Add a symbol to the beginning of the sequence"; prependSymbolToolStripMenuItem.ToolTipText = "Add a symbol to the beginning of the sequence";
prependSymbolToolStripMenuItem.Click += prependSymbolToolStripMenuItem_Click; prependSymbolToolStripMenuItem.Click += prependSymbolToolStripMenuItem_Click;
@@ -739,7 +759,7 @@
appendSymbolToolStripMenuItem.Name = "appendSymbolToolStripMenuItem"; appendSymbolToolStripMenuItem.Name = "appendSymbolToolStripMenuItem";
appendSymbolToolStripMenuItem.ShortcutKeyDisplayString = ""; appendSymbolToolStripMenuItem.ShortcutKeyDisplayString = "";
appendSymbolToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.End; appendSymbolToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.End;
appendSymbolToolStripMenuItem.Size = new System.Drawing.Size(215, 22); appendSymbolToolStripMenuItem.Size = new System.Drawing.Size(241, 22);
appendSymbolToolStripMenuItem.Text = "Append symbol"; appendSymbolToolStripMenuItem.Text = "Append symbol";
appendSymbolToolStripMenuItem.ToolTipText = "Add a symbol to the end of the sequence"; appendSymbolToolStripMenuItem.ToolTipText = "Add a symbol to the end of the sequence";
appendSymbolToolStripMenuItem.Click += prependSymbolToolStripMenuItem_Click; appendSymbolToolStripMenuItem.Click += prependSymbolToolStripMenuItem_Click;
@@ -751,7 +771,7 @@
removeSymbolToolStripMenuItem.Name = "removeSymbolToolStripMenuItem"; removeSymbolToolStripMenuItem.Name = "removeSymbolToolStripMenuItem";
removeSymbolToolStripMenuItem.ShortcutKeyDisplayString = ""; removeSymbolToolStripMenuItem.ShortcutKeyDisplayString = "";
removeSymbolToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Delete; removeSymbolToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Delete;
removeSymbolToolStripMenuItem.Size = new System.Drawing.Size(215, 22); removeSymbolToolStripMenuItem.Size = new System.Drawing.Size(241, 22);
removeSymbolToolStripMenuItem.Text = "Remove symbol"; removeSymbolToolStripMenuItem.Text = "Remove symbol";
removeSymbolToolStripMenuItem.ToolTipText = "Remove current symbol (works only for first or last symbol in the sequence)"; removeSymbolToolStripMenuItem.ToolTipText = "Remove current symbol (works only for first or last symbol in the sequence)";
removeSymbolToolStripMenuItem.Click += removeSymbolToolStripMenuItem_Click; removeSymbolToolStripMenuItem.Click += removeSymbolToolStripMenuItem_Click;
@@ -761,7 +781,7 @@
removeBeforeToolStripMenuItem.Enabled = false; removeBeforeToolStripMenuItem.Enabled = false;
removeBeforeToolStripMenuItem.Image = Properties.Resources.delete; removeBeforeToolStripMenuItem.Image = Properties.Resources.delete;
removeBeforeToolStripMenuItem.Name = "removeBeforeToolStripMenuItem"; removeBeforeToolStripMenuItem.Name = "removeBeforeToolStripMenuItem";
removeBeforeToolStripMenuItem.Size = new System.Drawing.Size(215, 22); removeBeforeToolStripMenuItem.Size = new System.Drawing.Size(241, 22);
removeBeforeToolStripMenuItem.Text = "Remove all before selected"; removeBeforeToolStripMenuItem.Text = "Remove all before selected";
removeBeforeToolStripMenuItem.ToolTipText = "Remove all symbols before current one"; removeBeforeToolStripMenuItem.ToolTipText = "Remove all symbols before current one";
removeBeforeToolStripMenuItem.Click += removeBeforeToolStripMenuItem_Click; removeBeforeToolStripMenuItem.Click += removeBeforeToolStripMenuItem_Click;
@@ -771,25 +791,65 @@
removeAfterToolStripMenuItem.Enabled = false; removeAfterToolStripMenuItem.Enabled = false;
removeAfterToolStripMenuItem.Image = Properties.Resources.delete; removeAfterToolStripMenuItem.Image = Properties.Resources.delete;
removeAfterToolStripMenuItem.Name = "removeAfterToolStripMenuItem"; removeAfterToolStripMenuItem.Name = "removeAfterToolStripMenuItem";
removeAfterToolStripMenuItem.Size = new System.Drawing.Size(215, 22); removeAfterToolStripMenuItem.Size = new System.Drawing.Size(241, 22);
removeAfterToolStripMenuItem.Text = "Remove all after selected"; removeAfterToolStripMenuItem.Text = "Remove all after selected";
removeAfterToolStripMenuItem.ToolTipText = "Remove all symbols after current one"; removeAfterToolStripMenuItem.ToolTipText = "Remove all symbols after current one";
removeAfterToolStripMenuItem.Click += removeAfterToolStripMenuItem_Click; removeAfterToolStripMenuItem.Click += removeAfterToolStripMenuItem_Click;
// //
// zerofyWidthToolStripMenuItem
//
zerofyWidthToolStripMenuItem.Enabled = false;
zerofyWidthToolStripMenuItem.Image = Properties.Resources.text_letterspacing2;
zerofyWidthToolStripMenuItem.Name = "zerofyWidthToolStripMenuItem";
zerofyWidthToolStripMenuItem.Size = new System.Drawing.Size(241, 22);
zerofyWidthToolStripMenuItem.Text = "Make all blank symbols 0-width";
zerofyWidthToolStripMenuItem.ToolTipText = "Make width equals zero for all blank symbols (except code 32 (space))";
zerofyWidthToolStripMenuItem.Click += ZerofyBlankWidth;
//
// CodeShiftToolStripMenuItem // CodeShiftToolStripMenuItem
// //
CodeShiftToolStripMenuItem.Image = Properties.Resources.z_align_center; CodeShiftToolStripMenuItem.Image = Properties.Resources.z_align_center;
CodeShiftToolStripMenuItem.Name = "CodeShiftToolStripMenuItem"; CodeShiftToolStripMenuItem.Name = "CodeShiftToolStripMenuItem";
CodeShiftToolStripMenuItem.Size = new System.Drawing.Size(215, 22); CodeShiftToolStripMenuItem.Size = new System.Drawing.Size(241, 22);
CodeShiftToolStripMenuItem.Text = "Code shift"; CodeShiftToolStripMenuItem.Text = "Code shift";
CodeShiftToolStripMenuItem.ToolTipText = "Shift the font on the code line"; CodeShiftToolStripMenuItem.ToolTipText = "Shift the font on the code line";
CodeShiftToolStripMenuItem.Click += CodeShiftToolStripMenuItem_Click; CodeShiftToolStripMenuItem.Click += CodeShiftToolStripMenuItem_Click;
// //
// toolStripSeparator3
//
toolStripSeparator3.Name = "toolStripSeparator3";
toolStripSeparator3.Size = new System.Drawing.Size(238, 6);
//
// previousSymbolToolStripMenuItem
//
previousSymbolToolStripMenuItem.Image = Properties.Resources.arrow_turn_left;
previousSymbolToolStripMenuItem.Name = "previousSymbolToolStripMenuItem";
previousSymbolToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.Alt | System.Windows.Forms.Keys.Left;
previousSymbolToolStripMenuItem.Size = new System.Drawing.Size(241, 22);
previousSymbolToolStripMenuItem.Text = "Previous Symbol";
previousSymbolToolStripMenuItem.ToolTipText = "Select previous symbol";
previousSymbolToolStripMenuItem.Click += previousSymbolToolStripMenuItem_Click;
//
// nextSymbolToolStripMenuItem
//
nextSymbolToolStripMenuItem.Image = Properties.Resources.arrow_turn_right;
nextSymbolToolStripMenuItem.Name = "nextSymbolToolStripMenuItem";
nextSymbolToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.Alt | System.Windows.Forms.Keys.Right;
nextSymbolToolStripMenuItem.Size = new System.Drawing.Size(241, 22);
nextSymbolToolStripMenuItem.Text = "Next symbol";
nextSymbolToolStripMenuItem.ToolTipText = "Select next symbol";
nextSymbolToolStripMenuItem.Click += nextSymbolToolStripMenuItem_Click;
//
// toolStripSeparator4
//
toolStripSeparator4.Name = "toolStripSeparator4";
toolStripSeparator4.Size = new System.Drawing.Size(238, 6);
//
// testFontToolStripMenuItem // testFontToolStripMenuItem
// //
testFontToolStripMenuItem.Image = Properties.Resources.font; testFontToolStripMenuItem.Image = Properties.Resources.font;
testFontToolStripMenuItem.Name = "testFontToolStripMenuItem"; testFontToolStripMenuItem.Name = "testFontToolStripMenuItem";
testFontToolStripMenuItem.Size = new System.Drawing.Size(215, 22); testFontToolStripMenuItem.Size = new System.Drawing.Size(241, 22);
testFontToolStripMenuItem.Text = "Test font"; testFontToolStripMenuItem.Text = "Test font";
testFontToolStripMenuItem.ToolTipText = "Open dialog where you can test the font with any text you type"; testFontToolStripMenuItem.ToolTipText = "Open dialog where you can test the font with any text you type";
testFontToolStripMenuItem.Click += TestFont_Click; testFontToolStripMenuItem.Click += TestFont_Click;
@@ -915,6 +975,16 @@
aboutToolStripMenuItem.Text = "About"; aboutToolStripMenuItem.Text = "About";
aboutToolStripMenuItem.Click += aboutToolStripMenuItem_Click; aboutToolStripMenuItem.Click += aboutToolStripMenuItem_Click;
// //
// toggleBarToolStripMenuItem
//
toggleBarToolStripMenuItem.Alignment = System.Windows.Forms.ToolStripItemAlignment.Right;
toggleBarToolStripMenuItem.CheckOnClick = true;
toggleBarToolStripMenuItem.Name = "toggleBarToolStripMenuItem";
toggleBarToolStripMenuItem.Size = new System.Drawing.Size(35, 20);
toggleBarToolStripMenuItem.Text = ">>";
toggleBarToolStripMenuItem.ToolTipText = "Toggle side bar state";
toggleBarToolStripMenuItem.Click += toggleBarToolStripMenuItem_Click;
//
// dlgSave // dlgSave
// //
dlgSave.DefaultExt = "mbf"; dlgSave.DefaultExt = "mbf";
@@ -927,10 +997,9 @@
// //
// btnBaseline // btnBaseline
// //
btnBaseline.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right;
btnBaseline.Image = Properties.Resources.fam_base; btnBaseline.Image = Properties.Resources.fam_base;
btnBaseline.ImageAlign = System.Drawing.ContentAlignment.MiddleRight; btnBaseline.ImageAlign = System.Drawing.ContentAlignment.MiddleRight;
btnBaseline.Location = new System.Drawing.Point(812, 93); btnBaseline.Location = new System.Drawing.Point(94, 81);
btnBaseline.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); btnBaseline.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
btnBaseline.Name = "btnBaseline"; btnBaseline.Name = "btnBaseline";
btnBaseline.Size = new System.Drawing.Size(88, 27); btnBaseline.Size = new System.Drawing.Size(88, 27);
@@ -949,9 +1018,8 @@
// //
// chkLeftSide // chkLeftSide
// //
chkLeftSide.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right;
chkLeftSide.AutoSize = true; chkLeftSide.AutoSize = true;
chkLeftSide.Location = new System.Drawing.Point(831, 33); chkLeftSide.Location = new System.Drawing.Point(113, 5);
chkLeftSide.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); chkLeftSide.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
chkLeftSide.Name = "chkLeftSide"; chkLeftSide.Name = "chkLeftSide";
chkLeftSide.Size = new System.Drawing.Size(70, 19); chkLeftSide.Size = new System.Drawing.Size(70, 19);
@@ -962,9 +1030,8 @@
// //
// chkTopSide // chkTopSide
// //
chkTopSide.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right;
chkTopSide.AutoSize = true; chkTopSide.AutoSize = true;
chkTopSide.Location = new System.Drawing.Point(831, 58); chkTopSide.Location = new System.Drawing.Point(113, 28);
chkTopSide.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); chkTopSide.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
chkTopSide.Name = "chkTopSide"; chkTopSide.Name = "chkTopSide";
chkTopSide.Size = new System.Drawing.Size(70, 19); chkTopSide.Size = new System.Drawing.Size(70, 19);
@@ -977,7 +1044,7 @@
// //
chkHexCodes.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right; chkHexCodes.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right;
chkHexCodes.AutoSize = true; chkHexCodes.AutoSize = true;
chkHexCodes.Location = new System.Drawing.Point(618, 155); chkHexCodes.Location = new System.Drawing.Point(6, 131);
chkHexCodes.Name = "chkHexCodes"; chkHexCodes.Name = "chkHexCodes";
chkHexCodes.Size = new System.Drawing.Size(95, 19); chkHexCodes.Size = new System.Drawing.Size(95, 19);
chkHexCodes.TabIndex = 22; chkHexCodes.TabIndex = 22;
@@ -988,26 +1055,38 @@
// //
// chkRectSelect // chkRectSelect
// //
chkRectSelect.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right;
chkRectSelect.Appearance = System.Windows.Forms.Appearance.Button; chkRectSelect.Appearance = System.Windows.Forms.Appearance.Button;
chkRectSelect.Image = Properties.Resources.fam_rectt; chkRectSelect.Image = Properties.Resources.fam_rectt;
chkRectSelect.ImageAlign = System.Drawing.ContentAlignment.MiddleRight; chkRectSelect.ImageAlign = System.Drawing.ContentAlignment.MiddleRight;
chkRectSelect.Location = new System.Drawing.Point(718, 93); chkRectSelect.Location = new System.Drawing.Point(4, 81);
chkRectSelect.Name = "chkRectSelect"; chkRectSelect.Name = "chkRectSelect";
chkRectSelect.Size = new System.Drawing.Size(87, 27); chkRectSelect.Size = new System.Drawing.Size(88, 27);
chkRectSelect.TabIndex = 23; chkRectSelect.TabIndex = 23;
chkRectSelect.Text = " Select"; chkRectSelect.Text = " Select";
chkRectSelect.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; chkRectSelect.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
chkRectSelect.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText; chkRectSelect.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText;
toolTip1.SetToolTip(chkRectSelect, "Turn on/off rectangle selection"); toolTip1.SetToolTip(chkRectSelect, "Turn on/off rectangle selection (Ctrl+R)");
chkRectSelect.UseVisualStyleBackColor = true; chkRectSelect.UseVisualStyleBackColor = true;
chkRectSelect.CheckedChanged += chkRectSelect_CheckedChanged; chkRectSelect.CheckedChanged += chkRectSelect_CheckedChanged;
// //
// nudBrush
//
nudBrush.Location = new System.Drawing.Point(59, 51);
nudBrush.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
nudBrush.Maximum = new decimal(new int[] { 32, 0, 0, 0 });
nudBrush.Minimum = new decimal(new int[] { 1, 0, 0, 0 });
nudBrush.Name = "nudBrush";
nudBrush.Size = new System.Drawing.Size(47, 23);
nudBrush.TabIndex = 24;
toolTip1.SetToolTip(nudBrush, "Symbol height (Alt+Scroll)");
nudBrush.Value = new decimal(new int[] { 1, 0, 0, 0 });
nudBrush.ValueChanged += nudBrush_ValueChanged;
//
// label3 // label3
// //
label3.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right; label3.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right;
label3.AutoSize = true; label3.AutoSize = true;
label3.Location = new System.Drawing.Point(615, 123); label3.Location = new System.Drawing.Point(3, 99);
label3.Name = "label3"; label3.Name = "label3";
label3.Size = new System.Drawing.Size(45, 15); label3.Size = new System.Drawing.Size(45, 15);
label3.TabIndex = 21; label3.TabIndex = 21;
@@ -1017,7 +1096,7 @@
// //
lblSelectionLabel.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right; lblSelectionLabel.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right;
lblSelectionLabel.AutoSize = true; lblSelectionLabel.AutoSize = true;
lblSelectionLabel.Location = new System.Drawing.Point(616, 93); lblSelectionLabel.Location = new System.Drawing.Point(4, 69);
lblSelectionLabel.Name = "lblSelectionLabel"; lblSelectionLabel.Name = "lblSelectionLabel";
lblSelectionLabel.Size = new System.Drawing.Size(58, 15); lblSelectionLabel.Size = new System.Drawing.Size(58, 15);
lblSelectionLabel.TabIndex = 25; lblSelectionLabel.TabIndex = 25;
@@ -1028,12 +1107,12 @@
// //
lblSelection.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right; lblSelection.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right;
lblSelection.AutoSize = true; lblSelection.AutoSize = true;
lblSelection.Location = new System.Drawing.Point(617, 108); lblSelection.Location = new System.Drawing.Point(5, 84);
lblSelection.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); lblSelection.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
lblSelection.Name = "lblSelection"; lblSelection.Name = "lblSelection";
lblSelection.Size = new System.Drawing.Size(30, 15); lblSelection.Size = new System.Drawing.Size(32, 15);
lblSelection.TabIndex = 24; lblSelection.TabIndex = 24;
lblSelection.Text = "W,H"; lblSelection.Text = "WxH";
lblSelection.TextAlign = System.Drawing.ContentAlignment.TopRight; lblSelection.TextAlign = System.Drawing.ContentAlignment.TopRight;
lblSelection.Visible = false; lblSelection.Visible = false;
// //
@@ -1043,7 +1122,7 @@
lblModified.AutoSize = true; lblModified.AutoSize = true;
lblModified.Font = new System.Drawing.Font("Segoe UI Semibold", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, 204); lblModified.Font = new System.Drawing.Font("Segoe UI Semibold", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, 204);
lblModified.ForeColor = System.Drawing.SystemColors.Highlight; lblModified.ForeColor = System.Drawing.SystemColors.Highlight;
lblModified.Location = new System.Drawing.Point(616, 78); lblModified.Location = new System.Drawing.Point(4, 54);
lblModified.Name = "lblModified"; lblModified.Name = "lblModified";
lblModified.Size = new System.Drawing.Size(91, 15); lblModified.Size = new System.Drawing.Size(91, 15);
lblModified.TabIndex = 26; lblModified.TabIndex = 26;
@@ -1055,49 +1134,66 @@
dlgSavePNG.DefaultExt = "png"; dlgSavePNG.DefaultExt = "png";
dlgSavePNG.Filter = "PNG Image|*.png;*.PNG"; dlgSavePNG.Filter = "PNG Image|*.png;*.PNG";
// //
// toolStripSeparator1 // pnlRightButtons
// //
toolStripSeparator1.Name = "toolStripSeparator1"; pnlRightButtons.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right;
toolStripSeparator1.Size = new System.Drawing.Size(221, 6); pnlRightButtons.Controls.Add(nudBrush);
pnlRightButtons.Controls.Add(lblBrush);
pnlRightButtons.Controls.Add(chkLeftSide);
pnlRightButtons.Controls.Add(nudX);
pnlRightButtons.Controls.Add(nudY);
pnlRightButtons.Controls.Add(lblWidth);
pnlRightButtons.Controls.Add(lblHeight);
pnlRightButtons.Controls.Add(chkRectSelect);
pnlRightButtons.Controls.Add(lblType);
pnlRightButtons.Controls.Add(btnExport);
pnlRightButtons.Controls.Add(btnApply);
pnlRightButtons.Controls.Add(chkTopSide);
pnlRightButtons.Controls.Add(btnBaseline);
pnlRightButtons.Location = new System.Drawing.Point(715, 24);
pnlRightButtons.Margin = new System.Windows.Forms.Padding(0);
pnlRightButtons.Name = "pnlRightButtons";
pnlRightButtons.Size = new System.Drawing.Size(184, 154);
pnlRightButtons.TabIndex = 27;
// //
// toolStripSeparator2 // lblBrush
// //
toolStripSeparator2.Name = "toolStripSeparator2"; lblBrush.AutoSize = true;
toolStripSeparator2.Size = new System.Drawing.Size(221, 6); lblBrush.Location = new System.Drawing.Point(10, 54);
lblBrush.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
lblBrush.Name = "lblBrush";
lblBrush.Size = new System.Drawing.Size(40, 15);
lblBrush.TabIndex = 25;
lblBrush.Text = "Brush:";
// //
// toolStripSeparator3 // pnlInfo
// //
toolStripSeparator3.Name = "toolStripSeparator3"; pnlInfo.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right;
toolStripSeparator3.Size = new System.Drawing.Size(212, 6); pnlInfo.Controls.Add(label4);
pnlInfo.Controls.Add(cbZoom);
pnlInfo.Controls.Add(lblCoords);
pnlInfo.Controls.Add(lblModified);
pnlInfo.Controls.Add(label3);
pnlInfo.Controls.Add(lblSelectionLabel);
pnlInfo.Controls.Add(chkHexCodes);
pnlInfo.Controls.Add(lblSelection);
pnlInfo.Location = new System.Drawing.Point(615, 24);
pnlInfo.Margin = new System.Windows.Forms.Padding(0);
pnlInfo.Name = "pnlInfo";
pnlInfo.Size = new System.Drawing.Size(103, 154);
pnlInfo.TabIndex = 28;
// //
// MainForm // MainForm
// //
AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
ClientSize = new System.Drawing.Size(915, 647); ClientSize = new System.Drawing.Size(915, 647);
Controls.Add(lblModified); Controls.Add(pnlInfo);
Controls.Add(lblSelectionLabel); Controls.Add(pnlRightButtons);
Controls.Add(lblSelection);
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(vScroll);
Controls.Add(hScroll); Controls.Add(hScroll);
Controls.Add(miniList); Controls.Add(miniList);
Controls.Add(panel1); 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(dotPanel);
Controls.Add(menuStrip1); Controls.Add(menuStrip1);
Icon = (System.Drawing.Icon)resources.GetObject("$this.Icon"); Icon = (System.Drawing.Icon)resources.GetObject("$this.Icon");
@@ -1115,6 +1211,11 @@
cmMinilist.ResumeLayout(false); cmMinilist.ResumeLayout(false);
menuStrip1.ResumeLayout(false); menuStrip1.ResumeLayout(false);
menuStrip1.PerformLayout(); menuStrip1.PerformLayout();
((System.ComponentModel.ISupportInitialize)nudBrush).EndInit();
pnlRightButtons.ResumeLayout(false);
pnlRightButtons.PerformLayout();
pnlInfo.ResumeLayout(false);
pnlInfo.PerformLayout();
ResumeLayout(false); ResumeLayout(false);
PerformLayout(); PerformLayout();
@@ -1123,10 +1224,8 @@
#endregion #endregion
private System.Windows.Forms.Panel dotPanel; private System.Windows.Forms.Panel dotPanel;
private System.Windows.Forms.NumericUpDown nudX; private System.Windows.Forms.Label lblWidth;
private System.Windows.Forms.NumericUpDown nudY; private System.Windows.Forms.Label lblHeight;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.Label lblType; private System.Windows.Forms.Label lblType;
private System.Windows.Forms.ComboBox cbZoom; private System.Windows.Forms.ComboBox cbZoom;
private System.Windows.Forms.Label label4; private System.Windows.Forms.Label label4;
@@ -1139,8 +1238,6 @@
private System.Windows.Forms.Button btnMirrorX; private System.Windows.Forms.Button btnMirrorX;
private System.Windows.Forms.Button btnMirrorY; private System.Windows.Forms.Button btnMirrorY;
private System.Windows.Forms.Button btnExport; private System.Windows.Forms.Button btnExport;
private System.Windows.Forms.ListView miniList;
private System.Windows.Forms.ImageList ilMiniatures;
private System.Windows.Forms.Button btnApply; private System.Windows.Forms.Button btnApply;
private System.Windows.Forms.HScrollBar hScroll; private System.Windows.Forms.HScrollBar hScroll;
private System.Windows.Forms.VScrollBar vScroll; private System.Windows.Forms.VScrollBar vScroll;
@@ -1210,6 +1307,19 @@
private System.Windows.Forms.ToolStripSeparator toolStripSeparator1; private System.Windows.Forms.ToolStripSeparator toolStripSeparator1;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator2; private System.Windows.Forms.ToolStripSeparator toolStripSeparator2;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator3; private System.Windows.Forms.ToolStripSeparator toolStripSeparator3;
public System.Windows.Forms.ListView miniList;
public System.Windows.Forms.ImageList ilMiniatures;
public System.Windows.Forms.NumericUpDown nudX;
public System.Windows.Forms.NumericUpDown nudY;
private System.Windows.Forms.ToolStripMenuItem previousSymbolToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem nextSymbolToolStripMenuItem;
private System.Windows.Forms.Panel pnlRightButtons;
private System.Windows.Forms.Panel pnlInfo;
private System.Windows.Forms.ToolStripMenuItem toggleBarToolStripMenuItem;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator4;
private System.Windows.Forms.ToolStripMenuItem zerofyWidthToolStripMenuItem;
public System.Windows.Forms.NumericUpDown nudBrush;
private System.Windows.Forms.Label lblBrush;
} }
} }

View File

@@ -47,26 +47,28 @@ namespace McBitFont {
public List<FrameMiniature> frames; public List<FrameMiniature> frames;
} }
private FrameMiniature f; public FrameMiniature f;
public List<FrameMiniature> frames = new List<FrameMiniature>(); public List<FrameMiniature> frames = new List<FrameMiniature>();
private CanvasHistory history = new(); //private CanvasHistory history = new();
private ChangeHistory history;
private int cellSize = 10; private int cellSize = 10;
public int dotWidth, dotHeight; public int dotWidth, dotHeight;
private int pixelOffset = 5; private readonly int pixelOffset = 5;
private int gap; private int gap;
private int w, h; private int w, h;
public bool monospaced = false; public bool monospaced = false;
private bool modified = false; private bool modified = false;
private bool prjModified = false; private bool prjModified = false;
public const string version = "2.3"; public const string version = "2.7";
public string prjName = "Untitled"; public string prjName = "Untitled";
public string prjFileName = ""; public string prjFileName = "";
public int codepage = 1251; public int codepage = 1251;
private FrameMiniature fbuf; private FrameMiniature fbuf;
private bool fbuffer = false; private readonly DataFormats.Format clpbFormat = DataFormats.GetFormat("McBitFontFrame");
private int baseline = 0; private int baseline = 0;
private bool set_base = false; private bool set_base = false;
private Point selection1, selection2; private Point selection1, selection2;
private Point[,] sidebarLocs = new Point[2, 3];
public MainForm() { public MainForm() {
@@ -75,16 +77,16 @@ namespace McBitFont {
this.dotPanel.MouseWheel += new MouseEventHandler(this.DotPanel_MouseWheel); this.dotPanel.MouseWheel += new MouseEventHandler(this.DotPanel_MouseWheel);
} }
private void SetNewWH() { public void SetNewWH() {
w = pixelOffset + dotWidth * (cellSize + gap); w = pixelOffset + dotWidth * (cellSize + gap);
h = pixelOffset + dotHeight * (cellSize + gap); h = pixelOffset + dotHeight * (cellSize + gap);
} }
private void UpdateSelectionLabel(int width, int height) { private void UpdateSelectionLabel(int width, int height) {
lblSelection.Text = width.ToString() + ',' + height.ToString(); lblSelection.Text = width.ToString() + 'x' + height.ToString();
} }
private void SetModified(bool modif = true, bool prj = false) { public void SetModified(bool modif = true, bool prj = false) {
string suffix = ""; string suffix = "";
if (prj) { if (prj) {
prjModified = modif; prjModified = modif;
@@ -96,6 +98,30 @@ namespace McBitFont {
} }
} }
// Check if a frame is "blank"
private static bool IsFrameBlank(FrameMiniature frame) {
if (frame.code == 32) return false; // Space character is always blank, so skip it
for (int i = 0; i < frame.width; i++) {
for (int j = 0; j < frame.height; j++) {
if (frame.data[i, j]) return false;
}
}
return true;
}
// Remember sidebar panels locations
private void SideBarRecalc() {
sidebarLocs[0, 0] = new Point(this.Width - 459, 31);
sidebarLocs[0, 1] = new Point(this.Width - 316, 24);
sidebarLocs[0, 2] = new Point(this.Width - 487, 31);
sidebarLocs[1, 0] = new Point(this.Width - panel1.Width - 70, 180);
sidebarLocs[1, 1] = new Point(this.Width - pnlInfo.Width - 110, 320);
sidebarLocs[1, 2] = new Point(dotPanel.Width + 17, 31);
}
private void Form1_Load(object sender, EventArgs e) { private void Form1_Load(object sender, EventArgs e) {
lblType.Text = monospaced ? "Monospaced" : "Variable width / Single"; lblType.Text = monospaced ? "Monospaced" : "Variable width / Single";
tsmiMakeVarWidth.Visible = monospaced; tsmiMakeVarWidth.Visible = monospaced;
@@ -127,6 +153,8 @@ namespace McBitFont {
fbuf = new FrameMiniature(0, dotWidth, dotHeight); fbuf = new FrameMiniature(0, dotWidth, dotHeight);
history = new(this);
// Chek for arguments // Chek for arguments
if (Environment.GetCommandLineArgs().Length > 1) { if (Environment.GetCommandLineArgs().Length > 1) {
LoadProject(Environment.GetCommandLineArgs()[1]); LoadProject(Environment.GetCommandLineArgs()[1]);
@@ -138,6 +166,12 @@ namespace McBitFont {
CodeShiftToolStripMenuItem.Visible = frames.Count > 1; CodeShiftToolStripMenuItem.Visible = frames.Count > 1;
CheckForAdd(); CheckForAdd();
SideBarRecalc();
// Create default cursor
dotPanel.Cursor = McCursor.GetCursor((int)nudBrush.Value, cellSize, gap);
} }
[DllImport("user32.dll")] [DllImport("user32.dll")]
@@ -147,9 +181,9 @@ namespace McBitFont {
return (int)(((ushort)lowPart) | (uint)(highPart << 16)); return (int)(((ushort)lowPart) | (uint)(highPart << 16));
} }
private FrameMiniature CopyFrame(FrameMiniature frame, bool clipboard = false) { public FrameMiniature CopyFrame(FrameMiniature frame, bool clipboard = false) {
int width = chkRectSelect.Checked ? selection2.X - selection1.X + 1 : frame.width; int width = chkRectSelect.Checked && clipboard ? selection2.X - selection1.X + 1 : frame.width;
int height = chkRectSelect.Checked ? selection2.Y - selection1.Y + 1 : frame.height; int height = chkRectSelect.Checked && clipboard ? selection2.Y - selection1.Y + 1 : frame.height;
var ff = new FrameMiniature(frame.code, width, height); var ff = new FrameMiniature(frame.code, width, height);
if (chkRectSelect.Checked && clipboard) { if (chkRectSelect.Checked && clipboard) {
@@ -184,6 +218,12 @@ namespace McBitFont {
if (t > hScroll.Maximum) t = hScroll.Maximum; if (t > hScroll.Maximum) t = hScroll.Maximum;
hScroll.Value = t; hScroll.Value = t;
} }
} else if (ModifierKeys.HasFlag(Keys.Alt)) {
t += (int)nudBrush.Value;
if (t < nudBrush.Minimum) t = (int)nudBrush.Minimum;
if (t > nudBrush.Maximum) t = (int)nudBrush.Maximum;
if (t > dotWidth || t > dotHeight) t = dotWidth < dotHeight ? dotWidth : dotHeight;
nudBrush.Value = t;
} else { } else {
if (vScroll.Enabled) { if (vScroll.Enabled) {
t = t * -1 * (cellSize + gap) + vScroll.Value; t = t * -1 * (cellSize + gap) + vScroll.Value;
@@ -194,17 +234,11 @@ namespace McBitFont {
} }
} }
private void nudX_ValueChanged(object sender, EventArgs e) { public void nudX_ValueChanged(object sender, EventArgs e) {
Cursor.Current = Cursors.WaitCursor; Cursor.Current = Cursors.WaitCursor;
if (monospaced) { if (monospaced) {
Bitmap bmp;
for (int i = 0; i < frames.Count; i++) { for (int i = 0; i < frames.Count; i++) {
frames[i] = FrameResize(frames[i], (int)nudX.Value, dotHeight); frames[i] = FrameResize(frames[i], (int)nudX.Value, dotHeight, true);
bmp = GetMiniPictue(frames[i]);
string s = frames[i].code.ToString().PadLeft(3, '0');
ilMiniatures.Images.RemoveByKey(s);
ilMiniatures.Images.Add(s, (Image)bmp);
miniList.Items[s].ImageKey = s;
} }
SetModified(true, true); SetModified(true, true);
} }
@@ -213,19 +247,16 @@ namespace McBitFont {
} }
DotResize((int)nudX.Value, dotHeight); DotResize((int)nudX.Value, dotHeight);
if (monospaced) history.Add(frames);
else history.Add(f);
Cursor.Current = Cursors.Default; Cursor.Current = Cursors.Default;
} }
private void nudY_ValueChanged(object sender, EventArgs e) { public void nudY_ValueChanged(object sender, EventArgs e) {
Cursor.Current = Cursors.WaitCursor; Cursor.Current = Cursors.WaitCursor;
Bitmap bmp;
for (int i = 0; i < frames.Count; i++) { for (int i = 0; i < frames.Count; i++) {
frames[i] = FrameResize(frames[i], frames[i].width, (int)nudY.Value); frames[i] = FrameResize(frames[i], frames[i].width, (int)nudY.Value, true);
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) { if (nudY.Focused) {
SetModified(); SetModified();
@@ -233,10 +264,11 @@ namespace McBitFont {
} }
DotResize(dotWidth, (int)nudY.Value); DotResize(dotWidth, (int)nudY.Value);
history.Add(frames);
Cursor.Current = Cursors.Default; Cursor.Current = Cursors.Default;
} }
private FrameMiniature FrameResize(FrameMiniature ff, int neww, int newh) { private FrameMiniature FrameResize(FrameMiniature ff, int neww, int newh, bool updateMiniList = false) {
int oldw = ff.width; int oldw = ff.width;
int oldh = ff.height; int oldh = ff.height;
int di = 0, dj = 0; int di = 0, dj = 0;
@@ -261,6 +293,15 @@ namespace McBitFont {
} }
ff.data = t; ff.data = t;
// update miniList with images
if (updateMiniList) {
Bitmap bmp = GetMiniPictue(ff);
string s = ff.code.ToString().PadLeft(3, '0');
ilMiniatures.Images.RemoveByKey(s);
ilMiniatures.Images.Add(s, (Image)bmp);
miniList.Items[s].ImageKey = s;
}
return ff; return ff;
} }
@@ -278,9 +319,6 @@ namespace McBitFont {
} }
SetNewWH(); SetNewWH();
cbZoom_SelectedIndexChanged(cbZoom, null); cbZoom_SelectedIndexChanged(cbZoom, null);
// Re-create history object
history = new CanvasHistory();
} }
private void cbZoom_SelectedIndexChanged(object sender, EventArgs e) { private void cbZoom_SelectedIndexChanged(object sender, EventArgs e) {
@@ -291,6 +329,7 @@ namespace McBitFont {
if (w <= dotPanel.Width) { if (w <= dotPanel.Width) {
hScroll.Enabled = false; hScroll.Enabled = false;
hScroll.Value = 0; hScroll.Value = 0;
vScroll.Maximum = 0;
} else { } else {
hScroll.Maximum = w - dotPanel.Width + 12; hScroll.Maximum = w - dotPanel.Width + 12;
hScroll.Minimum = 0; hScroll.Minimum = 0;
@@ -300,12 +339,14 @@ namespace McBitFont {
if (h <= dotPanel.Height) { if (h <= dotPanel.Height) {
vScroll.Enabled = false; vScroll.Enabled = false;
vScroll.Value = 0; vScroll.Value = 0;
vScroll.Maximum = 0;
} else { } else {
vScroll.Maximum = h - dotPanel.Height + 12; vScroll.Maximum = h - dotPanel.Height + 12;
vScroll.Minimum = 0; vScroll.Minimum = 0;
vScroll.Enabled = true; vScroll.Enabled = true;
} }
if (!chkRectSelect.Checked) dotPanel.Cursor = McCursor.GetCursor((int)nudBrush.Value, cellSize, gap);
dotPanel.Refresh(); dotPanel.Refresh();
} }
@@ -328,7 +369,6 @@ namespace McBitFont {
(x, y, x2, y2) = RectSelCoords(); (x, y, x2, y2) = RectSelCoords();
history.AddPre(f);
for (int i = x; i <= x2; i++) { for (int i = x; i <= x2; i++) {
c = f.data[i, y]; c = f.data[i, y];
for (int j = y; j <= y2; j++) { for (int j = y; j <= y2; j++) {
@@ -339,7 +379,7 @@ namespace McBitFont {
} }
} }
} }
history.AddPost(f); history.Add(f);
CheckHistoryButtons(); CheckHistoryButtons();
SetModified(); SetModified();
dotPanel.Refresh(); dotPanel.Refresh();
@@ -351,7 +391,6 @@ namespace McBitFont {
(x, y, x2, y2) = RectSelCoords(); (x, y, x2, y2) = RectSelCoords();
history.AddPre(f);
for (int i = x; i <= x2; i++) { for (int i = x; i <= x2; i++) {
c = f.data[i, y2]; c = f.data[i, y2];
for (int j = y2; j >= y; j--) { for (int j = y2; j >= y; j--) {
@@ -362,7 +401,7 @@ namespace McBitFont {
} }
} }
} }
history.AddPost(f); history.Add(f);
CheckHistoryButtons(); CheckHistoryButtons();
SetModified(); SetModified();
dotPanel.Refresh(); dotPanel.Refresh();
@@ -374,7 +413,6 @@ namespace McBitFont {
(x, y, x2, y2) = RectSelCoords(); (x, y, x2, y2) = RectSelCoords();
history.AddPre(f);
for (int j = y; j <= y2; j++) { for (int j = y; j <= y2; j++) {
c = f.data[x, j]; c = f.data[x, j];
for (int i = x; i <= x2; i++) { for (int i = x; i <= x2; i++) {
@@ -385,7 +423,7 @@ namespace McBitFont {
} }
} }
} }
history.AddPost(f); history.Add(f);
CheckHistoryButtons(); CheckHistoryButtons();
SetModified(); SetModified();
dotPanel.Refresh(); dotPanel.Refresh();
@@ -396,7 +434,6 @@ namespace McBitFont {
bool c; bool c;
(x, y, x2, y2) = RectSelCoords(); (x, y, x2, y2) = RectSelCoords();
history.AddPre(f);
for (int j = y; j <= y2; j++) { for (int j = y; j <= y2; j++) {
c = f.data[x2, j]; c = f.data[x2, j];
for (int i = x2; i >= x; i--) { for (int i = x2; i >= x; i--) {
@@ -407,18 +444,54 @@ namespace McBitFont {
} }
} }
} }
history.AddPost(f); history.Add(f);
CheckHistoryButtons(); CheckHistoryButtons();
SetModified(); SetModified();
dotPanel.Refresh(); dotPanel.Refresh();
} }
private bool mouseDown = false; private bool mouseDown = false; // Used in canvas history tracking and rectangle selection logics
private bool fChanged = false; private bool fChanged = false; // Used in canvas history (undo / redo) tracking
private bool mouseDownMiddle = false; // Used in middle mouse dragging logic
private int mouseX, mouseY; // To remember last mouse X and Y (used in middle mouse dragging logic)
private int lastX = 0, lastY = 0; // Used for drawing straight lines
private void dotPanel_MouseMove(object sender, MouseEventArgs e) { private void dotPanel_MouseMove(object sender, MouseEventArgs e) {
var rectSel = chkRectSelect.Checked; var rectSel = chkRectSelect.Checked;
bool rectSelUpdated = false; bool rectSelUpdated = false;
// Drag with middle mouse button
if (vScroll.Enabled || hScroll.Enabled) {
if (mouseDownMiddle) {
var dY = mouseY - e.Y <= -cellSize - gap || mouseY - e.Y >= cellSize + gap;
var dX = mouseX - e.X <= -cellSize - gap || mouseX - e.X >= cellSize + gap;
int newY = vScroll.Value;
int newX = hScroll.Value;
if (dX) {
newX += (mouseX - e.X);
if (newX < hScroll.Minimum) newX = hScroll.Minimum;
if (newX > hScroll.Maximum) newX = hScroll.Maximum;
mouseX = e.X;
hScroll.Value = newX;
}
if (dY) {
newY += (mouseY - e.Y);
if (newY < vScroll.Minimum) newY = vScroll.Minimum;
if (newY > vScroll.Maximum) newY = vScroll.Maximum;
mouseY = e.Y;
vScroll.Value = newY;
}
}
if (!mouseDownMiddle && e.Button == MouseButtons.Middle) {
mouseDownMiddle = true;
mouseX = e.X;
mouseY = e.Y;
}
if (mouseDownMiddle && e.Button == MouseButtons.None) {
mouseDownMiddle = false;
}
}
// Moving baseline // Moving baseline
Rectangle rect1, rect2; Rectangle rect1, rect2;
if (set_base) { if (set_base) {
@@ -457,6 +530,7 @@ namespace McBitFont {
} }
} }
if (e.Button != MouseButtons.None && !mouseDown) { if (e.Button != MouseButtons.None && !mouseDown) {
// Started to move a mouse with button held
mouseDown = true; mouseDown = true;
if (rectSel) { if (rectSel) {
selection1.X = i; selection1.X = i;
@@ -464,20 +538,18 @@ namespace McBitFont {
selection2.X = i; selection2.X = i;
selection2.Y = j; selection2.Y = j;
dotPanel.Invalidate(); dotPanel.Invalidate();
} else history.AddPre(f, false); }
} }
if (e.Button == MouseButtons.None && mouseDown) { if (e.Button == MouseButtons.None && mouseDown) {
// Released a mouse button
mouseDown = false; mouseDown = false;
if (rectSel) { if (rectSel) {
NormPoints(ref selection1, ref selection2); NormPoints(ref selection1, ref selection2);
dotPanel.Invalidate(); dotPanel.Invalidate();
} else { } else {
if (!fChanged) { if (fChanged) {
history.Remove(false);
} else {
fChanged = false; fChanged = false;
history.ApplyAdded(); history.Add(f);
history.AddPost(f);
} }
CheckHistoryButtons(); CheckHistoryButtons();
} }
@@ -514,33 +586,50 @@ namespace McBitFont {
return; return;
} }
// Paint black / white // Check for Shift / Ctrl keys for straight lines
if (e.Button == MouseButtons.Left && !f.data[i, j]) { if (ModifierKeys.HasFlag(Keys.Shift) && mouseDown) {
f.data[i, j] = true; j = lastY;
fChanged = true; } else if (ModifierKeys.HasFlag(Keys.Control) && mouseDown) {
int x = pixelOffset + i * (cellSize + gap) - hScroll.Value; i = lastX;
int y = pixelOffset + j * (cellSize + gap) - vScroll.Value;
SetModified();
rect1 = new Rectangle(x, y, cellSize, cellSize);
dotPanel.Invalidate(rect1);
} }
if (e.Button == MouseButtons.Right && f.data[i, j]) { lastX = i;
f.data[i, j] = false; lastY = j;
fChanged = true;
int x = pixelOffset + i * (cellSize + gap) - hScroll.Value; // Paint black / white
int y = pixelOffset + j * (cellSize + gap) - vScroll.Value; if (e.Button == MouseButtons.Left) {
SetModified(); if (PaintPixel(i, j, true)) fChanged = true;
rect1 = new Rectangle(x, y, cellSize, cellSize);
dotPanel.Invalidate(rect1); }
if (e.Button == MouseButtons.Right) {
if (PaintPixel(i, j, false)) fChanged = true;
} }
} }
private bool PaintPixel(int i, int j, bool color) {
bool changed = false;
for (int a = 0; a < (int)nudBrush.Value; a++) {
if (i + a >= f.width) break;
for (int b = 0; b < (int)nudBrush.Value; b++) {
if (j + b >= f.height) break;
if (f.data[i + a, j + b] != color) {
f.data[i + a, j + b] = color;
int x = pixelOffset + (i + a) * (cellSize + gap) - hScroll.Value;
int y = pixelOffset + (j + b) * (cellSize + gap) - vScroll.Value;
Rectangle rect1 = new(x, y, cellSize, cellSize);
dotPanel.Invalidate(rect1);
SetModified();
changed = true;
}
}
}
return changed;
}
private void btnInvert_Click(object sender, EventArgs e) { private void btnInvert_Click(object sender, EventArgs e) {
int x, y, x2, y2; int x, y, x2, y2;
history.AddPre(f);
(x, y, x2, y2) = RectSelCoords(); (x, y, x2, y2) = RectSelCoords();
for (int i = x; i <= x2; i++) { for (int i = x; i <= x2; i++) {
@@ -549,7 +638,7 @@ namespace McBitFont {
} }
} }
history.AddPost(f); history.Add(f);
CheckHistoryButtons(); CheckHistoryButtons();
SetModified(); SetModified();
dotPanel.Refresh(); dotPanel.Refresh();
@@ -561,7 +650,6 @@ namespace McBitFont {
(x, y, x2, y2) = RectSelCoords(); (x, y, x2, y2) = RectSelCoords();
history.AddPre(f);
for (j = y; j <= y2; j++) { for (j = y; j <= y2; j++) {
a = x; a = x;
b = x2; b = x2;
@@ -573,7 +661,7 @@ namespace McBitFont {
b--; b--;
} }
} }
history.AddPost(f); history.Add(f);
CheckHistoryButtons(); CheckHistoryButtons();
SetModified(); SetModified();
dotPanel.Refresh(); dotPanel.Refresh();
@@ -585,7 +673,6 @@ namespace McBitFont {
(x, y, x2, y2) = RectSelCoords(); (x, y, x2, y2) = RectSelCoords();
history.AddPre(f);
for (i = x; i <= x2; i++) { for (i = x; i <= x2; i++) {
a = y; a = y;
b = y2; b = y2;
@@ -597,13 +684,13 @@ namespace McBitFont {
b--; b--;
} }
} }
history.AddPost(f); history.Add(f);
CheckHistoryButtons(); CheckHistoryButtons();
SetModified(); SetModified();
dotPanel.Refresh(); dotPanel.Refresh();
} }
private void button1_Click(object sender, EventArgs e) { private void Export_Click(object sender, EventArgs e) {
if (modified) { if (modified) {
if (MessageBox.Show("Current symbol is modified.\nDo you want to save the changes?", "Symbol was modified!", MessageBoxButtons.YesNo) == DialogResult.Yes) { if (MessageBox.Show("Current symbol is modified.\nDo you want to save the changes?", "Symbol was modified!", MessageBoxButtons.YesNo) == DialogResult.Yes) {
SaveFrame(); SaveFrame();
@@ -635,7 +722,7 @@ namespace McBitFont {
SetModified(true, true); SetModified(true, true);
} }
private static Bitmap GetMiniPictue(FrameMiniature m) { public static Bitmap GetMiniPictue(FrameMiniature m) {
int picSize = (m.width > m.height) ? m.width : m.height; int picSize = (m.width > m.height) ? m.width : m.height;
var bmp = new Bitmap(picSize, picSize); var bmp = new Bitmap(picSize, picSize);
int imin = m.width < picSize ? (picSize - m.width) / 2 : 0; int imin = m.width < picSize ? (picSize - m.width) / 2 : 0;
@@ -647,7 +734,7 @@ namespace McBitFont {
bmp.SetPixel(i + imin, j + jmin, c); bmp.SetPixel(i + imin, j + jmin, c);
} }
} }
Bitmap sbmp = new Bitmap(50, 50); Bitmap sbmp = new(50, 50);
using (Graphics g = Graphics.FromImage(sbmp)) { using (Graphics g = Graphics.FromImage(sbmp)) {
g.InterpolationMode = InterpolationMode.NearestNeighbor; g.InterpolationMode = InterpolationMode.NearestNeighbor;
g.PixelOffsetMode = PixelOffsetMode.Half; g.PixelOffsetMode = PixelOffsetMode.Half;
@@ -768,7 +855,6 @@ namespace McBitFont {
FrameMiniature newf; FrameMiniature newf;
if (form.cbSingle.Checked) { 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"; append = "Single";
monospaced = false; monospaced = false;
} else { } else {
@@ -797,6 +883,7 @@ namespace McBitFont {
} }
makeVarWidthToolStripMenuItem.Visible = monospaced; makeVarWidthToolStripMenuItem.Visible = monospaced;
tsmiMakeVarWidth.Visible = monospaced; tsmiMakeVarWidth.Visible = monospaced;
zerofyWidthToolStripMenuItem.Enabled = !monospaced;
CodeShiftToolStripMenuItem.Visible = !form.cbSingle.Checked; CodeShiftToolStripMenuItem.Visible = !form.cbSingle.Checked;
tsmiCodeShift.Visible = !form.cbSingle.Checked; tsmiCodeShift.Visible = !form.cbSingle.Checked;
lblType.Text = monospaced ? "Monospaced" : "Variable width / Single"; lblType.Text = monospaced ? "Monospaced" : "Variable width / Single";
@@ -817,13 +904,11 @@ namespace McBitFont {
SetWindowCap(); SetWindowCap();
SetModified(false); ; SetModified(false); ;
CheckForAdd(); CheckForAdd();
fbuffer = false;
miniList.Items[0].Selected = true; miniList.Items[0].Selected = true;
miniList.Refresh(); miniList.Refresh();
dotPanel.Refresh(); dotPanel.Refresh();
// Re-create history object history.Clear();
history = new CanvasHistory();
Cursor.Current = Cursors.Default; Cursor.Current = Cursors.Default;
} }
@@ -839,14 +924,10 @@ namespace McBitFont {
tsmiRemoveSymbol.Enabled = false; tsmiRemoveSymbol.Enabled = false;
tsmiRemoveBefore.Enabled = false; tsmiRemoveBefore.Enabled = false;
tsmiRemoveAfter.Enabled = false; tsmiRemoveAfter.Enabled = false;
//copyToolStripMenuItem.Enabled = false;
pasteToolStripMenuItem.Enabled = false;
return;
//miniList.Items[0].Selected = true;
}
// Clear history return;
history.Clear(); }
dotPanel.SuspendLayout();
var sel = miniList.SelectedItems[0]; var sel = miniList.SelectedItems[0];
int code = Convert.ToInt32(sel.ImageKey); int code = Convert.ToInt32(sel.ImageKey);
@@ -854,7 +935,10 @@ namespace McBitFont {
nudX.Value = ff.width; nudX.Value = ff.width;
nudY.Value = ff.height; nudY.Value = ff.height;
f = ff; f = ff;
dotPanel.Refresh();
history.Add(code);
ff = frames.Find(x => x.code == code); ff = frames.Find(x => x.code == code);
if (frames.Count > 1 && (ff.Equals(frames.First()) || ff.Equals(frames.Last()))) { if (frames.Count > 1 && (ff.Equals(frames.First()) || ff.Equals(frames.Last()))) {
removeSymbolToolStripMenuItem.Enabled = true; removeSymbolToolStripMenuItem.Enabled = true;
@@ -863,7 +947,10 @@ namespace McBitFont {
removeSymbolToolStripMenuItem.Enabled = false; removeSymbolToolStripMenuItem.Enabled = false;
tsmiRemoveSymbol.Enabled = false; tsmiRemoveSymbol.Enabled = false;
} }
//copyToolStripMenuItem.Enabled = true;
dotPanel.ResumeLayout();
dotPanel.Refresh();
if (frames.Count > 1 && ff.Equals(frames.First())) { if (frames.Count > 1 && ff.Equals(frames.First())) {
removeBeforeToolStripMenuItem.Enabled = false; removeBeforeToolStripMenuItem.Enabled = false;
removeAfterToolStripMenuItem.Enabled = true; removeAfterToolStripMenuItem.Enabled = true;
@@ -881,8 +968,6 @@ namespace McBitFont {
tsmiRemoveAfter.Enabled = true; tsmiRemoveAfter.Enabled = true;
} }
if (fbuffer) pasteToolStripMenuItem.Enabled = true;
else pasteToolStripMenuItem.Enabled = false;
} }
private void SaveToolStripMenuItem_Click(object sender, EventArgs e) { private void SaveToolStripMenuItem_Click(object sender, EventArgs e) {
@@ -892,6 +977,16 @@ namespace McBitFont {
} }
} }
public void FillFrameLists() {
foreach (FrameMiniature f in frames) {
var s = f.code.ToString().PadLeft(3, '0');
var sHex = 'x' + Convert.ToString(f.code, 16).PadLeft(2, '0').ToUpper();
var sss = DecodeSymbol(f.code);
ilMiniatures.Images.Add(s, (Image)GetMiniPictue(f));
miniList.Items.Add(s, (chkHexCodes.Checked ? sHex : s) + ' ' + sss, s);
}
}
private void LoadProject(string filename) { private void LoadProject(string filename) {
SaveBlock sav; SaveBlock sav;
@@ -909,13 +1004,7 @@ namespace McBitFont {
tsmiMakeVarWidth.Visible = monospaced; tsmiMakeVarWidth.Visible = monospaced;
miniList.Items.Clear(); miniList.Items.Clear();
ilMiniatures.Images.Clear(); ilMiniatures.Images.Clear();
foreach (FrameMiniature ff in frames) { FillFrameLists();
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, (chkHexCodes.Checked ? sHex : s) + ' ' + sss, s);
}
nudX.ValueChanged -= nudX_ValueChanged; nudX.ValueChanged -= nudX_ValueChanged;
nudY.ValueChanged -= nudY_ValueChanged; nudY.ValueChanged -= nudY_ValueChanged;
nudX.Value = frames.First().width; nudX.Value = frames.First().width;
@@ -940,14 +1029,12 @@ namespace McBitFont {
miniList.Items[0].Selected = true; miniList.Items[0].Selected = true;
CheckForAdd(); CheckForAdd();
fbuffer = false;
//copyToolStripMenuItem.Enabled = true;
// Re-create history object history.Clear();
history = new CanvasHistory();
tsmiMakeVarWidth.Visible = monospaced; tsmiMakeVarWidth.Visible = monospaced;
makeVarWidthToolStripMenuItem.Visible = monospaced; makeVarWidthToolStripMenuItem.Visible = monospaced;
zerofyWidthToolStripMenuItem.Enabled = !monospaced;
tsmiCodeShift.Visible = frames.Count > 1; tsmiCodeShift.Visible = frames.Count > 1;
CodeShiftToolStripMenuItem.Visible = frames.Count > 1; CodeShiftToolStripMenuItem.Visible = frames.Count > 1;
Cursor.Current = Cursors.Default; Cursor.Current = Cursors.Default;
@@ -994,9 +1081,11 @@ namespace McBitFont {
var sel = miniList.SelectedItems[0].ImageKey; var sel = miniList.SelectedItems[0].ImageKey;
int code = Convert.ToInt32(miniList.SelectedItems[0].ImageKey); int code = Convert.ToInt32(miniList.SelectedItems[0].ImageKey);
FrameMiniature ff = frames.Find(x => x.code == code); FrameMiniature ff = frames.Find(x => x.code == code);
bool isLast = frames.Last().Equals(ff);
frames.Remove(ff); frames.Remove(ff);
miniList.SelectedItems[0].Remove(); miniList.SelectedItems[0].Remove();
//miniList.Items[0].Selected = true;
miniList.Items[isLast ? miniList.Items.Count - 1 : 0].Selected = true;
} }
private void prependSymbolToolStripMenuItem_Click(object sender, EventArgs e) { private void prependSymbolToolStripMenuItem_Click(object sender, EventArgs e) {
@@ -1041,38 +1130,44 @@ namespace McBitFont {
} }
private void copyToolStripMenuItem_Click(object sender, EventArgs e) { private void copyToolStripMenuItem_Click(object sender, EventArgs e) {
fbuffer = true; var bb = MessagePackSerializer.Serialize(CopyFrame(f, true));
fbuf = CopyFrame(f, true); DataObject clpbObj = new DataObject(clpbFormat.Name, bb);
pasteToolStripMenuItem.Enabled = true; Clipboard.SetDataObject(clpbObj, true);
} }
private void pasteToolStripMenuItem_Click(object sender, EventArgs e) { private void pasteToolStripMenuItem_Click(object sender, EventArgs e) {
history.AddPre(f); // Try to read from clipboard
if (fbuf.width == f.width && fbuf.height == f.height) { try {
Array.Copy(fbuf.data, f.data, fbuf.data.Length); IDataObject clpbObj = Clipboard.GetDataObject();
} else { byte[] bb = (byte[])clpbObj.GetData(clpbFormat.Name);
int di, dj, wmax, hmax, selw, selh; fbuf = MessagePackSerializer.Deserialize<FrameMiniature>(bb);
if (chkRectSelect.Checked) { }
di = selection1.X; catch {
dj = selection1.Y; return;
selw = selection2.X - selection1.X + 1; }
selh = selection2.Y - selection1.Y + 1;
wmax = fbuf.width > selw ? selw : fbuf.width;
hmax = fbuf.height > selh ? selh : fbuf.height;
} else {
di = 0;
dj = 0;
wmax = (fbuf.width > f.width) ? f.width : fbuf.width;
hmax = (fbuf.height > f.height) ? f.height : fbuf.height;
}
for (int i = 0; i < wmax; i++) { int di, dj, wmax, hmax, selw, selh;
for (int j = 0; j < hmax; j++) { if (chkRectSelect.Checked) {
f.data[i + di, j + dj] = fbuf.data[i, j]; di = selection1.X;
} dj = selection1.Y;
selw = selection2.X - selection1.X + 1;
selh = selection2.Y - selection1.Y + 1;
wmax = fbuf.width > selw ? selw : fbuf.width;
hmax = fbuf.height > selh ? selh : fbuf.height;
} else {
di = 0;
dj = 0;
wmax = (fbuf.width > f.width) ? f.width : fbuf.width;
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 + di, j + dj] = fbuf.data[i, j];
} }
} }
history.AddPost(f);
history.Add(f);
CheckHistoryButtons(); CheckHistoryButtons();
dotPanel.Refresh(); dotPanel.Refresh();
SetModified(); SetModified();
@@ -1121,8 +1216,6 @@ namespace McBitFont {
private void FillFrame(bool val) { private void FillFrame(bool val) {
int x, y, x2, y2; int x, y, x2, y2;
history.AddPre(f);
(x, y, x2, y2) = RectSelCoords(); (x, y, x2, y2) = RectSelCoords();
for (int i = x; i <= x2; i++) { for (int i = x; i <= x2; i++) {
@@ -1131,7 +1224,7 @@ namespace McBitFont {
} }
} }
history.AddPost(f); history.Add(f);
CheckHistoryButtons(); CheckHistoryButtons();
SetModified(); SetModified();
dotPanel.Refresh(); dotPanel.Refresh();
@@ -1195,6 +1288,7 @@ namespace McBitFont {
monospaced = false; monospaced = false;
makeVarWidthToolStripMenuItem.Visible = false; makeVarWidthToolStripMenuItem.Visible = false;
tsmiMakeVarWidth.Visible = false; tsmiMakeVarWidth.Visible = false;
zerofyWidthToolStripMenuItem.Enabled = true;
lblType.Text = "Variable width / Single"; lblType.Text = "Variable width / Single";
SetModified(true, true); SetModified(true, true);
} }
@@ -1212,13 +1306,13 @@ namespace McBitFont {
} }
private void undoToolStripMenuItem_Click(object sender, EventArgs e) { private void undoToolStripMenuItem_Click(object sender, EventArgs e) {
history.Undo(f); history.Undo();
dotPanel.Refresh(); dotPanel.Refresh();
CheckHistoryButtons(); CheckHistoryButtons();
} }
private void redoToolStripMenuItem_Click(object sender, EventArgs e) { private void redoToolStripMenuItem_Click(object sender, EventArgs e) {
history.Redo(f); history.Redo();
dotPanel.Refresh(); dotPanel.Refresh();
CheckHistoryButtons(); CheckHistoryButtons();
} }
@@ -1269,13 +1363,12 @@ namespace McBitFont {
private void importImageToolStripMenuItem_Click(object sender, EventArgs e) { private void importImageToolStripMenuItem_Click(object sender, EventArgs e) {
ImageImporter iform = new ImageImporter(f.width, f.height); ImageImporter iform = new ImageImporter(f.width, f.height);
if (iform.ShowDialog() == DialogResult.OK) { if (iform.ShowDialog() == DialogResult.OK) {
history.AddPre(f);
for (int i = 0; i < iform.bmpScaled.Width; i++) { for (int i = 0; i < iform.bmpScaled.Width; i++) {
for (int j = 0; j < iform.bmpScaled.Height; j++) { for (int j = 0; j < iform.bmpScaled.Height; j++) {
f.data[i, j] = iform.bmpScaled.GetPixel(i, j).ToArgb().Equals(Color.Black.ToArgb()); f.data[i, j] = iform.bmpScaled.GetPixel(i, j).ToArgb().Equals(Color.Black.ToArgb());
} }
} }
history.AddPost(f); history.Add(f);
CheckHistoryButtons(); CheckHistoryButtons();
dotPanel.Refresh(); dotPanel.Refresh();
SetModified(); SetModified();
@@ -1301,6 +1394,10 @@ namespace McBitFont {
private void chkRectSelect_CheckedChanged(object sender, EventArgs e) { private void chkRectSelect_CheckedChanged(object sender, EventArgs e) {
lblSelection.Visible = lblSelectionLabel.Visible = chkRectSelect.Checked; lblSelection.Visible = lblSelectionLabel.Visible = chkRectSelect.Checked;
selectAllToolStripMenuItem.Enabled = chkRectSelect.Checked; selectAllToolStripMenuItem.Enabled = chkRectSelect.Checked;
if (chkRectSelect.Checked) dotPanel.Cursor = McCursor.GetCursorSelect();
else dotPanel.Cursor = McCursor.GetCursor((int)nudBrush.Value, cellSize, gap);
dotPanel.Refresh(); dotPanel.Refresh();
} }
@@ -1436,7 +1533,7 @@ namespace McBitFont {
private void ExportPNG(object sender, EventArgs e) { private void ExportPNG(object sender, EventArgs e) {
CheckModifiedFrame(); CheckModifiedFrame();
CheckModifiedProject(); CheckModifiedProject();
if (dlgSavePNG.ShowDialog() == DialogResult.OK) { if (dlgSavePNG.ShowDialog() == DialogResult.OK) {
int pixelSize = 3; int pixelSize = 3;
int symbolMargin = 2 * pixelSize; int symbolMargin = 2 * pixelSize;
@@ -1474,7 +1571,7 @@ namespace McBitFont {
g.DrawString("First code: " + frames.First().code.ToString(), font, tb, 250, 38); g.DrawString("First code: " + frames.First().code.ToString(), font, tb, 250, 38);
g.DrawString("Last code: " + frames.Last().code.ToString(), font, tb, 250, 62); g.DrawString("Last code: " + frames.Last().code.ToString(), font, tb, 250, 62);
g.DrawString("Codepage: " + codepage.ToString(), font, tb, 250, 86); g.DrawString("Codepage: " + codepage.ToString(), font, tb, 250, 86);
// Draw grid // Draw grid
Pen p = new(Color.FromArgb(64, 0, 0, 0), 1); Pen p = new(Color.FromArgb(64, 0, 0, 0), 1);
@@ -1527,5 +1624,75 @@ namespace McBitFont {
} }
} }
private void toggleBarToolStripMenuItem_Click(object sender, EventArgs e) {
int state;
dotPanel.Width = this.Width - (toggleBarToolStripMenuItem.Checked ? 260 : 504);
SideBarRecalc();
if (toggleBarToolStripMenuItem.Checked) {
toggleBarToolStripMenuItem.Text = "<<";
state = 1;
} else {
toggleBarToolStripMenuItem.Text = ">>";
state = 0;
}
panel1.Location = sidebarLocs[state, 0];
pnlInfo.Location = sidebarLocs[state, 1];
miniList.Visible = !toggleBarToolStripMenuItem.Checked;
vScroll.Location = sidebarLocs[state, 2];
hScroll.Width = dotPanel.Width;
cbZoom.Focus();
}
private void PrevNextMenuCheck() {
if (frames.Count < 2) {
nextSymbolToolStripMenuItem.Enabled = false;
previousSymbolToolStripMenuItem.Enabled = false;
return;
}
previousSymbolToolStripMenuItem.Enabled = f.code != frames.First().code;
nextSymbolToolStripMenuItem.Enabled = f.code != frames.Last().code;
}
private void fontToolStripMenuItem_DropDownOpening(object sender, EventArgs e) {
PrevNextMenuCheck();
}
private void previousSymbolToolStripMenuItem_Click(object sender, EventArgs e) {
if (f.code != frames.First().code && miniList.SelectedItems.Count > 0) {
miniList.Items[miniList.SelectedIndices[0] - 1].Selected = true;
}
PrevNextMenuCheck();
}
private void nextSymbolToolStripMenuItem_Click(object sender, EventArgs e) {
if (f.code != frames.Last().code && miniList.SelectedItems.Count > 0) {
miniList.Items[miniList.SelectedIndices[0] + 1].Selected = true;
}
PrevNextMenuCheck();
}
private void ZerofyBlankWidth(object sender, EventArgs e) {
if (monospaced) return; // Does not work for monospaced fonts
if (frames.Count < 2) return; // Does not work for single images
bool flag = false;
for (int i = 0; i < frames.Count; i++) {
if (IsFrameBlank(frames[i])) {
frames[i] = FrameResize(frames[i], 0, dotHeight, true);
flag = true;
}
}
if (flag) {
SetModified(true, true);
MiniList_SelectedIndexChanged(miniList, EventArgs.Empty);
}
}
private void nudBrush_ValueChanged(object sender, EventArgs e) {
if (!chkRectSelect.Checked) dotPanel.Cursor = McCursor.GetCursor((int)nudBrush.Value, cellSize, gap);
}
} }
} }

View File

@@ -20,9 +20,9 @@
<UseWindowsForms>true</UseWindowsForms> <UseWindowsForms>true</UseWindowsForms>
<ImportWindowsDesktopTargets>true</ImportWindowsDesktopTargets> <ImportWindowsDesktopTargets>true</ImportWindowsDesktopTargets>
<ApplicationIcon>icon_64.ico</ApplicationIcon> <ApplicationIcon>icon_64.ico</ApplicationIcon>
<AssemblyVersion>2.3.0.0</AssemblyVersion> <AssemblyVersion>2.7.0.0</AssemblyVersion>
<FileVersion>2.3.0.0</FileVersion> <FileVersion>2.7.0.0</FileVersion>
<Version>$(VersionPrefix)2.3.0</Version> <Version>$(VersionPrefix)2.7.0</Version>
<Copyright>Anton Mukhin</Copyright> <Copyright>Anton Mukhin</Copyright>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">

131
McBitFont/McCursor.cs Normal file
View File

@@ -0,0 +1,131 @@
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace McBitFont {
internal class McCursor {
public struct IconInfo {
public bool fIcon;
public int xHotspot;
public int yHotspot;
public IntPtr hbmMask;
public IntPtr hbmColor;
}
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool GetIconInfo(IntPtr hIcon, ref IconInfo pIconInfo);
[DllImport("user32.dll")]
public static extern IntPtr CreateIconIndirect(ref IconInfo icon);
/// <summary>
/// Create a cursor from a bitmap without resizing and with the specified
/// hot spot
/// </summary>
public static Cursor CreateCursorNoResize(Bitmap bmp, int xHotSpot, int yHotSpot) {
IntPtr ptr = bmp.GetHicon();
IconInfo tmp = new IconInfo();
GetIconInfo(ptr, ref tmp);
tmp.xHotspot = xHotSpot;
tmp.yHotspot = yHotSpot;
tmp.fIcon = false;
ptr = CreateIconIndirect(ref tmp);
return new Cursor(ptr);
}
/// <summary>
/// Create a 32x32 cursor from a bitmap, with the hot spot in the middle
/// </summary>
public static Cursor CreateCursor(Bitmap bmp) {
int xHotSpot = 16;
int yHotSpot = 16;
IntPtr ptr = ((Bitmap)ResizeImage(bmp, 32, 32)).GetHicon();
IconInfo tmp = new IconInfo();
GetIconInfo(ptr, ref tmp);
tmp.xHotspot = xHotSpot;
tmp.yHotspot = yHotSpot;
tmp.fIcon = false;
ptr = CreateIconIndirect(ref tmp);
return new Cursor(ptr);
}
/// <summary>
/// Resize the image to the specified width and height.
/// </summary>
/// <param name="image">The image to resize.</param>
/// <param name="width">The width to resize to.</param>
/// <param name="height">The height to resize to.</param>
/// <returns>The resized image.</returns>
public static Bitmap ResizeImage(Image image, int width, int height) {
var destRect = new Rectangle(0, 0, width, height);
var destImage = new Bitmap(width, height);
destImage.SetResolution(image.HorizontalResolution, image.VerticalResolution);
using (var graphics = Graphics.FromImage(destImage)) {
graphics.CompositingMode = CompositingMode.SourceCopy;
graphics.CompositingQuality = CompositingQuality.HighQuality;
graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
graphics.SmoothingMode = SmoothingMode.HighQuality;
graphics.PixelOffsetMode = PixelOffsetMode.HighQuality;
using (var wrapMode = new ImageAttributes()) {
wrapMode.SetWrapMode(WrapMode.TileFlipXY);
graphics.DrawImage(image, destRect, 0, 0, image.Width, image.Height, GraphicsUnit.Pixel, wrapMode);
}
}
return destImage;
}
public static Cursor GetCursor(int penSize, int cellSize, int gap) {
int size = (cellSize + gap) * penSize;
Bitmap bmp = new(size, size);
Pen pb = new(Color.Black, 1);
SolidBrush bw = new(Color.FromArgb(160, Color.White));
using (Graphics g = Graphics.FromImage(bmp)) {
g.DrawRectangle(pb, 0, 0, size-1, size-1);
g.FillRectangle(bw, 1, 1, size - 2, size - 2);
}
return CreateCursorNoResize(bmp, cellSize / 2, cellSize / 2);
}
public static Cursor GetCursorSelect() {
Point[] arrow = { new(1, 1), new(12, 12), new(11, 13), new(6, 13), new(2, 17), new(1, 16) };
Point[] corner1 = { new(13, 6), new(20, 6), new(20, 13), new(17, 13), new(17, 9), new(13, 9) };
Point[] corner2 = { new(17, 16), new(20, 16), new(20, 23), new(13, 23), new(13, 20), new(17, 20) };
Point[] corner3 = { new(3, 16), new(6, 16), new(6, 20), new(10, 20), new(10, 23), new(3, 23) };
Point[] corner4 = { new(6, 6), new(10, 6), new(10, 9), new(6, 9) };
Bitmap bmp = new(21, 24);
Pen pb = new(Color.Black, 1);
SolidBrush bw = new (Color.White);
using (Graphics g = Graphics.FromImage(bmp)) {
g.FillPolygon(bw, corner1);
g.DrawPolygon(pb, corner1);
g.FillPolygon(bw, corner2);
g.DrawPolygon(pb, corner2);
g.FillPolygon(bw, corner3);
g.DrawPolygon(pb, corner3);
g.FillPolygon(bw, corner4);
g.DrawPolygon(pb, corner4);
g.FillPolygon(bw, arrow);
g.DrawPolygon(pb, arrow);
}
return CreateCursorNoResize(bmp, 1, 1);
}
}
}

View File

@@ -100,6 +100,26 @@ namespace McBitFont.Properties {
} }
} }
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap arrow_turn_left {
get {
object obj = ResourceManager.GetObject("arrow_turn_left", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap arrow_turn_right {
get {
object obj = ResourceManager.GetObject("arrow_turn_right", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary> /// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap. /// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary> /// </summary>
@@ -320,6 +340,16 @@ namespace McBitFont.Properties {
} }
} }
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap text_letterspacing2 {
get {
object obj = ResourceManager.GetObject("text_letterspacing2", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary> /// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap. /// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary> /// </summary>

View File

@@ -136,18 +136,18 @@
<data name="Famfamfam-Silk-Page-copy.16" type="System.Resources.ResXFileRef, System.Windows.Forms"> <data name="Famfamfam-Silk-Page-copy.16" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Famfamfam-Silk-Page-copy.16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value> <value>..\Resources\Famfamfam-Silk-Page-copy.16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data> </data>
<data name="font" type="System.Resources.ResXFileRef, System.Windows.Forms"> <data name="picture_go" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\font.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value> <value>..\Resources\picture_go.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data> </data>
<data name="arrow_inout" type="System.Resources.ResXFileRef, System.Windows.Forms"> <data name="arrow_inout" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\arrow_inout.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value> <value>..\Resources\arrow_inout.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data> </data>
<data name="font" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\font.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="arrow_redo" type="System.Resources.ResXFileRef, System.Windows.Forms"> <data name="arrow_redo" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\redo.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value> <value>..\Resources\redo.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data> </data>
<data name="Famfamfam-Silk-Disk.16" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Famfamfam-Silk-Disk.16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="icon" type="System.Resources.ResXFileRef, System.Windows.Forms"> <data name="icon" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\icon.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value> <value>..\Resources\icon.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data> </data>
@@ -181,20 +181,20 @@
<data name="z_shading" type="System.Resources.ResXFileRef, System.Windows.Forms"> <data name="z_shading" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\shading.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value> <value>..\Resources\shading.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data> </data>
<data name="arrow_turn_left" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\arrow_turn_left.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="add" type="System.Resources.ResXFileRef, System.Windows.Forms"> <data name="add" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\add.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value> <value>..\Resources\add.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data> </data>
<data name="icon_32" type="System.Resources.ResXFileRef, System.Windows.Forms"> <data name="icon_32" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\icon_32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value> <value>..\Resources\icon_32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data> </data>
<data name="z_undo" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\arrow_undo.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="z_tick" type="System.Resources.ResXFileRef, System.Windows.Forms"> <data name="z_tick" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\tick.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value> <value>..\Resources\tick.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data> </data>
<data name="delete" type="System.Resources.ResXFileRef, System.Windows.Forms"> <data name="z_undo" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\delete.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value> <value>..\Resources\arrow_undo.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data> </data>
<data name="z_redo" type="System.Resources.ResXFileRef, System.Windows.Forms"> <data name="z_redo" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\arrow_redo.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value> <value>..\Resources\arrow_redo.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
@@ -208,6 +208,15 @@
<data name="Famfamfam-Silk-Page-white.16" type="System.Resources.ResXFileRef, System.Windows.Forms"> <data name="Famfamfam-Silk-Page-white.16" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Famfamfam-Silk-Page-white.16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value> <value>..\Resources\Famfamfam-Silk-Page-white.16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data> </data>
<data name="delete" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\delete.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="arrow_turn_right" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\arrow_turn_right.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="Famfamfam-Silk-Disk.16" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Famfamfam-Silk-Disk.16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="folder_table" type="System.Resources.ResXFileRef, System.Windows.Forms"> <data name="folder_table" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\folder_table.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value> <value>..\Resources\folder_table.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data> </data>
@@ -232,7 +241,7 @@
<data name="icon_64" type="System.Resources.ResXFileRef, System.Windows.Forms"> <data name="icon_64" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\icon_64.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value> <value>..\Resources\icon_64.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data> </data>
<data name="picture_go" type="System.Resources.ResXFileRef, System.Windows.Forms"> <data name="text_letterspacing2" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\picture_go.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value> <value>..\Resources\text_letterspacing2.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data> </data>
</root> </root>

Binary file not shown.

After

Width:  |  Height:  |  Size: 512 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 489 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 357 B

View File

@@ -8,6 +8,9 @@ Features:
- Import an image - Import an image
- Save / Load your project for later edits - Save / Load your project for later edits
- Export as a C array in different formats - Export as a C array in different formats
- Import from text C array
- Export to a PNG image showing all the characters in a table
- Test your font in special dialog
Requires: Requires:
- Windows 7+ - Windows 7+
@@ -17,12 +20,17 @@ Some basic hints on the interface:
- Mouse 1 to mark a pixel black - Mouse 1 to mark a pixel black
- Mouse 2 to mark a pixel white - Mouse 2 to mark a pixel white
- Drag the mouse holding a button to draw pixels - Drag the mouse holding a button to draw pixels
- Hold Shift to constrain painting horizontally
- Hold Ctrl to constrain painting vertically
- Mouse Scroll to scroll up and down - Mouse Scroll to scroll up and down
- Shift + scroll to scroll left and right - Shift + scroll to scroll left and right
- Crtl + scroll to zoom - Crtl + scroll to zoom
- Alt + Scroll to change painting brush size
Download in the [Releases](https://gitea.mcflyer.ru/McFLY/McBitFont/releases) section! Download in the [Releases](https://gitea.mcflyer.ru/McFLY/McBitFont/releases) section!
Library example instructions to implement to STM32 code: [mctext](STM32_HAL_Lib/README.md)
#### Important: #### 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.** **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.**

13
STM32_HAL_Lib/README.md Normal file
View File

@@ -0,0 +1,13 @@
# McText Library
- The library uses "Left to Right, Top to bottom" scan and "LSB Top" for pixels alignment
#### Instructions
To use the library you have to have a display driver with a function that paints a single pixel with X and Y coordinates and 0/1 color.<br>
Find "SET A FUNCTION NAME HERE!" text in *mctext.c* file and change the function name that suits your driver.<br>
**Note:** it is possible that you will have to change parameters in the function to match your driver.
**Note:** check the "include" in *mctext.h* file to match your HAL. (stm32f1xx_hal.h is fo STM32F1 MCU series)
Now use **mct_String** function to draw a string of text.

113
STM32_HAL_Lib/mctext.c Normal file
View File

@@ -0,0 +1,113 @@
/*
* mctext.c
*
* Created on: May 16, 2025
* Author: User
*/
#include "mctext.h"
#include "ST7565.h"
//=========================== SET A FUNCTION NAME HERE! ===========================//
// A function from display driver to set a pixel (x, y, color)
void (*mct_SetPixel)(uint8_t, uint8_t, uint8_t) = ST7565_SetPixel;
//=================================================================================//
// Draw a single character. Returns width of drawn character
uint8_t mct_CharT(uint8_t x, uint8_t y, unsigned char c, uint8_t color, const uint8_t *font, uint8_t transp) {
uint8_t pk = font[0]; // Is it a packed font?
uint8_t w = font[1]; // Font char width
uint8_t h = font[2]; // Font char height
uint8_t fc = font[4]; // First char code in the font
uint8_t lc = font[5]; // Last char code in the font
uint8_t i, j, p, s, b, seg; // i-cur.column, j-cur.row of 8, p-rows of 8, s-height in cur.row of 8, b-cur.bit in cur.row, seg-byte.segment
uint8_t bps; // Bytes per symbol for packed fonts
uint16_t o; // Current offset
if (c < fc || c > lc) return 0;
if (x > LCDWIDTH) return 0;
if (y+h > LCDHEIGHT) return 0;
// Calc the offset for desired symbol
if (pk) { // The font is packed
if (w) { // The font is monospaced
bps = w*h/8; // Bytes per symbol
if ((w*h)%8 > 0) bps++; // Correction for the last byte
o = FONT_HEADER+(c-fc)*bps; // Offset for desired symbol
} else { // The font is not monospaced
o = FONT_HEADER; // Starting offset
for (i=0; i<c-fc; i++) { // Going through every symbol
bps = font[o]*h/8; // Bytes per current symbol
if ((font[o]*h)%8 > 0) bps++; // Correction for the last byte
o += bps + 1; // Adding symbol's width to the offset (+ width byte)
}
w = font[o]; // Desired symbol's width
o++; // Offset for desired symbol's data
}
// Draw the packed symbol!
bps = w*h/8; // Bytes per current symbol
if ((w*h)%8 > 0) bps++; // Correction for the last byte
b = 0; // bit indexer in "current" byte
for (i=0; i<w; i++) { // Going through columns
if (x+i > LCDWIDTH) return i-1; // Check if we're out of display size
for (j=0; j<h; j++) { // Going through rows in column [i]
if (b == 0) seg = font[o];
if ((seg>>b) & 1) mct_SetPixel(x+i, y+j, color); // Paint the pixel
if (b < 7) b++; else {b = 0; o++;} // Track bits and bytes
}
}
} else { // The font is not packed
p = (h%8 > 0) ? h/8 + 1 : h/8; // Bytes in one column
if (w) { // The font is monospaced
o = FONT_HEADER+(c-fc)*w*p; // Offset for desired symbol
} else { // The font is not monospaced
o = FONT_HEADER; // Starting offset
for (i=0; i<c-fc; i++) { // Going through every symbol
o += font[o]*p + 1; // Adding symbol's width to the offset
}
w = font[o]; // Desired symbol's width
o++; // Offset for desired symbol's data
}
// Draw the symbol
for (i=0; i<w; i++) { // Going through columns
if (x+i > LCDWIDTH) return i-1; // Check if we're out of display size
for (j=0; j<p; j++) { // Going through bytes in single column
s = (h - j*8 >= 8) ? 8 : (h - j*8) % 8; // Clac the amount of pixels in current byte
seg = font[o];
for (b=0; b<s; b++) { // Going through the byte and paint the pixel if the bit is 1
if ((seg>>b) & 1) mct_SetPixel(x+i, y+j*8+b, color);
else if (!transp) mct_SetPixel(x+i, y+j*8+b, !color);
}
o++;
}
//mct_SetPixel(x+i, y, color); // For testing purposes
}
}
return w;
}
// Draw a single character. Transparent background. Returns width of drawn character
uint8_t mct_Char(uint8_t x, uint8_t y, unsigned char c, uint8_t color, const uint8_t *font) {
return mct_CharT(x, y, c, color, font, 1);
}
// Draw a string of characters
void mct_String(uint8_t x, uint8_t y, const char *c, uint8_t color, const uint8_t *font) {
uint8_t w = font[1]; // Font char width
uint8_t h = font[2]; // Font char height
uint8_t s = font[3]; // Font space between characters
if (y+h > LCDHEIGHT) return;
while (c[0] != 0) {
if (x+w > LCDWIDTH) return;
w = mct_Char(x, y, (unsigned char)*c, color, font);
c++;
x += w + s;
}
}

21
STM32_HAL_Lib/mctext.h Normal file
View File

@@ -0,0 +1,21 @@
/*
* mctext.h
*
* Created on: May 16, 2025
* Author: User
*/
#ifndef INC_MCTEXT_H_
#define INC_MCTEXT_H_
#include "stm32f1xx_hal.h"
// Draw a single character. Returns width of drawn character
uint8_t mct_Char(uint8_t x, uint8_t y, unsigned char c, uint8_t color, const uint8_t *font);
// Draw a string of characters
void mct_String(uint8_t x, uint8_t y, const char *c, uint8_t color, const uint8_t *font);
#endif /* INC_MCTEXT_H_ */

View File

@@ -1,10 +1,10 @@
Application: Application:
- Consider migrating to WPF in order to make DPI aware UI - Consider migrating to WPF in order to make DPI aware UI
V Cursor for rectangular selection tool
V Icons for tool buttons
V Tooltips now has keyboard shortcuts info
Functionality: Functionality:
V Allow to add frames to Single-frame "fonts"
V Type a string to see the result (test the font)
V Export image with All characers table
Bugs: Bugs:
- In some cases after switching to a symbol dotPanel mouse move causes "Out of range" exception (history.Pre after width change?) V Fix selection info: change comma to x

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
examples/icons_14x14.mbfont Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 512 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 489 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 357 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 53 KiB

After

Width:  |  Height:  |  Size: 51 KiB

3
temp.txt Normal file
View File

@@ -0,0 +1,3 @@
MainForm.Size: 931; 686
panel1: 472; 31
pnlRightButtons: