Compare commits
13 Commits
Author | SHA1 | Date | |
---|---|---|---|
6c860943a5 | |||
1852c697fc | |||
|
e76132cadb | ||
|
5948948eee | ||
|
c4067410c5 | ||
fe63d1bfab | |||
|
dd3309d8ea | ||
|
8efbd4da55 | ||
|
6a6d8f3e68 | ||
|
a7d052e799 | ||
|
ec9fbc4250 | ||
|
2e217c9a9e | ||
|
d10da7cb20 |
@@ -233,7 +233,12 @@ namespace McBitFont {
|
|||||||
if (com && lines != 1 && fcount > 1) {
|
if (com && lines != 1 && fcount > 1) {
|
||||||
// Comments enabled and other than "1 symbol per line" selected
|
// Comments enabled and other than "1 symbol per line" selected
|
||||||
// Print a symbol comment before its data
|
// Print a symbol comment before its data
|
||||||
output += " // " + f.code.ToString() + " --> " + mainForm.DecodeSymbol(f.code);
|
string character = f.code switch {
|
||||||
|
92 => "Backslash",
|
||||||
|
_ => mainForm.DecodeSymbol(f.code),
|
||||||
|
};
|
||||||
|
string code = mainForm.chkHexCodes.Checked ? "0x" + Convert.ToString(f.code, 16).PadLeft(2, '0').ToUpper() : f.code.ToString();
|
||||||
|
output += " // " + code + " --> " + character;
|
||||||
if (f.note != "" && f.note != null) output += " (" + f.note.ToString() + ")";
|
if (f.note != "" && f.note != null) output += " (" + f.note.ToString() + ")";
|
||||||
output += "\n";
|
output += "\n";
|
||||||
}
|
}
|
||||||
@@ -371,7 +376,12 @@ namespace McBitFont {
|
|||||||
if (!f.Equals(flast) && f.width > 0) output += ",";
|
if (!f.Equals(flast) && f.width > 0) output += ",";
|
||||||
if (com && fcount > 1) {
|
if (com && fcount > 1) {
|
||||||
//...with a comment
|
//...with a comment
|
||||||
output += " // " + f.code.ToString() + " --> " + mainForm.DecodeSymbol(f.code);
|
string character = f.code switch {
|
||||||
|
92 => "Backslash",
|
||||||
|
_ => mainForm.DecodeSymbol(f.code),
|
||||||
|
};
|
||||||
|
string code = mainForm.chkHexCodes.Checked ? "0x" + Convert.ToString(f.code, 16).PadLeft(2, '0').ToUpper() : f.code.ToString();
|
||||||
|
output += " // " + code + " --> " + character;
|
||||||
if (f.note != "" && f.note != null) output += " (" + f.note.ToString() + ")";
|
if (f.note != "" && f.note != null) output += " (" + f.note.ToString() + ")";
|
||||||
}
|
}
|
||||||
output += "\n";
|
output += "\n";
|
||||||
|
10
McBitFont/Form1.Designer.cs
generated
10
McBitFont/Form1.Designer.cs
generated
@@ -1216,13 +1216,13 @@
|
|||||||
//
|
//
|
||||||
cmBaseline.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { tsmiTopline, tsmiMidline, tsmiBaseline });
|
cmBaseline.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { tsmiTopline, tsmiMidline, tsmiBaseline });
|
||||||
cmBaseline.Name = "cmBaseline";
|
cmBaseline.Name = "cmBaseline";
|
||||||
cmBaseline.Size = new System.Drawing.Size(181, 92);
|
cmBaseline.Size = new System.Drawing.Size(121, 70);
|
||||||
//
|
//
|
||||||
// tsmiTopline
|
// tsmiTopline
|
||||||
//
|
//
|
||||||
tsmiTopline.Image = Properties.Resources.fam_top;
|
tsmiTopline.Image = Properties.Resources.fam_top;
|
||||||
tsmiTopline.Name = "tsmiTopline";
|
tsmiTopline.Name = "tsmiTopline";
|
||||||
tsmiTopline.Size = new System.Drawing.Size(180, 22);
|
tsmiTopline.Size = new System.Drawing.Size(120, 22);
|
||||||
tsmiTopline.Text = "Top line";
|
tsmiTopline.Text = "Top line";
|
||||||
tsmiTopline.ToolTipText = "Set top base line";
|
tsmiTopline.ToolTipText = "Set top base line";
|
||||||
tsmiTopline.Click += tsmiTopline_Click;
|
tsmiTopline.Click += tsmiTopline_Click;
|
||||||
@@ -1231,7 +1231,7 @@
|
|||||||
//
|
//
|
||||||
tsmiMidline.Image = Properties.Resources.fam_mid;
|
tsmiMidline.Image = Properties.Resources.fam_mid;
|
||||||
tsmiMidline.Name = "tsmiMidline";
|
tsmiMidline.Name = "tsmiMidline";
|
||||||
tsmiMidline.Size = new System.Drawing.Size(180, 22);
|
tsmiMidline.Size = new System.Drawing.Size(120, 22);
|
||||||
tsmiMidline.Text = "Mid line";
|
tsmiMidline.Text = "Mid line";
|
||||||
tsmiMidline.ToolTipText = "Set middle base line";
|
tsmiMidline.ToolTipText = "Set middle base line";
|
||||||
tsmiMidline.Click += tsmiMidline_Click;
|
tsmiMidline.Click += tsmiMidline_Click;
|
||||||
@@ -1240,7 +1240,7 @@
|
|||||||
//
|
//
|
||||||
tsmiBaseline.Image = Properties.Resources.fam_base;
|
tsmiBaseline.Image = Properties.Resources.fam_base;
|
||||||
tsmiBaseline.Name = "tsmiBaseline";
|
tsmiBaseline.Name = "tsmiBaseline";
|
||||||
tsmiBaseline.Size = new System.Drawing.Size(180, 22);
|
tsmiBaseline.Size = new System.Drawing.Size(120, 22);
|
||||||
tsmiBaseline.Text = "Base line";
|
tsmiBaseline.Text = "Base line";
|
||||||
tsmiBaseline.ToolTipText = "Set bottom (base) line";
|
tsmiBaseline.ToolTipText = "Set bottom (base) line";
|
||||||
tsmiBaseline.Click += tsmiBaseline_Click;
|
tsmiBaseline.Click += tsmiBaseline_Click;
|
||||||
@@ -1358,7 +1358,6 @@
|
|||||||
private System.Windows.Forms.ToolStripMenuItem tsmiMakeVarWidth;
|
private System.Windows.Forms.ToolStripMenuItem tsmiMakeVarWidth;
|
||||||
private System.Windows.Forms.ToolStripMenuItem importImageToolStripMenuItem;
|
private System.Windows.Forms.ToolStripMenuItem importImageToolStripMenuItem;
|
||||||
private System.Windows.Forms.Label label3;
|
private System.Windows.Forms.Label label3;
|
||||||
private System.Windows.Forms.CheckBox chkHexCodes;
|
|
||||||
private System.Windows.Forms.Button btnFill;
|
private System.Windows.Forms.Button btnFill;
|
||||||
private System.Windows.Forms.ToolStripMenuItem FillToolStripMenuItem;
|
private System.Windows.Forms.ToolStripMenuItem FillToolStripMenuItem;
|
||||||
private System.Windows.Forms.CheckBox chkRectSelect;
|
private System.Windows.Forms.CheckBox chkRectSelect;
|
||||||
@@ -1393,6 +1392,7 @@
|
|||||||
private System.Windows.Forms.ToolStripMenuItem tsmiBaseline;
|
private System.Windows.Forms.ToolStripMenuItem tsmiBaseline;
|
||||||
private System.Windows.Forms.ToolStripMenuItem tsmiMidline;
|
private System.Windows.Forms.ToolStripMenuItem tsmiMidline;
|
||||||
private System.Windows.Forms.ToolStripMenuItem tsmiTopline;
|
private System.Windows.Forms.ToolStripMenuItem tsmiTopline;
|
||||||
|
public System.Windows.Forms.CheckBox chkHexCodes;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -63,7 +63,6 @@ namespace McBitFont {
|
|||||||
|
|
||||||
public FrameMiniature f;
|
public FrameMiniature f;
|
||||||
public List<FrameMiniature> frames = new List<FrameMiniature>();
|
public List<FrameMiniature> frames = new List<FrameMiniature>();
|
||||||
//private CanvasHistory history = new();
|
|
||||||
private ChangeHistory history;
|
private ChangeHistory history;
|
||||||
private int cellSize = 10;
|
private int cellSize = 10;
|
||||||
public int dotWidth, dotHeight;
|
public int dotWidth, dotHeight;
|
||||||
@@ -73,7 +72,7 @@ namespace McBitFont {
|
|||||||
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.9";
|
public const string version = "2.10";
|
||||||
public string prjName = "Untitled";
|
public string prjName = "Untitled";
|
||||||
public string prjFileName = "";
|
public string prjFileName = "";
|
||||||
public int codepage = 1251;
|
public int codepage = 1251;
|
||||||
@@ -83,6 +82,7 @@ namespace McBitFont {
|
|||||||
private SetLines set_lines = SetLines.SL_None;
|
private SetLines set_lines = SetLines.SL_None;
|
||||||
private Point selection1, selection2;
|
private Point selection1, selection2;
|
||||||
private Point[,] sidebarLocs = new Point[2, 3];
|
private Point[,] sidebarLocs = new Point[2, 3];
|
||||||
|
private bool frameClipboard = false;
|
||||||
|
|
||||||
|
|
||||||
public MainForm() {
|
public MainForm() {
|
||||||
@@ -475,6 +475,9 @@ namespace McBitFont {
|
|||||||
var rectSel = chkRectSelect.Checked;
|
var rectSel = chkRectSelect.Checked;
|
||||||
bool rectSelUpdated = false;
|
bool rectSelUpdated = false;
|
||||||
|
|
||||||
|
// Set input focus to minilist if any mouse button is held
|
||||||
|
if (!miniList.Focused && e.Button != MouseButtons.None) miniList.Focus();
|
||||||
|
|
||||||
// Drag with middle mouse button
|
// Drag with middle mouse button
|
||||||
if (vScroll.Enabled || hScroll.Enabled) {
|
if (vScroll.Enabled || hScroll.Enabled) {
|
||||||
if (mouseDownMiddle) {
|
if (mouseDownMiddle) {
|
||||||
@@ -1182,47 +1185,58 @@ namespace McBitFont {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void copyToolStripMenuItem_Click(object sender, EventArgs e) {
|
private void copyToolStripMenuItem_Click(object sender, EventArgs e) {
|
||||||
var bb = MessagePackSerializer.Serialize(CopyFrame(f, true));
|
if (tbFrameNote.Focused) {
|
||||||
DataObject clpbObj = new DataObject(clpbFormat.Name, bb);
|
tbFrameNote.Copy();
|
||||||
Clipboard.SetDataObject(clpbObj, true);
|
frameClipboard = false;
|
||||||
|
} else {
|
||||||
|
var bb = MessagePackSerializer.Serialize(CopyFrame(f, true));
|
||||||
|
DataObject clpbObj = new DataObject(clpbFormat.Name, bb);
|
||||||
|
Clipboard.SetDataObject(clpbObj, true);
|
||||||
|
frameClipboard = true;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void pasteToolStripMenuItem_Click(object sender, EventArgs e) {
|
private void pasteToolStripMenuItem_Click(object sender, EventArgs e) {
|
||||||
// Try to read from clipboard
|
if (tbFrameNote.Focused) {
|
||||||
try {
|
if (!frameClipboard) tbFrameNote.Paste();
|
||||||
IDataObject clpbObj = Clipboard.GetDataObject();
|
} else if (frameClipboard) {
|
||||||
byte[] bb = (byte[])clpbObj.GetData(clpbFormat.Name);
|
// Try to read from clipboard
|
||||||
fbuf = MessagePackSerializer.Deserialize<FrameMiniature>(bb);
|
try {
|
||||||
}
|
IDataObject clpbObj = Clipboard.GetDataObject();
|
||||||
catch {
|
byte[] bb = (byte[])clpbObj.GetData(clpbFormat.Name);
|
||||||
return;
|
fbuf = MessagePackSerializer.Deserialize<FrameMiniature>(bb);
|
||||||
}
|
}
|
||||||
|
catch {
|
||||||
int di, dj, wmax, hmax, selw, selh;
|
return;
|
||||||
if (chkRectSelect.Checked) {
|
|
||||||
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.Add(f);
|
int di, dj, wmax, hmax, selw, selh;
|
||||||
CheckHistoryButtons();
|
if (chkRectSelect.Checked) {
|
||||||
dotPanel.Refresh();
|
di = selection1.X;
|
||||||
SetModified();
|
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.Add(f);
|
||||||
|
CheckHistoryButtons();
|
||||||
|
dotPanel.Refresh();
|
||||||
|
SetModified();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void aboutToolStripMenuItem_Click(object sender, EventArgs e) {
|
private void aboutToolStripMenuItem_Click(object sender, EventArgs e) {
|
||||||
@@ -1239,8 +1253,8 @@ namespace McBitFont {
|
|||||||
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();
|
||||||
SetModified(false);
|
|
||||||
}
|
}
|
||||||
|
SetModified(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -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.9.0.0</AssemblyVersion>
|
<AssemblyVersion>2.10.0.0</AssemblyVersion>
|
||||||
<FileVersion>2.9.0.0</FileVersion>
|
<FileVersion>2.10.0.0</FileVersion>
|
||||||
<Version>$(VersionPrefix)2.9.0</Version>
|
<Version>$(VersionPrefix)2.10.0</Version>
|
||||||
<Copyright>Anton Mukhin</Copyright>
|
<Copyright>Anton Mukhin</Copyright>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
|
||||||
|
15
README.md
15
README.md
@@ -2,7 +2,11 @@
|
|||||||
|
|
||||||
McFLY's Bit Font and Image Editor
|
McFLY's Bit Font and Image Editor
|
||||||
|
|
||||||
Features:
|
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)
|
||||||
|
|
||||||
|
**Features:**
|
||||||
- Generate a project based on a font installed in the system
|
- Generate a project based on a font installed in the system
|
||||||
- Basic pixel manipulations: shift, flip, invert, etc...
|
- Basic pixel manipulations: shift, flip, invert, etc...
|
||||||
- Import an image
|
- Import an image
|
||||||
@@ -12,14 +16,15 @@ Features:
|
|||||||
- Export to a PNG image showing all the characters in a table
|
- Export to a PNG image showing all the characters in a table
|
||||||
- Test your font in special dialog
|
- Test your font in special dialog
|
||||||
|
|
||||||
Requires:
|
**Requires:**
|
||||||
- Windows 7+
|
- Windows 7+
|
||||||
- .NET 9
|
- .NET 9
|
||||||
|
|
||||||
Some basic hints on the interface:
|
**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 middle mouse button to drag the canvas
|
||||||
- Hold Shift to constrain painting horizontally
|
- Hold Shift to constrain painting horizontally
|
||||||
- Hold Ctrl to constrain painting vertically
|
- Hold Ctrl to constrain painting vertically
|
||||||
- Mouse Scroll to scroll up and down
|
- Mouse Scroll to scroll up and down
|
||||||
@@ -28,10 +33,6 @@ Some basic hints on the interface:
|
|||||||
- Alt + Scroll to change painting brush size
|
- Alt + Scroll to change painting brush size
|
||||||
- When Rectangle selection tool is active hold Ctrl+Alt to temporary disable it to be able to draw
|
- When Rectangle selection tool is active hold Ctrl+Alt to temporary disable it to be able to draw
|
||||||
|
|
||||||
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.**
|
||||||
|
|
||||||
|
285
STM32_HAL_Lib/fonts.c
Normal file
285
STM32_HAL_Lib/fonts.c
Normal file
@@ -0,0 +1,285 @@
|
|||||||
|
/*
|
||||||
|
ST7565 LCD library
|
||||||
|
|
||||||
|
Anton Mukhin, 2023
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <fonts.h>
|
||||||
|
|
||||||
|
/* Font header map:
|
||||||
|
uint8_t packed; // Is it a packed font?
|
||||||
|
uint8_t width; // Font width in pixels
|
||||||
|
uint8_t height; // Font height in pixels
|
||||||
|
uint8_t space; // Space between characters
|
||||||
|
uint8_t first; // First character code
|
||||||
|
uint8_t last; // Last character code
|
||||||
|
*/
|
||||||
|
|
||||||
|
const uint8_t font_5x7_vw[] = {
|
||||||
|
// Meta header
|
||||||
|
1, // Is it a packed font?
|
||||||
|
0, // Font width in pixels; 0 - variable width
|
||||||
|
7, // Font height in pixels
|
||||||
|
1, // Font space (between symbols) in pixels
|
||||||
|
0, // First character code
|
||||||
|
255, // Last character code
|
||||||
|
// Data:
|
||||||
|
0x00, // 0 -->
|
||||||
|
0x05, 0xff, 0xff, 0xff, 0xff, 0x07, // 1 -->
|
||||||
|
0x05, 0xff, 0x60, 0x30, 0xf8, 0x07, // 2 -->
|
||||||
|
0x00, // 3 -->
|
||||||
|
0x00, // 4 -->
|
||||||
|
0x00, // 5 -->
|
||||||
|
0x00, // 6 -->
|
||||||
|
0x00, // 7 -->
|
||||||
|
0x05, 0x0c, 0x0f, 0xcf, 0xc3, 0x00, // 8 -->
|
||||||
|
0x05, 0x08, 0x96, 0x8f, 0x85, 0x00, // 9 -->
|
||||||
|
0x05, 0x08, 0xa4, 0x1f, 0x89, 0x00, // 10 -->
|
||||||
|
0x05, 0x22, 0x0a, 0x82, 0x22, 0x02, // 11 -->
|
||||||
|
0x05, 0x10, 0x0c, 0x07, 0x03, 0x01, // 12 -->
|
||||||
|
0x05, 0x3e, 0x9f, 0xcf, 0xe7, 0x03, // 13 -->
|
||||||
|
0x05, 0x08, 0x8e, 0x8f, 0x83, 0x00, // 14 -->
|
||||||
|
0x05, 0x1c, 0x9f, 0xcf, 0xc7, 0x01, // 15 -->
|
||||||
|
0x18, 0x1c, 0x0e, 0x87, 0xc3, 0xe1, 0xf8, 0xfe, 0xff, 0xbf, 0x48, 0x04, 0x00, 0xfc, 0xff, 0x7f, 0x1f, 0x87, 0xc3, 0xe1, 0x70, 0x38, // 16 --> Not connected
|
||||||
|
0x18, 0x1c, 0x0e, 0x87, 0xe3, 0xfb, 0xff, 0x83, 0xff, 0x60, 0xb7, 0x3b, 0xfe, 0x8f, 0xbb, 0xdd, 0xf5, 0xdf, 0xc7, 0xe1, 0x70, 0x38, // 17 --> IDC
|
||||||
|
0x18, 0x1c, 0xdf, 0x7f, 0xb8, 0xff, 0x5f, 0xa7, 0xeb, 0xff, 0x79, 0x1d, 0xfc, 0xaf, 0xab, 0xeb, 0x7f, 0xb4, 0xda, 0xfe, 0xfb, 0x38, // 18 --> RS485
|
||||||
|
0x0a, 0x0c, 0x06, 0x00, 0xc0, 0x60, 0x00, 0x00, 0x0c, 0x06, // 19 -->
|
||||||
|
0x00, // 20 -->
|
||||||
|
0x00, // 21 -->
|
||||||
|
0x00, // 22 -->
|
||||||
|
0x00, // 23 -->
|
||||||
|
0x09, 0xc2, 0x70, 0xd4, 0x09, 0xe0, 0x48, 0xfe, 0x10, // 24 -->
|
||||||
|
0x09, 0x00, 0xe1, 0x1f, 0x08, 0x38, 0x15, 0x8b, 0x39, // 25 -->
|
||||||
|
0x00, // 26 -->
|
||||||
|
0x00, // 27 -->
|
||||||
|
0x00, // 28 -->
|
||||||
|
0x00, // 29 -->
|
||||||
|
0x00, // 30 -->
|
||||||
|
0x00, // 31 -->
|
||||||
|
0x01, 0x00, // 32 -->
|
||||||
|
0x01, 0x5f, // 33 --> !
|
||||||
|
0x03, 0x07, 0xc0, 0x01, // 34 --> "
|
||||||
|
0x05, 0x94, 0x3f, 0xe5, 0x4f, 0x01, // 35 --> #
|
||||||
|
0x05, 0x24, 0xd5, 0x5f, 0x25, 0x01, // 36 --> $
|
||||||
|
0x05, 0xa3, 0x09, 0x82, 0x2c, 0x06, // 37 --> %
|
||||||
|
0x05, 0xb6, 0x64, 0x55, 0x04, 0x05, // 38 --> &
|
||||||
|
0x02, 0x85, 0x01, // 39 --> '
|
||||||
|
0x02, 0xbe, 0x20, // 40 --> (
|
||||||
|
0x02, 0x41, 0x1f, // 41 --> )
|
||||||
|
0x05, 0x14, 0x84, 0x0f, 0x41, 0x01, // 42 --> *
|
||||||
|
0x05, 0x08, 0x84, 0x0f, 0x81, 0x00, // 43 --> +
|
||||||
|
0x02, 0x50, 0x18, // 44 --> ,
|
||||||
|
0x05, 0x08, 0x04, 0x02, 0x81, 0x00, // 45 --> -
|
||||||
|
0x02, 0x60, 0x30, // 46 --> .
|
||||||
|
0x05, 0x20, 0x08, 0x82, 0x20, 0x00, // 47 --> /
|
||||||
|
0x05, 0xbe, 0x68, 0xb2, 0xe8, 0x03, // 48 --> 0
|
||||||
|
0x05, 0x00, 0xe1, 0x1f, 0x08, 0x00, // 49 --> 1
|
||||||
|
0x05, 0xc2, 0x70, 0x34, 0x69, 0x04, // 50 --> 2
|
||||||
|
0x05, 0xa1, 0x60, 0x71, 0x19, 0x03, // 51 --> 3
|
||||||
|
0x05, 0x18, 0x8a, 0xe4, 0x0f, 0x01, // 52 --> 4
|
||||||
|
0x05, 0xa7, 0x62, 0xb1, 0x98, 0x03, // 53 --> 5
|
||||||
|
0x05, 0x3c, 0x65, 0x32, 0x09, 0x03, // 54 --> 6
|
||||||
|
0x05, 0x83, 0x40, 0x3c, 0x71, 0x00, // 55 --> 7
|
||||||
|
0x05, 0xb6, 0x64, 0x32, 0x69, 0x03, // 56 --> 8
|
||||||
|
0x05, 0x86, 0x64, 0x32, 0xe5, 0x01, // 57 --> 9
|
||||||
|
0x02, 0x36, 0x1b, // 58 --> :
|
||||||
|
0x02, 0x56, 0x1b, // 59 --> ;
|
||||||
|
0x04, 0x08, 0x8a, 0x28, 0x08, // 60 --> <
|
||||||
|
0x05, 0x14, 0x0a, 0x85, 0x42, 0x01, // 61 --> =
|
||||||
|
0x04, 0x41, 0x11, 0x05, 0x01, // 62 --> >
|
||||||
|
0x05, 0x82, 0x40, 0x34, 0x61, 0x00, // 63 --> ?
|
||||||
|
0x05, 0xb2, 0x64, 0x3e, 0xe8, 0x03, // 64 --> @
|
||||||
|
0x05, 0xfe, 0x48, 0x24, 0xe2, 0x07, // 65 --> A
|
||||||
|
0x05, 0xff, 0x64, 0x32, 0x69, 0x03, // 66 --> B
|
||||||
|
0x05, 0xbe, 0x60, 0x30, 0x28, 0x02, // 67 --> C
|
||||||
|
0x05, 0xff, 0x60, 0x50, 0xc4, 0x01, // 68 --> D
|
||||||
|
0x05, 0xff, 0x64, 0x32, 0x19, 0x04, // 69 --> E
|
||||||
|
0x05, 0xff, 0x44, 0x22, 0x11, 0x00, // 70 --> F
|
||||||
|
0x05, 0xbe, 0x60, 0x32, 0xa9, 0x07, // 71 --> G
|
||||||
|
0x05, 0x7f, 0x04, 0x02, 0xf1, 0x07, // 72 --> H
|
||||||
|
0x03, 0xc1, 0x7f, 0x10, // 73 --> I
|
||||||
|
0x05, 0x20, 0x60, 0xf0, 0x17, 0x00, // 74 --> J
|
||||||
|
0x05, 0x7f, 0x04, 0x45, 0x14, 0x04, // 75 --> K
|
||||||
|
0x05, 0x7f, 0x20, 0x10, 0x08, 0x04, // 76 --> L
|
||||||
|
0x05, 0x7f, 0x01, 0x43, 0xf0, 0x07, // 77 --> M
|
||||||
|
0x05, 0x7f, 0x02, 0x02, 0xf2, 0x07, // 78 --> N
|
||||||
|
0x05, 0xbe, 0x60, 0x30, 0xe8, 0x03, // 79 --> O
|
||||||
|
0x05, 0xff, 0x44, 0x22, 0x61, 0x00, // 80 --> P
|
||||||
|
0x05, 0xbe, 0x60, 0x34, 0xe4, 0x05, // 81 --> Q
|
||||||
|
0x05, 0xff, 0x44, 0x26, 0x65, 0x04, // 82 --> R
|
||||||
|
0x05, 0xc6, 0x64, 0x32, 0x19, 0x03, // 83 --> S
|
||||||
|
0x05, 0x81, 0xc0, 0x3f, 0x10, 0x00, // 84 --> T
|
||||||
|
0x05, 0x3f, 0x20, 0x10, 0xf8, 0x03, // 85 --> U
|
||||||
|
0x05, 0x1f, 0x10, 0x10, 0xf4, 0x01, // 86 --> V
|
||||||
|
0x05, 0x3f, 0x20, 0x0e, 0xf8, 0x03, // 87 --> W
|
||||||
|
0x05, 0x63, 0x0a, 0x82, 0x32, 0x06, // 88 --> X
|
||||||
|
0x05, 0x07, 0x04, 0x1c, 0x71, 0x00, // 89 --> Y
|
||||||
|
0x05, 0xe1, 0x68, 0xb2, 0x38, 0x04, // 90 --> Z
|
||||||
|
0x02, 0xff, 0x20, // 91 --> [
|
||||||
|
0x05, 0x02, 0x02, 0x02, 0x02, 0x02, // 92 --> backslash
|
||||||
|
0x02, 0xc1, 0x3f, // 93 --> ]
|
||||||
|
0x03, 0x04, 0x01, 0x01, // 94 --> ^
|
||||||
|
0x05, 0x40, 0x20, 0x10, 0x08, 0x04, // 95 --> _
|
||||||
|
0x03, 0x01, 0x01, 0x01, // 96 --> `
|
||||||
|
0x04, 0x20, 0x2a, 0x15, 0x0f, // 97 --> a
|
||||||
|
0x04, 0x7f, 0x24, 0x11, 0x07, // 98 --> b
|
||||||
|
0x04, 0x38, 0x22, 0x11, 0x04, // 99 --> c
|
||||||
|
0x04, 0x38, 0x22, 0xf2, 0x0f, // 100 --> d
|
||||||
|
0x04, 0x38, 0x2a, 0x15, 0x03, // 101 --> e
|
||||||
|
0x04, 0x08, 0x7f, 0x42, 0x00, // 102 --> f
|
||||||
|
0x04, 0x0c, 0xa9, 0xd4, 0x07, // 103 --> g
|
||||||
|
0x04, 0x7f, 0x04, 0x01, 0x0f, // 104 --> h
|
||||||
|
0x03, 0xc4, 0x3e, 0x10, // 105 --> i
|
||||||
|
0x04, 0x20, 0x20, 0xb1, 0x07, // 106 --> j
|
||||||
|
0x04, 0x7f, 0x08, 0x8a, 0x08, // 107 --> k
|
||||||
|
0x03, 0xc1, 0x3f, 0x10, // 108 --> l
|
||||||
|
0x05, 0x7c, 0x02, 0x86, 0x80, 0x07, // 109 --> m
|
||||||
|
0x04, 0x7c, 0x04, 0x01, 0x0f, // 110 --> n
|
||||||
|
0x04, 0x38, 0x22, 0x11, 0x07, // 111 --> o
|
||||||
|
0x04, 0x7c, 0x0a, 0x05, 0x01, // 112 --> p
|
||||||
|
0x04, 0x08, 0x0a, 0x86, 0x0f, // 113 --> q
|
||||||
|
0x04, 0x7c, 0x04, 0x01, 0x01, // 114 --> r
|
||||||
|
0x04, 0x48, 0x2a, 0x15, 0x04, // 115 --> s
|
||||||
|
0x04, 0x84, 0x1f, 0x11, 0x04, // 116 --> t
|
||||||
|
0x04, 0x3c, 0x20, 0x88, 0x0f, // 117 --> u
|
||||||
|
0x05, 0x1c, 0x10, 0x10, 0xc4, 0x01, // 118 --> v
|
||||||
|
0x05, 0x3c, 0x20, 0x0e, 0xc8, 0x03, // 119 --> w
|
||||||
|
0x04, 0x6c, 0x08, 0x84, 0x0d, // 120 --> x
|
||||||
|
0x04, 0x0c, 0x28, 0x94, 0x07, // 121 --> y
|
||||||
|
0x04, 0x64, 0x3a, 0x97, 0x09, // 122 --> z
|
||||||
|
0x03, 0x08, 0x5b, 0x10, // 123 --> {
|
||||||
|
0x01, 0x7f, // 124 --> |
|
||||||
|
0x03, 0x41, 0x1b, 0x02, // 125 --> }
|
||||||
|
0x05, 0x08, 0x02, 0x03, 0x41, 0x00, // 126 --> ~
|
||||||
|
0x00, // 127 -->
|
||||||
|
0x05, 0x81, 0x7f, 0x2a, 0x19, 0x03, // 128 --> <20>
|
||||||
|
0x00, // 129 --> <20>
|
||||||
|
0x00, // 130 --> <20>
|
||||||
|
0x00, // 131 --> <20>
|
||||||
|
0x03, 0x70, 0x00, 0x1c, // 132 --> <20>
|
||||||
|
0x05, 0x40, 0x00, 0x10, 0x00, 0x04, // 133 --> <20>
|
||||||
|
0x05, 0x04, 0xc2, 0x9f, 0x40, 0x00, // 134 --> <20>
|
||||||
|
0x05, 0x14, 0xca, 0x9f, 0x42, 0x01, // 135 --> <20>
|
||||||
|
0x05, 0xbe, 0x6a, 0x35, 0x28, 0x02, // 136 --> <20>
|
||||||
|
0x05, 0xa8, 0x7f, 0x2a, 0x65, 0x00, // 137 --> <20>
|
||||||
|
0x00, // 138 --> <20>
|
||||||
|
0x03, 0x10, 0x14, 0x11, // 139 --> <20>
|
||||||
|
0x00, // 140 --> <20>
|
||||||
|
0x05, 0x04, 0xc1, 0x47, 0x40, 0x00, // 141 --> <20>
|
||||||
|
0x05, 0x10, 0x10, 0x1f, 0x04, 0x01, // 142 --> <20>
|
||||||
|
0x05, 0x08, 0x8e, 0x0a, 0x81, 0x00, // 143 --> <20>
|
||||||
|
0x05, 0x08, 0x84, 0x8a, 0x83, 0x00, // 144 --> <20>
|
||||||
|
0x00, // 145 --> <20>
|
||||||
|
0x00, // 146 --> <20>
|
||||||
|
0x00, // 147 --> <20>
|
||||||
|
0x03, 0x07, 0xc0, 0x01, // 148 --> <20>
|
||||||
|
0x03, 0x14, 0x04, 0x05, // 149 --> <20>
|
||||||
|
0x03, 0x08, 0x04, 0x02, // 150 --> <20>
|
||||||
|
0x05, 0x08, 0x04, 0x02, 0x81, 0x00, // 151 --> <20>
|
||||||
|
0x00, // 152 -->
|
||||||
|
0x00, // 153 --> <20>
|
||||||
|
0x00, // 154 --> <20>
|
||||||
|
0x03, 0x22, 0x0a, 0x02, // 155 --> <20>
|
||||||
|
0x00, // 156 --> <20>
|
||||||
|
0x05, 0x78, 0x30, 0x14, 0x49, 0x00, // 157 --> <20>
|
||||||
|
0x05, 0x04, 0x24, 0x14, 0x8c, 0x07, // 158 --> <20>
|
||||||
|
0x05, 0x90, 0x44, 0x61, 0xf0, 0x00, // 159 --> <20>
|
||||||
|
0x05, 0x8f, 0x41, 0x21, 0x01, 0x01, // 160 --> <20>
|
||||||
|
0x00, // 161 --> <20>
|
||||||
|
0x00, // 162 --> <20>
|
||||||
|
0x00, // 163 --> <20>
|
||||||
|
0x05, 0x5d, 0x91, 0x48, 0xd4, 0x05, // 164 --> <20>
|
||||||
|
0x00, // 165 --> <20>
|
||||||
|
0x01, 0x77, // 166 --> <20>
|
||||||
|
0x00, // 167 --> <20>
|
||||||
|
0x05, 0xfe, 0xa5, 0x72, 0x29, 0x04, // 168 --> <20>
|
||||||
|
0x05, 0xbe, 0xf1, 0x7a, 0xed, 0x03, // 169 --> <20>
|
||||||
|
0x05, 0xbe, 0x64, 0x32, 0x29, 0x02, // 170 --> <20>
|
||||||
|
0x05, 0x08, 0x8a, 0x8a, 0x22, 0x02, // 171 --> <20>
|
||||||
|
0x05, 0x08, 0x04, 0x02, 0x81, 0x03, // 172 --> <20>
|
||||||
|
0x00, // 173 --> <20>
|
||||||
|
0x05, 0x9e, 0x50, 0x6d, 0xe5, 0x01, // 174 --> <20>
|
||||||
|
0x05, 0x80, 0x00, 0x3f, 0x00, 0x00, // 175 --> <20>
|
||||||
|
0x05, 0x83, 0x1d, 0x91, 0x88, 0x02, // 176 --> <20>
|
||||||
|
0x03, 0x24, 0x17, 0x09, // 177 --> <20>
|
||||||
|
0x00, // 178 --> <20>
|
||||||
|
0x00, // 179 --> <20>
|
||||||
|
0x00, // 180 --> <20>
|
||||||
|
0x05, 0x7c, 0x08, 0x08, 0xc4, 0x03, // 181 --> <20>
|
||||||
|
0x05, 0x86, 0x7f, 0xe0, 0x1f, 0x00, // 182 --> <20>
|
||||||
|
0x03, 0x1c, 0x0e, 0x07, // 183 --> <20>
|
||||||
|
0x04, 0x39, 0x6a, 0x15, 0x03, // 184 --> <20>
|
||||||
|
0x04, 0x7c, 0x0c, 0x8c, 0x0f, // 185 --> <20>
|
||||||
|
0x04, 0x38, 0x2a, 0x95, 0x08, // 186 --> <20>
|
||||||
|
0x05, 0x22, 0x8a, 0x8a, 0x82, 0x00, // 187 --> <20>
|
||||||
|
0x05, 0xc1, 0x60, 0x37, 0x18, 0x04, // 188 --> <20>
|
||||||
|
0x05, 0xc1, 0x6e, 0xb0, 0x1b, 0x04, // 189 --> <20>
|
||||||
|
0x05, 0xdd, 0x60, 0x37, 0xd8, 0x05, // 190 --> <20>
|
||||||
|
0x05, 0x00, 0x02, 0x9c, 0x00, 0x00, // 191 --> <20>
|
||||||
|
0x05, 0xfe, 0x48, 0x24, 0xe2, 0x07, // 192 --> <20>
|
||||||
|
0x05, 0xff, 0x64, 0x32, 0x39, 0x03, // 193 --> <20>
|
||||||
|
0x05, 0xff, 0x64, 0x32, 0x69, 0x03, // 194 --> <20>
|
||||||
|
0x05, 0xff, 0x40, 0x20, 0x30, 0x00, // 195 --> <20>
|
||||||
|
0x05, 0x60, 0x5f, 0xe8, 0x07, 0x06, // 196 --> <20>
|
||||||
|
0x05, 0xff, 0x64, 0x32, 0x19, 0x04, // 197 --> <20>
|
||||||
|
0x05, 0x77, 0xc4, 0x1f, 0x71, 0x07, // 198 --> <20>
|
||||||
|
0x05, 0xc1, 0x64, 0x32, 0x69, 0x03, // 199 --> <20>
|
||||||
|
0x05, 0x7f, 0x08, 0x82, 0xf0, 0x07, // 200 --> <20>
|
||||||
|
0x05, 0xfe, 0x90, 0x24, 0xe1, 0x07, // 201 --> <20>
|
||||||
|
0x05, 0x7f, 0x04, 0x45, 0x14, 0x04, // 202 --> <20>
|
||||||
|
0x05, 0x40, 0x5f, 0x20, 0xf0, 0x07, // 203 --> <20>
|
||||||
|
0x05, 0x7f, 0x01, 0x43, 0xf0, 0x07, // 204 --> <20>
|
||||||
|
0x05, 0x7f, 0x04, 0x02, 0xf1, 0x07, // 205 --> <20>
|
||||||
|
0x05, 0xbe, 0x60, 0x30, 0xe8, 0x03, // 206 --> <20>
|
||||||
|
0x05, 0xff, 0x40, 0x20, 0xf0, 0x07, // 207 --> <20>
|
||||||
|
0x05, 0xff, 0x44, 0x22, 0x61, 0x00, // 208 --> <20>
|
||||||
|
0x05, 0xbe, 0x60, 0x30, 0x28, 0x02, // 209 --> <20>
|
||||||
|
0x05, 0x81, 0xc0, 0x3f, 0x10, 0x00, // 210 --> <20>
|
||||||
|
0x05, 0x27, 0x24, 0x12, 0xf9, 0x03, // 211 --> <20>
|
||||||
|
0x05, 0x1c, 0xd1, 0x5f, 0xc4, 0x01, // 212 --> <20>
|
||||||
|
0x05, 0x63, 0x1a, 0x82, 0x32, 0x06, // 213 --> <20>
|
||||||
|
0x05, 0x3f, 0x10, 0xe8, 0x07, 0x06, // 214 --> <20>
|
||||||
|
0x05, 0x07, 0x04, 0x02, 0xf1, 0x07, // 215 --> <20>
|
||||||
|
0x05, 0x7f, 0xe0, 0x1f, 0xf8, 0x07, // 216 --> <20>
|
||||||
|
0x05, 0x3f, 0xd0, 0x0f, 0xf4, 0x07, // 217 --> <20>
|
||||||
|
0x05, 0x81, 0x3f, 0x12, 0x09, 0x03, // 218 --> <20>
|
||||||
|
0x05, 0x7f, 0x24, 0x12, 0xf6, 0x07, // 219 --> <20>
|
||||||
|
0x05, 0x7f, 0x24, 0x12, 0x09, 0x03, // 220 --> <20>
|
||||||
|
0x05, 0xa2, 0x60, 0x32, 0xe9, 0x03, // 221 --> <20>
|
||||||
|
0x05, 0x7f, 0x84, 0x2f, 0xe8, 0x03, // 222 --> <20>
|
||||||
|
0x05, 0xc6, 0x54, 0x26, 0xf1, 0x07, // 223 --> <20>
|
||||||
|
0x04, 0x20, 0x2a, 0x15, 0x0f, // 224 --> <20>
|
||||||
|
0x04, 0xbe, 0x62, 0x11, 0x07, // 225 --> <20>
|
||||||
|
0x04, 0x7c, 0x2a, 0x16, 0x04, // 226 --> <20>
|
||||||
|
0x03, 0x7c, 0x02, 0x01, // 227 --> <20>
|
||||||
|
0x05, 0x60, 0x1c, 0x89, 0x07, 0x06, // 228 --> <20>
|
||||||
|
0x04, 0x38, 0x2a, 0x15, 0x03, // 229 --> <20>
|
||||||
|
0x05, 0x6c, 0x08, 0x1f, 0xc2, 0x06, // 230 --> <20>
|
||||||
|
0x04, 0x44, 0x2a, 0x15, 0x05, // 231 --> <20>
|
||||||
|
0x04, 0x7c, 0x10, 0x84, 0x0f, // 232 --> <20>
|
||||||
|
0x04, 0x7c, 0x90, 0xa4, 0x0f, // 233 --> <20>
|
||||||
|
0x04, 0x7c, 0x08, 0x8a, 0x08, // 234 --> <20>
|
||||||
|
0x04, 0x40, 0x1c, 0x81, 0x0f, // 235 --> <20>
|
||||||
|
0x05, 0x7c, 0x04, 0x04, 0xc1, 0x07, // 236 --> <20>
|
||||||
|
0x04, 0x7c, 0x08, 0x84, 0x0f, // 237 --> <20>
|
||||||
|
0x04, 0x38, 0x22, 0x11, 0x07, // 238 --> <20>
|
||||||
|
0x04, 0x7c, 0x02, 0x81, 0x0f, // 239 --> <20>
|
||||||
|
0x04, 0x7c, 0x0a, 0x05, 0x01, // 240 --> <20>
|
||||||
|
0x04, 0x38, 0x22, 0x11, 0x04, // 241 --> <20>
|
||||||
|
0x03, 0x04, 0x3e, 0x01, // 242 --> <20>
|
||||||
|
0x04, 0x0c, 0x28, 0x94, 0x07, // 243 --> <20>
|
||||||
|
0x05, 0x10, 0x14, 0x1f, 0x05, 0x01, // 244 --> <20>
|
||||||
|
0x04, 0x6c, 0x08, 0x84, 0x0d, // 245 --> <20>
|
||||||
|
0x04, 0x3c, 0x10, 0x0f, 0x0c, // 246 --> <20>
|
||||||
|
0x04, 0x0c, 0x08, 0x84, 0x0f, // 247 --> <20>
|
||||||
|
0x05, 0x7c, 0x20, 0x1f, 0xc8, 0x07, // 248 --> <20>
|
||||||
|
0x05, 0x3c, 0x10, 0x0f, 0xc4, 0x07, // 249 --> <20>
|
||||||
|
0x04, 0x04, 0x3e, 0x14, 0x04, // 250 --> <20>
|
||||||
|
0x05, 0x7c, 0x28, 0x14, 0xc4, 0x07, // 251 --> <20>
|
||||||
|
0x04, 0x7c, 0x28, 0x14, 0x04, // 252 --> <20>
|
||||||
|
0x04, 0x44, 0x2a, 0x15, 0x07, // 253 --> <20>
|
||||||
|
0x05, 0x7c, 0x08, 0x8e, 0x88, 0x03, // 254 --> <20>
|
||||||
|
0x04, 0x48, 0x1a, 0x85, 0x0f // 255 --> <20>
|
||||||
|
};
|
||||||
|
|
||||||
|
|
27
STM32_HAL_Lib/fonts.h
Normal file
27
STM32_HAL_Lib/fonts.h
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
/*
|
||||||
|
ST7565 LCD Font library
|
||||||
|
|
||||||
|
Anton Mukhin, 2023
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef INC_FONTS_H_
|
||||||
|
#define INC_FONTS_H_
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
#define FONT_HEADER 6
|
||||||
|
|
||||||
|
/* Font header map:
|
||||||
|
uint8_t packed; // Is it a packed font?
|
||||||
|
uint8_t width; // Font width in pixels
|
||||||
|
uint8_t height; // Font height in pixels
|
||||||
|
uint8_t space; // Space between characters
|
||||||
|
uint8_t first; // First character code
|
||||||
|
uint8_t last; // Last character code
|
||||||
|
*/
|
||||||
|
|
||||||
|
extern const uint8_t font_5x7_vw[];
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* INC_FONTS_H_ */
|
@@ -2,7 +2,7 @@
|
|||||||
* mctext.c
|
* mctext.c
|
||||||
*
|
*
|
||||||
* Created on: May 16, 2025
|
* Created on: May 16, 2025
|
||||||
* Author: User
|
* Author: Anton Mukhin
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
@@ -15,8 +15,10 @@ void (*mct_SetPixel)(uint8_t, uint8_t, uint8_t) = ST7565_SetPixel;
|
|||||||
//=================================================================================//
|
//=================================================================================//
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Draw a single character. Returns width of drawn character
|
// 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 mct_CharTS(uint8_t x, uint8_t y, unsigned char c, uint8_t color, const uint8_t *font, uint8_t transp, uint8_t scale) {
|
||||||
uint8_t pk = font[0]; // Is it a packed font?
|
uint8_t pk = font[0]; // Is it a packed font?
|
||||||
uint8_t w = font[1]; // Font char width
|
uint8_t w = font[1]; // Font char width
|
||||||
uint8_t h = font[2]; // Font char height
|
uint8_t h = font[2]; // Font char height
|
||||||
@@ -25,10 +27,11 @@ uint8_t mct_CharT(uint8_t x, uint8_t y, unsigned char c, uint8_t color, const ui
|
|||||||
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 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
|
uint8_t bps; // Bytes per symbol for packed fonts
|
||||||
uint16_t o; // Current offset
|
uint16_t o; // Current offset
|
||||||
|
uint8_t sx, sy; // To paint scaled pixel
|
||||||
|
|
||||||
if (c < fc || c > lc) return 0;
|
if (c < fc || c > lc) return 0;
|
||||||
if (x > LCDWIDTH) return 0;
|
if (x > LCDWIDTH) return 0;
|
||||||
if (y+h > LCDHEIGHT) return 0;
|
if (y + h * scale > LCDHEIGHT) return 0;
|
||||||
|
|
||||||
// Calc the offset for desired symbol
|
// Calc the offset for desired symbol
|
||||||
if (pk) { // The font is packed
|
if (pk) { // The font is packed
|
||||||
@@ -51,11 +54,19 @@ uint8_t mct_CharT(uint8_t x, uint8_t y, unsigned char c, uint8_t color, const ui
|
|||||||
bps = w*h/8; // Bytes per current symbol
|
bps = w*h/8; // Bytes per current symbol
|
||||||
if ((w*h)%8 > 0) bps++; // Correction for the last byte
|
if ((w*h)%8 > 0) bps++; // Correction for the last byte
|
||||||
b = 0; // bit indexer in "current" byte
|
b = 0; // bit indexer in "current" byte
|
||||||
for (i=0; i<w; i++) { // Going through columns
|
for (i=0; i<w*scale; i+=scale) { // Going through columns
|
||||||
if (x+i > LCDWIDTH) return i-1; // Check if we're out of display size
|
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]
|
for (j=0; j<h*scale; j+=scale) { // Going through rows in column [i]
|
||||||
if (b == 0) seg = font[o];
|
if (b == 0) seg = font[o];
|
||||||
if ((seg>>b) & 1) mct_SetPixel(x+i, y+j, color); // Paint the pixel
|
if ((seg>>b) & 1) {
|
||||||
|
for (sx = 0; sx < scale; sx++)
|
||||||
|
for (sy = 0; sy < scale; sy++)
|
||||||
|
mct_SetPixel(x+i+sx, y+j+sy, color); // Paint the pixel
|
||||||
|
} else if (!transp) {
|
||||||
|
for (sx = 0; sx < scale; sx++)
|
||||||
|
for (sy = 0; sy < scale; sy++)
|
||||||
|
mct_SetPixel(x+i+sx, y+j+sy, !color); // Paint the background pixel
|
||||||
|
}
|
||||||
if (b < 7) b++; else {b = 0; o++;} // Track bits and bytes
|
if (b < 7) b++; else {b = 0; o++;} // Track bits and bytes
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -74,22 +85,34 @@ uint8_t mct_CharT(uint8_t x, uint8_t y, unsigned char c, uint8_t color, const ui
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Draw the symbol
|
// Draw the symbol
|
||||||
for (i=0; i<w; i++) { // Going through columns
|
for (i=0; i<w*scale; i+=scale) { // Going through columns
|
||||||
if (x+i > LCDWIDTH) return i-1; // Check if we're out of display size
|
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
|
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
|
s = (h - j*8 >= 8) ? 8 : (h - j*8) % 8; // Clac the amount of pixels in current byte
|
||||||
|
|
||||||
seg = font[o];
|
seg = font[o];
|
||||||
for (b=0; b<s; b++) { // Going through the byte and paint the pixel if the bit is 1
|
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);
|
if ((seg>>b) & 1) {
|
||||||
else if (!transp) mct_SetPixel(x+i, y+j*8+b, !color);
|
for (sx = 0; sx < scale; sx++)
|
||||||
|
for (sy = 0; sy < scale; sy++)
|
||||||
|
mct_SetPixel(x+i+sx, y+j*8*scale+b*scale+sy, color);
|
||||||
|
} else if (!transp) {
|
||||||
|
for (sx = 0; sx < scale; sx++)
|
||||||
|
for (sy = 0; sy < scale; sy++)
|
||||||
|
mct_SetPixel(x+i+sx, y+j*8*scale+b*scale+sy, !color);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
o++;
|
o++;
|
||||||
}
|
}
|
||||||
//mct_SetPixel(x+i, y, color); // For testing purposes
|
//mct_SetPixel(x+i, y, color); // For testing purposes
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return w;
|
return w*scale;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Draw a single character. Not scaled
|
||||||
|
uint8_t mct_CharT(uint8_t x, uint8_t y, unsigned char c, uint8_t color, const uint8_t *font, uint8_t transp) {
|
||||||
|
return mct_CharTS(x, y, c, color, font, transp, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Draw a single character. Transparent background. Returns width of drawn character
|
// Draw a single character. Transparent background. Returns width of drawn character
|
||||||
@@ -97,17 +120,22 @@ uint8_t mct_Char(uint8_t x, uint8_t y, unsigned char c, uint8_t color, const uin
|
|||||||
return mct_CharT(x, y, c, color, font, 1);
|
return mct_CharT(x, y, c, color, font, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Draw a string of characters
|
// Draw a string of characters. Transparency, Scale
|
||||||
void mct_String(uint8_t x, uint8_t y, const char *c, uint8_t color, const uint8_t *font) {
|
void mct_StringTS(uint8_t x, uint8_t y, const char *c, uint8_t color, const uint8_t *font, uint8_t transp, uint8_t scale) {
|
||||||
uint8_t w = font[1]; // Font char width
|
uint8_t w = font[1]; // Font char width
|
||||||
uint8_t h = font[2]; // Font char height
|
uint8_t h = font[2]; // Font char height
|
||||||
uint8_t s = font[3]; // Font space between characters
|
uint8_t s = font[3]; // Font space between characters
|
||||||
|
|
||||||
if (y+h > LCDHEIGHT) return;
|
if (y+h*scale > LCDHEIGHT) return;
|
||||||
while (c[0] != 0) {
|
while (c[0] != 0) {
|
||||||
if (x+w > LCDWIDTH) return;
|
//if (x+w > LCDWIDTH) return;
|
||||||
w = mct_Char(x, y, (unsigned char)*c, color, font);
|
w = mct_CharTS(x, y, (unsigned char)*c, color, font, transp, scale);
|
||||||
c++;
|
c++;
|
||||||
x += w + s;
|
x += w + s*scale;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Draw a string of characters
|
||||||
|
void mct_String(uint8_t x, uint8_t y, const char *c, uint8_t color, const uint8_t *font) {
|
||||||
|
mct_StringTS(x, y, c, color, font, 1, 1);
|
||||||
|
}
|
||||||
|
@@ -2,19 +2,27 @@
|
|||||||
* mctext.h
|
* mctext.h
|
||||||
*
|
*
|
||||||
* Created on: May 16, 2025
|
* Created on: May 16, 2025
|
||||||
* Author: User
|
* Author: Anton Mukhin
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef INC_MCTEXT_H_
|
#ifndef INC_MCTEXT_H_
|
||||||
#define INC_MCTEXT_H_
|
#define INC_MCTEXT_H_
|
||||||
|
|
||||||
#include "stm32f1xx_hal.h"
|
#include "stm32g0xx_hal.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Draw a single character. Returns width of drawn character
|
// Draw a single character. Returns width of drawn character
|
||||||
|
uint8_t mct_CharTS(uint8_t x, uint8_t y, unsigned char c, uint8_t color, const uint8_t *font, uint8_t transp, uint8_t scale);
|
||||||
|
|
||||||
|
// Draw a single character. Not scaled
|
||||||
|
uint8_t mct_CharT(uint8_t x, uint8_t y, unsigned char c, uint8_t color, const uint8_t *font, uint8_t transp);
|
||||||
|
|
||||||
|
// 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);
|
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. Transparency, Scale
|
||||||
|
void mct_StringTS(uint8_t x, uint8_t y, const char *c, uint8_t color, const uint8_t *font, uint8_t transp, uint8_t scale);
|
||||||
|
|
||||||
// Draw a string of characters
|
// Draw a string of characters
|
||||||
void mct_String(uint8_t x, uint8_t y, const char *c, uint8_t color, const uint8_t *font);
|
void mct_String(uint8_t x, uint8_t y, const char *c, uint8_t color, const uint8_t *font);
|
||||||
|
|
||||||
|
13
TODO.txt
13
TODO.txt
@@ -1,14 +1,11 @@
|
|||||||
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 Special cursor to indicate baseline set
|
V Export comments now respects "Code in Hex" checkbox on the main form
|
||||||
V Special cursor when dragging canvas with middle mouse button
|
|
||||||
|
|
||||||
Functionality:
|
Functionality:
|
||||||
V Show note field in Export comments
|
|
||||||
V When Rectangle selection tool is active hold Ctrl+Alt to temporary disable it to be able to draw
|
|
||||||
V Frame screenshot can be copied to clipboard with some limitations (no transparency)
|
|
||||||
V Beside Baseline, also make top and mid lines
|
|
||||||
|
|
||||||
Bugs:
|
Bugs:
|
||||||
V Fixed "Frame modified" check. It leaves modified flag if user refused to save changes.
|
V Frame modified flag persists when switching to another frame after rejected to save previous frame
|
||||||
V Middle mouse button tries to change selection while dragging canvas with rectSelection tool active
|
V Ctrl-C, Ctrl-V doesn't work in the Note editbox because it tries to copy/paste the frame!
|
||||||
|
V Post "Backslash" instead of \ in comments
|
BIN
examples/Logo - Anton Mukhin_19x19.mbfont
Normal file
BIN
examples/Logo - Anton Mukhin_19x19.mbfont
Normal file
Binary file not shown.
BIN
examples/Logo - Anton Mukhin_40x40.mbfont
Normal file
BIN
examples/Logo - Anton Mukhin_40x40.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.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user