12 Commits

Author SHA1 Message Date
Anton Mukhin c5e440ee44 Update TODO; More examples 2025-05-16 18:04:09 +03:00
Anton Mukhin 34bec25b3d Fix TODO.txt 2023-07-07 12:08:44 +03:00
Anton Mukhin b1acbdd98f Ability to open a project by double-clicking on a file in Explorer 2023-07-07 12:07:14 +03:00
Anton Mukhin 6d5f90aaac TODO added 2023-07-07 10:27:25 +03:00
McFLY 72ad6e5be0 Changed Release version info 2023-07-05 02:36:24 +03:00
McFLY 9d1ca65f34 Added modified check before project save 2023-07-05 02:22:58 +03:00
Anton Mukhin dd3f4f4b4b Merge branch 'fix-broken-resize' 2023-05-17 16:48:11 +03:00
Anton Mukhin 8889b846dc Fixed font resize; Restored 8x16 example; 2023-05-17 16:47:55 +03:00
Anton Mukhin fe0e1dabfd More examples 2023-05-17 15:26:45 +03:00
Anton Mukhin e0786bdb07 Codepage persists through saved projects now; Fixed Baseline draw 2023-05-17 09:42:57 +03:00
McFLY 4fa818f35e More examples 2023-05-17 04:33:04 +03:00
McFLY 11b268a350 Baseline support 2023-05-17 04:32:44 +03:00
14 changed files with 150 additions and 52 deletions
+20 -6
View File
@@ -73,6 +73,7 @@
this.aboutToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.aboutToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.dlgSave = new System.Windows.Forms.SaveFileDialog(); this.dlgSave = new System.Windows.Forms.SaveFileDialog();
this.dlgOpen = new System.Windows.Forms.OpenFileDialog(); this.dlgOpen = new System.Windows.Forms.OpenFileDialog();
this.btnBaseline = new System.Windows.Forms.Button();
((System.ComponentModel.ISupportInitialize)(this.nudX)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.nudX)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.nudY)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.nudY)).BeginInit();
this.panel1.SuspendLayout(); this.panel1.SuspendLayout();
@@ -122,7 +123,7 @@
// nudY // nudY
// //
this.nudY.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); this.nudY.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.nudY.Location = new System.Drawing.Point(717, 53); this.nudY.Location = new System.Drawing.Point(717, 49);
this.nudY.Maximum = new decimal(new int[] { this.nudY.Maximum = new decimal(new int[] {
255, 255,
0, 0,
@@ -157,7 +158,7 @@
// //
this.label2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); this.label2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.label2.AutoSize = true; this.label2.AutoSize = true;
this.label2.Location = new System.Drawing.Point(670, 55); this.label2.Location = new System.Drawing.Point(670, 51);
this.label2.Name = "label2"; this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(41, 13); this.label2.Size = new System.Drawing.Size(41, 13);
this.label2.TabIndex = 4; this.label2.TabIndex = 4;
@@ -202,7 +203,7 @@
// //
this.label4.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); this.label4.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.label4.AutoSize = true; this.label4.AutoSize = true;
this.label4.Location = new System.Drawing.Point(602, 29); this.label4.Location = new System.Drawing.Point(604, 29);
this.label4.Name = "label4"; this.label4.Name = "label4";
this.label4.Size = new System.Drawing.Size(62, 13); this.label4.Size = new System.Drawing.Size(62, 13);
this.label4.TabIndex = 7; this.label4.TabIndex = 7;
@@ -304,7 +305,7 @@
// btnExport // btnExport
// //
this.btnExport.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); this.btnExport.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.btnExport.Location = new System.Drawing.Point(696, 99); this.btnExport.Location = new System.Drawing.Point(696, 109);
this.btnExport.Name = "btnExport"; this.btnExport.Name = "btnExport";
this.btnExport.Size = new System.Drawing.Size(75, 23); this.btnExport.Size = new System.Drawing.Size(75, 23);
this.btnExport.TabIndex = 10; this.btnExport.TabIndex = 10;
@@ -343,7 +344,7 @@
// btnApply // btnApply
// //
this.btnApply.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); this.btnApply.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.btnApply.Location = new System.Drawing.Point(589, 99); this.btnApply.Location = new System.Drawing.Point(615, 109);
this.btnApply.Name = "btnApply"; this.btnApply.Name = "btnApply";
this.btnApply.Size = new System.Drawing.Size(75, 23); this.btnApply.Size = new System.Drawing.Size(75, 23);
this.btnApply.TabIndex = 13; this.btnApply.TabIndex = 13;
@@ -376,7 +377,7 @@
// //
this.label5.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); this.label5.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.label5.AutoSize = true; this.label5.AutoSize = true;
this.label5.Location = new System.Drawing.Point(640, 71); this.label5.Location = new System.Drawing.Point(554, 114);
this.label5.Name = "label5"; this.label5.Name = "label5";
this.label5.Size = new System.Drawing.Size(24, 13); this.label5.Size = new System.Drawing.Size(24, 13);
this.label5.TabIndex = 16; this.label5.TabIndex = 16;
@@ -636,11 +637,23 @@
this.dlgOpen.DefaultExt = "mbf"; this.dlgOpen.DefaultExt = "mbf";
this.dlgOpen.Filter = "McBitFont files|*.mbf|All files|*.*"; this.dlgOpen.Filter = "McBitFont files|*.mbf|All files|*.*";
// //
// btnBaseline
//
this.btnBaseline.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.btnBaseline.Location = new System.Drawing.Point(615, 80);
this.btnBaseline.Name = "btnBaseline";
this.btnBaseline.Size = new System.Drawing.Size(75, 23);
this.btnBaseline.TabIndex = 18;
this.btnBaseline.Text = "Baseline";
this.btnBaseline.UseVisualStyleBackColor = true;
this.btnBaseline.Click += new System.EventHandler(this.btnBaseline_Click);
//
// MainForm // MainForm
// //
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(784, 561); this.ClientSize = new System.Drawing.Size(784, 561);
this.Controls.Add(this.btnBaseline);
this.Controls.Add(this.btnApply); this.Controls.Add(this.btnApply);
this.Controls.Add(this.btnExport); this.Controls.Add(this.btnExport);
this.Controls.Add(this.label5); this.Controls.Add(this.label5);
@@ -725,6 +738,7 @@
private System.Windows.Forms.ToolStripMenuItem appendSymbolToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem appendSymbolToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem copyToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem copyToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem pasteToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem pasteToolStripMenuItem;
private System.Windows.Forms.Button btnBaseline;
} }
} }
+79 -18
View File
@@ -37,6 +37,7 @@ namespace McBitFont {
public struct SaveBlock { public struct SaveBlock {
public bool monospaced; public bool monospaced;
public int codepage; public int codepage;
public int baseline;
public List<FrameMiniature> frames; public List<FrameMiniature> frames;
} }
@@ -50,11 +51,13 @@ namespace McBitFont {
public bool monospaced = false; public bool monospaced = false;
bool modified = false; bool modified = false;
bool prjModified = false; bool prjModified = false;
public const string version = "1.2"; public const string version = "1.6";
public string prjName = "Untitled"; public string prjName = "Untitled";
public int codepage = 1251; public int codepage = 1251;
private FrameMiniature fbuf; private FrameMiniature fbuf;
private bool fbuffer = false; private bool fbuffer = false;
public int baseline = 0;
public bool set_base = false;
public MainForm() { public MainForm() {
InitializeComponent(); InitializeComponent();
@@ -86,6 +89,11 @@ namespace McBitFont {
this.Text = "McBitFont " + version + " - " + prjName; this.Text = "McBitFont " + version + " - " + prjName;
fbuf = new FrameMiniature(0, dotWidth, dotHeight); fbuf = new FrameMiniature(0, dotWidth, dotHeight);
// Chek for arguments
if (Environment.GetCommandLineArgs().Length > 1) {
loadProject(Environment.GetCommandLineArgs()[1]);
}
} }
[DllImport("user32.dll")] [DllImport("user32.dll")]
@@ -138,7 +146,7 @@ namespace McBitFont {
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);
bmp = getMiniPictue(frames[i]); bmp = getMiniPictue(frames[i]);
string s = frames[i].code.ToString(); string s = frames[i].code.ToString().PadLeft(3, '0');
ilMiniatures.Images.RemoveByKey(s); ilMiniatures.Images.RemoveByKey(s);
ilMiniatures.Images.Add(s, (Image)bmp); ilMiniatures.Images.Add(s, (Image)bmp);
miniList.Items[s].ImageKey = s; miniList.Items[s].ImageKey = s;
@@ -155,11 +163,12 @@ namespace McBitFont {
for (int i = 0; i < frames.Count; i++) { for (int i = 0; i < frames.Count; i++) {
frames[i] = frameResize(frames[i], dotWidth, (int)nudY.Value); frames[i] = frameResize(frames[i], dotWidth, (int)nudY.Value);
bmp = getMiniPictue(frames[i]); bmp = getMiniPictue(frames[i]);
string s = frames[i].code.ToString(); string s = frames[i].code.ToString().PadLeft(3, '0');
ilMiniatures.Images.RemoveByKey(s); ilMiniatures.Images.RemoveByKey(s);
ilMiniatures.Images.Add(s, (Image)bmp); ilMiniatures.Images.Add(s, (Image)bmp);
miniList.Items[s].ImageKey = s; miniList.Items[s].ImageKey = s;
} }
if (nudY.Focused) modified = true;
prjModified = true; prjModified = true;
dotResize(dotWidth, (int)nudY.Value); dotResize(dotWidth, (int)nudY.Value);
} }
@@ -275,6 +284,27 @@ namespace McBitFont {
} }
private void dotPanel_MouseMove(object sender, MouseEventArgs e) { private void dotPanel_MouseMove(object sender, MouseEventArgs e) {
Rectangle rect1, rect2;
if (set_base) {
int yy = pixelOffset + baseline * (cellSize + gap) - vScroll.Value - 1;
rect1 = new Rectangle(pixelOffset, yy, w, 2);
baseline = (e.Y - pixelOffset + vScroll.Value) / (cellSize + gap);
if (baseline >= dotHeight) baseline = dotHeight - 1;
if (baseline < 0) baseline = 0;
yy = pixelOffset + baseline * (cellSize + gap) - vScroll.Value - 1;
rect2 = new Rectangle(pixelOffset, yy, w, 2);
dotPanel.Invalidate(rect1);
dotPanel.Invalidate(rect2);
if (e.Button == MouseButtons.Left) {
set_base = false;
return;
}
}
if (e.X >= w || e.X <= pixelOffset || e.Y >= h || e.Y <= pixelOffset) return; if (e.X >= w || e.X <= pixelOffset || e.Y >= h || e.Y <= pixelOffset) return;
int i = (e.X - pixelOffset + hScroll.Value) / (cellSize + gap); int i = (e.X - pixelOffset + hScroll.Value) / (cellSize + gap);
int j = (e.Y - pixelOffset + vScroll.Value) / (cellSize + gap); int j = (e.Y - pixelOffset + vScroll.Value) / (cellSize + gap);
@@ -286,8 +316,9 @@ namespace McBitFont {
f.data[i, j] = true; f.data[i, j] = true;
int x = pixelOffset + i * (cellSize + gap) - hScroll.Value; int x = pixelOffset + i * (cellSize + gap) - hScroll.Value;
int y = pixelOffset + j * (cellSize + gap) - vScroll.Value; int y = pixelOffset + j * (cellSize + gap) - vScroll.Value;
g.FillRectangle(sbb, x, y, cellSize, cellSize);
modified = true; modified = true;
rect1 = new Rectangle(x, y, cellSize, cellSize);
dotPanel.Invalidate(rect1);
} }
if (e.Button == MouseButtons.Right && f.data[i, j]) { if (e.Button == MouseButtons.Right && f.data[i, j]) {
Graphics g = dotPanel.CreateGraphics(); Graphics g = dotPanel.CreateGraphics();
@@ -295,8 +326,9 @@ namespace McBitFont {
f.data[i, j] = false; f.data[i, j] = false;
int x = pixelOffset + i * (cellSize + gap) - hScroll.Value; int x = pixelOffset + i * (cellSize + gap) - hScroll.Value;
int y = pixelOffset + j * (cellSize + gap) - vScroll.Value; int y = pixelOffset + j * (cellSize + gap) - vScroll.Value;
g.FillRectangle(sbw, x, y, cellSize, cellSize);
modified = true; modified = true;
rect1 = new Rectangle(x, y, cellSize, cellSize);
dotPanel.Invalidate(rect1);
} }
} }
@@ -450,9 +482,19 @@ namespace McBitFont {
} }
if (f.data[i, j]) sb = sbb; if (f.data[i, j]) sb = sbb;
else sb = sbw; else sb = sbw;
g.FillRectangle(sb, x, y, cellSize, cellSize); g.FillRectangle(sb, x, (baseline == j ? y+1 : y), cellSize, (baseline == j ? cellSize-1 : cellSize));
} }
} }
if (baseline > 0 && gap > 0) {
x = pixelOffset - hScroll.Value;
y = pixelOffset + baseline * (cellSize + gap) - vScroll.Value;
g.DrawLine(
new Pen(Color.Blue, 2),
x, y,
w, y
);
}
} }
private void exitToolStripMenuItem_Click(object sender, EventArgs e) { private void exitToolStripMenuItem_Click(object sender, EventArgs e) {
@@ -538,10 +580,10 @@ namespace McBitFont {
monospaced = form.rbMono.Checked; monospaced = form.rbMono.Checked;
} }
lblType.Text = monospaced ? "Monospaced" : "Variable width / Single"; lblType.Text = monospaced ? "Monospaced" : "Variable width / Single";
codepage = (form.cbEncoding.SelectedItem as New.EncodingItem).Code;
foreach (FrameMiniature ff in frames) { foreach (FrameMiniature ff in frames) {
var s = ff.code.ToString().PadLeft(3, '0'); var s = ff.code.ToString().PadLeft(3, '0');
ilMiniatures.Images.Add(s, (Image)getMiniPictue(ff)); ilMiniatures.Images.Add(s, (Image)getMiniPictue(ff));
codepage =(form.cbEncoding.SelectedItem as New.EncodingItem).Code;
var sss = decodeSymbol(ff.code); var sss = decodeSymbol(ff.code);
miniList.Items.Add(s, s+' '+append+sss, s); miniList.Items.Add(s, s+' '+append+sss, s);
} }
@@ -550,11 +592,14 @@ namespace McBitFont {
miniList.Refresh(); miniList.Refresh();
form.Dispose(); form.Dispose();
baseline = 0;
prjName = "Untitled"; prjName = "Untitled";
this.Text = "McBitFont " + version + " - " + prjName; this.Text = "McBitFont " + version + " - " + prjName;
modified = false; modified = false;
checkForAdd(); checkForAdd();
fbuffer = false; fbuffer = false;
dotPanel.Refresh();
} }
} }
@@ -592,11 +637,17 @@ namespace McBitFont {
} }
private void saveToolStripMenuItem_Click(object sender, EventArgs e) { private void saveToolStripMenuItem_Click(object sender, EventArgs e) {
if (modified) {
if (MessageBox.Show("Current frame is modified.\nDo you want to apply the changes first?", "The frame was modified!", MessageBoxButtons.YesNo) == DialogResult.Yes) {
saveFrame();
}
}
if (dlgSave.ShowDialog() == DialogResult.OK) { if (dlgSave.ShowDialog() == DialogResult.OK) {
SaveBlock sav; SaveBlock sav;
sav.monospaced = monospaced; sav.monospaced = monospaced;
sav.frames = frames; sav.frames = frames;
sav.codepage = codepage; sav.codepage = codepage;
sav.baseline = baseline;
BinaryFormatter formatter = new BinaryFormatter(); BinaryFormatter formatter = new BinaryFormatter();
using (Stream ms = File.OpenWrite(dlgSave.FileName)) { using (Stream ms = File.OpenWrite(dlgSave.FileName)) {
formatter.Serialize(ms, sav); formatter.Serialize(ms, sav);
@@ -608,31 +659,26 @@ namespace McBitFont {
} }
} }
private void openToolStripMenuItem_Click(object sender, EventArgs e) { private void loadProject(string filename) {
if (prjModified) {
if (MessageBox.Show("The project is modified.\nDo you want to save it first?", "Project was modified!", MessageBoxButtons.YesNo) == DialogResult.Yes) {
saveToolStripMenuItem.PerformClick();
return;
}
}
if (dlgOpen.ShowDialog() == DialogResult.OK) {
SaveBlock sav; SaveBlock sav;
BinaryFormatter formatter = new BinaryFormatter(); BinaryFormatter formatter = new BinaryFormatter();
using (FileStream fs = File.Open(dlgOpen.FileName, FileMode.Open)) { using (FileStream fs = File.Open(filename, FileMode.Open)) {
sav = (SaveBlock)formatter.Deserialize(fs); sav = (SaveBlock)formatter.Deserialize(fs);
fs.Close(); fs.Close();
} }
monospaced = sav.monospaced; monospaced = sav.monospaced;
codepage = sav.codepage; codepage = sav.codepage;
baseline = sav.baseline;
lblType.Text = monospaced ? "Monospaced" : "Variable width / Single"; lblType.Text = monospaced ? "Monospaced" : "Variable width / Single";
frames = sav.frames; frames = sav.frames;
miniList.Items.Clear(); miniList.Items.Clear();
ilMiniatures.Images.Clear(); ilMiniatures.Images.Clear();
foreach (FrameMiniature ff in frames) { foreach (FrameMiniature ff in frames) {
var s = ff.code.ToString().PadLeft(3, '0'); var s = ff.code.ToString().PadLeft(3, '0');
var sss = decodeSymbol(ff.code);
ilMiniatures.Images.Add(s, (Image)getMiniPictue(ff)); ilMiniatures.Images.Add(s, (Image)getMiniPictue(ff));
miniList.Items.Add(s, s + ' ' + (char)ff.code, s); miniList.Items.Add(s, s + ' ' + sss, s);
} }
nudX.ValueChanged -= nudX_ValueChanged; nudX.ValueChanged -= nudX_ValueChanged;
nudY.ValueChanged -= nudY_ValueChanged; nudY.ValueChanged -= nudY_ValueChanged;
@@ -647,11 +693,22 @@ namespace McBitFont {
modified = false; modified = false;
prjModified = false; prjModified = false;
prjName = Path.GetFileNameWithoutExtension(dlgOpen.FileName); prjName = Path.GetFileNameWithoutExtension(filename);
this.Text = "McBitFont " + version + " - " + prjName; this.Text = "McBitFont " + version + " - " + prjName;
checkForAdd(); checkForAdd();
fbuffer = false; fbuffer = false;
} }
private void openToolStripMenuItem_Click(object sender, EventArgs e) {
if (prjModified) {
if (MessageBox.Show("The project is modified.\nDo you want to save it first?", "Project was modified!", MessageBoxButtons.YesNo) == DialogResult.Yes) {
saveToolStripMenuItem.PerformClick();
return;
}
}
if (dlgOpen.ShowDialog() == DialogResult.OK) {
loadProject(dlgOpen.FileName);
}
} }
private void removeSymbolToolStripMenuItem_Click(object sender, EventArgs e) { private void removeSymbolToolStripMenuItem_Click(object sender, EventArgs e) {
@@ -713,6 +770,10 @@ namespace McBitFont {
form.ShowDialog(); form.ShowDialog();
} }
private void btnBaseline_Click(object sender, EventArgs e) {
set_base = !set_base;
}
private void MainForm_FormClosing(object sender, FormClosingEventArgs e) { private void MainForm_FormClosing(object sender, FormClosingEventArgs e) {
if (prjModified) { if (prjModified) {
if (MessageBox.Show("The project is modified.\nAre you sure you want to quit?", "Are you sure?", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No) { if (MessageBox.Show("The project is modified.\nAre you sure you want to quit?", "Are you sure?", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No) {
+2 -2
View File
@@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
// Можно задать все значения или принять номера сборки и редакции по умолчанию // Можно задать все значения или принять номера сборки и редакции по умолчанию
// используя "*", как показано ниже: // используя "*", как показано ниже:
// [assembly: AssemblyVersion("1.0.*")] // [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.2.0.0")] [assembly: AssemblyVersion("1.6.0.0")]
[assembly: AssemblyFileVersion("1.2.0.0")] [assembly: AssemblyFileVersion("1.6.0.0")]
+23
View File
@@ -0,0 +1,23 @@
Application:
- Implement "Save" menu
Functionality:
- Context menu in symbol navigator
- Delete symbols before/after selected
- Shift all symbols on code line (change symbol codes)
- Specify starting code (extends the shift)
- "Only numbers" range in the New dialog
- "Specify range" in the New dialog
- "Single frame", "only numbers" and "specify range" as radio buttons
- Button to Clear/Fill a block
- Undo/Redo
- Image import from a file
- Import from a text array
- Copy-paste to a symbol with different size
- Rectangle selection to mass-paint, shift and mirror pixels
- Change height of variable width fonts with ability to choose which side to add pixels to
- Make it possible to have zero width chars in VarWidth fonts
- "Packed" fonts export
Bugs:
- Every char changes its width to default on VarWidth font height change!
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.