121 Commits
v1.7a ... main

Author SHA1 Message Date
6c860943a5 mctext lib fix 2025-07-19 09:02:49 +03:00
1852c697fc mctext lib update 2025-07-19 08:11:56 +03:00
Anton Mukhin
e76132cadb Update Readme.md 2025-07-18 17:57:19 +03:00
Anton Mukhin
5948948eee Update Readme.md 2025-07-18 17:55:37 +03:00
Anton Mukhin
c4067410c5 Little readme.md update 2025-07-18 17:39:23 +03:00
fe63d1bfab TODO features:
Application:
V Export comments now respects "Code in Hex" checkbox on the main form

Bugs:
V Frame modified flag persists when switching to another frame after rejected to save previous frame
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
2025-07-17 02:21:41 +03:00
Anton Mukhin
dd3309d8ea Update TODO 2025-07-15 14:49:16 +03:00
Anton Mukhin
8efbd4da55 Updated TODO (found another bug) 2025-07-15 14:27:39 +03:00
Anton Mukhin
6a6d8f3e68 Update TODO (found a bug) 2025-07-15 14:23:47 +03:00
Anton Mukhin
a7d052e799 fonts.h and fonts.c example for the library 2025-07-14 17:31:11 +03:00
Anton Mukhin
ec9fbc4250 Update TODO.txt 2025-07-14 11:53:22 +03:00
Anton Mukhin
2e217c9a9e Remove old format examples 2025-07-11 10:14:56 +03:00
Anton Mukhin
d10da7cb20 My logo as example 2025-07-09 18:44:42 +03:00
Anton Mukhin
7db0b6d76e Merge branch 'dev' - v2.9
Changes:

Application:
- Special cursor to indicate baseline set
- Special cursor when dragging canvas with middle mouse button

Functionality:
- Show note field in Export comments
- When Rectangle selection tool is active hold Ctrl+Alt to temporary disable it to be able to draw
- Frame screenshot can be copied to clipboard with some limitations (no transparency)
- Besides Baseline, also make top and mid lines

Bugs:
- Fixed "Frame modified" check. It leaves modified flag if user refused to save changes.
- Middle mouse button tries to change selection while dragging canvas with rectSelection tool active
2025-07-08 17:20:35 +03:00
Anton Mukhin
2930c42260 Screenshots updated 2025-07-08 17:12:10 +03:00
Anton Mukhin
ace97302f2 Tooltip text for new buttons 2025-07-08 17:09:03 +03:00
Anton Mukhin
ad15f08233 TODO features:
Application:
- Special cursor to indicate baseline set
- Special cursor when dragging canvas with middle mouse button

Functionality:
- Beside Baseline, also make top and mid lines

Bugs:
- Middle mouse button tries to change selection while dragging canvas with rectSelection tool active
2025-07-08 17:00:55 +03:00
Anton Mukhin
64531aecf0 TODO update 2025-07-08 12:18:29 +03:00
Anton Mukhin
4dd4743b21 TODO feature: Frame screenshot can be copied to clipboard with some limitations (no transparency) 2025-07-08 12:11:46 +03:00
Anton Mukhin
686ff7b780 Bug fixed: Fixed "Frame modified" check. It leaves modified flag if user refused to save changes. 2025-07-08 10:56:17 +03:00
Anton Mukhin
30729aca2f TODO feature: When Rectangle selection tool is active hold Ctrl+Alt to temporary disable it to be able to draw 2025-07-08 10:49:26 +03:00
Anton Mukhin
6cbc206260 TODO feature: Show note field in Export comments 2025-07-08 10:10:35 +03:00
d70d8d8a3c DOTO update 2025-07-07 00:10:06 +03:00
e5a4baadb7 Merge branch 'dev' - v2.8
Changes:

Functionality:
- Screensot a frame function
- Frame note field to store a frame description
2025-07-03 01:13:05 +03:00
37abcf2c8e TODO feature: Frame note field to store a frame description 2025-07-03 01:03:12 +03:00
2c2a8d6158 Update examples 2025-07-02 23:58:54 +03:00
Anton Mukhin
4115455a54 TODO feature: Screensot a frame function 2025-07-02 20:06:14 +03:00
67be566605 Main window screenshot update 2025-07-01 00:29:39 +03:00
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
Anton Mukhin
4381d6d911 Merge branch 'dev' - v2.3
Changes:

Application:
- UI fixes and changes here and there...

Functionality:
- Allow to add frames to Single-frame "fonts"
- Type a string to see the result (test the font dialog)
- Export image with All characers table
2025-05-29 16:55:26 +03:00
Anton Mukhin
8d34e34326 Some small UI changes and TODO feature: Export image with All characers table 2025-05-29 16:49:25 +03:00
Anton Mukhin
92027a0ee3 Font tester screenshot; Font tester UI fixes 2025-05-29 10:40:13 +03:00
6c32edac6e TODO feature: Type a string to see the result (test the font) 2025-05-29 03:02:42 +03:00
f9c9d440ec TODO feature: Allow to add frames to Single-frame "fonts" 2025-05-28 22:05:52 +03:00
Anton Mukhin
f8b53f2dab TODO updated 2025-05-28 17:34:37 +03:00
Anton Mukhin
2a4b36d368 WIP:
- Working on Alagard_cyr font
- +Minecraft font
- TODO update
2025-05-28 17:15:57 +03:00
083ede5985 One more fint to the examples 2025-05-28 03:22:20 +03:00
5208d40a92 One more fint to the examples 2025-05-28 03:04:42 +03:00
519720f2ef One more fint to the examples 2025-05-28 02:42:24 +03:00
88ee72567e Main window screenshot update 2025-05-27 22:13:41 +03:00
0d923ef8ed Merge branch 'dev' - v2.2:
Changes:

Application:
- Move Select and Baseline buttons right
- Display RectSelection width and width
- Indicate modified project by adding "*" to window caption

Functionality:
- Copy/Paste should be aware of rectangle selection
- Select All function
- Select and Select All shortcuts

Bugs:
- Hostory does not record pastes from clipboard
- Undo/Redo menu availability recalculation does not happen sometimes
2025-05-27 22:04:12 +03:00
Anton Mukhin
5e1a2085cf TODO features:
Application:
- Indicate modified project by adding "*" to window caption

Functionality:
- Copy/Paste should be aware of rectangle selection
- Select All function
- Select and Select All shortcuts

Bugs:
- Hostory does not record pastes from clipboard
- Undo/Redo menu availability recalculation does not happen sometimes
2025-05-27 18:08:11 +03:00
Anton Mukhin
ca21c43926 TODO features:
- Move Select and Baseline buttons right
- Display RectSelection width and width
2025-05-27 12:09:55 +03:00
Anton Mukhin
c10a8e49ff Merge branch 'dev' - v2.1
Bugs fixed:
- EncodingProvider hotfix
- Check if frame changed before exit application
2025-05-27 10:43:14 +03:00
Anton Mukhin
5d17ba5538 Bug fixes:
- EncodingProvider hotfix
- Check if frame changed before exit application
2025-05-27 10:41:44 +03:00
4f80a5df1b Check if frame changed before exit application 2025-05-27 04:27:39 +03:00
37f2bb5eac HotFix: Open file from OS 2025-05-27 03:40:34 +03:00
57d4ecfd54 Merge branch 'dev-migrate' (v2.0):
Changes list:

Application:
V Migrate from .Net Framework 4.7 to .NET 9
V New Save file format! Use McBitFont v1.7 to convert old save files to the new format.
V Better quality pictures in symbol list
V Spinning cursor when application is busy
V Change Menu icons
V Re-arranged menu items
V Option to display codes in Hex numbers
V Make symbol list wider to display 8 characters instead of 7

Functionality:
V Fill canvas button
V Context menu in symbol navigator
V Delete symbols before/after selected
V Shift all symbols on code line (change symbol codes)
V Specify starting code (extends the shift)
V Ability to make monospaced font a variable width one
V Undo/Redo for canvas changes
V Image import from a file
V Import from a text array
V Rectangle selection to mass-paint, shift and mirror pixels etc...
V "Packed" fonts export
V "Bytes total comment in export

Bugs:
V Improper bytes count for 16 or 32 bit numbers export
V Exception on Code Shift when nothing is selected in Symbols List
V Wrongly mark Project as modified on symbol selection
2025-05-27 03:09:54 +03:00
912b15ff3f Little fixes (set baseline UI) 2025-05-27 03:02:09 +03:00
c892e3076d TODO feature: Import from a text array; Little Export fix 2025-05-27 02:44:42 +03:00
295b079dab WIP: text import 2025-05-26 03:12:03 +03:00
d508f0ab35 UI changes... icons etc 2025-05-25 23:37:30 +03:00
68c2e10ab5 WIP: hzzzzzzz.... 2025-05-25 22:48:38 +03:00
d7dfcd3931 UI tidy-ups; Little fixes; New Main window screenshot 2025-05-24 09:42:14 +03:00
b1986c0f28 TODO feature: Rectangle selection to mass-paint, shift and mirror pixels etc... 2025-05-24 08:31:05 +03:00
1034bd98d6 Fill canvas button and several small UI changes/fixes 2025-05-24 00:04:26 +03:00
Anton Mukhin
c1a8d30760 TODO features and Bug fixed:
Application:
- Option to display codes in Hex numbers
- Make symbol list wider to display 8 characters instead of 7

Bugs:
- Wrongly mark Project as modified on symbol selection
2025-05-23 18:48:28 +03:00
Anton Mukhin
ab77f9de21 Little UI fixes 2025-05-23 17:13:32 +03:00
Anton Mukhin
a5e3c8812f README.md update 2025-05-23 16:53:34 +03:00
Anton Mukhin
1bf2de8b43 README.md update 2025-05-23 16:43:56 +03:00
Anton Mukhin
6e48acc3bf Screenshots and README.md updates 2025-05-23 16:41:58 +03:00
Anton Mukhin
6c97aa32d1 Little Form designes changes 2025-05-23 16:41:38 +03:00
Anton Mukhin
a287ddaee7 Bugs fixed:
- Improper bytes count for 16 or 32 bit numbers export
- Exception on Code Shift when nothing is selected in Symbols List
2025-05-23 16:40:44 +03:00
Anton Mukhin
0f2da5542c TODO feature: Image import from a file 2025-05-22 20:32:15 +03:00
Anton Mukhin
ce21792088 TODO feature: Context menu in symbol navigator 2025-05-22 10:30:36 +03:00
8c08c9a897 TODO features:
Application:
- Change Menu icons
- Re-arranged menu items

Functionality:
- Shift all symbols on code line (change symbol codes)
- Specify starting code (extends the shift)
2025-05-22 06:33:10 +03:00
ca8b53ba74 TODO feature: Spinning cursor when application is busy; small history fix 2025-05-22 01:31:16 +03:00
038fd42841 TODO feature: Undo/Redo for canvas changes 2025-05-22 01:10:38 +03:00
Anton Mukhin
ce3b0ddd94 WIP: Undo/Redo 2025-05-21 18:20:39 +03:00
Anton Mukhin
e76778d8fb TODO feature: Ability to make monospaced font a variable width one 2025-05-21 14:05:34 +03:00
Anton Mukhin
19c12754ef TODO feature: Better quality pictures in symbol list 2025-05-21 12:38:27 +03:00
Anton Mukhin
f33b107fdb haxrcorp font updated in examples 2025-05-21 12:17:16 +03:00
Anton Mukhin
4d39b3586e TODO features:
V "Packed" fonts export
V "Bytes total comment in export
2025-05-21 12:16:44 +03:00
Anton Mukhin
5e55c0a5ea WIP: Packed fonts... 2025-05-20 17:08:42 +03:00
Anton Mukhin
ca42d3819f TODO feature: Delete symbols before/after selected 2025-05-20 14:05:42 +03:00
Anton Mukhin
bbfccc2308 Example files: saved in new format. Moved old format ones to a sub-folder 2025-05-20 14:05:18 +03:00
Anton Mukhin
ea3de134d2 Migrated to .NET 9 (with some functionality broken) 2025-05-20 09:12:34 +03:00
193 changed files with 7779 additions and 2270 deletions

1
.gitignore vendored
View File

@@ -5,6 +5,7 @@
## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore
examples/tests/32x32/
examples/tests/PNGout/
# User-specific files
*.rsuser

View File

@@ -24,103 +24,112 @@
/// </summary>
private void InitializeComponent() {
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(About));
this.lblVersion = new System.Windows.Forms.Label();
this.label1 = new System.Windows.Forms.Label();
this.label2 = new System.Windows.Forms.Label();
this.pictureBox1 = new System.Windows.Forms.PictureBox();
this.linkLabel1 = new System.Windows.Forms.LinkLabel();
this.button1 = new System.Windows.Forms.Button();
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
this.SuspendLayout();
lblVersion = new System.Windows.Forms.Label();
label1 = new System.Windows.Forms.Label();
label2 = new System.Windows.Forms.Label();
pictureBox1 = new System.Windows.Forms.PictureBox();
linkLabel1 = new System.Windows.Forms.LinkLabel();
button1 = new System.Windows.Forms.Button();
((System.ComponentModel.ISupportInitialize)pictureBox1).BeginInit();
SuspendLayout();
//
// lblVersion
//
this.lblVersion.AutoSize = true;
this.lblVersion.Location = new System.Drawing.Point(12, 189);
this.lblVersion.Name = "lblVersion";
this.lblVersion.Size = new System.Drawing.Size(63, 13);
this.lblVersion.TabIndex = 0;
this.lblVersion.Text = "Version: 1.1";
lblVersion.AutoSize = true;
lblVersion.Location = new System.Drawing.Point(14, 210);
lblVersion.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
lblVersion.Name = "lblVersion";
lblVersion.Size = new System.Drawing.Size(66, 15);
lblVersion.TabIndex = 0;
lblVersion.Text = "Version: 0.0";
//
// label1
//
this.label1.Font = new System.Drawing.Font("Microsoft Sans Serif", 18F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
this.label1.Location = new System.Drawing.Point(0, 80);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(384, 35);
this.label1.TabIndex = 1;
this.label1.Text = "McBitFont";
this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
label1.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right;
label1.Font = new System.Drawing.Font("Microsoft Sans Serif", 18F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, 204);
label1.Location = new System.Drawing.Point(0, 77);
label1.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
label1.Name = "label1";
label1.Size = new System.Drawing.Size(448, 36);
label1.TabIndex = 1;
label1.Text = "McBitFont";
label1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// label2
//
this.label2.Font = new System.Drawing.Font("Microsoft Sans Serif", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
this.label2.Location = new System.Drawing.Point(0, 115);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(384, 25);
this.label2.TabIndex = 2;
this.label2.Text = "McFLY\'s Bit Font and Image Editor";
this.label2.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
label2.Font = new System.Drawing.Font("Microsoft Sans Serif", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, 204);
label2.Location = new System.Drawing.Point(0, 118);
label2.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
label2.Name = "label2";
label2.Size = new System.Drawing.Size(448, 29);
label2.TabIndex = 2;
label2.Text = "McFLY's Bit Font and Image Editor";
label2.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// pictureBox1
//
this.pictureBox1.Dock = System.Windows.Forms.DockStyle.Top;
this.pictureBox1.Image = global::McBitFont.Properties.Resources.icon_64;
this.pictureBox1.Location = new System.Drawing.Point(0, 0);
this.pictureBox1.Margin = new System.Windows.Forms.Padding(3, 10, 3, 3);
this.pictureBox1.Name = "pictureBox1";
this.pictureBox1.Size = new System.Drawing.Size(384, 75);
this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage;
this.pictureBox1.TabIndex = 3;
this.pictureBox1.TabStop = false;
pictureBox1.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right;
pictureBox1.Image = Properties.Resources.icon_64;
pictureBox1.Location = new System.Drawing.Point(0, 0);
pictureBox1.Margin = new System.Windows.Forms.Padding(4, 12, 4, 3);
pictureBox1.Name = "pictureBox1";
pictureBox1.Size = new System.Drawing.Size(448, 74);
pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage;
pictureBox1.TabIndex = 3;
pictureBox1.TabStop = false;
//
// linkLabel1
//
this.linkLabel1.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
this.linkLabel1.LinkBehavior = System.Windows.Forms.LinkBehavior.HoverUnderline;
this.linkLabel1.Location = new System.Drawing.Point(0, 140);
this.linkLabel1.Name = "linkLabel1";
this.linkLabel1.Size = new System.Drawing.Size(384, 23);
this.linkLabel1.TabIndex = 4;
this.linkLabel1.Text = "mcfly@mcflyer.ru";
this.linkLabel1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
this.linkLabel1.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabel1_LinkClicked);
linkLabel1.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right;
linkLabel1.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 204);
linkLabel1.LinkBehavior = System.Windows.Forms.LinkBehavior.HoverUnderline;
linkLabel1.Location = new System.Drawing.Point(0, 155);
linkLabel1.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
linkLabel1.Name = "linkLabel1";
linkLabel1.Size = new System.Drawing.Size(448, 24);
linkLabel1.TabIndex = 4;
linkLabel1.TabStop = true;
linkLabel1.Text = "mcfly@mcflyer.ru";
linkLabel1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
linkLabel1.LinkClicked += linkLabel1_LinkClicked;
//
// button1
//
this.button1.DialogResult = System.Windows.Forms.DialogResult.OK;
this.button1.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
this.button1.Location = new System.Drawing.Point(146, 175);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(89, 27);
this.button1.TabIndex = 5;
this.button1.Text = "OK";
this.button1.UseVisualStyleBackColor = true;
button1.DialogResult = System.Windows.Forms.DialogResult.OK;
button1.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, 204);
button1.Location = new System.Drawing.Point(170, 194);
button1.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
button1.Name = "button1";
button1.Size = new System.Drawing.Size(104, 31);
button1.TabIndex = 5;
button1.Text = "OK";
button1.UseVisualStyleBackColor = true;
//
// About
//
this.AcceptButton = this.button1;
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(384, 211);
this.Controls.Add(this.button1);
this.Controls.Add(this.linkLabel1);
this.Controls.Add(this.pictureBox1);
this.Controls.Add(this.label2);
this.Controls.Add(this.label1);
this.Controls.Add(this.lblVersion);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = "About";
this.ShowInTaskbar = false;
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "About";
this.Load += new System.EventHandler(this.About_Load);
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
this.ResumeLayout(false);
this.PerformLayout();
AcceptButton = button1;
AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
ClientSize = new System.Drawing.Size(448, 236);
Controls.Add(button1);
Controls.Add(linkLabel1);
Controls.Add(pictureBox1);
Controls.Add(label2);
Controls.Add(label1);
Controls.Add(lblVersion);
FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
Icon = (System.Drawing.Icon)resources.GetObject("$this.Icon");
Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
MaximizeBox = false;
MinimizeBox = false;
Name = "About";
ShowInTaskbar = false;
StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
Text = "About McBitFont";
Load += About_Load;
((System.ComponentModel.ISupportInitialize)pictureBox1).EndInit();
ResumeLayout(false);
PerformLayout();
}

View File

@@ -15,7 +15,7 @@ namespace McBitFont {
}
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) {

View File

@@ -1,17 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
@@ -26,36 +26,36 @@
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->

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;
}
}
}

187
McBitFont/CodeShift.Designer.cs generated Normal file
View File

