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"
This commit is contained in:
@@ -61,7 +61,7 @@ namespace McBitFont {
|
|||||||
public FrameMiniature? Canvas { get; set; } = canvas;
|
public FrameMiniature? Canvas { get; set; } = canvas;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static FrameMiniature CopyFrameSimple(FrameMiniature f) {
|
public static FrameMiniature CopyFrameSimple(FrameMiniature f) {
|
||||||
FrameMiniature newf = new(f.code, f.width, f.height);
|
FrameMiniature newf = new(f.code, f.width, f.height);
|
||||||
Array.Copy(f.data, newf.data, f.data.Length);
|
Array.Copy(f.data, newf.data, f.data.Length);
|
||||||
return newf;
|
return newf;
|
||||||
|
25
McBitFont/FontTester.Designer.cs
generated
25
McBitFont/FontTester.Designer.cs
generated
@@ -34,6 +34,7 @@
|
|||||||
lblZoom = new System.Windows.Forms.Label();
|
lblZoom = new System.Windows.Forms.Label();
|
||||||
cbZoom = new System.Windows.Forms.ComboBox();
|
cbZoom = new System.Windows.Forms.ComboBox();
|
||||||
toolTip1 = new System.Windows.Forms.ToolTip(components);
|
toolTip1 = new System.Windows.Forms.ToolTip(components);
|
||||||
|
btnCopy = new System.Windows.Forms.Button();
|
||||||
chkBaseline = new System.Windows.Forms.CheckBox();
|
chkBaseline = new System.Windows.Forms.CheckBox();
|
||||||
((System.ComponentModel.ISupportInitialize)nudSpace).BeginInit();
|
((System.ComponentModel.ISupportInitialize)nudSpace).BeginInit();
|
||||||
SuspendLayout();
|
SuspendLayout();
|
||||||
@@ -98,7 +99,7 @@
|
|||||||
vScroll.LargeChange = 25;
|
vScroll.LargeChange = 25;
|
||||||
vScroll.Location = new System.Drawing.Point(251, 84);
|
vScroll.Location = new System.Drawing.Point(251, 84);
|
||||||
vScroll.Name = "vScroll";
|
vScroll.Name = "vScroll";
|
||||||
vScroll.Size = new System.Drawing.Size(21, 125);
|
vScroll.Size = new System.Drawing.Size(21, 104);
|
||||||
vScroll.TabIndex = 17;
|
vScroll.TabIndex = 17;
|
||||||
vScroll.ValueChanged += Scrolling;
|
vScroll.ValueChanged += Scrolling;
|
||||||
//
|
//
|
||||||
@@ -140,6 +141,21 @@
|
|||||||
toolTip1.InitialDelay = 500;
|
toolTip1.InitialDelay = 500;
|
||||||
toolTip1.ReshowDelay = 100;
|
toolTip1.ReshowDelay = 100;
|
||||||
//
|
//
|
||||||
|
// btnCopy
|
||||||
|
//
|
||||||
|
btnCopy.Anchor = System.Windows.Forms.AnchorStyles.Bottom;
|
||||||
|
btnCopy.Image = Properties.Resources.Famfamfam_Silk_Page_copy_16;
|
||||||
|
btnCopy.ImageAlign = System.Drawing.ContentAlignment.MiddleRight;
|
||||||
|
btnCopy.Location = new System.Drawing.Point(110, 214);
|
||||||
|
btnCopy.Name = "btnCopy";
|
||||||
|
btnCopy.Size = new System.Drawing.Size(80, 30);
|
||||||
|
btnCopy.TabIndex = 21;
|
||||||
|
btnCopy.Text = " Copy";
|
||||||
|
btnCopy.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText;
|
||||||
|
toolTip1.SetToolTip(btnCopy, "Copy BitPixels you see to Clipboard");
|
||||||
|
btnCopy.UseVisualStyleBackColor = true;
|
||||||
|
btnCopy.MouseClick += Copy_Click;
|
||||||
|
//
|
||||||
// chkBaseline
|
// chkBaseline
|
||||||
//
|
//
|
||||||
chkBaseline.AutoSize = true;
|
chkBaseline.AutoSize = true;
|
||||||
@@ -155,7 +171,8 @@
|
|||||||
//
|
//
|
||||||
AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
|
AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
|
||||||
AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||||
ClientSize = new System.Drawing.Size(284, 221);
|
ClientSize = new System.Drawing.Size(284, 251);
|
||||||
|
Controls.Add(btnCopy);
|
||||||
Controls.Add(chkBaseline);
|
Controls.Add(chkBaseline);
|
||||||
Controls.Add(cbZoom);
|
Controls.Add(cbZoom);
|
||||||
Controls.Add(lblZoom);
|
Controls.Add(lblZoom);
|
||||||
@@ -168,13 +185,14 @@
|
|||||||
Controls.Add(lblSpace);
|
Controls.Add(lblSpace);
|
||||||
MaximizeBox = false;
|
MaximizeBox = false;
|
||||||
MinimizeBox = false;
|
MinimizeBox = false;
|
||||||
MinimumSize = new System.Drawing.Size(260, 260);
|
MinimumSize = new System.Drawing.Size(300, 290);
|
||||||
Name = "FontTester";
|
Name = "FontTester";
|
||||||
ShowIcon = false;
|
ShowIcon = false;
|
||||||
ShowInTaskbar = false;
|
ShowInTaskbar = false;
|
||||||
StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
|
StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
|
||||||
Text = "Font Tester";
|
Text = "Font Tester";
|
||||||
Load += FontTester_Load;
|
Load += FontTester_Load;
|
||||||
|
Resize += Form_Resize;
|
||||||
((System.ComponentModel.ISupportInitialize)nudSpace).EndInit();
|
((System.ComponentModel.ISupportInitialize)nudSpace).EndInit();
|
||||||
ResumeLayout(false);
|
ResumeLayout(false);
|
||||||
PerformLayout();
|
PerformLayout();
|
||||||
@@ -193,5 +211,6 @@
|
|||||||
private System.Windows.Forms.ToolTip toolTip1;
|
private System.Windows.Forms.ToolTip toolTip1;
|
||||||
private System.Windows.Forms.ComboBox cbZoom;
|
private System.Windows.Forms.ComboBox cbZoom;
|
||||||
private System.Windows.Forms.CheckBox chkBaseline;
|
private System.Windows.Forms.CheckBox chkBaseline;
|
||||||
|
private System.Windows.Forms.Button btnCopy;
|
||||||
}
|
}
|
||||||
}
|
}
|
@@ -1,4 +1,5 @@
|
|||||||
using System;
|
using MessagePack;
|
||||||
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.ComponentModel;
|
using System.ComponentModel;
|
||||||
using System.Data;
|
using System.Data;
|
||||||
@@ -24,6 +25,8 @@ namespace McBitFont {
|
|||||||
private int cellSize;
|
private int cellSize;
|
||||||
private int width;
|
private int width;
|
||||||
|
|
||||||
|
private readonly DataFormats.Format clpbFormat = DataFormats.GetFormat("McBitFontFrame");
|
||||||
|
|
||||||
public FontTester(int codepage, int height, int baseline, List<MainForm.FrameMiniature> frames) {
|
public FontTester(int codepage, int height, int baseline, List<MainForm.FrameMiniature> frames) {
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
|
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
|
||||||
@@ -53,7 +56,7 @@ namespace McBitFont {
|
|||||||
int space = (int)nudSpace.Value;
|
int space = (int)nudSpace.Value;
|
||||||
int index = 0;
|
int index = 0;
|
||||||
for (int c = 0; c < encoded.Length; c++) {
|
for (int c = 0; c < encoded.Length; c++) {
|
||||||
// Check if we have suck symbol
|
// Check if we have such symbol
|
||||||
var f = frames.FindAll(x => x.code == encoded[c]);
|
var f = frames.FindAll(x => x.code == encoded[c]);
|
||||||
if (f.Count == 1) {
|
if (f.Count == 1) {
|
||||||
// Draw the symbol
|
// Draw the symbol
|
||||||
@@ -160,6 +163,42 @@ namespace McBitFont {
|
|||||||
private void Scrolling(object sender, EventArgs e) {
|
private void Scrolling(object sender, EventArgs e) {
|
||||||
dotPanel.Invalidate();
|
dotPanel.Invalidate();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void Form_Resize(object sender, EventArgs e) {
|
||||||
|
btnCopy.Left = this.Width / 2 - 40;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Copy_Click(object sender, MouseEventArgs e) {
|
||||||
|
if (encoded.Length < 1) {
|
||||||
|
MessageBox.Show("Nothing to copy! Type some symbols first.", "Error!", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// Sycle through ecoded bytes of test text
|
||||||
|
int space = (int)nudSpace.Value;
|
||||||
|
int index = 0;
|
||||||
|
int i, j;
|
||||||
|
MainForm.FrameMiniature ff = new(0, width, frames[0].height);
|
||||||
|
for (int c = 0; c < encoded.Length; c++) {
|
||||||
|
// Check if we have such symbol
|
||||||
|
var f = frames.FindAll(x => x.code == encoded[c]);
|
||||||
|
if (f.Count == 1) {
|
||||||
|
// Draw the symbol
|
||||||
|
for (i = 0; i < f[0].width; i++) {
|
||||||
|
for (j = 0; j < f[0].height; j++) {
|
||||||
|
// Fill the frame with data
|
||||||
|
ff.data[index + i, j] = f[0].data[i, j];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
index += (f[0].width > 0 ? f[0].width + space : 0);
|
||||||
|
} else {
|
||||||
|
index += 5 + space;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Copy the frame we made into Clipboard
|
||||||
|
var bb = MessagePackSerializer.Serialize(ChangeHistory.CopyFrameSimple(ff));
|
||||||
|
DataObject clpbObj = new DataObject(clpbFormat.Name, bb);
|
||||||
|
Clipboard.SetDataObject(clpbObj, true);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
7
McBitFont/Form1.Designer.cs
generated
7
McBitFont/Form1.Designer.cs
generated
@@ -493,7 +493,10 @@
|
|||||||
// hScroll
|
// hScroll
|
||||||
//
|
//
|
||||||
hScroll.Anchor = System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right;
|
hScroll.Anchor = System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right;
|
||||||
|
hScroll.Enabled = false;
|
||||||
|
hScroll.LargeChange = 2;
|
||||||
hScroll.Location = new System.Drawing.Point(14, 609);
|
hScroll.Location = new System.Drawing.Point(14, 609);
|
||||||
|
hScroll.Maximum = 1;
|
||||||
hScroll.Name = "hScroll";
|
hScroll.Name = "hScroll";
|
||||||
hScroll.Size = new System.Drawing.Size(427, 21);
|
hScroll.Size = new System.Drawing.Size(427, 21);
|
||||||
hScroll.TabIndex = 14;
|
hScroll.TabIndex = 14;
|
||||||
@@ -502,8 +505,10 @@
|
|||||||
// vScroll
|
// vScroll
|
||||||
//
|
//
|
||||||
vScroll.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right;
|
vScroll.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right;
|
||||||
vScroll.LargeChange = 25;
|
vScroll.Enabled = false;
|
||||||
|
vScroll.LargeChange = 2;
|
||||||
vScroll.Location = new System.Drawing.Point(444, 31);
|
vScroll.Location = new System.Drawing.Point(444, 31);
|
||||||
|
vScroll.Maximum = 1;
|
||||||
vScroll.Name = "vScroll";
|
vScroll.Name = "vScroll";
|
||||||
vScroll.Size = new System.Drawing.Size(21, 575);
|
vScroll.Size = new System.Drawing.Size(21, 575);
|
||||||
vScroll.TabIndex = 15;
|
vScroll.TabIndex = 15;
|
||||||
|
@@ -59,7 +59,7 @@ namespace McBitFont {
|
|||||||
public bool monospaced = false;
|
public bool monospaced = false;
|
||||||
private bool modified = false;
|
private bool modified = false;
|
||||||
private bool prjModified = false;
|
private bool prjModified = false;
|
||||||
public const string version = "2.4";
|
public const string version = "2.5";
|
||||||
public string prjName = "Untitled";
|
public string prjName = "Untitled";
|
||||||
public string prjFileName = "";
|
public string prjFileName = "";
|
||||||
public int codepage = 1251;
|
public int codepage = 1251;
|
||||||
@@ -296,6 +296,7 @@ namespace McBitFont {
|
|||||||
if (w <= dotPanel.Width) {
|
if (w <= dotPanel.Width) {
|
||||||
hScroll.Enabled = false;
|
hScroll.Enabled = false;
|
||||||
hScroll.Value = 0;
|
hScroll.Value = 0;
|
||||||
|
vScroll.Maximum = 0;
|
||||||
} else {
|
} else {
|
||||||
hScroll.Maximum = w - dotPanel.Width + 12;
|
hScroll.Maximum = w - dotPanel.Width + 12;
|
||||||
hScroll.Minimum = 0;
|
hScroll.Minimum = 0;
|
||||||
@@ -305,6 +306,7 @@ namespace McBitFont {
|
|||||||
if (h <= dotPanel.Height) {
|
if (h <= dotPanel.Height) {
|
||||||
vScroll.Enabled = false;
|
vScroll.Enabled = false;
|
||||||
vScroll.Value = 0;
|
vScroll.Value = 0;
|
||||||
|
vScroll.Maximum = 0;
|
||||||
} else {
|
} else {
|
||||||
vScroll.Maximum = h - dotPanel.Height + 12;
|
vScroll.Maximum = h - dotPanel.Height + 12;
|
||||||
vScroll.Minimum = 0;
|
vScroll.Minimum = 0;
|
||||||
@@ -414,12 +416,48 @@ namespace McBitFont {
|
|||||||
dotPanel.Refresh();
|
dotPanel.Refresh();
|
||||||
}
|
}
|
||||||
|
|
||||||
private bool mouseDown = false;
|
private bool mouseDown = false; // Used in canvas history tracking and rectangle selection logics
|
||||||
private bool fChanged = false;
|
private bool fChanged = false; // Used in canvas history (undo / redo) tracking
|
||||||
|
private bool mouseDownMiddle = false; // Used in middle mouse dragging logic
|
||||||
|
private int mouseX, mouseY; // To remember last mouse X and Y (used in middle mouse dragging logic)
|
||||||
|
private int lastX = 0, lastY = 0; // Used for drawing straight lines
|
||||||
private void dotPanel_MouseMove(object sender, MouseEventArgs e) {
|
private void dotPanel_MouseMove(object sender, MouseEventArgs e) {
|
||||||
var rectSel = chkRectSelect.Checked;
|
var rectSel = chkRectSelect.Checked;
|
||||||
bool rectSelUpdated = false;
|
bool rectSelUpdated = false;
|
||||||
|
|
||||||
|
// Drag with middle mouse button
|
||||||
|
if (vScroll.Enabled || hScroll.Enabled) {
|
||||||
|
if (mouseDownMiddle) {
|
||||||
|
var dY = mouseY - e.Y <= -cellSize - gap || mouseY - e.Y >= cellSize + gap;
|
||||||
|
var dX = mouseX - e.X <= -cellSize - gap || mouseX - e.X >= cellSize + gap;
|
||||||
|
int newY = vScroll.Value;
|
||||||
|
int newX = hScroll.Value;
|
||||||
|
if (dX) {
|
||||||
|
newX += (mouseX - e.X);
|
||||||
|
if (newX < hScroll.Minimum) newX = hScroll.Minimum;
|
||||||
|
if (newX > hScroll.Maximum) newX = hScroll.Maximum;
|
||||||
|
mouseX = e.X;
|
||||||
|
hScroll.Value = newX;
|
||||||
|
}
|
||||||
|
if (dY) {
|
||||||
|
newY += (mouseY - e.Y);
|
||||||
|
if (newY < vScroll.Minimum) newY = vScroll.Minimum;
|
||||||
|
if (newY > vScroll.Maximum) newY = vScroll.Maximum;
|
||||||
|
mouseY = e.Y;
|
||||||
|
vScroll.Value = newY;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!mouseDownMiddle && e.Button == MouseButtons.Middle) {
|
||||||
|
mouseDownMiddle = true;
|
||||||
|
mouseX = e.X;
|
||||||
|
mouseY = e.Y;
|
||||||
|
}
|
||||||
|
if (mouseDownMiddle && e.Button == MouseButtons.None) {
|
||||||
|
mouseDownMiddle = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// Moving baseline
|
// Moving baseline
|
||||||
Rectangle rect1, rect2;
|
Rectangle rect1, rect2;
|
||||||
if (set_base) {
|
if (set_base) {
|
||||||
@@ -514,6 +552,15 @@ namespace McBitFont {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Check for Shift / Ctrl keys for straight lines
|
||||||
|
if (ModifierKeys.HasFlag(Keys.Shift)) {
|
||||||
|
j = lastY;
|
||||||
|
} else if (ModifierKeys.HasFlag(Keys.Control)) {
|
||||||
|
i = lastX;
|
||||||
|
}
|
||||||
|
lastX = i;
|
||||||
|
lastY = j;
|
||||||
|
|
||||||
// Paint black / white
|
// Paint black / white
|
||||||
if (e.Button == MouseButtons.Left && !f.data[i, j]) {
|
if (e.Button == MouseButtons.Left && !f.data[i, j]) {
|
||||||
f.data[i, j] = true;
|
f.data[i, j] = true;
|
||||||
@@ -988,8 +1035,11 @@ namespace McBitFont {
|
|||||||
var sel = miniList.SelectedItems[0].ImageKey;
|
var sel = miniList.SelectedItems[0].ImageKey;
|
||||||
int code = Convert.ToInt32(miniList.SelectedItems[0].ImageKey);
|
int code = Convert.ToInt32(miniList.SelectedItems[0].ImageKey);
|
||||||
FrameMiniature ff = frames.Find(x => x.code == code);
|
FrameMiniature ff = frames.Find(x => x.code == code);
|
||||||
|
bool isLast = frames.Last().Equals(ff);
|
||||||
frames.Remove(ff);
|
frames.Remove(ff);
|
||||||
miniList.SelectedItems[0].Remove();
|
miniList.SelectedItems[0].Remove();
|
||||||
|
|
||||||
|
miniList.Items[isLast ? miniList.Items.Count - 1 : 0].Selected = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void prependSymbolToolStripMenuItem_Click(object sender, EventArgs e) {
|
private void prependSymbolToolStripMenuItem_Click(object sender, EventArgs e) {
|
||||||
|
@@ -20,9 +20,9 @@
|
|||||||
<UseWindowsForms>true</UseWindowsForms>
|
<UseWindowsForms>true</UseWindowsForms>
|
||||||
<ImportWindowsDesktopTargets>true</ImportWindowsDesktopTargets>
|
<ImportWindowsDesktopTargets>true</ImportWindowsDesktopTargets>
|
||||||
<ApplicationIcon>icon_64.ico</ApplicationIcon>
|
<ApplicationIcon>icon_64.ico</ApplicationIcon>
|
||||||
<AssemblyVersion>2.4.0.0</AssemblyVersion>
|
<AssemblyVersion>2.5.0.0</AssemblyVersion>
|
||||||
<FileVersion>2.4.0.0</FileVersion>
|
<FileVersion>2.5.0.0</FileVersion>
|
||||||
<Version>$(VersionPrefix)2.4.0</Version>
|
<Version>$(VersionPrefix)2.5.0</Version>
|
||||||
<Copyright>Anton Mukhin</Copyright>
|
<Copyright>Anton Mukhin</Copyright>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
|
||||||
|
@@ -20,6 +20,8 @@ Some basic hints on the interface:
|
|||||||
- Mouse 1 to mark a pixel black
|
- Mouse 1 to mark a pixel black
|
||||||
- Mouse 2 to mark a pixel white
|
- Mouse 2 to mark a pixel white
|
||||||
- Drag the mouse holding a button to draw pixels
|
- Drag the mouse holding a button to draw pixels
|
||||||
|
- Hold Shift to constrain painting horizontally
|
||||||
|
- Hold Ctrl to constrain painting vertically
|
||||||
- Mouse Scroll to scroll up and down
|
- Mouse Scroll to scroll up and down
|
||||||
- Shift + scroll to scroll left and right
|
- Shift + scroll to scroll left and right
|
||||||
- Crtl + scroll to zoom
|
- Crtl + scroll to zoom
|
||||||
|
8
TODO.txt
8
TODO.txt
@@ -3,9 +3,9 @@ Application:
|
|||||||
|
|
||||||
|
|
||||||
Functionality:
|
Functionality:
|
||||||
- Middle mouse - drag the canvas
|
V Middle mouse - drag the canvas
|
||||||
- Straight line painting
|
V Straight line painting (hold Shift / Ctrl)
|
||||||
- A button to Copy from Test font dialog to then paste into another frame
|
V A button to Copy from Test font dialog to then paste into another frame
|
||||||
|
|
||||||
Bugs:
|
Bugs:
|
||||||
- Nothing selected after removing a symbol. Potential error throw on "Apply"
|
V Nothing selected after removing a symbol. Potential error throw on "Apply"
|
Binary file not shown.
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 12 KiB |
Reference in New Issue
Block a user