TODO feature: A button to Copy from Test font dialog to then paste into another frame

This commit is contained in:
Anton Mukhin
2025-06-02 18:03:52 +03:00
parent 9f6f5ba5d7
commit 3c656b36a7
4 changed files with 64 additions and 6 deletions

View File

@@ -61,7 +61,7 @@ namespace McBitFont {
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);
Array.Copy(f.data, newf.data, f.data.Length);
return newf;

View File

@@ -35,6 +35,7 @@
cbZoom = new System.Windows.Forms.ComboBox();
toolTip1 = new System.Windows.Forms.ToolTip(components);
chkBaseline = new System.Windows.Forms.CheckBox();
btnCopy = new System.Windows.Forms.Button();
((System.ComponentModel.ISupportInitialize)nudSpace).BeginInit();
SuspendLayout();
//
@@ -151,11 +152,27 @@
chkBaseline.UseVisualStyleBackColor = true;
chkBaseline.CheckedChanged += Scrolling;
//
// 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;
//
// FontTester
//
AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
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(cbZoom);
Controls.Add(lblZoom);
@@ -168,13 +185,14 @@
Controls.Add(lblSpace);
MaximizeBox = false;
MinimizeBox = false;
MinimumSize = new System.Drawing.Size(260, 260);
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();
@@ -193,5 +211,6 @@
private System.Windows.Forms.ToolTip toolTip1;
private System.Windows.Forms.ComboBox cbZoom;
private System.Windows.Forms.CheckBox chkBaseline;
private System.Windows.Forms.Button btnCopy;
}
}

View File

@@ -1,4 +1,5 @@
using System;
using MessagePack;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
@@ -24,6 +25,8 @@ namespace McBitFont {
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);
@@ -53,7 +56,7 @@ namespace McBitFont {
int space = (int)nudSpace.Value;
int index = 0;
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]);
if (f.Count == 1) {
// Draw the symbol
@@ -160,6 +163,42 @@ namespace McBitFont {
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);
}
}

View File

@@ -5,7 +5,7 @@ Application:
Functionality:
- Middle mouse - drag the canvas
- Straight line painting
- 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:
- Nothing selected after removing a symbol. Potential error throw on "Apply"