@@ -0,0 +1,187 @@
namespace McBitFont {
partial class CodeShift {
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing) {
if (disposing && (components != null)) {
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent() {
components = new System.ComponentModel.Container();
rbShiftLeft = new System.Windows.Forms.RadioButton();
rbShiftRight = new System.Windows.Forms.RadioButton();
rbSpecify = new System.Windows.Forms.RadioButton();
lblValue = new System.Windows.Forms.Label();
nudValue = new System.Windows.Forms.NumericUpDown();
btnOK = new System.Windows.Forms.Button();
btnCancel = new System.Windows.Forms.Button();
lblMessage = new System.Windows.Forms.Label();
lblRange = new System.Windows.Forms.Label();
toolTip1 = new System.Windows.Forms.ToolTip(components);
((System.ComponentModel.ISupportInitialize)nudValue).BeginInit();
SuspendLayout();
//
// rbShiftLeft
//
rbShiftLeft.AutoSize = true;
rbShiftLeft.Location = new System.Drawing.Point(12, 12);
rbShiftLeft.Name = "rbShiftLeft";
rbShiftLeft.Size = new System.Drawing.Size(134, 19);
rbShiftLeft.TabIndex = 0;
rbShiftLeft.Text = "Shift Left (towards 0)";
toolTip1.SetToolTip(rbShiftLeft, "Shift all symbols left on the code sequence decreasing codes");
rbShiftLeft.UseVisualStyleBackColor = true;
rbShiftLeft.CheckedChanged += ModeChanged;
//
// rbShiftRight
//
rbShiftRight.AutoSize = true;
rbShiftRight.Location = new System.Drawing.Point(12, 37);
rbShiftRight.Name = "rbShiftRight";
rbShiftRight.Size = new System.Drawing.Size(154, 19);
rbShiftRight.TabIndex = 1;
rbShiftRight.Text = "Shift Right (towards 255)";
toolTip1.SetToolTip(rbShiftRight, "Shift all symbols right on the code sequence increasing codes");
rbShiftRight.UseVisualStyleBackColor = true;
rbShiftRight.CheckedChanged += ModeChanged;
//
// rbSpecify
//
rbSpecify.AutoSize = true;
rbSpecify.Location = new System.Drawing.Point(12, 62);
rbSpecify.Name = "rbSpecify";
rbSpecify.Size = new System.Drawing.Size(118, 19);
rbSpecify.TabIndex = 2;
rbSpecify.Text = "Specify start code";
toolTip1.SetToolTip(rbSpecify, "Specify the code for the first symbol in sequence");
rbSpecify.UseVisualStyleBackColor = true;
rbSpecify.CheckedChanged += ModeChanged;
//
// lblValue
//
lblValue.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right;
lblValue.Location = new System.Drawing.Point(156, 8);
lblValue.Name = "lblValue";
lblValue.Size = new System.Drawing.Size(110, 15);
lblValue.TabIndex = 3;
lblValue.Text = "Shift by:";
lblValue.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// nudValue
//
nudValue.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right;
nudValue.Location = new System.Drawing.Point(185, 27);
nudValue.Maximum = new decimal(new int[] { 254, 0, 0, 0 });
nudValue.Minimum = new decimal(new int[] { 1, 0, 0, 0 });
nudValue.Name = "nudValue";
nudValue.Size = new System.Drawing.Size(50, 23);
nudValue.TabIndex = 5;
nudValue.Value = new decimal(new int[] { 1, 0, 0, 0 });
nudValue.ValueChanged += nudValue_ValueChanged;
//
// btnOK
//
btnOK.Location = new System.Drawing.Point(24, 155);
btnOK.Name = "btnOK";
btnOK.Size = new System.Drawing.Size(88, 27);
btnOK.TabIndex = 6;
btnOK.Text = "OK";
btnOK.UseVisualStyleBackColor = true;
btnOK.Click += btnOK_Click;
//
// btnCancel
//
btnCancel.Location = new System.Drawing.Point(156, 155);
btnCancel.Name = "btnCancel";
btnCancel.Size = new System.Drawing.Size(88, 27);
btnCancel.TabIndex = 7;
btnCancel.Text = "Cancel";
btnCancel.UseVisualStyleBackColor = true;
btnCancel.Click += btnCancel_Click;
//
// lblMessage
//
lblMessage.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right;
lblMessage.Font = new System.Drawing.Font("Segoe UI Semibold", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, 204);
lblMessage.ForeColor = System.Drawing.Color.DarkRed;
lblMessage.Location = new System.Drawing.Point(0, 84);
lblMessage.Name = "lblMessage";
lblMessage.Size = new System.Drawing.Size(268, 68);
lblMessage.TabIndex = 8;
lblMessage.Text = "Message";
lblMessage.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// lblRange
//
lblRange.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right;
lblRange.Location = new System.Drawing.Point(183, 53);
lblRange.Name = "lblRange";
lblRange.Size = new System.Drawing.Size(62, 31);
lblRange.TabIndex = 9;
lblRange.Text = "min: 222\r\nmax: 222";
//
// toolTip1
//
toolTip1.AutoPopDelay = 10000;
toolTip1.InitialDelay = 500;
toolTip1.ReshowDelay = 100;
//
// CodeShift
//
AcceptButton = btnOK;
AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
CancelButton = btnCancel;
ClientSize = new System.Drawing.Size(268, 191);
Controls.Add(lblRange);
Controls.Add(lblMessage);
Controls.Add(btnCancel);
Controls.Add(btnOK);
Controls.Add(nudValue);
Controls.Add(lblValue);
Controls.Add(rbSpecify);
Controls.Add(rbShiftRight);
Controls.Add(rbShiftLeft);
FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
MaximizeBox = false;
MinimizeBox = false;
Name = "CodeShift";
ShowIcon = false;
ShowInTaskbar = false;
StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
Text = "Code Shift";
Load += CodeShift_Load;
((System.ComponentModel.ISupportInitialize)nudValue).EndInit();
ResumeLayout(false);
PerformLayout();
}
#endregion
private System.Windows.Forms.Label lblValue;
private System.Windows.Forms.Button btnOK;
private System.Windows.Forms.Button btnCancel;
public System.Windows.Forms.RadioButton rbShiftLeft;
public System.Windows.Forms.RadioButton rbShiftRight;
public System.Windows.Forms.RadioButton rbSpecify;
public System.Windows.Forms.NumericUpDown nudValue;
private System.Windows.Forms.Label lblMessage;
private System.Windows.Forms.Label lblRange;
private System.Windows.Forms.ToolTip toolTip1;
}
}

99
McBitFont/CodeShift.cs Normal file
View File

@@ -0,0 +1,99 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace McBitFont {
public partial class CodeShift : Form {
private int maxLeft, maxRight, maxSC, count;
public int sc;
public CodeShift(MainForm parent) {
InitializeComponent();
count = parent.frames.Count;
sc = parent.frames.First().code;
maxLeft = sc;
maxRight = 255 - sc - count + 1;
maxSC = sc + maxRight;
}
private void CodeShift_Load(object sender, EventArgs e) {
byte enabled = 7;
string msg = "";
if (maxLeft < 1) {
rbShiftLeft.Enabled = false;
enabled -= 1;
msg += "Cannot shift left: Start code is " + sc.ToString() + ".";
}
if (maxRight < 1) {
rbShiftRight.Enabled = false;
enabled -= 2;
msg += "\nCannot shift right: Last code is " + (sc + count - 1).ToString() + ".";
}
if (maxSC <= 0) {
rbSpecify.Enabled = false;
enabled -= 4;
msg += "\nCannot shift: The font is full." + (sc + count - 1).ToString();
}
lblMessage.Text = msg;
if ((enabled & 1) > 0) rbShiftLeft.Checked = true;
else if ((enabled & 2) > 0) rbShiftRight.Checked = true;
else if ((enabled & 4) > 0) rbSpecify.Checked = true;
else {
btnOK.Enabled = false;
nudValue.Enabled = false;
}
//ModeChanged(rbShiftLeft, null);
//nudValue.Minimum = 1;
//nudValue.Maximum = maxLeft;
}
private void ModeChanged(object sender, EventArgs e) {
if (rbSpecify.Checked) {
lblValue.Text = "New start code:";
nudValue.Minimum = 0;
nudValue.Maximum = maxSC;
nudValue.Value = 0;
lblRange.Text = "min: 0\nmax: " + maxSC.ToString();
} else {
lblValue.Text = "Shift by:";
nudValue.Minimum = 1;
nudValue.Value = 1;
if (rbShiftLeft.Checked) {
nudValue.Maximum = maxLeft;
lblRange.Text = "min: 1\nmax: " + maxLeft.ToString();
}
if (rbShiftRight.Checked) {
nudValue.Maximum = maxRight;
lblRange.Text = "min: 1\nmax: " + maxRight.ToString();
}
}
}
private void nudValue_ValueChanged(object sender, EventArgs e) {
if (rbSpecify.Checked) {
if (nudValue.Value == sc) btnOK.Enabled = false;
else btnOK.Enabled = true;
}
}
private void btnOK_Click(object sender, EventArgs e) {
DialogResult = DialogResult.OK;
}
private void btnCancel_Click(object sender, EventArgs e) {
DialogResult = DialogResult.Cancel;
}
}
}

123
McBitFont/CodeShift.resx Normal file
View File

@@ -0,0 +1,123 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="toolTip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
</root>

View File

@@ -23,331 +23,337 @@
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent() {
this.components = new System.ComponentModel.Container();
this.txtOutput = new System.Windows.Forms.RichTextBox();
this.gbScan = new System.Windows.Forms.GroupBox();
this.cbVDir = new System.Windows.Forms.ComboBox();
this.cbHDir = new System.Windows.Forms.ComboBox();
this.cbOrder = new System.Windows.Forms.ComboBox();
this.gbOptions = new System.Windows.Forms.GroupBox();
this.cbZeroes = new System.Windows.Forms.CheckBox();
this.cbHeader = new System.Windows.Forms.CheckBox();
this.cbComments = new System.Windows.Forms.CheckBox();
this.gbNumbers = new System.Windows.Forms.GroupBox();
this.cbBitOrder = new System.Windows.Forms.ComboBox();
this.cbNumSize = new System.Windows.Forms.ComboBox();
this.cbNumBase = new System.Windows.Forms.ComboBox();
this.gbText = new System.Windows.Forms.GroupBox();
this.lblXLines = new System.Windows.Forms.Label();
this.nudXLines = new System.Windows.Forms.NumericUpDown();
this.cbLines = new System.Windows.Forms.ComboBox();
this.cbFormat = new System.Windows.Forms.ComboBox();
this.btnGenerate = new System.Windows.Forms.Button();
this.btnClose = new System.Windows.Forms.Button();
this.toolTip1 = new System.Windows.Forms.ToolTip(this.components);
this.gbScan.SuspendLayout();
this.gbOptions.SuspendLayout();
this.gbNumbers.SuspendLayout();
this.gbText.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.nudXLines)).BeginInit();
this.SuspendLayout();
components = new System.ComponentModel.Container();
txtOutput = new System.Windows.Forms.RichTextBox();
gbScan = new System.Windows.Forms.GroupBox();
cbVDir = new System.Windows.Forms.ComboBox();
cbHDir = new System.Windows.Forms.ComboBox();
cbOrder = new System.Windows.Forms.ComboBox();
gbOptions = new System.Windows.Forms.GroupBox();
cbPacked = new System.Windows.Forms.CheckBox();
cbZeroes = new System.Windows.Forms.CheckBox();
cbHeader = new System.Windows.Forms.CheckBox();
cbComments = new System.Windows.Forms.CheckBox();
gbNumbers = new System.Windows.Forms.GroupBox();
cbBitOrder = new System.Windows.Forms.ComboBox();
cbNumSize = new System.Windows.Forms.ComboBox();
cbNumBase = new System.Windows.Forms.ComboBox();
gbText = new System.Windows.Forms.GroupBox();
lblXLines = new System.Windows.Forms.Label();
nudXLines = new System.Windows.Forms.NumericUpDown();
cbLines = new System.Windows.Forms.ComboBox();
cbFormat = new System.Windows.Forms.ComboBox();
btnGenerate = new System.Windows.Forms.Button();
btnClose = new System.Windows.Forms.Button();
toolTip1 = new System.Windows.Forms.ToolTip(components);
gbScan.SuspendLayout();
gbOptions.SuspendLayout();
gbNumbers.SuspendLayout();
gbText.SuspendLayout();
((System.ComponentModel.ISupportInitialize)nudXLines).BeginInit();
SuspendLayout();
//
// txtOutput
//
this.txtOutput.AcceptsTab = true;
this.txtOutput.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.txtOutput.AutoWordSelection = true;
this.txtOutput.DetectUrls = false;
this.txtOutput.Font = new System.Drawing.Font("Courier New", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
this.txtOutput.HideSelection = false;
this.txtOutput.Location = new System.Drawing.Point(151, 12);
this.txtOutput.Name = "txtOutput";
this.txtOutput.Size = new System.Drawing.Size(529, 507);
this.txtOutput.TabIndex = 0;
this.txtOutput.Text = "";
this.txtOutput.WordWrap = false;
txtOutput.AcceptsTab = true;
txtOutput.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right;
txtOutput.AutoWordSelection = true;
txtOutput.DetectUrls = false;
txtOutput.Font = new System.Drawing.Font("Courier New", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 204);
txtOutput.HideSelection = false;
txtOutput.Location = new System.Drawing.Point(176, 14);
txtOutput.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
txtOutput.Name = "txtOutput";
txtOutput.Size = new System.Drawing.Size(616, 584);
txtOutput.TabIndex = 0;
txtOutput.Text = "";
txtOutput.WordWrap = false;
//
// gbScan
//
this.gbScan.Controls.Add(this.cbVDir);
this.gbScan.Controls.Add(this.cbHDir);
this.gbScan.Controls.Add(this.cbOrder);
this.gbScan.Location = new System.Drawing.Point(5, 12);
this.gbScan.Name = "gbScan";
this.gbScan.Size = new System.Drawing.Size(140, 105);
this.gbScan.TabIndex = 1;
this.gbScan.TabStop = false;
this.gbScan.Text = "Scan";
gbScan.Controls.Add(cbVDir);
gbScan.Controls.Add(cbHDir);
gbScan.Controls.Add(cbOrder);
gbScan.Location = new System.Drawing.Point(6, 14);
gbScan.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
gbScan.Name = "gbScan";
gbScan.Padding = new System.Windows.Forms.Padding(4, 3, 4, 3);
gbScan.Size = new System.Drawing.Size(163, 121);
gbScan.TabIndex = 1;
gbScan.TabStop = false;
gbScan.Text = "Scan";
//
// cbVDir
//
this.cbVDir.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cbVDir.FormattingEnabled = true;
this.cbVDir.Items.AddRange(new object[] {
"Top to Bottom",
"Bottom to Top"});
this.cbVDir.Location = new System.Drawing.Point(10, 73);
this.cbVDir.Name = "cbVDir";
this.cbVDir.Size = new System.Drawing.Size(121, 21);
this.cbVDir.TabIndex = 2;
cbVDir.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
cbVDir.FormattingEnabled = true;
cbVDir.Items.AddRange(new object[] { "Top to Bottom", "Bottom to Top" });
cbVDir.Location = new System.Drawing.Point(12, 84);
cbVDir.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
cbVDir.Name = "cbVDir";
cbVDir.Size = new System.Drawing.Size(140, 23);
cbVDir.TabIndex = 2;
//
// cbHDir
//
this.cbHDir.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cbHDir.FormattingEnabled = true;
this.cbHDir.Items.AddRange(new object[] {
"Left to Right",
"Right to Left"});
this.cbHDir.Location = new System.Drawing.Point(10, 46);
this.cbHDir.Name = "cbHDir";
this.cbHDir.Size = new System.Drawing.Size(121, 21);
this.cbHDir.TabIndex = 1;
cbHDir.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
cbHDir.FormattingEnabled = true;
cbHDir.Items.AddRange(new object[] { "Left to Right", "Right to Left" });
cbHDir.Location = new System.Drawing.Point(12, 53);
cbHDir.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
cbHDir.Name = "cbHDir";
cbHDir.Size = new System.Drawing.Size(140, 23);
cbHDir.TabIndex = 1;
//
// cbOrder
//
this.cbOrder.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cbOrder.FormattingEnabled = true;
this.cbOrder.Items.AddRange(new object[] {
"Columns",
"Rows"});
this.cbOrder.Location = new System.Drawing.Point(10, 19);
this.cbOrder.Name = "cbOrder";
this.cbOrder.Size = new System.Drawing.Size(121, 21);
this.cbOrder.TabIndex = 0;
this.cbOrder.SelectedIndexChanged += new System.EventHandler(this.cbOrder_SelectedIndexChanged);
cbOrder.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
cbOrder.FormattingEnabled = true;
cbOrder.Items.AddRange(new object[] { "Columns", "Rows" });
cbOrder.Location = new System.Drawing.Point(12, 22);
cbOrder.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
cbOrder.Name = "cbOrder";
cbOrder.Size = new System.Drawing.Size(140, 23);
cbOrder.TabIndex = 0;
cbOrder.SelectedIndexChanged += cbOrder_SelectedIndexChanged;
//
// gbOptions
//
this.gbOptions.Controls.Add(this.cbZeroes);
this.gbOptions.Controls.Add(this.cbHeader);
this.gbOptions.Controls.Add(this.cbComments);
this.gbOptions.Location = new System.Drawing.Point(5, 345);
this.gbOptions.Name = "gbOptions";
this.gbOptions.Size = new System.Drawing.Size(140, 88);
this.gbOptions.TabIndex = 3;
this.gbOptions.TabStop = false;
this.gbOptions.Text = "Options";
gbOptions.Controls.Add(cbPacked);
gbOptions.Controls.Add(cbZeroes);
gbOptions.Controls.Add(cbHeader);
gbOptions.Controls.Add(cbComments);
gbOptions.Location = new System.Drawing.Point(6, 398);
gbOptions.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
gbOptions.Name = "gbOptions";
gbOptions.Padding = new System.Windows.Forms.Padding(4, 3, 4, 3);
gbOptions.Size = new System.Drawing.Size(163, 116);
gbOptions.TabIndex = 3;
gbOptions.TabStop = false;
gbOptions.Text = "Options";
//
// cbPacked
//
cbPacked.AutoSize = true;
cbPacked.Location = new System.Drawing.Point(7, 90);
cbPacked.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
cbPacked.Name = "cbPacked";
cbPacked.Size = new System.Drawing.Size(89, 19);
cbPacked.TabIndex = 3;
cbPacked.Text = "Packed font";
toolTip1.SetToolTip(cbPacked, "Pack symbols utilizing all bits within a symbol");
cbPacked.UseVisualStyleBackColor = true;
cbPacked.CheckedChanged += cbPacked_CheckedChanged;
//
// cbZeroes
//
this.cbZeroes.AutoSize = true;
this.cbZeroes.Checked = true;
this.cbZeroes.CheckState = System.Windows.Forms.CheckState.Checked;
this.cbZeroes.Location = new System.Drawing.Point(6, 65);
this.cbZeroes.Name = "cbZeroes";
this.cbZeroes.Size = new System.Drawing.Size(98, 17);
this.cbZeroes.TabIndex = 2;
this.cbZeroes.Text = "Leading zeroes";
this.toolTip1.SetToolTip(this.cbZeroes, "Add leading zeroes: 0x01 / 0x1");
this.cbZeroes.UseVisualStyleBackColor = true;
cbZeroes.AutoSize = true;
cbZeroes.Checked = true;
cbZeroes.CheckState = System.Windows.Forms.CheckState.Checked;
cbZeroes.Location = new System.Drawing.Point(7, 66);
cbZeroes.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
cbZeroes.Name = "cbZeroes";
cbZeroes.Size = new System.Drawing.Size(104, 19);
cbZeroes.TabIndex = 2;
cbZeroes.Text = "Leading zeroes";
toolTip1.SetToolTip(cbZeroes, "Add leading zeroes: 0x01 / 0x1");
cbZeroes.UseVisualStyleBackColor = true;
//
// cbHeader
//
this.cbHeader.AutoSize = true;
this.cbHeader.Checked = true;
this.cbHeader.CheckState = System.Windows.Forms.CheckState.Checked;
this.cbHeader.Location = new System.Drawing.Point(6, 19);
this.cbHeader.Name = "cbHeader";
this.cbHeader.Size = new System.Drawing.Size(86, 17);
this.cbHeader.TabIndex = 1;
this.cbHeader.Text = "Meta header";
this.toolTip1.SetToolTip(this.cbHeader, "Add meta header with meta data");
this.cbHeader.UseVisualStyleBackColor = true;
this.cbHeader.CheckedChanged += new System.EventHandler(this.cbFormat_SelectedIndexChanged);
cbHeader.AutoSize = true;
cbHeader.Checked = true;
cbHeader.CheckState = System.Windows.Forms.CheckState.Checked;
cbHeader.Location = new System.Drawing.Point(7, 18);
cbHeader.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
cbHeader.Name = "cbHeader";
cbHeader.Size = new System.Drawing.Size(92, 19);
cbHeader.TabIndex = 1;
cbHeader.Text = "Meta header";
toolTip1.SetToolTip(cbHeader, "Add meta header with meta data");
cbHeader.UseVisualStyleBackColor = true;
cbHeader.CheckedChanged += cbFormat_SelectedIndexChanged;
//
// cbComments
//
this.cbComments.AutoSize = true;
this.cbComments.Checked = true;
this.cbComments.CheckState = System.Windows.Forms.CheckState.Checked;
this.cbComments.Location = new System.Drawing.Point(6, 42);
this.cbComments.Name = "cbComments";
this.cbComments.Size = new System.Drawing.Size(75, 17);
this.cbComments.TabIndex = 0;
this.cbComments.Text = "Comments";
this.toolTip1.SetToolTip(this.cbComments, "Add descriptive comments");
this.cbComments.UseVisualStyleBackColor = true;
cbComments.AutoSize = true;
cbComments.Checked = true;
cbComments.CheckState = System.Windows.Forms.CheckState.Checked;
cbComments.Location = new System.Drawing.Point(7, 42);
cbComments.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
cbComments.Name = "cbComments";
cbComments.Size = new System.Drawing.Size(85, 19);
cbComments.TabIndex = 0;
cbComments.Text = "Comments";
toolTip1.SetToolTip(cbComments, "Add descriptive comments");
cbComments.UseVisualStyleBackColor = true;
//
// gbNumbers
//
this.gbNumbers.Controls.Add(this.cbBitOrder);
this.gbNumbers.Controls.Add(this.cbNumSize);
this.gbNumbers.Controls.Add(this.cbNumBase);
this.gbNumbers.Location = new System.Drawing.Point(5, 123);
this.gbNumbers.Name = "gbNumbers";
this.gbNumbers.Size = new System.Drawing.Size(140, 105);
this.gbNumbers.TabIndex = 4;
this.gbNumbers.TabStop = false;
this.gbNumbers.Text = "Numbers";
gbNumbers.Controls.Add(cbBitOrder);
gbNumbers.Controls.Add(cbNumSize);
gbNumbers.Controls.Add(cbNumBase);
gbNumbers.Location = new System.Drawing.Point(6, 142);
gbNumbers.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
gbNumbers.Name = "gbNumbers";
gbNumbers.Padding = new System.Windows.Forms.Padding(4, 3, 4, 3);
gbNumbers.Size = new System.Drawing.Size(163, 121);
gbNumbers.TabIndex = 4;
gbNumbers.TabStop = false;
gbNumbers.Text = "Numbers";
//
// cbBitOrder
//
this.cbBitOrder.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cbBitOrder.FormattingEnabled = true;
this.cbBitOrder.Items.AddRange(new object[] {
"LSB Top",
"MSB Top"});
this.cbBitOrder.Location = new System.Drawing.Point(10, 19);
this.cbBitOrder.Name = "cbBitOrder";
this.cbBitOrder.Size = new System.Drawing.Size(121, 21);
this.cbBitOrder.TabIndex = 5;
cbBitOrder.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
cbBitOrder.FormattingEnabled = true;
cbBitOrder.Items.AddRange(new object[] { "LSB Top", "MSB Top" });
cbBitOrder.Location = new System.Drawing.Point(12, 22);
cbBitOrder.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
cbBitOrder.Name = "cbBitOrder";
cbBitOrder.Size = new System.Drawing.Size(140, 23);
cbBitOrder.TabIndex = 5;
//
// cbNumSize
//
this.cbNumSize.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cbNumSize.FormattingEnabled = true;
this.cbNumSize.Items.AddRange(new object[] {
"8 bit",
"16 bit",
"32 bit"});
this.cbNumSize.Location = new System.Drawing.Point(10, 73);
this.cbNumSize.Name = "cbNumSize";
this.cbNumSize.Size = new System.Drawing.Size(121, 21);
this.cbNumSize.TabIndex = 4;
cbNumSize.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
cbNumSize.FormattingEnabled = true;
cbNumSize.Items.AddRange(new object[] { "8 bit", "16 bit", "32 bit" });
cbNumSize.Location = new System.Drawing.Point(12, 84);
cbNumSize.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
cbNumSize.Name = "cbNumSize";
cbNumSize.Size = new System.Drawing.Size(140, 23);
cbNumSize.TabIndex = 4;
//
// cbNumBase
//
this.cbNumBase.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cbNumBase.FormattingEnabled = true;
this.cbNumBase.Items.AddRange(new object[] {
"Hexadecimal",
"Binary",
"Decimal"});
this.cbNumBase.Location = new System.Drawing.Point(10, 46);
this.cbNumBase.Name = "cbNumBase";
this.cbNumBase.Size = new System.Drawing.Size(121, 21);
this.cbNumBase.TabIndex = 3;
cbNumBase.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
cbNumBase.FormattingEnabled = true;
cbNumBase.Items.AddRange(new object[] { "Hexadecimal", "Binary", "Decimal" });
cbNumBase.Location = new System.Drawing.Point(12, 53);
cbNumBase.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
cbNumBase.Name = "cbNumBase";
cbNumBase.Size = new System.Drawing.Size(140, 23);
cbNumBase.TabIndex = 3;
//
// gbText
//
this.gbText.Controls.Add(this.lblXLines);
this.gbText.Controls.Add(this.nudXLines);
this.gbText.Controls.Add(this.cbLines);
this.gbText.Controls.Add(this.cbFormat);
this.gbText.Location = new System.Drawing.Point(5, 234);
this.gbText.Name = "gbText";
this.gbText.Size = new System.Drawing.Size(140, 105);
this.gbText.TabIndex = 5;
this.gbText.TabStop = false;
this.gbText.Text = "Text format";
gbText.Controls.Add(lblXLines);
gbText.Controls.Add(nudXLines);
gbText.Controls.Add(cbLines);
gbText.Controls.Add(cbFormat);
gbText.Location = new System.Drawing.Point(6, 270);
gbText.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
gbText.Name = "gbText";
gbText.Padding = new System.Windows.Forms.Padding(4, 3, 4, 3);
gbText.Size = new System.Drawing.Size(163, 121);
gbText.TabIndex = 5;
gbText.TabStop = false;
gbText.Text = "Text format";
//
// lblXLines
//
this.lblXLines.AutoSize = true;
this.lblXLines.Enabled = false;
this.lblXLines.Location = new System.Drawing.Point(10, 76);
this.lblXLines.Name = "lblXLines";
this.lblXLines.Size = new System.Drawing.Size(60, 13);
this.lblXLines.TabIndex = 9;
this.lblXLines.Text = "X numbers:";
lblXLines.AutoSize = true;
lblXLines.Enabled = false;
lblXLines.Location = new System.Drawing.Point(12, 88);
lblXLines.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
lblXLines.Name = "lblXLines";
lblXLines.Size = new System.Drawing.Size(67, 15);
lblXLines.TabIndex = 9;
lblXLines.Text = "X numbers:";
//
// nudXLines
//
this.nudXLines.Enabled = false;
this.nudXLines.Location = new System.Drawing.Point(76, 73);
this.nudXLines.Maximum = new decimal(new int[] {
64,
0,
0,
0});
this.nudXLines.Minimum = new decimal(new int[] {
1,
0,
0,
0});
this.nudXLines.Name = "nudXLines";
this.nudXLines.Size = new System.Drawing.Size(55, 20);
this.nudXLines.TabIndex = 8;
this.nudXLines.Value = new decimal(new int[] {
8,
0,
0,
0});
nudXLines.Enabled = false;
nudXLines.Location = new System.Drawing.Point(89, 84);
nudXLines.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
nudXLines.Maximum = new decimal(new int[] { 64, 0, 0, 0 });
nudXLines.Minimum = new decimal(new int[] { 1, 0, 0, 0 });
nudXLines.Name = "nudXLines";
nudXLines.Size = new System.Drawing.Size(64, 23);
nudXLines.TabIndex = 8;
nudXLines.Value = new decimal(new int[] { 8, 0, 0, 0 });
//
// cbLines
//
this.cbLines.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cbLines.FormattingEnabled = true;
this.cbLines.Items.AddRange(new object[] {
"1 Column per line",
"1 Symbol per line",
"X Numbers per line"});
this.cbLines.Location = new System.Drawing.Point(10, 46);
this.cbLines.Name = "cbLines";
this.cbLines.Size = new System.Drawing.Size(121, 21);
this.cbLines.TabIndex = 7;
this.cbLines.SelectedIndexChanged += new System.EventHandler(this.cbLines_SelectedIndexChanged);
cbLines.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
cbLines.FormattingEnabled = true;
cbLines.Items.AddRange(new object[] { "1 Column per line", "1 Symbol per line", "X Numbers per line" });
cbLines.Location = new System.Drawing.Point(12, 53);
cbLines.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
cbLines.Name = "cbLines";
cbLines.Size = new System.Drawing.Size(140, 23);
cbLines.TabIndex = 7;
cbLines.SelectedIndexChanged += cbLines_SelectedIndexChanged;
//
// cbFormat
//
this.cbFormat.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cbFormat.FormattingEnabled = true;
this.cbFormat.Items.AddRange(new object[] {
"1D C array",
"2D C array",
"Comma separated"});
this.cbFormat.Location = new System.Drawing.Point(10, 19);
this.cbFormat.Name = "cbFormat";
this.cbFormat.Size = new System.Drawing.Size(121, 21);
this.cbFormat.TabIndex = 6;
this.cbFormat.SelectedIndexChanged += new System.EventHandler(this.cbFormat_SelectedIndexChanged);
cbFormat.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
cbFormat.FormattingEnabled = true;
cbFormat.Items.AddRange(new object[] { "1D C array", "2D C array", "Comma separated" });
cbFormat.Location = new System.Drawing.Point(12, 22);
cbFormat.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
cbFormat.Name = "cbFormat";
cbFormat.Size = new System.Drawing.Size(140, 23);
cbFormat.TabIndex = 6;
cbFormat.SelectedIndexChanged += cbFormat_SelectedIndexChanged;
//
// btnGenerate
//
this.btnGenerate.Location = new System.Drawing.Point(5, 439);
this.btnGenerate.Name = "btnGenerate";
this.btnGenerate.Size = new System.Drawing.Size(140, 30);
this.btnGenerate.TabIndex = 6;
this.btnGenerate.Text = "Generate";
this.btnGenerate.UseVisualStyleBackColor = true;
this.btnGenerate.Click += new System.EventHandler(this.btnGenerate_Click);
btnGenerate.Location = new System.Drawing.Point(6, 520);
btnGenerate.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
btnGenerate.Name = "btnGenerate";
btnGenerate.Size = new System.Drawing.Size(163, 35);
btnGenerate.TabIndex = 6;
btnGenerate.Text = "Generate";
btnGenerate.UseVisualStyleBackColor = true;
btnGenerate.Click += btnGenerate_Click;
//
// btnClose
//
this.btnClose.DialogResult = System.Windows.Forms.DialogResult.Cancel;
this.btnClose.Location = new System.Drawing.Point(5, 487);
this.btnClose.Name = "btnClose";
this.btnClose.Size = new System.Drawing.Size(140, 30);
this.btnClose.TabIndex = 7;
this.btnClose.Text = "Close";
this.btnClose.UseVisualStyleBackColor = true;
btnClose.DialogResult = System.Windows.Forms.DialogResult.Cancel;
btnClose.Location = new System.Drawing.Point(6, 562);
btnClose.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
btnClose.Name = "btnClose";
btnClose.Size = new System.Drawing.Size(163, 35);
btnClose.TabIndex = 7;
btnClose.Text = "Close";
btnClose.UseVisualStyleBackColor = true;
//
// toolTip1
//
this.toolTip1.AutoPopDelay = 10000;
this.toolTip1.InitialDelay = 500;
this.toolTip1.ReshowDelay = 100;
toolTip1.AutoPopDelay = 10000;
toolTip1.InitialDelay = 500;
toolTip1.ReshowDelay = 100;
//
// Export
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.CancelButton = this.btnClose;
this.ClientSize = new System.Drawing.Size(692, 531);
this.Controls.Add(this.btnClose);
this.Controls.Add(this.btnGenerate);
this.Controls.Add(this.gbText);
this.Controls.Add(this.gbNumbers);
this.Controls.Add(this.gbOptions);
this.Controls.Add(this.gbScan);
this.Controls.Add(this.txtOutput);
this.MinimumSize = new System.Drawing.Size(700, 570);
this.Name = "Export";
this.ShowIcon = false;
this.ShowInTaskbar = false;
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "Export";
this.Load += new System.EventHandler(this.Export_Load);
this.gbScan.ResumeLayout(false);
this.gbOptions.ResumeLayout(false);
this.gbOptions.PerformLayout();
this.gbNumbers.ResumeLayout(false);
this.gbText.ResumeLayout(false);
this.gbText.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.nudXLines)).EndInit();
this.ResumeLayout(false);
AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
CancelButton = btnClose;
ClientSize = new System.Drawing.Size(807, 613);
Controls.Add(btnClose);
Controls.Add(btnGenerate);
Controls.Add(gbText);
Controls.Add(gbNumbers);
Controls.Add(gbOptions);
Controls.Add(gbScan);
Controls.Add(txtOutput);
Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
MinimumSize = new System.Drawing.Size(814, 652);
Name = "Export";
ShowIcon = false;
ShowInTaskbar = false;
StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
Text = "Export";
Load += Export_Load;
gbScan.ResumeLayout(false);
gbOptions.ResumeLayout(false);
gbOptions.PerformLayout();
gbNumbers.ResumeLayout(false);
gbText.ResumeLayout(false);
gbText.PerformLayout();
((System.ComponentModel.ISupportInitialize)nudXLines).EndInit();
ResumeLayout(false);
}
@@ -374,5 +380,6 @@
private System.Windows.Forms.Button btnClose;
private System.Windows.Forms.CheckBox cbZeroes;
private System.Windows.Forms.ToolTip toolTip1;
private System.Windows.Forms.CheckBox cbPacked;
}
}

View File

@@ -33,25 +33,26 @@ namespace McBitFont {
}
}
comments.Add("header",
"// File generated by McBitFont " + MainForm.version + "\n" +
"// File generated by McBitFont v" + MainForm.version + "\n" +
"// made by Anton Mukhin (mcfly@mcflyer.ru)\n" +
"//\n" +
"//\n"
);
comments.Add("scan_order", "// Scan order: ");
comments.Add("scan_hdir", "// Horizontal direction: ");
comments.Add("scan_vdir", "// Vertical direction: ");
comments.Add("scan_order", "// Scan order: ");
comments.Add("scan_hdir", "// Horizontal direction: ");
comments.Add("scan_vdir", "// Vertical direction: ");
comments.Add("num_bit_order", "// Bit order: ");
comments.Add("num_base", "// Numbers base: ");
comments.Add("num_size", "// Numbers size: ");
comments.Add("num_base", "// Numbers base: ");
comments.Add("num_size", "// Numbers size: ");
comments.Add("text_format", "// Text format: ");
comments.Add("text_lines", "// Numbers per line: ");
comments.Add("text_format", "// Text format: ");
comments.Add("text_lines", "// Numbers per line: ");
comments.Add("font_header_map",
"// Font header map:\n" +
"// width; // Font width in pixels\n" +
"// packed; // Flag for packed font\n" +
"// width; // Font width in pixels (0 - variable width)\n" +
"// height; // Font height in pixels\n" +
"// space; // Font space in pixels\n" +
"// first; // First character code\n" +
@@ -76,9 +77,11 @@ namespace McBitFont {
private void btnGenerate_Click(object sender, EventArgs e) {
string output = "";
int bTotal = 0;
txtOutput.Clear();
bool com = cbComments.Checked;
bool hdr = cbHeader.Checked;
bool packed = cbPacked.Checked;
int lines = cbLines.SelectedIndex;
int format = cbFormat.SelectedIndex;
bool mono = mainForm.monospaced;
@@ -89,7 +92,7 @@ namespace McBitFont {
if (com) {
// Header comments
output += comments["header"];
//output += comments["header"];
output += comments["scan_order"] + cbOrder.Text + "\n";
output += comments["scan_hdir"] + cbHDir.Text + "\n";
output += comments["scan_vdir"] + cbVDir.Text + "\n\n";
@@ -156,7 +159,7 @@ namespace McBitFont {
}
}
// C data type selection
ushort bits = 8;
string dataType = "uint8_t";
switch (cbNumSize.SelectedIndex) {
@@ -197,30 +200,32 @@ namespace McBitFont {
}
// Array definition
if ( format == 0 || format == 1 ) output += "const " + dataType + " " + mainForm.prjName + "[]" + (format==1?"[]":"") + " = {\n";
if (format == 0 || format == 1) output += "const " + dataType + " " + mainForm.prjName + "[]" + (format == 1 ? "[]" : "") + " = {\n";
// Should we add the meta header?
if (hdr) {
output +=
" // Meta header\n" +
" " + (mono ? mainForm.frames.First().width.ToString() : "0") + ", // Font width in pixels; 0 - variable width\n" +
" " + (packed ? "1" : "0") + ", // Is it a packed font?\n" +
" " + (mono || mainForm.frames.Count == 1 ? mainForm.frames.First().width.ToString() : "0") + ", // Font width in pixels; 0 - variable width\n" +
" " + mainForm.frames.First().height.ToString() + ", // Font height in pixels\n" +
" 0, // Font space (between symbols) in pixels\n" +
" " + mainForm.frames.First().code.ToString() + ", // First character code\n" +
" " + mainForm.frames.Last().code.ToString() + ", // Last character code\n"
;
bTotal += 6*bits / 8; // Count bytes total
}
// Brackets for 2D array definition
string obracket = format == 1 ? "{ " : "";
string cbracket = format == 1 ? " }" : "";
// Number output counter
int numcount = 0;
if (com) output += " // Data:\n";
MainForm.FrameMiniature flast = mainForm.frames.Last();
foreach ( MainForm.FrameMiniature f in mainForm.frames) {
foreach (MainForm.FrameMiniature f in mainForm.frames) {
// For each frame
uint b = 0; // current number bits
int t, x, y; // t - calculated bit number; x - actual x; y - actual y
@@ -228,7 +233,14 @@ namespace McBitFont {
if (com && lines != 1 && fcount > 1) {
// Comments enabled and other than "1 symbol per line" selected
// Print a symbol comment before its data
output += " // " + f.code.ToString() + " --> " + mainForm.decodeSymbol(f.code) + "\n";
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() + ")";
output += "\n";
}
if (lines == 1) {
// "1 symbol per line" - new line offset
@@ -241,6 +253,7 @@ namespace McBitFont {
// Should we post a prefix to the number?
pref = (!cbZeroes.Checked && ((f.width < 10 && nbase == 16) || (f.width < 2 && nbase == 2))) ? "" : prefix;
output += (lines != 1 ? " " : "") + pref + Convert.ToString(f.width, nbase).PadLeft(pad, '0') + (lines != 0 ? (lines == 1 ? ", " : "") : ",\n");
bTotal += bits / 8; // Count bytes total
// Count posted numbers
numcount++;
if (lines != 2) numcount = 0;
@@ -289,6 +302,7 @@ namespace McBitFont {
}
}
t = jdir < 0 ? bits+1 : -1;
for (int i = imin; i != imax; i += idir) {
if (lines == 0) {
// "Column/Row per line" - new line offset
@@ -296,8 +310,13 @@ namespace McBitFont {
numcount = 0;
}
for (int j = jmin; j != jmax; j += jdir) {
if (jdir < 0) t = jmin - j;
else t = j;
if (packed) {
t += jdir;
if (t < 0 || t % bits == 0) t = jdir < 0 ? bits : 0;
} else {
if (jdir < 0) t = jmin - j;
else t = j;
}
if (t % bits == 0) b = 0;
if (cbOrder.SelectedIndex == 0) { // Columns
@@ -314,9 +333,9 @@ namespace McBitFont {
// MSB on top/Left
b |= (uint)(1 << (bits - (t % bits) - 1));
}
}
if (((t + 1) % bits == 0) || j + jdir == jmax) {
if (((t + 1) % bits == 0) || (j + jdir == jmax && !packed)) {
// we have filled a number with bits - let's post it
// should we post a comma before the number?
@@ -325,6 +344,7 @@ namespace McBitFont {
// should we post a prefix to the number?
pref = (!cbZeroes.Checked && ((b < 10 && nbase == 16) || (b < 2 && nbase == 2))) ? "" : prefix;
output += pref + Convert.ToString(b, nbase).PadLeft(pad, '0');
bTotal += bits / 8; // Count bytes total
// count posted numbers
numcount++;
@@ -337,15 +357,32 @@ namespace McBitFont {
}
if (lines == 0) {
// "Column/Row per line" - closing line
output += cbracket + ((i+idir==imax) && f.Equals(flast) ? "" : ",") + "\n";
output += cbracket + ((i + idir == imax) && f.Equals(flast) ? "" : ",") + "\n";
}
}
if (packed && (f.width * f.height) % bits > 0) {
// post leftovers in last number
// should we post a prefix to the number?
pref = (!cbZeroes.Checked && ((b < 10 && nbase == 16) || (b < 2 && nbase == 2))) ? "" : prefix;
output += (numcount > 0? ", " : "") + pref + Convert.ToString(b, nbase).PadLeft(pad, '0');
bTotal += bits / 8; // Count bytes total
// count posted numbers
numcount++;
}
if (lines == 1) {
// "1 symbol per line" - closing line
if (!f.Equals(flast) && f.width > 0) output += ",";
if (com && fcount > 1) {
//...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() + ")";
}
output += "\n";
}
@@ -359,6 +396,12 @@ namespace McBitFont {
// Close array definition
output += "};\n";
// Add header and bytes total counter
if (com) {
output = "// Bytes total: " + bTotal.ToString() + "\n" + output;
output = comments["header"] + output;
}
txtOutput.Text = output;
txtOutput.SelectionStart = 0;
txtOutput.ScrollToCaret();
@@ -382,6 +425,10 @@ namespace McBitFont {
}
private void cbLines_SelectedIndexChanged(object sender, EventArgs e) {
if (cbLines.SelectedIndex == 0 && cbPacked.Checked) {
MessageBox.Show("Cannot make one line per column/row in packed font as there are bytes used in several columns/rows!\n(Setting text format to 1 Symbol per line)", "No 1 Symbol per line for packed fonts!", MessageBoxButtons.OK, MessageBoxIcon.Information);
cbLines.SelectedIndex = 1;
}
if (cbLines.SelectedIndex == 2) {
nudXLines.Enabled = true;
lblXLines.Enabled = true;
@@ -390,5 +437,9 @@ namespace McBitFont {
lblXLines.Enabled = false;
}
}
private void cbPacked_CheckedChanged(object sender, EventArgs e) {
if (cbPacked.Checked && cbLines.SelectedIndex == 0) cbLines.SelectedIndex = 1;
}
}
}

View File

@@ -1,17 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
@@ -26,36 +26,36 @@
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
@@ -120,7 +120,4 @@
<metadata name="toolTip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<metadata name="toolTip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
</root>

216
McBitFont/FontTester.Designer.cs generated Normal file
View File

@@ -0,0 +1,216 @@
namespace McBitFont {
partial class FontTester {
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing) {
if (disposing && (components != null)) {
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent() {
components = new System.ComponentModel.Container();
lblSpace = new System.Windows.Forms.Label();
nudSpace = new System.Windows.Forms.NumericUpDown();
lblText = new System.Windows.Forms.Label();
tbText = new System.Windows.Forms.TextBox();
dotPanel = new System.Windows.Forms.Panel();
vScroll = new System.Windows.Forms.VScrollBar();
hScroll = new System.Windows.Forms.HScrollBar();
lblZoom = new System.Windows.Forms.Label();
cbZoom = new System.Windows.Forms.ComboBox();
toolTip1 = new System.Windows.Forms.ToolTip(components);
btnCopy = new System.Windows.Forms.Button();
chkBaseline = new System.Windows.Forms.CheckBox();
((System.ComponentModel.ISupportInitialize)nudSpace).BeginInit();
SuspendLayout();
//
// lblSpace
//
lblSpace.AutoSize = true;
lblSpace.Location = new System.Drawing.Point(12, 9);
lblSpace.Name = "lblSpace";
lblSpace.Size = new System.Drawing.Size(41, 15);
lblSpace.TabIndex = 0;
lblSpace.Text = "Space:";
//
// nudSpace
//
nudSpace.Location = new System.Drawing.Point(59, 6);
nudSpace.Maximum = new decimal(new int[] { 255, 0, 0, 0 });
nudSpace.Name = "nudSpace";
nudSpace.Size = new System.Drawing.Size(40, 23);
nudSpace.TabIndex = 2;
toolTip1.SetToolTip(nudSpace, "Space between symbols in pixels");
nudSpace.Value = new decimal(new int[] { 1, 0, 0, 0 });
nudSpace.ValueChanged += Scrolling;
//
// lblText
//
lblText.AutoSize = true;
lblText.Location = new System.Drawing.Point(12, 37);
lblText.Name = "lblText";
lblText.Size = new System.Drawing.Size(138, 15);
lblText.TabIndex = 2;
lblText.Text = "Text to test the font with:";
//
// tbText
//
tbText.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right;
tbText.Font = new System.Drawing.Font("Segoe UI Semibold", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, 204);
tbText.Location = new System.Drawing.Point(12, 55);
tbText.Name = "tbText";
tbText.Size = new System.Drawing.Size(260, 29);
tbText.TabIndex = 1;
toolTip1.SetToolTip(tbText, "Text to test the font with");
tbText.TextChanged += Text_Changed;
//
// dotPanel
//
dotPanel.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right;
dotPanel.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
dotPanel.BackColor = System.Drawing.Color.White;
dotPanel.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
dotPanel.Location = new System.Drawing.Point(12, 90);
dotPanel.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
dotPanel.Name = "dotPanel";
dotPanel.Size = new System.Drawing.Size(238, 98);
dotPanel.TabIndex = 4;
dotPanel.Paint += PaintPixels;
dotPanel.Resize += ZoomChanged;
//
// vScroll
//
vScroll.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right;
vScroll.LargeChange = 25;
vScroll.Location = new System.Drawing.Point(251, 84);
vScroll.Name = "vScroll";
vScroll.Size = new System.Drawing.Size(21, 104);
vScroll.TabIndex = 17;
vScroll.ValueChanged += Scrolling;
//
// hScroll
//
hScroll.Anchor = System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right;
hScroll.Location = new System.Drawing.Point(12, 188);
hScroll.Name = "hScroll";
hScroll.Size = new System.Drawing.Size(238, 21);
hScroll.TabIndex = 16;
hScroll.ValueChanged += Scrolling;
//
// lblZoom
//
lblZoom.AutoSize = true;
lblZoom.Location = new System.Drawing.Point(173, 9);
lblZoom.Name = "lblZoom";
lblZoom.Size = new System.Drawing.Size(42, 15);
lblZoom.TabIndex = 18;
lblZoom.Text = "Zoom:";
//
// cbZoom
//
cbZoom.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
cbZoom.FormattingEnabled = true;
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.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
cbZoom.Name = "cbZoom";
cbZoom.Size = new System.Drawing.Size(50, 23);
cbZoom.TabIndex = 3;
cbZoom.TabStop = false;
toolTip1.SetToolTip(cbZoom, "Zoom level");
cbZoom.SelectedIndexChanged += ZoomChanged;
//
// toolTip1
//
toolTip1.AutoPopDelay = 10000;
toolTip1.InitialDelay = 500;
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.AutoSize = true;
chkBaseline.Location = new System.Drawing.Point(203, 36);
chkBaseline.Name = "chkBaseline";
chkBaseline.Size = new System.Drawing.Size(69, 19);
chkBaseline.TabIndex = 4;
chkBaseline.Text = "Baseline";
chkBaseline.UseVisualStyleBackColor = true;
chkBaseline.CheckedChanged += Scrolling;
//
// FontTester
//
AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
ClientSize = new System.Drawing.Size(284, 251);
Controls.Add(btnCopy);
Controls.Add(chkBaseline);
Controls.Add(cbZoom);
Controls.Add(lblZoom);
Controls.Add(vScroll);
Controls.Add(hScroll);
Controls.Add(dotPanel);
Controls.Add(tbText);
Controls.Add(lblText);
Controls.Add(nudSpace);
Controls.Add(lblSpace);
MaximizeBox = false;
MinimizeBox = false;
MinimumSize = new System.Drawing.Size(300, 290);
Name = "FontTester";
ShowIcon = false;
ShowInTaskbar = false;
StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
Text = "Font Tester";
Load += FontTester_Load;
Resize += Form_Resize;
((System.ComponentModel.ISupportInitialize)nudSpace).EndInit();
ResumeLayout(false);
PerformLayout();
}
#endregion
private System.Windows.Forms.Label lblSpace;
private System.Windows.Forms.NumericUpDown nudSpace;
private System.Windows.Forms.Label lblText;
private System.Windows.Forms.TextBox tbText;
private System.Windows.Forms.Panel dotPanel;
private System.Windows.Forms.VScrollBar vScroll;
private System.Windows.Forms.HScrollBar hScroll;
private System.Windows.Forms.Label lblZoom;
private System.Windows.Forms.ToolTip toolTip1;
private System.Windows.Forms.ComboBox cbZoom;
private System.Windows.Forms.CheckBox chkBaseline;
private System.Windows.Forms.Button btnCopy;
}
}

205
McBitFont/FontTester.cs Normal file
View File

@@ -0,0 +1,205 @@
using MessagePack;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace McBitFont {
public partial class FontTester : Form {
private int codepage = 1251;
private int height;
private List<MainForm.FrameMiniature> frames;
private int baseline;
private readonly int absentWidth = 5;
private readonly int pixelOffset = 5;
private int baselineThickness = 1;
private byte[] encoded = [];
private int cellSize;
private int width;
private readonly DataFormats.Format clpbFormat = DataFormats.GetFormat("McBitFontFrame");
public FontTester(int codepage, int height, int baseline, List<MainForm.FrameMiniature> frames) {
InitializeComponent();
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
this.codepage = codepage;
this.height = height;
this.baseline = baseline;
this.frames = frames;
}
private void FontTester_Load(object sender, EventArgs e) {
cbZoom.SelectedIndex = 2;
//cbZoom.SelectedIndexChanged += ZoomChanged;
dotPanel.MouseWheel += new MouseEventHandler(DotPanel_MouseWheel);
}
private void PaintPixels(object sender, PaintEventArgs e) {
Graphics g = dotPanel.CreateGraphics();
SolidBrush sbb = new SolidBrush(Color.Black);
SolidBrush sbw = new SolidBrush(Color.White);
SolidBrush sbp = new SolidBrush(Color.LightPink);
SolidBrush sb;
Pen blackPen = new(Color.Black);
Pen bluePen = new(Color.FromArgb(100, 20, 20, 200), baselineThickness);
int x, y, i, j;
// Sycle through ecoded bytes of test text
int space = (int)nudSpace.Value;
int index = 0;
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++) {
x = pixelOffset + (index + i) * cellSize - hScroll.Value;
for (j = 0; j < f[0].height; j++) {
y = pixelOffset + j * cellSize - vScroll.Value;
// Fill the cell with color
if (f[0].data[i, j]) sb = sbb;
else sb = sbw;
g.FillRectangle(sb, x, y, cellSize, cellSize);
}
}
index += (f[0].width > 0 ? f[0].width + space : 0);
} else {
blackPen.Width = cellSize;
blackPen.Alignment = System.Drawing.Drawing2D.PenAlignment.Inset;
x = pixelOffset + index * cellSize - hScroll.Value;
y = pixelOffset - vScroll.Value;
g.DrawRectangle(blackPen, x, y + cellSize, absentWidth * cellSize, (height - 2) * cellSize);
g.FillRectangle(sbp, x + cellSize, y + 2 * cellSize, (absentWidth - 2) * cellSize, (height - 4) * cellSize);
index += 5 + space;
}
}
// Draw baseline
if (chkBaseline.Checked && baseline > 0) {
x = pixelOffset - hScroll.Value;
y = pixelOffset + baseline * cellSize - vScroll.Value;
g.DrawLine(bluePen, x, y, dotPanel.Width - 2 * pixelOffset, y);
}
}
private void Text_Changed(object sender, EventArgs e) {
int space = (int)nudSpace.Value;
encoded = Encoding.GetEncoding(codepage).GetBytes(tbText.Text);
width = space > 0 ? space : 1;
for (int c = 0; c < encoded.Length; c++) {
var f = frames.FindAll(x => x.code == encoded[c]);
width += (f.Count == 1 ? f[0].width : absentWidth) + space;
}
dotPanel.Invalidate();
}
private void ZoomChanged(object sender, EventArgs e) {
cellSize = Convert.ToInt32(cbZoom.Text);
int w = pixelOffset + width * cellSize;
int h = pixelOffset + height * cellSize;
if (w <= dotPanel.Width) {
hScroll.Enabled = false;
hScroll.Value = 0;
} else {
hScroll.Maximum = w - dotPanel.Width + 12;
hScroll.Minimum = 0;
hScroll.Enabled = true;
}
if (h <= dotPanel.Height) {
vScroll.Enabled = false;
vScroll.Value = 0;
} else {
vScroll.Maximum = h - dotPanel.Height + 12;
vScroll.Minimum = 0;
vScroll.Enabled = true;
}
// Baseline thickness calc
baselineThickness = cellSize / 5;
if (baselineThickness > 5) baselineThickness = 5;
if (baselineThickness < 1) baselineThickness = 1;
dotPanel.Refresh();
}
private void DotPanel_MouseWheel(object sender, MouseEventArgs e) {
int t = e.Delta / 120;
if (e.Delta == 0) return;
if (ModifierKeys.HasFlag(Keys.Control)) {
t += cbZoom.SelectedIndex;
if (t > cbZoom.Items.Count - 1) return;
if (t < 0) return;
cbZoom.SelectedIndex = t;
} else if (ModifierKeys.HasFlag(Keys.Shift)) {
if (hScroll.Enabled) {
t = t * -1 * cellSize + hScroll.Value;
if (t < hScroll.Minimum) t = hScroll.Minimum;
if (t > hScroll.Maximum) t = hScroll.Maximum;
hScroll.Value = t;
}
} else {
if (vScroll.Enabled) {
t = t * -1 * cellSize + vScroll.Value;
if (t < vScroll.Minimum) t = vScroll.Minimum;
if (t > vScroll.Maximum) t = vScroll.Maximum;
vScroll.Value = t;
}
}
}
private void Scrolling(object sender, EventArgs e) {
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);
}
}
}

123
McBitFont/FontTester.resx Normal file
View File

@@ -0,0 +1,123 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="toolTip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
</root>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,17 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
@@ -26,36 +26,36 @@
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
@@ -120,6 +120,9 @@
<metadata name="toolTip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>436, 17</value>
</metadata>
<metadata name="cmMinilist.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>534, 17</value>
</metadata>
<metadata name="ilMiniatures.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
@@ -132,6 +135,12 @@
<metadata name="dlgOpen.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>336, 17</value>
</metadata>
<metadata name="dlgSavePNG.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>644, 17</value>
</metadata>
<metadata name="cmBaseline.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>763, 17</value>
</metadata>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>

169
McBitFont/FrameScreenshot.Designer.cs generated Normal file
View File

@@ -0,0 +1,169 @@
namespace McBitFont {
partial class FrameScreenshot {
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing) {
if (disposing && (components != null)) {
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent() {
components = new System.ComponentModel.Container();
btnClose = new System.Windows.Forms.Button();
btnOK = new System.Windows.Forms.Button();
toolTip1 = new System.Windows.Forms.ToolTip(components);
nudUpscale = new System.Windows.Forms.NumericUpDown();
chkTransparent = new System.Windows.Forms.CheckBox();
chkBlackBG = new System.Windows.Forms.CheckBox();
btnCopy = new System.Windows.Forms.Button();
dlgSaveImage = new System.Windows.Forms.SaveFileDialog();
lblUpscale = new System.Windows.Forms.Label();
((System.ComponentModel.ISupportInitialize)nudUpscale).BeginInit();
SuspendLayout();
//
// btnClose
//
btnClose.Location = new System.Drawing.Point(234, 67);
btnClose.Name = "btnClose";
btnClose.Size = new System.Drawing.Size(88, 27);
btnClose.TabIndex = 3;
btnClose.Text = "Close";
toolTip1.SetToolTip(btnClose, "Close the dialog");
btnClose.UseVisualStyleBackColor = true;
btnClose.Click += btnClose_Click;
//
// btnOK
//
btnOK.Image = Properties.Resources.Famfamfam_Silk_Disk_16;
btnOK.ImageAlign = System.Drawing.ContentAlignment.MiddleRight;
btnOK.Location = new System.Drawing.Point(12, 67);
btnOK.Name = "btnOK";
btnOK.Size = new System.Drawing.Size(88, 27);
btnOK.TabIndex = 1;
btnOK.Text = "Save";
btnOK.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText;
toolTip1.SetToolTip(btnOK, "Save to file");
btnOK.UseVisualStyleBackColor = true;
btnOK.Click += btnOK_Click;
//
// toolTip1
//
toolTip1.AutoPopDelay = 10000;
toolTip1.InitialDelay = 500;
toolTip1.ReshowDelay = 100;
//
// nudUpscale
//
nudUpscale.Location = new System.Drawing.Point(71, 27);
nudUpscale.Maximum = new decimal(new int[] { 255, 0, 0, 0 });
nudUpscale.Minimum = new decimal(new int[] { 1, 0, 0, 0 });
nudUpscale.Name = "nudUpscale";
nudUpscale.Size = new System.Drawing.Size(51, 23);
nudUpscale.TabIndex = 2;
toolTip1.SetToolTip(nudUpscale, "Pixel upscale factor (4 means that for each frame pixel there will be 4x4 pixels generated)");
nudUpscale.Value = new decimal(new int[] { 4, 0, 0, 0 });
//
// chkTransparent
//
chkTransparent.AutoSize = true;
chkTransparent.Location = new System.Drawing.Point(144, 18);
chkTransparent.Name = "chkTransparent";
chkTransparent.Size = new System.Drawing.Size(155, 19);
chkTransparent.TabIndex = 5;
chkTransparent.Text = "Transparent background";
toolTip1.SetToolTip(chkTransparent, "Make background transparent (Doesn't work with clipboard - background will be gray)");
chkTransparent.UseVisualStyleBackColor = true;
chkTransparent.CheckedChanged += chkTransparent_CheckedChanged;
//
// chkBlackBG
//
chkBlackBG.AutoSize = true;
chkBlackBG.Enabled = false;
chkBlackBG.Location = new System.Drawing.Point(144, 35);
chkBlackBG.Name = "chkBlackBG";
chkBlackBG.Size = new System.Drawing.Size(132, 19);
chkBlackBG.TabIndex = 6;
chkBlackBG.Text = "Background is black";
toolTip1.SetToolTip(chkBlackBG, "White color is considered as background by default. Check this to invert that");
chkBlackBG.UseVisualStyleBackColor = true;
//
// btnCopy
//
btnCopy.Image = Properties.Resources.Famfamfam_Silk_Page_copy_16;
btnCopy.ImageAlign = System.Drawing.ContentAlignment.MiddleRight;
btnCopy.Location = new System.Drawing.Point(122, 67);
btnCopy.Name = "btnCopy";
btnCopy.Size = new System.Drawing.Size(88, 27);
btnCopy.TabIndex = 7;
btnCopy.Text = "Copy";
btnCopy.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText;
toolTip1.SetToolTip(btnCopy, "Copy to clipboard");
btnCopy.UseVisualStyleBackColor = true;
btnCopy.Click += btnCopy_Click;
//
// dlgSaveImage
//
dlgSaveImage.DefaultExt = "png";
dlgSaveImage.Filter = "PNG Image|*.png;*.PNG";
//
// lblUpscale
//
lblUpscale.AutoSize = true;
lblUpscale.Location = new System.Drawing.Point(71, 9);
lblUpscale.Name = "lblUpscale";
lblUpscale.Size = new System.Drawing.Size(51, 15);
lblUpscale.TabIndex = 4;
lblUpscale.Text = "Upscale:";
//
// FrameScreenshot
//
AcceptButton = btnClose;
AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
CancelButton = btnClose;
ClientSize = new System.Drawing.Size(334, 111);
Controls.Add(btnCopy);
Controls.Add(chkBlackBG);
Controls.Add(chkTransparent);
Controls.Add(nudUpscale);
Controls.Add(lblUpscale);
Controls.Add(btnClose);
Controls.Add(btnOK);
FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
Name = "FrameScreenshot";
StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
Text = "Frame Screenshot";
Load += FrameScreenshot_Load;
((System.ComponentModel.ISupportInitialize)nudUpscale).EndInit();
ResumeLayout(false);
PerformLayout();
}
#endregion
private System.Windows.Forms.Button btnClose;
private System.Windows.Forms.Button btnOK;
private System.Windows.Forms.ToolTip toolTip1;
private System.Windows.Forms.SaveFileDialog dlgSaveImage;
private System.Windows.Forms.Label lblUpscale;
private System.Windows.Forms.NumericUpDown nudUpscale;
private System.Windows.Forms.CheckBox chkTransparent;
private System.Windows.Forms.CheckBox chkBlackBG;
private System.Windows.Forms.Button btnCopy;
}
}

View File

@@ -0,0 +1,87 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Linq;
using System.Security.Policy;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using static McBitFont.MainForm;
namespace McBitFont {
public partial class FrameScreenshot : Form {
private FrameMiniature f;
public FrameScreenshot(FrameMiniature frame) {
InitializeComponent();
f = frame;
}
private Bitmap GenerateScreenshot() {
int upscale = (int)nudUpscale.Value;
int x, y;
bool transp = chkTransparent.Checked;
bool blackBG = chkBlackBG.Checked;
Bitmap bmp = new(f.width * upscale, f.height * upscale);
SolidBrush bb = new(Color.Black);
SolidBrush bw = new(Color.White);
using (Graphics g = Graphics.FromImage(bmp)) {
for (x = 0; x < f.width; x++) {
for (y = 0; y < f.height; y++) {
if (f.data[x, y]) {
if (!transp || (transp && !blackBG)) g.FillRectangle(bb, x * upscale, y * upscale, upscale, upscale);
} else
if (!transp || (transp && blackBG)) g.FillRectangle(bw, x * upscale, y * upscale, upscale, upscale);
}
}
}
return bmp;
}
private void btnOK_Click(object sender, EventArgs e) {
if (dlgSaveImage.ShowDialog() == DialogResult.OK) {
Bitmap bmp = GenerateScreenshot();
bool err = false;
try {
bmp.Save(dlgSaveImage.FileName, ImageFormat.Png);
}
catch (Exception ex) {
err = true;
MessageBox.Show("There was an error during image save: " + ex.Message, "Error!", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
if (!err) MessageBox.Show("Screenshot has been saved!", "Success!", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
private void FrameScreenshot_Load(object sender, EventArgs e) {
btnOK.Focus();
}
private void btnClose_Click(object sender, EventArgs e) {
DialogResult = DialogResult.OK;
}
private void chkTransparent_CheckedChanged(object sender, EventArgs e) {
chkBlackBG.Enabled = chkTransparent.Checked;
}
private void btnCopy_Click(object sender, EventArgs e) {
Bitmap bmp = GenerateScreenshot();
using MemoryStream stream = new();
bmp.Save(stream, ImageFormat.Png);
DataObject data = new("PNG", stream);
data.SetImage(bmp);
Clipboard.SetDataObject(data, true);
}
}
}

View File

@@ -0,0 +1,126 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="toolTip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<metadata name="dlgSaveImage.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>115, 17</value>
</metadata>
</root>

423
McBitFont/ImageImporter.Designer.cs generated Normal file
View File

@@ -0,0 +1,423 @@
namespace McBitFont {
partial class ImageImporter {
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing) {
if (disposing && (components != null)) {
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent() {
components = new System.ComponentModel.Container();
btnOK = new System.Windows.Forms.Button();
btnCancel = new System.Windows.Forms.Button();
pbOriginal = new System.Windows.Forms.PictureBox();
pbProcessed = new System.Windows.Forms.PictureBox();
btnLoadImage = new System.Windows.Forms.Button();
dlgLoadImage = new System.Windows.Forms.OpenFileDialog();
pbScaled = new System.Windows.Forms.PictureBox();
btnConvert = new System.Windows.Forms.Button();
tbPixelization = new System.Windows.Forms.TrackBar();
lblPixelization = new System.Windows.Forms.Label();
lblThreshold = new System.Windows.Forms.Label();
tbThreshold = new System.Windows.Forms.TrackBar();
lblWhite = new System.Windows.Forms.Label();
lblBlack = new System.Windows.Forms.Label();
btnResize = new System.Windows.Forms.Button();
lblOrigSize = new System.Windows.Forms.Label();
lblProcessedSize = new System.Windows.Forms.Label();
lblScaledSize = new System.Windows.Forms.Label();
label1 = new System.Windows.Forms.Label();
label2 = new System.Windows.Forms.Label();
label3 = new System.Windows.Forms.Label();
label4 = new System.Windows.Forms.Label();
lblTransparency = new System.Windows.Forms.Label();
tbTransparency = new System.Windows.Forms.TrackBar();
toolTip1 = new System.Windows.Forms.ToolTip(components);
label5 = new System.Windows.Forms.Label();
label6 = new System.Windows.Forms.Label();
((System.ComponentModel.ISupportInitialize)pbOriginal).BeginInit();
((System.ComponentModel.ISupportInitialize)pbProcessed).BeginInit();
((System.ComponentModel.ISupportInitialize)pbScaled).BeginInit();
((System.ComponentModel.ISupportInitialize)tbPixelization).BeginInit();
((System.ComponentModel.ISupportInitialize)tbThreshold).BeginInit();
((System.ComponentModel.ISupportInitialize)tbTransparency).BeginInit();
SuspendLayout();
//
// btnOK
//
btnOK.Enabled = false;
btnOK.Location = new System.Drawing.Point(171, 345);
btnOK.Name = "btnOK";
btnOK.Size = new System.Drawing.Size(88, 27);
btnOK.TabIndex = 0;
btnOK.Text = "OK";
btnOK.UseVisualStyleBackColor = true;
btnOK.Click += btnOK_Click;
//
// btnCancel
//
btnCancel.Location = new System.Drawing.Point(377, 345);
btnCancel.Name = "btnCancel";
btnCancel.Size = new System.Drawing.Size(88, 27);
btnCancel.TabIndex = 1;
btnCancel.Text = "Cancel";
btnCancel.UseVisualStyleBackColor = true;
btnCancel.Click += btnCancel_Click;
//
// pbOriginal
//
pbOriginal.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
pbOriginal.Location = new System.Drawing.Point(12, 27);
pbOriginal.Name = "pbOriginal";
pbOriginal.Size = new System.Drawing.Size(200, 200);
pbOriginal.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
pbOriginal.TabIndex = 2;
pbOriginal.TabStop = false;
//
// pbProcessed
//
pbProcessed.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
pbProcessed.Location = new System.Drawing.Point(218, 27);
pbProcessed.Name = "pbProcessed";
pbProcessed.Size = new System.Drawing.Size(200, 200);
pbProcessed.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
pbProcessed.TabIndex = 3;
pbProcessed.TabStop = false;
//
// btnLoadImage
//
btnLoadImage.Image = Properties.Resources.folder_open;
btnLoadImage.Location = new System.Drawing.Point(57, 233);
btnLoadImage.Name = "btnLoadImage";
btnLoadImage.Size = new System.Drawing.Size(110, 27);
btnLoadImage.TabIndex = 4;
btnLoadImage.Text = " Load Image";
btnLoadImage.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
btnLoadImage.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText;
toolTip1.SetToolTip(btnLoadImage, "Load image from a file");
btnLoadImage.UseVisualStyleBackColor = true;
btnLoadImage.Click += btnLoadImage_Click;
//
// dlgLoadImage
//
dlgLoadImage.AddExtension = false;
dlgLoadImage.Filter = "Images|*.bmp;*.png;*.gif;*.jpg;*.jpeg|All files|*.*";
dlgLoadImage.ShowPreview = true;
//
// pbScaled
//
pbScaled.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
pbScaled.Location = new System.Drawing.Point(424, 27);
pbScaled.Name = "pbScaled";
pbScaled.Size = new System.Drawing.Size(200, 200);
pbScaled.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
pbScaled.TabIndex = 5;
pbScaled.TabStop = false;
//
// btnConvert
//
btnConvert.Enabled = false;
btnConvert.Image = Properties.Resources.calculator;
btnConvert.Location = new System.Drawing.Point(263, 233);
btnConvert.Name = "btnConvert";
btnConvert.Size = new System.Drawing.Size(110, 27);
btnConvert.TabIndex = 6;
btnConvert.Text = " Convert";
btnConvert.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
btnConvert.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText;
toolTip1.SetToolTip(btnConvert, "Convert image to pixelated black and white");
btnConvert.UseVisualStyleBackColor = true;
btnConvert.Click += btnConvert_Click;
//
// tbPixelization
//
tbPixelization.AutoSize = false;
tbPixelization.Cursor = System.Windows.Forms.Cursors.SizeWE;
tbPixelization.LargeChange = 2;
tbPixelization.Location = new System.Drawing.Point(39, 296);
tbPixelization.Maximum = 25;
tbPixelization.Minimum = 1;
tbPixelization.Name = "tbPixelization";
tbPixelization.Size = new System.Drawing.Size(128, 32);
tbPixelization.TabIndex = 7;
toolTip1.SetToolTip(tbPixelization, "Pixelization level. Higher value makes bigger pixels during conversion");
tbPixelization.Value = 1;
tbPixelization.ValueChanged += tbPixelization_ValueChanged;
tbPixelization.KeyDown += tbPixelization_KeyDown;
//
// lblPixelization
//
lblPixelization.Location = new System.Drawing.Point(39, 323);
lblPixelization.Name = "lblPixelization";
lblPixelization.Size = new System.Drawing.Size(128, 15);
lblPixelization.TabIndex = 8;
lblPixelization.Text = "Pixelization: 1";
lblPixelization.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// lblThreshold
//
lblThreshold.Location = new System.Drawing.Point(263, 323);
lblThreshold.Name = "lblThreshold";
lblThreshold.Size = new System.Drawing.Size(110, 15);
lblThreshold.TabIndex = 10;
lblThreshold.Text = "Threshold: 0";
lblThreshold.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// tbThreshold
//
tbThreshold.AutoSize = false;
tbThreshold.Cursor = System.Windows.Forms.Cursors.SizeWE;
tbThreshold.LargeChange = 10;
tbThreshold.Location = new System.Drawing.Point(254, 296);
tbThreshold.Maximum = 127;
tbThreshold.Minimum = -128;
tbThreshold.Name = "tbThreshold";
tbThreshold.Size = new System.Drawing.Size(128, 32);
tbThreshold.TabIndex = 9;
tbThreshold.TickFrequency = 8;
toolTip1.SetToolTip(tbThreshold, "Black / White conversion threshold");
tbThreshold.ValueChanged += tbThreshold_ValueChanged;
tbThreshold.KeyDown += tbThreshold_KeyDown;
//
// lblWhite
//
lblWhite.AutoSize = true;
lblWhite.Location = new System.Drawing.Point(221, 282);
lblWhite.Name = "lblWhite";
lblWhite.Size = new System.Drawing.Size(67, 15);
lblWhite.TabIndex = 11;
lblWhite.Text = "More white";
lblWhite.TextAlign = System.Drawing.ContentAlignment.TopRight;
//
// lblBlack
//
lblBlack.AutoSize = true;
lblBlack.Location = new System.Drawing.Point(349, 282);
lblBlack.Name = "lblBlack";
lblBlack.Size = new System.Drawing.Size(66, 15);
lblBlack.TabIndex = 12;
lblBlack.Text = "More black";
//
// btnResize
//
btnResize.Enabled = false;
btnResize.Image = Properties.Resources.arrow_inout;
btnResize.Location = new System.Drawing.Point(464, 233);
btnResize.Name = "btnResize";
btnResize.Size = new System.Drawing.Size(120, 27);
btnResize.TabIndex = 13;
btnResize.Text = " Resize to frame";
btnResize.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
btnResize.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText;
toolTip1.SetToolTip(btnResize, "Resize converted image to fit the current frame");
btnResize.UseVisualStyleBackColor = true;
btnResize.Click += btnResize_Click;
//
// lblOrigSize
//
lblOrigSize.AutoSize = true;
lblOrigSize.Location = new System.Drawing.Point(12, 9);
lblOrigSize.Name = "lblOrigSize";
lblOrigSize.Size = new System.Drawing.Size(30, 15);
lblOrigSize.TabIndex = 14;
lblOrigSize.Text = "0 x 0";
//
// lblProcessedSize
//
lblProcessedSize.AutoSize = true;
lblProcessedSize.Location = new System.Drawing.Point(218, 9);
lblProcessedSize.Name = "lblProcessedSize";
lblProcessedSize.Size = new System.Drawing.Size(30, 15);
lblProcessedSize.TabIndex = 15;
lblProcessedSize.Text = "0 x 0";
//
// lblScaledSize
//
lblScaledSize.AutoSize = true;
lblScaledSize.Location = new System.Drawing.Point(424, 9);
lblScaledSize.Name = "lblScaledSize";
lblScaledSize.Size = new System.Drawing.Size(30, 15);
lblScaledSize.TabIndex = 16;
lblScaledSize.Text = "0 x 0";
//
// label1
//
label1.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
label1.Location = new System.Drawing.Point(6, 279);
label1.Name = "label1";
label1.Size = new System.Drawing.Size(209, 2);
label1.TabIndex = 17;
//
// label2
//
label2.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
label2.Location = new System.Drawing.Point(421, 279);
label2.Name = "label2";
label2.Size = new System.Drawing.Size(209, 2);
label2.TabIndex = 18;
//
// label3
//
label3.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
label3.Location = new System.Drawing.Point(421, 230);
label3.Name = "label3";
label3.Size = new System.Drawing.Size(2, 51);
label3.TabIndex = 19;
//
// label4
//
label4.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
label4.Location = new System.Drawing.Point(215, 230);
label4.Name = "label4";
label4.Size = new System.Drawing.Size(2, 51);
label4.TabIndex = 20;
//
// lblTransparency
//
lblTransparency.Location = new System.Drawing.Point(438, 323);
lblTransparency.Name = "lblTransparency";
lblTransparency.Size = new System.Drawing.Size(184, 15);
lblTransparency.TabIndex = 22;
lblTransparency.Text = "Transparency threshold: 32";
lblTransparency.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// tbTransparency
//
tbTransparency.AutoSize = false;
tbTransparency.Cursor = System.Windows.Forms.Cursors.SizeWE;
tbTransparency.LargeChange = 16;
tbTransparency.Location = new System.Drawing.Point(464, 296);
tbTransparency.Maximum = 255;
tbTransparency.Name = "tbTransparency";
tbTransparency.Size = new System.Drawing.Size(128, 32);
tbTransparency.SmallChange = 4;
tbTransparency.TabIndex = 21;
tbTransparency.TickFrequency = 8;
toolTip1.SetToolTip(tbTransparency, "Transparency threshold. Higher value makes more white");
tbTransparency.Value = 4;
tbTransparency.ValueChanged += tbTransparency_ValueChanged;
tbTransparency.KeyDown += tbTransparency_KeyDown;
//
// toolTip1
//
toolTip1.AutoPopDelay = 10000;
toolTip1.InitialDelay = 500;
toolTip1.ReshowDelay = 100;
//
// label5
//
label5.AutoSize = true;
label5.Location = new System.Drawing.Point(438, 282);
label5.Name = "label5";
label5.Size = new System.Drawing.Size(66, 15);
label5.TabIndex = 24;
label5.Text = "More black";
//
// label6
//
label6.AutoSize = true;
label6.Location = new System.Drawing.Point(555, 282);
label6.Name = "label6";
label6.Size = new System.Drawing.Size(67, 15);
label6.TabIndex = 23;
label6.Text = "More white";
label6.TextAlign = System.Drawing.ContentAlignment.TopRight;
//
// ImageImporter
//
AcceptButton = btnOK;
AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
CancelButton = btnCancel;
ClientSize = new System.Drawing.Size(634, 381);
Controls.Add(label5);
Controls.Add(label6);
Controls.Add(lblTransparency);
Controls.Add(tbTransparency);
Controls.Add(label4);
Controls.Add(label3);
Controls.Add(label2);
Controls.Add(label1);
Controls.Add(lblScaledSize);
Controls.Add(lblProcessedSize);
Controls.Add(lblOrigSize);
Controls.Add(btnResize);
Controls.Add(lblBlack);
Controls.Add(lblWhite);
Controls.Add(lblThreshold);
Controls.Add(tbThreshold);
Controls.Add(lblPixelization);
Controls.Add(tbPixelization);
Controls.Add(btnConvert);
Controls.Add(pbScaled);
Controls.Add(btnLoadImage);
Controls.Add(pbProcessed);
Controls.Add(pbOriginal);
Controls.Add(btnCancel);
Controls.Add(btnOK);
FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
MaximizeBox = false;
MinimizeBox = false;
Name = "ImageImporter";
ShowIcon = false;
ShowInTaskbar = false;
StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
Text = "Import Image";
Paint += ImageImporter_Paint;
((System.ComponentModel.ISupportInitialize)pbOriginal).EndInit();
((System.ComponentModel.ISupportInitialize)pbProcessed).EndInit();
((System.ComponentModel.ISupportInitialize)pbScaled).EndInit();
((System.ComponentModel.ISupportInitialize)tbPixelization).EndInit();
((System.ComponentModel.ISupportInitialize)tbThreshold).EndInit();
((System.ComponentModel.ISupportInitialize)tbTransparency).EndInit();
ResumeLayout(false);
PerformLayout();
}
#endregion
private System.Windows.Forms.Button btnOK;
private System.Windows.Forms.Button btnCancel;
private System.Windows.Forms.PictureBox pbOriginal;
private System.Windows.Forms.PictureBox pbProcessed;
private System.Windows.Forms.Button btnLoadImage;
private System.Windows.Forms.OpenFileDialog dlgLoadImage;
private System.Windows.Forms.PictureBox pbScaled;
private System.Windows.Forms.Button btnConvert;
private System.Windows.Forms.TrackBar tbPixelization;
private System.Windows.Forms.Label lblPixelization;
private System.Windows.Forms.Label lblThreshold;
private System.Windows.Forms.TrackBar tbThreshold;
private System.Windows.Forms.Label lblWhite;
private System.Windows.Forms.Label lblBlack;
private System.Windows.Forms.Button btnResize;
private System.Windows.Forms.Label lblOrigSize;
private System.Windows.Forms.Label lblProcessedSize;
private System.Windows.Forms.Label lblScaledSize;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.Label label3;
private System.Windows.Forms.Label label4;
private System.Windows.Forms.Label lblTransparency;
private System.Windows.Forms.TrackBar tbTransparency;
private System.Windows.Forms.ToolTip toolTip1;
private System.Windows.Forms.Label label5;
private System.Windows.Forms.Label label6;
}
}

235
McBitFont/ImageImporter.cs Normal file
View File

@@ -0,0 +1,235 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.Data;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace McBitFont {
public partial class ImageImporter : Form {
private int fw, fh, pixelization, threshold;
private Color[] colorPool = [Color.Black, Color.White];
private Bitmap bmpOriginal, bmpProcessed;
public Bitmap bmpScaled;
public ImageImporter(int width, int height) {
InitializeComponent();
fw = width;
fh = height;
}
private void UpdateControls(byte level) {
switch (level) {
case 1:
bmpProcessed = null;
bmpScaled = null;
pbProcessed.Image = null;
pbScaled.Image = null;
lblProcessedSize.Text = "0 x 0";
lblScaledSize.Text = "0 x 0";
btnResize.Enabled = false;
btnOK.Enabled = false;
btnConvert.Enabled = true;
break;
case 2:
bmpScaled = null;
pbScaled.Image = null;
lblScaledSize.Text = "0 x 0";
btnOK.Enabled = false;
btnResize.Enabled = true;
break;
case 3:
btnOK.Enabled = true;
break;
}
}
private void btnOK_Click(object sender, EventArgs e) {
DialogResult = DialogResult.OK;
}
private void btnCancel_Click(object sender, EventArgs e) {
DialogResult = DialogResult.Cancel;
}
// Pick a color from color pool that is closest to an average of given colors
private Color PickColor(Color[] colors) {
int i;
int r = 0; int g = 0; int b = 0;
// Calculating average color amongst givet color set
for (i = 0; i < colors.Length; i++) {
r += colors[i].R;
g += colors[i].G;
b += colors[i].B;
}
r /= colors.Length;
g /= colors.Length;
b /= colors.Length;
int near = 1000;
int ind = 0;
// Picking a closts color from color pool
for (i = 0; i < colorPool.Length; i++) {
int valR = colorPool[i].R - r + threshold;
int valG = colorPool[i].R - g + threshold;
int valB = colorPool[i].R - b + threshold;
if (valR < 0) valR = -valR;
if (valG < 0) valG = -valG;
if (valB < 0) valB = -valB;
threshold = tbThreshold.Value;
int total = valR + valG + valB;
if (total < near) {
ind = i;
near = total;
}
}
return colorPool[ind];
}
private static void DrawArrow(Graphics g, Point from, Point to, float thickness = 1, Color? color = null) {
if (color == null) color = Color.Black;
var pen = new Pen((Color)color, thickness) {
CustomEndCap = new AdjustableArrowCap(4, 5)
};
g.DrawLine(pen, from, to);
}
private void tbPixelization_ValueChanged(object sender, EventArgs e) {
lblPixelization.Text = "Pixelization: " + tbPixelization.Value.ToString();
}
private void tbThreshold_ValueChanged(object sender, EventArgs e) {
lblThreshold.Text = "Threshold: " + tbThreshold.Value.ToString();
}
private void btnLoadImage_Click(object sender, EventArgs e) {
if (dlgLoadImage.ShowDialog() == DialogResult.OK) {
bmpOriginal = new Bitmap(dlgLoadImage.FileName);
pbOriginal.Image = Draw200x200(bmpOriginal);
lblOrigSize.Text = bmpOriginal.Width.ToString() + " x " + bmpOriginal.Height.ToString()
+ " (" + pbOriginal.Image.Width.ToString() + " x " + pbOriginal.Image.Height.ToString() + ")";
// Clear other images
UpdateControls(1);
}
}
private void btnConvert_Click(object sender, EventArgs e) {
pixelization = tbPixelization.Value;
//Bitmap bmOrig = (Bitmap)pbOriginal.Image;
bmpProcessed = new Bitmap(bmpOriginal.Width, bmpOriginal.Height);
// Processing image
using (Graphics g = Graphics.FromImage(bmpProcessed)) {
List<Color> block;
Rectangle rect = new Rectangle();
SolidBrush sb = new SolidBrush(Color.Black);
Color final = Color.Black;
Color pixel;
// Going through original image with steps = pixelization
for (int x = 0; x < bmpOriginal.Width; x += pixelization) {
for (int y = 0; y < bmpOriginal.Height; y += pixelization) {
block = [];
// Going throug a block pixel by pixel to calculate its average color later
for (int v = 0; v < pixelization; v++) {
for (int c = 0; c < pixelization; c++) {
if (x + v < bmpOriginal.Width && y + c < bmpOriginal.Height) {
pixel = bmpOriginal.GetPixel(x + v, y + c);
if (pixel.A <= tbTransparency.Value) pixel = Color.White;
block.Add(pixel);
}
}
}
// Getting a color from the color pool and painting the block
if (block.Count > 0) {
final = PickColor(block.ToArray());
sb.Color = final;
rect.X = x;
rect.Y = y;
rect.Width = pixelization;
rect.Height = pixelization;
g.FillRectangle(sb, rect);
}
}
}
}
pbProcessed.Image = Draw200x200(bmpProcessed);
lblProcessedSize.Text = bmpProcessed.Width.ToString() + " x " + bmpProcessed.Height.ToString()
+ " (" + pbProcessed.Image.Width.ToString() + " x " + pbProcessed.Image.Height.ToString() + ")";
UpdateControls(2);
}
private void btnResize_Click(object sender, EventArgs e) {
bmpScaled = DrawScaled(bmpProcessed, fw, fh);
pbScaled.Image = Draw200x200(bmpScaled);
lblScaledSize.Text = bmpScaled.Width.ToString() + " x " + bmpScaled.Height.ToString()
+ " (" + pbScaled.Image.Width.ToString() + " x " + pbScaled.Image.Height.ToString() + ")";
UpdateControls(3);
}
// Draw 200x200 bitmap for picturebox
private static Bitmap Draw200x200(Bitmap bmpRef) {
return DrawScaled(bmpRef, 200, 200);
}
// Draw scaled bitmap keeping aspect ratio
private static Bitmap DrawScaled(Bitmap bmpRef, int w, int h) {
var scale = Math.Min(w / (double)bmpRef.Width, h / (double)bmpRef.Height);
var bmpNew = new Bitmap((int)(bmpRef.Width * scale), (int)(bmpRef.Height * scale));
using (Graphics g = Graphics.FromImage(bmpNew)) {
g.InterpolationMode = InterpolationMode.NearestNeighbor;
g.PixelOffsetMode = PixelOffsetMode.Half;
g.DrawImage(bmpRef, 0, 0, bmpNew.Width, bmpNew.Height);
}
return bmpNew;
}
private void tbThreshold_KeyDown(object sender, KeyEventArgs e) {
if (e.KeyCode == Keys.C) {
tbThreshold.Value = 0;
}
}
private void tbPixelization_KeyDown(object sender, KeyEventArgs e) {
if (e.KeyCode == Keys.C) {
tbPixelization.Value = 1;
}
}
private void tbTransparency_ValueChanged(object sender, EventArgs e) {
lblTransparency.Text = "Transparency threshold: " + tbTransparency.Value.ToString();
}
private void tbTransparency_KeyDown(object sender, KeyEventArgs e) {
if (e.KeyCode == Keys.C) {
tbTransparency.Value = 32;
}
}
private void ImageImporter_Paint(object sender, PaintEventArgs e) {
DrawArrow(e.Graphics, new Point(175, 246), new Point(255, 246), 2, Color.SlateGray);
DrawArrow(e.Graphics, new Point(380, 246), new Point(455, 246), 2, Color.SlateGray);
}
}
}

View File

@@ -0,0 +1,126 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="toolTip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>147, 17</value>
</metadata>
<metadata name="dlgLoadImage.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
</root>

View File

@@ -1,21 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="..\packages\Costura.Fody.6.0.0\build\Costura.Fody.props" Condition="Exists('..\packages\Costura.Fody.6.0.0\build\Costura.Fody.props')" />
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{7C01529E-4414-405F-9B57-19FA4AF8ED60}</ProjectGuid>
<TargetFramework>net9.0-windows</TargetFramework>
<OutputType>WinExe</OutputType>
<RootNamespace>McBitFont</RootNamespace>
<AssemblyName>McBitFont</AssemblyName>
<TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<Deterministic>true</Deterministic>
<IsWebBootstrapper>false</IsWebBootstrapper>
<NuGetPackageImportStamp>
</NuGetPackageImportStamp>
<PublishUrl>publish\</PublishUrl>
<Install>true</Install>
<InstallFrom>Disk</InstallFrom>
@@ -27,229 +13,45 @@
<UpdateRequired>false</UpdateRequired>
<MapFileExtensions>true</MapFileExtensions>
<ApplicationRevision>0</ApplicationRevision>
<ApplicationVersion>1.7.0.0</ApplicationVersion>
<ApplicationVersion>1.0.0.%2a</ApplicationVersion>
<IsWebBootstrapper>false</IsWebBootstrapper>
<UseApplicationTrust>false</UseApplicationTrust>
<PublishWizardCompleted>true</PublishWizardCompleted>
<BootstrapperEnabled>true</BootstrapperEnabled>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>embedded</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<Prefer32Bit>false</Prefer32Bit>
<DebugSymbols>true</DebugSymbols>
</PropertyGroup>
<PropertyGroup>
<UseWindowsForms>true</UseWindowsForms>
<ImportWindowsDesktopTargets>true</ImportWindowsDesktopTargets>
<ApplicationIcon>icon_64.ico</ApplicationIcon>
<AssemblyVersion>2.10.0.0</AssemblyVersion>
<FileVersion>2.10.0.0</FileVersion>
<Version>$(VersionPrefix)2.10.0</Version>
<Copyright>Anton Mukhin</Copyright>
</PropertyGroup>
<PropertyGroup>
<ManifestCertificateThumbprint>0A7368787FA9EE4B7327F4CB5CD09A2A4CBF3168</ManifestCertificateThumbprint>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
<DebugType>portable</DebugType>
</PropertyGroup>
<PropertyGroup>
<ManifestKeyFile>McBitFont_TemporaryKey.pfx</ManifestKeyFile>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
<DebugType>portable</DebugType>
</PropertyGroup>
<PropertyGroup>
<GenerateManifests>true</GenerateManifests>
</PropertyGroup>
<PropertyGroup>
<SignManifests>true</SignManifests>
</PropertyGroup>
<ItemGroup>
<Reference Include="Costura, Version=6.0.0.0, Culture=neutral, PublicKeyToken=9919ef960d84173d, processorArchitecture=MSIL">
<HintPath>..\packages\Costura.Fody.6.0.0\lib\netstandard2.0\Costura.dll</HintPath>
</Reference>
<Reference Include="MessagePack, Version=3.1.3.0, Culture=neutral, PublicKeyToken=b4a0369545f0a1be, processorArchitecture=MSIL">
<HintPath>..\packages\MessagePack.3.1.3\lib\net472\MessagePack.dll</HintPath>
</Reference>
<Reference Include="MessagePack.Annotations, Version=3.1.3.0, Culture=neutral, PublicKeyToken=b4a0369545f0a1be, processorArchitecture=MSIL">
<HintPath>..\packages\MessagePack.Annotations.3.1.3\lib\netstandard2.0\MessagePack.Annotations.dll</HintPath>
</Reference>
<Reference Include="Microsoft.Bcl.AsyncInterfaces, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.Bcl.AsyncInterfaces.8.0.0\lib\net462\Microsoft.Bcl.AsyncInterfaces.dll</HintPath>
</Reference>
<Reference Include="Microsoft.NET.StringTools, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.NET.StringTools.17.11.4\lib\net472\Microsoft.NET.StringTools.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Buffers, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll</HintPath>
</Reference>
<Reference Include="System.Collections.Immutable, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Collections.Immutable.8.0.0\lib\net462\System.Collections.Immutable.dll</HintPath>
</Reference>
<Reference Include="System.Core" />
<Reference Include="System.Memory, Version=4.0.1.2, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Memory.4.5.5\lib\net461\System.Memory.dll</HintPath>
</Reference>
<Reference Include="System.Numerics" />
<Reference Include="System.Numerics.Vectors, Version=4.1.4.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll</HintPath>
</Reference>
<Reference Include="System.Runtime.CompilerServices.Unsafe, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Runtime.CompilerServices.Unsafe.6.0.0\lib\net461\System.Runtime.CompilerServices.Unsafe.dll</HintPath>
</Reference>
<Reference Include="System.Threading.Tasks.Extensions, Version=4.2.0.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Threading.Tasks.Extensions.4.5.4\lib\net461\System.Threading.Tasks.Extensions.dll</HintPath>
</Reference>
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Deployment" />
<Reference Include="System.Drawing" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="About.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="About.Designer.cs">
<DependentUpon>About.cs</DependentUpon>
</Compile>
<Compile Include="Export.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Export.Designer.cs">
<DependentUpon>Export.cs</DependentUpon>
</Compile>
<Compile Include="Form1.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Form1.Designer.cs">
<DependentUpon>Form1.cs</DependentUpon>
</Compile>
<Compile Include="New.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="New.Designer.cs">
<DependentUpon>New.cs</DependentUpon>
</Compile>
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<EmbeddedResource Include="About.resx">
<DependentUpon>About.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Export.resx">
<DependentUpon>Export.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Form1.resx">
<DependentUpon>Form1.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="New.resx">
<DependentUpon>New.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
<SubType>Designer</SubType>
</EmbeddedResource>
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Resources.resx</DependentUpon>
<DesignTime>True</DesignTime>
</Compile>
<None Include="McBitFont_TemporaryKey.pfx" />
<None Include="packages.config" />
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
</None>
<Compile Include="Properties\Settings.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
</ItemGroup>
<ItemGroup>
<None Include="App.config" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\action_add.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\action_remove.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\arrow_back.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\arrow_down.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\arrow_next.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\arrow_top.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\file.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\folder_open.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\save.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\action_check.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\Famfamfam-Silk-Shape-flip-vertical.16.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\Famfamfam-Silk-Shape-flip-horizontal.16.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\Famfamfam-Silk-Page-paste.16.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\Famfamfam-Silk-Page-copy.16.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\Famfamfam-Silk-Door-out.16.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\Famfamfam-Silk-Disk.16.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\Famfamfam-Silk-Page-white.16.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\Famfamfam-Silk-Folder-page.16.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\Famfamfam-Silk-Folder.16.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\Ionic-Ionicons-Invert-mode-outline.16.png" />
</ItemGroup>
<ItemGroup>
<Content Include="icon.ico" />
<Content Include="icon_64.ico" />
<None Include="Resources\icon_64.png" />
<None Include="Resources\icon_32.png" />
<None Include="Resources\icon.png" />
<PackageReference Include="Costura.Fody" Version="6.0.0">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="MessagePack" Version="3.1.3" />
<PackageReference Include="MessagePack.Annotations" Version="3.1.3" />
<PackageReference Include="MessagePackAnalyzer" Version="3.1.3" />
<PackageReference Include="Microsoft.Bcl.AsyncInterfaces" Version="9.0.5" />
<PackageReference Include="Microsoft.CSharp" Version="4.7.0" />
<PackageReference Include="Microsoft.NET.StringTools" Version="17.11.4" />
<PackageReference Include="System.Collections.Immutable" Version="9.0.5" />
<PackageReference Include="System.Runtime.CompilerServices.Unsafe" Version="6.1.2" />
<PackageReference Include="System.Text.Encoding.CodePages" Version="9.0.5" />
</ItemGroup>
<ItemGroup>
<BootstrapperPackage Include=".NETFramework,Version=v4.7.2">
<Visible>False</Visible>
<ProductName>Microsoft .NET Framework 4.7.2 %28x86 and x64%29</ProductName>
<ProductName>Microsoft .NET Framework 4.7.2 %28x86 и x64%29</ProductName>
<Install>true</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
@@ -258,17 +60,28 @@
<Install>false</Install>
</BootstrapperPackage>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<Import Project="..\packages\MessagePackAnalyzer.3.1.3\build\MessagePackAnalyzer.targets" Condition="Exists('..\packages\MessagePackAnalyzer.3.1.3\build\MessagePackAnalyzer.targets')" />
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
<PropertyGroup>
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
</PropertyGroup>
<Error Condition="!Exists('..\packages\MessagePackAnalyzer.3.1.3\build\MessagePackAnalyzer.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\MessagePackAnalyzer.3.1.3\build\MessagePackAnalyzer.targets'))" />
<Error Condition="!Exists('..\packages\Fody.6.8.2\build\Fody.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Fody.6.8.2\build\Fody.targets'))" />
<Error Condition="!Exists('..\packages\Costura.Fody.6.0.0\build\Costura.Fody.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Costura.Fody.6.0.0\build\Costura.Fody.props'))" />
<Error Condition="!Exists('..\packages\Costura.Fody.6.0.0\build\Costura.Fody.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Costura.Fody.6.0.0\build\Costura.Fody.targets'))" />
</Target>
<Import Project="..\packages\Fody.6.8.2\build\Fody.targets" Condition="Exists('..\packages\Fody.6.8.2\build\Fody.targets')" />
<Import Project="..\packages\Costura.Fody.6.0.0\build\Costura.Fody.targets" Condition="Exists('..\packages\Costura.Fody.6.0.0\build\Costura.Fody.targets')" />
<ItemGroup>
<Compile Update="Properties\Resources.Designer.cs">
<DesignTime>True</DesignTime>
<AutoGen>True</AutoGen>
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
<Compile Update="Properties\Settings.Designer.cs">
<DesignTimeSharedInput>True</DesignTimeSharedInput>
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
</Compile>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Update="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
<None Update="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
</None>
</ItemGroup>
</Project>

172
McBitFont/McCursor.cs Normal file
View File

@@ -0,0 +1,172 @@
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);
}
public static Cursor GetCursorLines() {
Point[] arrow = { new(1, 1), new(12, 12), new(11, 13), new(6, 13), new(2, 17), new(1, 16) };
Rectangle line = new(0, 18, 20, 5);
Bitmap bmp = new(21, 24);
Pen pb = new(Color.Black, 1);
Pen pw = new(Color.White, 1);
SolidBrush bw = new(Color.White);
SolidBrush bb = new(Color.Black);
using (Graphics g = Graphics.FromImage(bmp)) {
g.FillPolygon(bw, arrow);
g.DrawPolygon(pb, arrow);
g.FillRectangle(bb, line);
g.DrawRectangle(pw, line);
}
return CreateCursorNoResize(bmp, 1, 1);
}
public static Cursor GetCursorDrag() {
Point[] arrow1 = { new(11, 0), new(15, 4), new(13, 4), new(13, 7), new(9, 7), new(9, 4), new(7, 4) };
Point[] arrow2 = { new(22, 11), new(18, 15), new(18, 13), new(15, 13), new(15, 9), new(18, 9), new(18, 7) };
Point[] arrow3 = { new(11, 22), new(7, 18), new(9, 18), new(9, 15), new(13, 15), new(13, 18), new(15, 18) };
Point[] arrow4 = { new(0, 11), new(4, 7), new(4, 9), new(7, 9), new(7, 13), new(4, 13), new(4, 15) };
Bitmap bmp = new(23, 23);
Pen pb = new(Color.Black, 1);
SolidBrush bw = new(Color.White);
using (Graphics g = Graphics.FromImage(bmp)) {
g.FillPolygon(bw, arrow1);
g.DrawPolygon(pb, arrow1);
g.FillPolygon(bw, arrow2);
g.DrawPolygon(pb, arrow2);
g.FillPolygon(bw, arrow3);
g.DrawPolygon(pb, arrow3);
g.FillPolygon(bw, arrow4);
g.DrawPolygon(pb, arrow4);
}
return CreateCursorNoResize(bmp, 11, 11);
}
}
}

View File

@@ -23,469 +23,421 @@
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent() {
this.components = new System.ComponentModel.Container();
this.nudNewX = new System.Windows.Forms.NumericUpDown();
this.nudNewY = new System.Windows.Forms.NumericUpDown();
this.label1 = new System.Windows.Forms.Label();
this.label2 = new System.Windows.Forms.Label();
this.rbMono = new System.Windows.Forms.RadioButton();
this.rbVar = new System.Windows.Forms.RadioButton();
this.cbNotPrintable = new System.Windows.Forms.CheckBox();
this.cbLatin = new System.Windows.Forms.CheckBox();
this.cbExtended = new System.Windows.Forms.CheckBox();
this.btnOK = new System.Windows.Forms.Button();
this.btnCancel = new System.Windows.Forms.Button();
this.cbSingle = new System.Windows.Forms.CheckBox();
this.toolTip1 = new System.Windows.Forms.ToolTip(this.components);
this.cbEncoding = new System.Windows.Forms.ComboBox();
this.panel1 = new System.Windows.Forms.Panel();
this.pbChar2 = new System.Windows.Forms.PictureBox();
this.pbChar1 = new System.Windows.Forms.PictureBox();
this.btnFont = new System.Windows.Forms.Button();
this.dlgFont = new System.Windows.Forms.FontDialog();
this.cbFontBased = new System.Windows.Forms.CheckBox();
this.lblFont = new System.Windows.Forms.Label();
this.nudShiftX = new System.Windows.Forms.NumericUpDown();
this.nudShiftY = new System.Windows.Forms.NumericUpDown();
this.lblShiftX = new System.Windows.Forms.Label();
this.lblShiftY = new System.Windows.Forms.Label();
this.pnlFont = new System.Windows.Forms.Panel();
this.label4 = new System.Windows.Forms.Label();
this.label3 = new System.Windows.Forms.Label();
this.nudChar2 = new System.Windows.Forms.NumericUpDown();
this.nudChar1 = new System.Windows.Forms.NumericUpDown();
this.cbDigits = new System.Windows.Forms.CheckBox();
((System.ComponentModel.ISupportInitialize)(this.nudNewX)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.nudNewY)).BeginInit();
this.panel1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.pbChar2)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.pbChar1)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.nudShiftX)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.nudShiftY)).BeginInit();
this.pnlFont.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.nudChar2)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.nudChar1)).BeginInit();
this.SuspendLayout();
components = new System.ComponentModel.Container();
nudNewX = new System.Windows.Forms.NumericUpDown();
nudNewY = new System.Windows.Forms.NumericUpDown();
label1 = new System.Windows.Forms.Label();
label2 = new System.Windows.Forms.Label();
rbMono = new System.Windows.Forms.RadioButton();
rbVar = new System.Windows.Forms.RadioButton();
cbNotPrintable = new System.Windows.Forms.CheckBox();
cbLatin = new System.Windows.Forms.CheckBox();
cbExtended = new System.Windows.Forms.CheckBox();
btnOK = new System.Windows.Forms.Button();
btnCancel = new System.Windows.Forms.Button();
cbSingle = new System.Windows.Forms.CheckBox();
toolTip1 = new System.Windows.Forms.ToolTip(components);
cbEncoding = new System.Windows.Forms.ComboBox();
panel1 = new System.Windows.Forms.Panel();
pbChar2 = new System.Windows.Forms.PictureBox();
pbChar1 = new System.Windows.Forms.PictureBox();
btnFont = new System.Windows.Forms.Button();
dlgFont = new System.Windows.Forms.FontDialog();
cbFontBased = new System.Windows.Forms.CheckBox();
lblFont = new System.Windows.Forms.Label();
nudShiftX = new System.Windows.Forms.NumericUpDown();
nudShiftY = new System.Windows.Forms.NumericUpDown();
lblShiftX = new System.Windows.Forms.Label();
lblShiftY = new System.Windows.Forms.Label();
pnlFont = new System.Windows.Forms.Panel();
label4 = new System.Windows.Forms.Label();
label3 = new System.Windows.Forms.Label();
nudChar2 = new System.Windows.Forms.NumericUpDown();
nudChar1 = new System.Windows.Forms.NumericUpDown();
cbDigits = new System.Windows.Forms.CheckBox();
((System.ComponentModel.ISupportInitialize)nudNewX).BeginInit();
((System.ComponentModel.ISupportInitialize)nudNewY).BeginInit();
panel1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)pbChar2).BeginInit();
((System.ComponentModel.ISupportInitialize)pbChar1).BeginInit();
((System.ComponentModel.ISupportInitialize)nudShiftX).BeginInit();
((System.ComponentModel.ISupportInitialize)nudShiftY).BeginInit();
pnlFont.SuspendLayout();
((System.ComponentModel.ISupportInitialize)nudChar2).BeginInit();
((System.ComponentModel.ISupportInitialize)nudChar1).BeginInit();
SuspendLayout();
//
// nudNewX
//
this.nudNewX.Location = new System.Drawing.Point(68, 32);
this.nudNewX.Maximum = new decimal(new int[] {
255,
0,
0,
0});
this.nudNewX.Minimum = new decimal(new int[] {
1,
0,
0,
0});
this.nudNewX.Name = "nudNewX";
this.nudNewX.Size = new System.Drawing.Size(57, 20);
this.nudNewX.TabIndex = 0;
this.nudNewX.Value = new decimal(new int[] {
32,
0,
0,
0});
this.nudNewX.ValueChanged += new System.EventHandler(this.nudNewX_ValueChanged);
this.nudNewX.Enter += new System.EventHandler(this.nudFocus);
nudNewX.Location = new System.Drawing.Point(68, 32);
nudNewX.Maximum = new decimal(new int[] { 255, 0, 0, 0 });
nudNewX.Minimum = new decimal(new int[] { 1, 0, 0, 0 });
nudNewX.Name = "nudNewX";
nudNewX.Size = new System.Drawing.Size(57, 23);
nudNewX.TabIndex = 0;
nudNewX.Value = new decimal(new int[] { 32, 0, 0, 0 });
nudNewX.ValueChanged += nudNewX_ValueChanged;
nudNewX.Enter += nudFocus;
//
// nudNewY
//
this.nudNewY.Location = new System.Drawing.Point(68, 58);
this.nudNewY.Maximum = new decimal(new int[] {
255,
0,
0,
0});
this.nudNewY.Minimum = new decimal(new int[] {
1,
0,
0,
0});
this.nudNewY.Name = "nudNewY";
this.nudNewY.Size = new System.Drawing.Size(57, 20);
this.nudNewY.TabIndex = 1;
this.nudNewY.Value = new decimal(new int[] {
32,
0,
0,
0});
this.nudNewY.ValueChanged += new System.EventHandler(this.nudNewX_ValueChanged);
this.nudNewY.Enter += new System.EventHandler(this.nudFocus);
nudNewY.Location = new System.Drawing.Point(68, 58);
nudNewY.Maximum = new decimal(new int[] { 255, 0, 0, 0 });
nudNewY.Minimum = new decimal(new int[] { 1, 0, 0, 0 });
nudNewY.Name = "nudNewY";
nudNewY.Size = new System.Drawing.Size(57, 23);
nudNewY.TabIndex = 1;
nudNewY.Value = new decimal(new int[] { 32, 0, 0, 0 });
nudNewY.ValueChanged += nudNewX_ValueChanged;
nudNewY.Enter += nudFocus;
//
// label1
//
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(24, 34);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(38, 13);
this.label1.TabIndex = 2;
this.label1.Text = "Width:";
this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
label1.AutoSize = true;
label1.Location = new System.Drawing.Point(24, 34);
label1.Name = "label1";
label1.Size = new System.Drawing.Size(42, 15);
label1.TabIndex = 2;
label1.Text = "Width:";
label1.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
//
// label2
//
this.label2.AutoSize = true;
this.label2.Location = new System.Drawing.Point(21, 60);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(41, 13);
this.label2.TabIndex = 3;
this.label2.Text = "Height:";
this.label2.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
label2.AutoSize = true;
label2.Location = new System.Drawing.Point(21, 60);
label2.Name = "label2";
label2.Size = new System.Drawing.Size(46, 15);
label2.TabIndex = 3;
label2.Text = "Height:";
label2.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
//
// rbMono
//
this.rbMono.AutoSize = true;
this.rbMono.Checked = true;
this.rbMono.Location = new System.Drawing.Point(24, 84);
this.rbMono.Name = "rbMono";
this.rbMono.Size = new System.Drawing.Size(87, 17);
this.rbMono.TabIndex = 4;
this.rbMono.TabStop = true;
this.rbMono.Text = "Monospaced";
this.rbMono.UseVisualStyleBackColor = true;
rbMono.AutoSize = true;
rbMono.Checked = true;
rbMono.Location = new System.Drawing.Point(24, 84);
rbMono.Name = "rbMono";
rbMono.Size = new System.Drawing.Size(94, 19);
rbMono.TabIndex = 4;
rbMono.TabStop = true;
rbMono.Text = "Monospaced";
rbMono.UseVisualStyleBackColor = true;
//
// rbVar
//
this.rbVar.AutoSize = true;
this.rbVar.Location = new System.Drawing.Point(24, 107);
this.rbVar.Name = "rbVar";
this.rbVar.Size = new System.Drawing.Size(91, 17);
this.rbVar.TabIndex = 5;
this.rbVar.Text = "Variable width";
this.rbVar.UseVisualStyleBackColor = true;
rbVar.AutoSize = true;
rbVar.Location = new System.Drawing.Point(24, 107);
rbVar.Name = "rbVar";
rbVar.Size = new System.Drawing.Size(99, 19);
rbVar.TabIndex = 5;
rbVar.Text = "Variable width";
rbVar.UseVisualStyleBackColor = true;
//
// cbNotPrintable
//
this.cbNotPrintable.AutoSize = true;
this.cbNotPrintable.Location = new System.Drawing.Point(140, 77);
this.cbNotPrintable.Name = "cbNotPrintable";
this.cbNotPrintable.Size = new System.Drawing.Size(116, 17);
this.cbNotPrintable.TabIndex = 7;
this.cbNotPrintable.Text = "0-31 (Not printable)";
this.cbNotPrintable.UseVisualStyleBackColor = true;
this.cbNotPrintable.CheckedChanged += new System.EventHandler(this.checkboxChanged);
cbNotPrintable.AutoSize = true;
cbNotPrintable.Location = new System.Drawing.Point(140, 77);
cbNotPrintable.Name = "cbNotPrintable";
cbNotPrintable.Size = new System.Drawing.Size(130, 19);
cbNotPrintable.TabIndex = 7;
cbNotPrintable.Text = "0-31 (Not printable)";
cbNotPrintable.UseVisualStyleBackColor = true;
cbNotPrintable.CheckedChanged += checkboxChanged;
//
// cbLatin
//
this.cbLatin.AutoSize = true;
this.cbLatin.Checked = true;
this.cbLatin.CheckState = System.Windows.Forms.CheckState.Checked;
this.cbLatin.Location = new System.Drawing.Point(140, 100);
this.cbLatin.Name = "cbLatin";
this.cbLatin.Size = new System.Drawing.Size(91, 17);
this.cbLatin.TabIndex = 8;
this.cbLatin.Text = "32-127 (Latin)";
this.cbLatin.UseVisualStyleBackColor = true;
this.cbLatin.CheckedChanged += new System.EventHandler(this.checkboxChanged);
cbLatin.AutoSize = true;
cbLatin.Checked = true;
cbLatin.CheckState = System.Windows.Forms.CheckState.Checked;
cbLatin.Location = new System.Drawing.Point(140, 100);
cbLatin.Name = "cbLatin";
cbLatin.Size = new System.Drawing.Size(98, 19);
cbLatin.TabIndex = 8;
cbLatin.Text = "32-127 (Latin)";
cbLatin.UseVisualStyleBackColor = true;
cbLatin.CheckedChanged += checkboxChanged;
//
// cbExtended
//
this.cbExtended.AutoSize = true;
this.cbExtended.Location = new System.Drawing.Point(140, 123);
this.cbExtended.Name = "cbExtended";
this.cbExtended.Size = new System.Drawing.Size(119, 17);
this.cbExtended.TabIndex = 9;
this.cbExtended.Text = "128-255 (Extended)";
this.cbExtended.UseVisualStyleBackColor = true;
this.cbExtended.CheckedChanged += new System.EventHandler(this.checkboxChanged);
cbExtended.AutoSize = true;
cbExtended.Location = new System.Drawing.Point(140, 123);
cbExtended.Name = "cbExtended";
cbExtended.Size = new System.Drawing.Size(126, 19);
cbExtended.TabIndex = 9;
cbExtended.Text = "128-255 (Extended)";
cbExtended.UseVisualStyleBackColor = true;
cbExtended.CheckedChanged += checkboxChanged;
//
// btnOK
//
this.btnOK.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.btnOK.Location = new System.Drawing.Point(47, 178);
this.btnOK.Name = "btnOK";
this.btnOK.Size = new System.Drawing.Size(75, 23);
this.btnOK.TabIndex = 10;
this.btnOK.Text = "OK";
this.btnOK.UseVisualStyleBackColor = true;
this.btnOK.Click += new System.EventHandler(this.btnOK_Click);
btnOK.Anchor = System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left;
btnOK.Location = new System.Drawing.Point(47, 178);
btnOK.Name = "btnOK";
btnOK.Size = new System.Drawing.Size(75, 23);
btnOK.TabIndex = 10;
btnOK.Text = "OK";
btnOK.UseVisualStyleBackColor = true;
btnOK.Click += btnOK_Click;
//
// btnCancel
//
this.btnCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
this.btnCancel.Location = new System.Drawing.Point(140, 178);
this.btnCancel.Name = "btnCancel";
this.btnCancel.Size = new System.Drawing.Size(75, 23);
this.btnCancel.TabIndex = 11;
this.btnCancel.Text = "Cancel";
this.btnCancel.UseVisualStyleBackColor = true;
this.btnCancel.Click += new System.EventHandler(this.btnCancel_Click);
btnCancel.Anchor = System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left;
btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
btnCancel.Location = new System.Drawing.Point(140, 178);
btnCancel.Name = "btnCancel";
btnCancel.Size = new System.Drawing.Size(75, 23);
btnCancel.TabIndex = 11;
btnCancel.Text = "Cancel";
btnCancel.UseVisualStyleBackColor = true;
btnCancel.Click += btnCancel_Click;
//
// cbSingle
//
this.cbSingle.AutoSize = true;
this.cbSingle.Location = new System.Drawing.Point(140, 31);
this.cbSingle.Name = "cbSingle";
this.cbSingle.Size = new System.Drawing.Size(84, 17);
this.cbSingle.TabIndex = 12;
this.cbSingle.Text = "Single frame";
this.cbSingle.UseVisualStyleBackColor = true;
this.cbSingle.CheckedChanged += new System.EventHandler(this.checkboxChanged);
cbSingle.AutoSize = true;
cbSingle.Location = new System.Drawing.Point(140, 31);
cbSingle.Name = "cbSingle";
cbSingle.Size = new System.Drawing.Size(92, 19);
cbSingle.TabIndex = 12;
cbSingle.Text = "Single frame";
cbSingle.UseVisualStyleBackColor = true;
cbSingle.CheckedChanged += checkboxChanged;
//
// toolTip1
//
this.toolTip1.AutoPopDelay = 10000;
this.toolTip1.InitialDelay = 500;
this.toolTip1.ReshowDelay = 100;
this.toolTip1.ToolTipTitle = "Info";
toolTip1.AutoPopDelay = 10000;
toolTip1.InitialDelay = 500;
toolTip1.ReshowDelay = 100;
toolTip1.ToolTipTitle = "Info";
//
// cbEncoding
//
this.cbEncoding.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cbEncoding.Enabled = false;
this.cbEncoding.FormattingEnabled = true;
this.cbEncoding.Location = new System.Drawing.Point(140, 146);
this.cbEncoding.Name = "cbEncoding";
this.cbEncoding.Size = new System.Drawing.Size(121, 21);
this.cbEncoding.TabIndex = 13;
cbEncoding.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
cbEncoding.Enabled = false;
cbEncoding.FormattingEnabled = true;
cbEncoding.Location = new System.Drawing.Point(140, 146);
cbEncoding.Name = "cbEncoding";
cbEncoding.Size = new System.Drawing.Size(121, 23);
cbEncoding.TabIndex = 13;
//
// panel1
//
this.panel1.Controls.Add(this.pbChar2);
this.panel1.Controls.Add(this.pbChar1);
this.panel1.Location = new System.Drawing.Point(6, 24);
this.panel1.Name = "panel1";
this.panel1.Size = new System.Drawing.Size(200, 124);
this.panel1.TabIndex = 14;
panel1.Controls.Add(pbChar2);
panel1.Controls.Add(pbChar1);
panel1.Location = new System.Drawing.Point(6, 24);
panel1.Name = "panel1";
panel1.Size = new System.Drawing.Size(200, 124);
panel1.TabIndex = 14;
//
// pbChar2
//
this.pbChar2.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.pbChar2.Location = new System.Drawing.Point(100, 0);
this.pbChar2.Name = "pbChar2";
this.pbChar2.Size = new System.Drawing.Size(100, 124);
this.pbChar2.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
this.pbChar2.TabIndex = 1;
this.pbChar2.TabStop = false;
pbChar2.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
pbChar2.Location = new System.Drawing.Point(100, 0);
pbChar2.Name = "pbChar2";
pbChar2.Size = new System.Drawing.Size(100, 124);
pbChar2.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
pbChar2.TabIndex = 1;
pbChar2.TabStop = false;
//
// pbChar1
//
this.pbChar1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.pbChar1.Location = new System.Drawing.Point(0, 0);
this.pbChar1.Name = "pbChar1";
this.pbChar1.Size = new System.Drawing.Size(100, 124);
this.pbChar1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
this.pbChar1.TabIndex = 0;
this.pbChar1.TabStop = false;
pbChar1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
pbChar1.Location = new System.Drawing.Point(0, 0);
pbChar1.Name = "pbChar1";
pbChar1.Size = new System.Drawing.Size(100, 124);
pbChar1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
pbChar1.TabIndex = 0;
pbChar1.TabStop = false;
//
// btnFont
//
this.btnFont.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.btnFont.Location = new System.Drawing.Point(6, 178);
this.btnFont.Name = "btnFont";
this.btnFont.Size = new System.Drawing.Size(71, 23);
this.btnFont.TabIndex = 15;
this.btnFont.Text = "Font ...";
this.btnFont.UseVisualStyleBackColor = true;
this.btnFont.Click += new System.EventHandler(this.btnFont_Click);
btnFont.Anchor = System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left;
btnFont.Location = new System.Drawing.Point(6, 178);
btnFont.Name = "btnFont";
btnFont.Size = new System.Drawing.Size(71, 23);
btnFont.TabIndex = 15;
btnFont.Text = "Font ...";
btnFont.UseVisualStyleBackColor = true;
btnFont.Click += btnFont_Click;
//
// dlgFont
//
this.dlgFont.Font = new System.Drawing.Font("Courier New", 15.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
this.dlgFont.ShowEffects = false;
dlgFont.Font = new System.Drawing.Font("Courier New", 15.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, 204);
dlgFont.ShowEffects = false;
//
// cbFontBased
//
this.cbFontBased.AutoSize = true;
this.cbFontBased.Location = new System.Drawing.Point(24, 130);
this.cbFontBased.Name = "cbFontBased";
this.cbFontBased.Size = new System.Drawing.Size(101, 17);
this.cbFontBased.TabIndex = 16;
this.cbFontBased.Text = "Based on a font";
this.cbFontBased.UseVisualStyleBackColor = true;
this.cbFontBased.CheckedChanged += new System.EventHandler(this.checkboxChanged);
cbFontBased.AutoSize = true;
cbFontBased.Location = new System.Drawing.Point(24, 130);
cbFontBased.Name = "cbFontBased";
cbFontBased.Size = new System.Drawing.Size(108, 19);
cbFontBased.TabIndex = 16;
cbFontBased.Text = "Based on a font";
cbFontBased.UseVisualStyleBackColor = true;
cbFontBased.CheckedChanged += checkboxChanged;
//
// lblFont
//
this.lblFont.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.lblFont.Location = new System.Drawing.Point(83, 183);
this.lblFont.Name = "lblFont";
this.lblFont.Size = new System.Drawing.Size(123, 18);
this.lblFont.TabIndex = 17;
this.lblFont.Text = "font";
lblFont.Anchor = System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left;
lblFont.Location = new System.Drawing.Point(83, 183);
lblFont.Name = "lblFont";
lblFont.Size = new System.Drawing.Size(123, 18);
lblFont.TabIndex = 17;
lblFont.Text = "font";
//
// nudShiftX
//
this.nudShiftX.Location = new System.Drawing.Point(61, 2);
this.nudShiftX.Minimum = new decimal(new int[] {
100,
0,
0,
-2147483648});
this.nudShiftX.Name = "nudShiftX";
this.nudShiftX.Size = new System.Drawing.Size(45, 20);
this.nudShiftX.TabIndex = 18;
this.nudShiftX.ValueChanged += new System.EventHandler(this.nudNewX_ValueChanged);
nudShiftX.Location = new System.Drawing.Point(61, 2);
nudShiftX.Minimum = new decimal(new int[] { 100, 0, 0, int.MinValue });
nudShiftX.Name = "nudShiftX";
nudShiftX.Size = new System.Drawing.Size(45, 23);
nudShiftX.TabIndex = 18;
nudShiftX.ValueChanged += nudNewX_ValueChanged;
//
// nudShiftY
//
this.nudShiftY.Location = new System.Drawing.Point(161, 2);
this.nudShiftY.Minimum = new decimal(new int[] {
100,
0,
0,
-2147483648});
this.nudShiftY.Name = "nudShiftY";
this.nudShiftY.Size = new System.Drawing.Size(45, 20);
this.nudShiftY.TabIndex = 19;
this.nudShiftY.ValueChanged += new System.EventHandler(this.nudNewX_ValueChanged);
nudShiftY.Location = new System.Drawing.Point(161, 2);
nudShiftY.Minimum = new decimal(new int[] { 100, 0, 0, int.MinValue });
nudShiftY.Name = "nudShiftY";
nudShiftY.Size = new System.Drawing.Size(45, 23);
nudShiftY.TabIndex = 19;
nudShiftY.ValueChanged += nudNewX_ValueChanged;
//
// lblShiftX
//
this.lblShiftX.AutoSize = true;
this.lblShiftX.Location = new System.Drawing.Point(14, 4);
this.lblShiftX.Name = "lblShiftX";
this.lblShiftX.Size = new System.Drawing.Size(41, 13);
this.lblShiftX.TabIndex = 20;
this.lblShiftX.Text = "Shift X:";
this.lblShiftX.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
lblShiftX.AutoSize = true;
lblShiftX.Location = new System.Drawing.Point(14, 4);
lblShiftX.Name = "lblShiftX";
lblShiftX.Size = new System.Drawing.Size(44, 15);
lblShiftX.TabIndex = 20;
lblShiftX.Text = "Shift X:";
lblShiftX.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
//
// lblShiftY
//
this.lblShiftY.AutoSize = true;
this.lblShiftY.Location = new System.Drawing.Point(114, 4);
this.lblShiftY.Name = "lblShiftY";
this.lblShiftY.Size = new System.Drawing.Size(41, 13);
this.lblShiftY.TabIndex = 21;
this.lblShiftY.Text = "Shift Y:";
this.lblShiftY.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
lblShiftY.AutoSize = true;
lblShiftY.Location = new System.Drawing.Point(114, 4);
lblShiftY.Name = "lblShiftY";
lblShiftY.Size = new System.Drawing.Size(44, 15);
lblShiftY.TabIndex = 21;
lblShiftY.Text = "Shift Y:";
lblShiftY.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
//
// pnlFont
//
this.pnlFont.Controls.Add(this.label4);
this.pnlFont.Controls.Add(this.label3);
this.pnlFont.Controls.Add(this.nudChar2);
this.pnlFont.Controls.Add(this.nudChar1);
this.pnlFont.Controls.Add(this.lblShiftX);
this.pnlFont.Controls.Add(this.lblShiftY);
this.pnlFont.Controls.Add(this.panel1);
this.pnlFont.Controls.Add(this.btnFont);
this.pnlFont.Controls.Add(this.nudShiftY);
this.pnlFont.Controls.Add(this.lblFont);
this.pnlFont.Controls.Add(this.nudShiftX);
this.pnlFont.Dock = System.Windows.Forms.DockStyle.Right;
this.pnlFont.Location = new System.Drawing.Point(270, 0);
this.pnlFont.Name = "pnlFont";
this.pnlFont.Size = new System.Drawing.Size(214, 211);
this.pnlFont.TabIndex = 22;
this.pnlFont.Visible = false;
pnlFont.Controls.Add(label4);
pnlFont.Controls.Add(label3);
pnlFont.Controls.Add(nudChar2);
pnlFont.Controls.Add(nudChar1);
pnlFont.Controls.Add(lblShiftX);
pnlFont.Controls.Add(lblShiftY);
pnlFont.Controls.Add(panel1);
pnlFont.Controls.Add(btnFont);
pnlFont.Controls.Add(nudShiftY);
pnlFont.Controls.Add(lblFont);
pnlFont.Controls.Add(nudShiftX);
pnlFont.Dock = System.Windows.Forms.DockStyle.Right;
pnlFont.Location = new System.Drawing.Point(270, 0);
pnlFont.Name = "pnlFont";
pnlFont.Size = new System.Drawing.Size(214, 211);
pnlFont.TabIndex = 22;
pnlFont.Visible = false;
//
// label4
//
this.label4.AutoSize = true;
this.label4.Location = new System.Drawing.Point(112, 152);
this.label4.Name = "label4";
this.label4.Size = new System.Drawing.Size(45, 13);
this.label4.TabIndex = 25;
this.label4.Text = "Sample:";
this.label4.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
label4.AutoSize = true;
label4.Location = new System.Drawing.Point(112, 152);
label4.Name = "label4";
label4.Size = new System.Drawing.Size(49, 15);
label4.TabIndex = 25;
label4.Text = "Sample:";
label4.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
//
// label3
//
this.label3.AutoSize = true;
this.label3.Location = new System.Drawing.Point(14, 152);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(45, 13);
this.label3.TabIndex = 24;
this.label3.Text = "Sample:";
this.label3.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
label3.AutoSize = true;
label3.Location = new System.Drawing.Point(14, 152);
label3.Name = "label3";
label3.Size = new System.Drawing.Size(49, 15);
label3.TabIndex = 24;
label3.Text = "Sample:";
label3.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
//
// nudChar2
//
this.nudChar2.Location = new System.Drawing.Point(161, 149);
this.nudChar2.Maximum = new decimal(new int[] {
255,
0,
0,
0});
this.nudChar2.Name = "nudChar2";
this.nudChar2.Size = new System.Drawing.Size(45, 20);
this.nudChar2.TabIndex = 23;
this.nudChar2.Value = new decimal(new int[] {
97,
0,
0,
0});
this.nudChar2.ValueChanged += new System.EventHandler(this.nudNewX_ValueChanged);
nudChar2.Location = new System.Drawing.Point(161, 149);
nudChar2.Maximum = new decimal(new int[] { 255, 0, 0, 0 });
nudChar2.Name = "nudChar2";
nudChar2.Size = new System.Drawing.Size(45, 23);
nudChar2.TabIndex = 23;
nudChar2.Value = new decimal(new int[] { 97, 0, 0, 0 });
nudChar2.ValueChanged += nudNewX_ValueChanged;
//
// nudChar1
//
this.nudChar1.Location = new System.Drawing.Point(61, 149);
this.nudChar1.Maximum = new decimal(new int[] {
255,
0,
0,
0});
this.nudChar1.Name = "nudChar1";
this.nudChar1.Size = new System.Drawing.Size(45, 20);
this.nudChar1.TabIndex = 22;
this.nudChar1.Value = new decimal(new int[] {
65,
0,
0,
0});
this.nudChar1.ValueChanged += new System.EventHandler(this.nudNewX_ValueChanged);
nudChar1.Location = new System.Drawing.Point(61, 149);
nudChar1.Maximum = new decimal(new int[] { 255, 0, 0, 0 });
nudChar1.Name = "nudChar1";
nudChar1.Size = new System.Drawing.Size(45, 23);
nudChar1.TabIndex = 22;
nudChar1.Value = new decimal(new int[] { 65, 0, 0, 0 });
nudChar1.ValueChanged += nudNewX_ValueChanged;
//
// cbDigits
//
this.cbDigits.AutoSize = true;
this.cbDigits.Location = new System.Drawing.Point(140, 54);
this.cbDigits.Name = "cbDigits";
this.cbDigits.Size = new System.Drawing.Size(74, 17);
this.cbDigits.TabIndex = 23;
this.cbDigits.Text = "Digits only";
this.cbDigits.UseVisualStyleBackColor = true;
this.cbDigits.CheckedChanged += new System.EventHandler(this.checkboxChanged);
cbDigits.AutoSize = true;
cbDigits.Location = new System.Drawing.Point(140, 54);
cbDigits.Name = "cbDigits";
cbDigits.Size = new System.Drawing.Size(82, 19);
cbDigits.TabIndex = 23;
cbDigits.Text = "Digits only";
cbDigits.UseVisualStyleBackColor = true;
cbDigits.CheckedChanged += checkboxChanged;
//
// New
//
this.AcceptButton = this.btnOK;
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
this.CancelButton = this.btnCancel;
this.ClientSize = new System.Drawing.Size(484, 211);
this.Controls.Add(this.cbDigits);
this.Controls.Add(this.pnlFont);
this.Controls.Add(this.cbFontBased);
this.Controls.Add(this.cbEncoding);
this.Controls.Add(this.cbSingle);
this.Controls.Add(this.btnCancel);
this.Controls.Add(this.btnOK);
this.Controls.Add(this.cbExtended);
this.Controls.Add(this.cbLatin);
this.Controls.Add(this.cbNotPrintable);
this.Controls.Add(this.rbVar);
this.Controls.Add(this.rbMono);
this.Controls.Add(this.label2);
this.Controls.Add(this.label1);
this.Controls.Add(this.nudNewY);
this.Controls.Add(this.nudNewX);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
this.MaximizeBox = false;
this.MinimizeBox = false;
this.MinimumSize = new System.Drawing.Size(300, 220);
this.Name = "New";
this.ShowIcon = false;
this.ShowInTaskbar = false;
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "New";
this.Load += new System.EventHandler(this.New_Load);
((System.ComponentModel.ISupportInitialize)(this.nudNewX)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.nudNewY)).EndInit();
this.panel1.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.pbChar2)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.pbChar1)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.nudShiftX)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.nudShiftY)).EndInit();
this.pnlFont.ResumeLayout(false);
this.pnlFont.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.nudChar2)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.nudChar1)).EndInit();
this.ResumeLayout(false);
this.PerformLayout();
AcceptButton = btnOK;
AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
CancelButton = btnCancel;
ClientSize = new System.Drawing.Size(484, 211);
Controls.Add(cbDigits);
Controls.Add(pnlFont);
Controls.Add(cbFontBased);
Controls.Add(cbEncoding);
Controls.Add(cbSingle);
Controls.Add(btnCancel);
Controls.Add(btnOK);
Controls.Add(cbExtended);
Controls.Add(cbLatin);
Controls.Add(cbNotPrintable);
Controls.Add(rbVar);
Controls.Add(rbMono);
Controls.Add(label2);
Controls.Add(label1);
Controls.Add(nudNewY);
Controls.Add(nudNewX);
FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
MaximizeBox = false;
MinimizeBox = false;
MinimumSize = new System.Drawing.Size(300, 220);
Name = "New";
ShowIcon = false;
ShowInTaskbar = false;
StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
Text = "New";
Load += New_Load;
((System.ComponentModel.ISupportInitialize)nudNewX).EndInit();
((System.ComponentModel.ISupportInitialize)nudNewY).EndInit();
panel1.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)pbChar2).EndInit();
((System.ComponentModel.ISupportInitialize)pbChar1).EndInit();
((System.ComponentModel.ISupportInitialize)nudShiftX).EndInit();
((System.ComponentModel.ISupportInitialize)nudShiftY).EndInit();
pnlFont.ResumeLayout(false);
pnlFont.PerformLayout();
((System.ComponentModel.ISupportInitialize)nudChar2).EndInit();
((System.ComponentModel.ISupportInitialize)nudChar1).EndInit();
ResumeLayout(false);
PerformLayout();
}

View File

@@ -108,8 +108,8 @@ namespace McBitFont {
Bitmap bmp, result;
Graphics g;
chars[0] = mainForm.decodeSymbol((int)nudChar1.Value);
chars[1] = mainForm.decodeSymbol((int)nudChar2.Value);
chars[0] = mainForm.DecodeSymbol((int)nudChar1.Value);
chars[1] = mainForm.DecodeSymbol((int)nudChar2.Value);
for (int i = 0; i < 2; i++) {
bmp = new Bitmap((int)nudNewX.Value, (int)nudNewY.Value);
g = Graphics.FromImage(bmp);

View File

@@ -1,17 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
@@ -26,36 +26,36 @@
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->

View File

@@ -1,36 +0,0 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// Общие сведения об этой сборке предоставляются следующим набором
// набора атрибутов. Измените значения этих атрибутов для изменения сведений,
// связанных со сборкой.
[assembly: AssemblyTitle("McBitFont")]
[assembly: AssemblyDescription("McFLY's Bit Font and Image Editor")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("McBitFont")]
[assembly: AssemblyCopyright("© Anton Mukhin, 2023")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Установка значения False для параметра ComVisible делает типы в этой сборке невидимыми
// для компонентов COM. Если необходимо обратиться к типу в этой сборке через
// COM, следует установить атрибут ComVisible в TRUE для этого типа.
[assembly: ComVisible(false)]
// Следующий GUID служит для идентификации библиотеки типов, если этот проект будет видимым для COM
[assembly: Guid("7c01529e-4414-405f-9b57-19fa4af8ed60")]
// Сведения о версии сборки состоят из указанных ниже четырех значений:
//
// Основной номер версии
// Дополнительный номер версии
// Номер сборки
// Редакция
//
// Можно задать все значения или принять номера сборки и редакции по умолчанию
// используя "*", как показано ниже:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.7.0.0")]
[assembly: AssemblyFileVersion("1.7.0.0")]

View File

@@ -1,10 +1,10 @@
//------------------------------------------------------------------------------
// <auto-generated>
// Этот код создан программой.
// Исполняемая версия:4.0.30319.42000
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае
// повторной генерации кода.
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
@@ -13,12 +13,12 @@ namespace McBitFont.Properties {
/// <summary>
/// Класс ресурса со строгой типизацией для поиска локализованных строк и т.д.
/// A strongly-typed resource class, for looking up localized strings, etc.
/// </summary>
// Этот класс создан автоматически классом StronglyTypedResourceBuilder
// с помощью такого средства, как ResGen или Visual Studio.
// Чтобы добавить или удалить член, измените файл .ResX и снова запустите ResGen
// с параметром /str или перестройте свой проект VS.
// This class was auto-generated by the StronglyTypedResourceBuilder
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
@@ -33,7 +33,7 @@ namespace McBitFont.Properties {
}
/// <summary>
/// Возвращает кэшированный экземпляр ResourceManager, использованный этим классом.
/// Returns the cached ResourceManager instance used by this class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager {
@@ -47,8 +47,8 @@ namespace McBitFont.Properties {
}
/// <summary>
/// Перезаписывает свойство CurrentUICulture текущего потока для всех
/// обращений к ресурсу с помощью этого класса ресурса со строгой типизацией.
/// Overrides the current thread's CurrentUICulture property for all
/// resource lookups using this strongly typed resource class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
@@ -61,77 +61,167 @@ namespace McBitFont.Properties {
}
/// <summary>
/// Поиск локализованного ресурса типа System.Drawing.Bitmap.
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap action_add {
internal static System.Drawing.Bitmap add {
get {
object obj = ResourceManager.GetObject("action_add", resourceCulture);
object obj = ResourceManager.GetObject("add", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Поиск локализованного ресурса типа System.Drawing.Bitmap.
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap action_check {
internal static System.Drawing.Bitmap arrow_inout {
get {
object obj = ResourceManager.GetObject("action_check", resourceCulture);
object obj = ResourceManager.GetObject("arrow_inout", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Поиск локализованного ресурса типа System.Drawing.Bitmap.
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap action_remove {
internal static System.Drawing.Bitmap arrow_out {
get {
object obj = ResourceManager.GetObject("action_remove", resourceCulture);
object obj = ResourceManager.GetObject("arrow_out", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Поиск локализованного ресурса типа System.Drawing.Bitmap.
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap arrow_back {
internal static System.Drawing.Bitmap arrow_redo {
get {
object obj = ResourceManager.GetObject("arrow_back", resourceCulture);
object obj = ResourceManager.GetObject("arrow_redo", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Поиск локализованного ресурса типа System.Drawing.Bitmap.
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap arrow_down {
internal static System.Drawing.Bitmap arrow_turn_left {
get {
object obj = ResourceManager.GetObject("arrow_down", resourceCulture);
object obj = ResourceManager.GetObject("arrow_turn_left", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Поиск локализованного ресурса типа System.Drawing.Bitmap.
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap arrow_next {
internal static System.Drawing.Bitmap arrow_turn_right {
get {
object obj = ResourceManager.GetObject("arrow_next", resourceCulture);
object obj = ResourceManager.GetObject("arrow_turn_right", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Поиск локализованного ресурса типа System.Drawing.Bitmap.
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap arrow_top {
internal static System.Drawing.Bitmap arrow_undo {
get {
object obj = ResourceManager.GetObject("arrow_top", resourceCulture);
object obj = ResourceManager.GetObject("arrow_undo", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Поиск локализованного ресурса типа System.Drawing.Bitmap.
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap calculator {
get {
object obj = ResourceManager.GetObject("calculator", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap Canvas_Clear {
get {
object obj = ResourceManager.GetObject("Canvas_Clear", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap Canvas_Fill {
get {
object obj = ResourceManager.GetObject("Canvas_Fill", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap delete {
get {
object obj = ResourceManager.GetObject("delete", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap fam_base {
get {
object obj = ResourceManager.GetObject("fam_base", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap fam_lines {
get {
object obj = ResourceManager.GetObject("fam_lines", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap fam_mid {
get {
object obj = ResourceManager.GetObject("fam_mid", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap fam_rectt {
get {
object obj = ResourceManager.GetObject("fam_rectt", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap fam_top {
get {
object obj = ResourceManager.GetObject("fam_top", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap Famfamfam_Silk_Disk_16 {
get {
@@ -141,7 +231,7 @@ namespace McBitFont.Properties {
}
/// <summary>
/// Поиск локализованного ресурса типа System.Drawing.Bitmap.
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap Famfamfam_Silk_Door_out_16 {
get {
@@ -151,27 +241,7 @@ namespace McBitFont.Properties {
}
/// <summary>
/// Поиск локализованного ресурса типа System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap Famfamfam_Silk_Folder_16 {
get {
object obj = ResourceManager.GetObject("Famfamfam-Silk-Folder.16", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Поиск локализованного ресурса типа System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap Famfamfam_Silk_Folder_page_16 {
get {
object obj = ResourceManager.GetObject("Famfamfam-Silk-Folder-page.16", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Поиск локализованного ресурса типа System.Drawing.Bitmap.
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap Famfamfam_Silk_Page_copy_16 {
get {
@@ -181,7 +251,7 @@ namespace McBitFont.Properties {
}
/// <summary>
/// Поиск локализованного ресурса типа System.Drawing.Bitmap.
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap Famfamfam_Silk_Page_paste_16 {
get {
@@ -191,7 +261,7 @@ namespace McBitFont.Properties {
}
/// <summary>
/// Поиск локализованного ресурса типа System.Drawing.Bitmap.
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap Famfamfam_Silk_Page_white_16 {
get {
@@ -201,7 +271,7 @@ namespace McBitFont.Properties {
}
/// <summary>
/// Поиск локализованного ресурса типа System.Drawing.Bitmap.
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap Famfamfam_Silk_Shape_flip_horizontal_16 {
get {
@@ -211,7 +281,7 @@ namespace McBitFont.Properties {
}
/// <summary>
/// Поиск локализованного ресурса типа System.Drawing.Bitmap.
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap Famfamfam_Silk_Shape_flip_vertical_16 {
get {
@@ -221,7 +291,7 @@ namespace McBitFont.Properties {
}
/// <summary>
/// Поиск локализованного ресурса типа System.Drawing.Bitmap.
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap file {
get {
@@ -231,7 +301,7 @@ namespace McBitFont.Properties {
}
/// <summary>
/// Поиск локализованного ресурса типа System.Drawing.Bitmap.
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap folder_open {
get {
@@ -241,7 +311,27 @@ namespace McBitFont.Properties {
}
/// <summary>
/// Поиск локализованного ресурса типа System.Drawing.Bitmap.
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap folder_table {
get {
object obj = ResourceManager.GetObject("folder_table", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap font {
get {
object obj = ResourceManager.GetObject("font", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap icon {
get {
@@ -251,7 +341,7 @@ namespace McBitFont.Properties {
}
/// <summary>
/// Поиск локализованного ресурса типа System.Drawing.Bitmap.
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap icon_32 {
get {
@@ -261,7 +351,7 @@ namespace McBitFont.Properties {
}
/// <summary>
/// Поиск локализованного ресурса типа System.Drawing.Bitmap.
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap icon_64 {
get {
@@ -271,21 +361,161 @@ namespace McBitFont.Properties {
}
/// <summary>
/// Поиск локализованного ресурса типа System.Drawing.Bitmap.
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap Ionic_Ionicons_Invert_mode_outline_16 {
internal static System.Drawing.Bitmap picture_go {
get {
object obj = ResourceManager.GetObject("Ionic-Ionicons-Invert-mode-outline.16", resourceCulture);
object obj = ResourceManager.GetObject("picture_go", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Поиск локализованного ресурса типа System.Drawing.Bitmap.
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap save {
internal static System.Drawing.Bitmap picture_save {
get {
object obj = ResourceManager.GetObject("save", resourceCulture);
object obj = ResourceManager.GetObject("picture_save", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <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>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap z_align_center {
get {
object obj = ResourceManager.GetObject("z_align_center", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap z_asterisk {
get {
object obj = ResourceManager.GetObject("z_asterisk", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap z_contrast {
get {
object obj = ResourceManager.GetObject("z_contrast", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap z_down {
get {
object obj = ResourceManager.GetObject("z_down", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap z_export {
get {
object obj = ResourceManager.GetObject("z_export", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap z_folder_image {
get {
object obj = ResourceManager.GetObject("z_folder_image", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap z_left {
get {
object obj = ResourceManager.GetObject("z_left", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap z_redo {
get {
object obj = ResourceManager.GetObject("z_redo", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap z_right {
get {
object obj = ResourceManager.GetObject("z_right", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap z_shading {
get {
object obj = ResourceManager.GetObject("z_shading", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap z_tick {
get {
object obj = ResourceManager.GetObject("z_tick", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap z_undo {
get {
object obj = ResourceManager.GetObject("z_undo", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap z_uo {
get {
object obj = ResourceManager.GetObject("z_uo", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}

View File

@@ -118,73 +118,142 @@
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="Ionic-Ionicons-Invert-mode-outline.16" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Ionic-Ionicons-Invert-mode-outline.16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
<data name="fam_mid" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\fam_mid.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="arrow_next" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\arrow_next.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
<data name="z_left" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\arrow_left.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<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>
<data name="z_export" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\package_go.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="arrow_back" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\arrow_back.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="action_check" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\action_check.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<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>
</data>
<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>
</data>
<data name="save" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\save.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="Famfamfam-Silk-Door-out.16" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Famfamfam-Silk-Door-out.16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="Famfamfam-Silk-Folder-page.16" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Famfamfam-Silk-Folder-page.16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="Famfamfam-Silk-Folder.16" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Famfamfam-Silk-Folder.16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="action_add" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\action_add.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="folder_open" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\folder_open.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
<data name="z_contrast" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\contrast.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="Famfamfam-Silk-Page-paste.16" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Famfamfam-Silk-Page-paste.16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="action_remove" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\action_remove.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
<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>
</data>
<data name="folder_open" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\folder_open.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<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>
</data>
<data name="picture_go" 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>
</data>
<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>
</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="picture_save" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\picture_save.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">
<value>..\Resources\redo.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">
<value>..\Resources\icon.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="z_right" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\arrow_right.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="calculator" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\calculator.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="z_asterisk" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\asterisk_orange.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="z_down" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\..\icons\famfamfam\arrow_down.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="Canvas_Clear" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Canvas_Clear.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="z_uo" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\arrow_up.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="Famfamfam-Silk-Door-out.16" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Famfamfam-Silk-Door-out.16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="file" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\file.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="Famfamfam-Silk-Shape-flip-vertical.16" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Famfamfam-Silk-Shape-flip-vertical.16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
<data name="z_align_center" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\shape_align_center.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="Famfamfam-Silk-Shape-flip-horizontal.16" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Famfamfam-Silk-Shape-flip-horizontal.16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
<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>
</data>
<data name="arrow_top" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\arrow_top.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
<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="arrow_down" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\arrow_down.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
<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>
</data>
<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>
</data>
<data name="fam_lines" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\fam_lines.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">
<value>..\Resources\tick.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</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_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>
</data>
<data name="fam_base" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\fam_base.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="fam_rectt" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\fam_rectt.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<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>
</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="text_letterspacing2" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\text_letterspacing2.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="Canvas_Fill" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Canvas_Fill.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="Famfamfam-Silk-Shape-flip-horizontal.16" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Famfamfam-Silk-Shape-flip-horizontal.16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="Famfamfam-Silk-Shape-flip-vertical.16" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Famfamfam-Silk-Shape-flip-vertical.16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="z_folder_image" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\folder_image.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="arrow_undo" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\undo.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="arrow_out" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\arrow_out.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<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>
</data>
<data name="fam_top" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\fam_top.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
</root>

View File

@@ -9,14 +9,14 @@
//------------------------------------------------------------------------------
namespace McBitFont.Properties {
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.14.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
public static Settings Default {
get {
return defaultInstance;

Binary file not shown.

After

Width:  |  Height:  |  Size: 595 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 547 B

BIN
McBitFont/Resources/add.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 733 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 551 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 551 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 344 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 594 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 625 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 332 B

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: 631 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 372 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 760 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 543 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 381 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 715 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 174 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 137 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 136 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 677 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 675 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 567 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 898 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 758 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 755 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 561 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 225 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 384 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 357 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 537 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 566 B

View File

@@ -1,16 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Costura.Fody" version="6.0.0" targetFramework="net472" developmentDependency="true" />
<package id="Fody" version="6.8.2" targetFramework="net472" developmentDependency="true" />
<package id="MessagePack" version="3.1.3" targetFramework="net472" />
<package id="MessagePack.Annotations" version="3.1.3" targetFramework="net472" />
<package id="MessagePackAnalyzer" version="3.1.3" targetFramework="net472" developmentDependency="true" />
<package id="Microsoft.Bcl.AsyncInterfaces" version="8.0.0" targetFramework="net472" />
<package id="Microsoft.NET.StringTools" version="17.11.4" targetFramework="net472" />
<package id="System.Buffers" version="4.5.1" targetFramework="net472" />
<package id="System.Collections.Immutable" version="8.0.0" targetFramework="net472" />
<package id="System.Memory" version="4.5.5" targetFramework="net472" />
<package id="System.Numerics.Vectors" version="4.5.0" targetFramework="net472" />
<package id="System.Runtime.CompilerServices.Unsafe" version="6.0.0" targetFramework="net472" />
<package id="System.Threading.Tasks.Extensions" version="4.5.4" targetFramework="net472" />
</packages>

View File

@@ -2,35 +2,72 @@
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
- Basic pixel manipulations: shift, flip, invert, etc...
- Import an image
- Save / Load your project for later edits
- Export as a C array in different formats
- Import from text C array
- Export to a PNG image showing all the characters in a table
- Test your font in special dialog
Requires .Net Framework 4.7+
**Requires:**
- Windows 7+
- .NET 9
Some basic hints on the interface:
- Mouse 1 to mark a puxel black
- Mouse 2 to mark a puxel white
**Some basic hints on the interface:**
- Mouse 1 to mark a pixel black
- Mouse 2 to mark a pixel white
- Drag the mouse holding a button to draw pixels
- Hold middle mouse button to drag the canvas
- Hold Shift to constrain painting horizontally
- Hold Ctrl to constrain painting vertically
- Mouse Scroll to scroll up and down
- Crtl + scroll to zoom
- Shift + scroll to scroll left and right
- Crtl + scroll to zoom
- 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
Download in the Releases section!
#### Important:
**Since v2.0 new save file format is implemented. You can use [McBitFont v1.7](https://gitea.mcflyer.ru/McFLY/McBitFont/releases/tag/v1.7) to convert old saved files to the new format.**
### Screenshots:
Main window
![Main window](/images/Screenshot_01.png)
![Main window](/images/Screenshot_Main.png)
New project dialog
![New project](/images/Screenshot_02.png)
![New project](/images/Screenshot_New.png)
Font test dialog
![Font tester](/images/Screenshot_Font-tester.png)
Export dialog
![Export](/images/Screenshot_03.png)
![Export](/images/Screenshot_Export.png)
Import Image dialog
![Import Image](/images/Screenshot_Import-image.png)
Code Shift dialog
![Code Shift](/images/Screenshot_Code-shift.png)
Font PNG export example
![PNG export example](/images/Font_Minecraft_Rus_5x7_vw.png)
Frame screenshot dialog
![Frame screenshot](/images/Screenshot_Frame-screenshot.png)

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.

285
STM32_HAL_Lib/fonts.c Normal file
View 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
View 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_ */

141
STM32_HAL_Lib/mctext.c Normal file
View File

@@ -0,0 +1,141 @@
/*
* mctext.c
*
* Created on: May 16, 2025
* Author: Anton Mukhin
*/
#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_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 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
uint8_t sx, sy; // To paint scaled pixel
if (c < fc || c > lc) return 0;
if (x > LCDWIDTH) return 0;
if (y + h * scale > 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*scale; i+=scale) { // Going through columns
if (x+i > LCDWIDTH) return i-1; // Check if we're out of display size
for (j=0; j<h*scale; j+=scale) { // Going through rows in column [i]
if (b == 0) seg = font[o];
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
}
}
} 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*scale; i+=scale) { // 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) {
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++;
}
//mct_SetPixel(x+i, y, color); // For testing purposes
}
}
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
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. 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) {
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*scale > LCDHEIGHT) return;
while (c[0] != 0) {
//if (x+w > LCDWIDTH) return;
w = mct_CharTS(x, y, (unsigned char)*c, color, font, transp, scale);
c++;
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);
}

29
STM32_HAL_Lib/mctext.h Normal file
View File

@@ -0,0 +1,29 @@
/*
* mctext.h
*
* Created on: May 16, 2025
* Author: Anton Mukhin
*/
#ifndef INC_MCTEXT_H_
#define INC_MCTEXT_H_
#include "stm32g0xx_hal.h"
// 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);
// 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
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,15 +1,11 @@
Application:
- Consider migrating to WPF in order to make DPI aware UI
V Export comments now respects "Code in Hex" checkbox on the main form
Functionality:
- Context menu in symbol navigator
- Delete symbols before/after selected
- Shift all symbols on code line (change symbol codes)
- Specify starting code (extends the shift)
- Ability to make monospaced font a variable width one
- Undo/Redo
- Image import from a file
- Import from a text array
- Rectangle selection to mass-paint, shift and mirror pixels
- "Packed" fonts export
Bugs:
V Frame modified flag persists when switching to another frame after rejected to save previous frame
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

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
examples/Cursors.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.

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.

Binary file not shown.

Some files were not shown because too many files have changed in this diff Show More