// BitmapFontEd
// Copyright (C) 2005 Ian Cowburn
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
//
// $Id$
//
using System;
using System.Drawing;
using System.Drawing.Imaging;
using System.Drawing.Drawing2D;
using System.Windows.Forms;
using System.Text;
using System.IO;
namespace BitmapFontEd
{
///
/// Description of MainForm.
///
public class MainForm : System.Windows.Forms.Form
{
private System.Windows.Forms.Label label2;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.MenuItem m_helpMenu;
private System.Windows.Forms.NumericUpDown m_codeSelect;
private System.Windows.Forms.GroupBox m_globaladjustGroup;
private System.Windows.Forms.GroupBox m_adjustGroup;
private System.Windows.Forms.Button m_scrollDown;
private System.Windows.Forms.Button m_scrollUp;
private System.Windows.Forms.MenuItem m_break1;
private System.Windows.Forms.MenuItem m_fileMenu;
private System.Windows.Forms.Button m_mirrorVertical;
private System.Windows.Forms.Button m_rotRight;
private System.Windows.Forms.Button m_revert;
private System.Windows.Forms.Button m_dropShadow;
private System.Windows.Forms.MenuItem m_about;
private System.Windows.Forms.Label label3;
private System.Windows.Forms.Button m_scrollRight;
private System.Windows.Forms.CheckBox m_applyAll;
private System.Windows.Forms.Button m_grabFont;
private System.Windows.Forms.Label label6;
private System.Windows.Forms.Button m_rotLeft;
private System.Windows.Forms.Label label4;
private System.Windows.Forms.TrackBar m_charSelect;
private System.Windows.Forms.MainMenu m_menu;
private System.Windows.Forms.Button m_resize;
private System.Windows.Forms.ComboBox m_asciiSelect;
private System.Windows.Forms.Button m_edge;
private System.Windows.Forms.MenuItem m_quit;
private System.Windows.Forms.MenuItem m_save;
private System.Windows.Forms.Label label5;
private System.Windows.Forms.MenuItem m_saveAs;
private System.Windows.Forms.Button m_scrollLeft;
private System.Windows.Forms.GroupBox m_editGroup;
private System.Windows.Forms.MenuItem m_new;
private System.Windows.Forms.MenuItem m_open;
private System.Windows.Forms.Button m_mirrorHorizontal;
private System.Windows.Forms.GroupBox m_selectGroup;
private System.Windows.Forms.Button m_clear;
private GfxEditor m_edit;
private BitmapCharList m_chars;
private int m_selected;
private bool m_inSelect;
private string m_path;
private DropShadowForm m_shadowForm;
private Color m_glowCol=Color.White;
public MainForm()
{
//
// The InitializeComponent() call is required for Windows Forms designer support.
//
InitializeComponent();
// Trying to add this in the designer seems to mess up quite a bit.
//
m_edit=new GfxEditor();
m_edit.Location=new Point(4,16);
m_editGroup.Controls.Add(m_edit);
m_shadowForm=new DropShadowForm();
m_chars=new BitmapCharList();
for(byte c=32;c<127;c++)
{
switch(c)
{
case 32:
m_asciiSelect.Items.Add("Space");
break;
case 127:
m_asciiSelect.Items.Add("DEL");
break;
default:
m_asciiSelect.Items.Add
(Encoding.ASCII.GetString(new byte[] {c}));
break;
}
}
m_path="";
m_save.Enabled=false;
m_selected=0;
SelectChar(0);
}
[STAThread]
public static void Main(string[] args)
{
Application.Run(new MainForm());
}
#region Windows Forms Designer generated code
///
/// This method is required for Windows Forms designer support.
/// Do not change the method contents inside the source code editor. The Forms designer might
/// not be able to load this method if it was changed manually.
///
private void InitializeComponent() {
this.m_clear = new System.Windows.Forms.Button();
this.m_selectGroup = new System.Windows.Forms.GroupBox();
this.m_mirrorHorizontal = new System.Windows.Forms.Button();
this.m_open = new System.Windows.Forms.MenuItem();
this.m_new = new System.Windows.Forms.MenuItem();
this.m_editGroup = new System.Windows.Forms.GroupBox();
this.m_scrollLeft = new System.Windows.Forms.Button();
this.m_saveAs = new System.Windows.Forms.MenuItem();
this.label5 = new System.Windows.Forms.Label();
this.m_save = new System.Windows.Forms.MenuItem();
this.m_quit = new System.Windows.Forms.MenuItem();
this.m_edge = new System.Windows.Forms.Button();
this.m_asciiSelect = new System.Windows.Forms.ComboBox();
this.m_resize = new System.Windows.Forms.Button();
this.m_menu = new System.Windows.Forms.MainMenu();
this.m_charSelect = new System.Windows.Forms.TrackBar();
this.label4 = new System.Windows.Forms.Label();
this.m_rotLeft = new System.Windows.Forms.Button();
this.label6 = new System.Windows.Forms.Label();
this.m_grabFont = new System.Windows.Forms.Button();
this.m_applyAll = new System.Windows.Forms.CheckBox();
this.m_scrollRight = new System.Windows.Forms.Button();
this.label3 = new System.Windows.Forms.Label();
this.m_about = new System.Windows.Forms.MenuItem();
this.m_dropShadow = new System.Windows.Forms.Button();
this.m_revert = new System.Windows.Forms.Button();
this.m_rotRight = new System.Windows.Forms.Button();
this.m_mirrorVertical = new System.Windows.Forms.Button();
this.m_fileMenu = new System.Windows.Forms.MenuItem();
this.m_break1 = new System.Windows.Forms.MenuItem();
this.m_scrollUp = new System.Windows.Forms.Button();
this.m_scrollDown = new System.Windows.Forms.Button();
this.m_adjustGroup = new System.Windows.Forms.GroupBox();
this.m_globaladjustGroup = new System.Windows.Forms.GroupBox();
this.m_codeSelect = new System.Windows.Forms.NumericUpDown();
this.m_helpMenu = new System.Windows.Forms.MenuItem();
this.label1 = new System.Windows.Forms.Label();
this.label2 = new System.Windows.Forms.Label();
this.m_selectGroup.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.m_charSelect)).BeginInit();
this.m_adjustGroup.SuspendLayout();
this.m_globaladjustGroup.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.m_codeSelect)).BeginInit();
this.SuspendLayout();
//
// m_clear
//
this.m_clear.Location = new System.Drawing.Point(8, 40);
this.m_clear.Name = "m_clear";
this.m_clear.Size = new System.Drawing.Size(96, 24);
this.m_clear.TabIndex = 3;
this.m_clear.Text = "Clear";
this.m_clear.Click += new System.EventHandler(this.OnClear);
//
// m_selectGroup
//
this.m_selectGroup.Controls.Add(this.m_codeSelect);
this.m_selectGroup.Controls.Add(this.m_asciiSelect);
this.m_selectGroup.Controls.Add(this.m_revert);
this.m_selectGroup.Controls.Add(this.m_charSelect);
this.m_selectGroup.Controls.Add(this.label2);
this.m_selectGroup.Controls.Add(this.label1);
this.m_selectGroup.Location = new System.Drawing.Point(8, 344);
this.m_selectGroup.Name = "m_selectGroup";
this.m_selectGroup.Size = new System.Drawing.Size(408, 104);
this.m_selectGroup.TabIndex = 1;
this.m_selectGroup.TabStop = false;
this.m_selectGroup.Text = "Character";
//
// m_mirrorHorizontal
//
this.m_mirrorHorizontal.Location = new System.Drawing.Point(8, 88);
this.m_mirrorHorizontal.Name = "m_mirrorHorizontal";
this.m_mirrorHorizontal.Size = new System.Drawing.Size(96, 24);
this.m_mirrorHorizontal.TabIndex = 5;
this.m_mirrorHorizontal.Text = "Horizontal";
this.m_mirrorHorizontal.Click += new System.EventHandler(this.OnHorizontalMirror);
//
// m_open
//
this.m_open.Index = 1;
this.m_open.Shortcut = System.Windows.Forms.Shortcut.CtrlO;
this.m_open.Text = "&Open";
this.m_open.Click += new System.EventHandler(this.OnOpen);
//
// m_new
//
this.m_new.Index = 0;
this.m_new.Shortcut = System.Windows.Forms.Shortcut.CtrlN;
this.m_new.Text = "&New";
this.m_new.Click += new System.EventHandler(this.OnNew);
//
// m_editGroup
//
this.m_editGroup.Location = new System.Drawing.Point(8, 8);
this.m_editGroup.Name = "m_editGroup";
this.m_editGroup.Size = new System.Drawing.Size(408, 328);
this.m_editGroup.TabIndex = 1;
this.m_editGroup.TabStop = false;
this.m_editGroup.Text = "Editor";
//
// m_scrollLeft
//
this.m_scrollLeft.Location = new System.Drawing.Point(8, 136);
this.m_scrollLeft.Name = "m_scrollLeft";
this.m_scrollLeft.Size = new System.Drawing.Size(96, 24);
this.m_scrollLeft.TabIndex = 8;
this.m_scrollLeft.Text = "Left";
this.m_scrollLeft.Click += new System.EventHandler(this.OnLeftScroll);
//
// m_saveAs
//
this.m_saveAs.Index = 3;
this.m_saveAs.Shortcut = System.Windows.Forms.Shortcut.F12;
this.m_saveAs.Text = "S&ave as...";
this.m_saveAs.Click += new System.EventHandler(this.OnSaveAs);
//
// label5
//
this.label5.Location = new System.Drawing.Point(8, 200);
this.label5.Name = "label5";
this.label5.Size = new System.Drawing.Size(72, 16);
this.label5.TabIndex = 11;
this.label5.Text = "Rotate";
this.label5.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
//
// m_save
//
this.m_save.Index = 2;
this.m_save.Shortcut = System.Windows.Forms.Shortcut.CtrlS;
this.m_save.Text = "&Save";
this.m_save.Click += new System.EventHandler(this.OnSave);
//
// m_quit
//
this.m_quit.Index = 5;
this.m_quit.Shortcut = System.Windows.Forms.Shortcut.CtrlQ;
this.m_quit.Text = "&Quit";
this.m_quit.Click += new System.EventHandler(this.OnQuit);
//
// m_edge
//
this.m_edge.Location = new System.Drawing.Point(112, 272);
this.m_edge.Name = "m_edge";
this.m_edge.Size = new System.Drawing.Size(96, 24);
this.m_edge.TabIndex = 17;
this.m_edge.Text = "Edge";
this.m_edge.Click += new System.EventHandler(this.OnEdge);
//
// m_asciiSelect
//
this.m_asciiSelect.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.m_asciiSelect.Location = new System.Drawing.Point(224, 64);
this.m_asciiSelect.MaxDropDownItems = 20;
this.m_asciiSelect.Name = "m_asciiSelect";
this.m_asciiSelect.Size = new System.Drawing.Size(64, 21);
this.m_asciiSelect.TabIndex = 9;
this.m_asciiSelect.SelectedIndexChanged += new System.EventHandler(this.OnSelectByChar);
//
// m_resize
//
this.m_resize.Location = new System.Drawing.Point(8, 16);
this.m_resize.Name = "m_resize";
this.m_resize.Size = new System.Drawing.Size(88, 24);
this.m_resize.TabIndex = 1;
this.m_resize.Text = "Resize All";
this.m_resize.Click += new System.EventHandler(this.OnResize);
//
// m_menu
//
this.m_menu.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
this.m_fileMenu,
this.m_helpMenu});
//
// m_charSelect
//
this.m_charSelect.Location = new System.Drawing.Point(8, 16);
this.m_charSelect.Maximum = 94;
this.m_charSelect.Name = "m_charSelect";
this.m_charSelect.Size = new System.Drawing.Size(392, 42);
this.m_charSelect.TabIndex = 6;
this.m_charSelect.Scroll += new System.EventHandler(this.OnSelectChar);
//
// label4
//
this.label4.Location = new System.Drawing.Point(8, 120);
this.label4.Name = "label4";
this.label4.Size = new System.Drawing.Size(72, 16);
this.label4.TabIndex = 6;
this.label4.Text = "Scroll";
this.label4.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
//
// m_rotLeft
//
this.m_rotLeft.Location = new System.Drawing.Point(8, 216);
this.m_rotLeft.Name = "m_rotLeft";
this.m_rotLeft.Size = new System.Drawing.Size(96, 24);
this.m_rotLeft.TabIndex = 13;
this.m_rotLeft.Text = "Left";
this.m_rotLeft.Click += new System.EventHandler(this.OnRotateLeft);
//
// label6
//
this.label6.Location = new System.Drawing.Point(8, 256);
this.label6.Name = "label6";
this.label6.Size = new System.Drawing.Size(88, 16);
this.label6.TabIndex = 14;
this.label6.Text = "Special Effects";
this.label6.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
//
// m_grabFont
//
this.m_grabFont.Location = new System.Drawing.Point(8, 304);
this.m_grabFont.Name = "m_grabFont";
this.m_grabFont.Size = new System.Drawing.Size(96, 24);
this.m_grabFont.TabIndex = 18;
this.m_grabFont.Text = "Grab Font";
this.m_grabFont.Click += new System.EventHandler(this.OnGrabFont);
//
// m_applyAll
//
this.m_applyAll.Location = new System.Drawing.Point(8, 16);
this.m_applyAll.Name = "m_applyAll";
this.m_applyAll.Size = new System.Drawing.Size(88, 16);
this.m_applyAll.TabIndex = 1;
this.m_applyAll.Text = "Apply To All";
//
// m_scrollRight
//
this.m_scrollRight.Location = new System.Drawing.Point(112, 136);
this.m_scrollRight.Name = "m_scrollRight";
this.m_scrollRight.Size = new System.Drawing.Size(96, 24);
this.m_scrollRight.TabIndex = 9;
this.m_scrollRight.Text = "Right";
this.m_scrollRight.Click += new System.EventHandler(this.OnRightScroll);
//
// label3
//
this.label3.Location = new System.Drawing.Point(8, 72);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(72, 16);
this.label3.TabIndex = 3;
this.label3.Text = "Mirror";
this.label3.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
//
// m_about
//
this.m_about.Index = 0;
this.m_about.Text = "&About";
this.m_about.Click += new System.EventHandler(this.OnAbout);
//
// m_dropShadow
//
this.m_dropShadow.Location = new System.Drawing.Point(8, 272);
this.m_dropShadow.Name = "m_dropShadow";
this.m_dropShadow.Size = new System.Drawing.Size(96, 24);
this.m_dropShadow.TabIndex = 16;
this.m_dropShadow.Text = "Drop Shadow";
this.m_dropShadow.Click += new System.EventHandler(this.OnDropShadow);
//
// m_revert
//
this.m_revert.Location = new System.Drawing.Point(304, 64);
this.m_revert.Name = "m_revert";
this.m_revert.Size = new System.Drawing.Size(88, 24);
this.m_revert.TabIndex = 7;
this.m_revert.Text = "Revert";
this.m_revert.Click += new System.EventHandler(this.OnRevert);
//
// m_rotRight
//
this.m_rotRight.Location = new System.Drawing.Point(112, 216);
this.m_rotRight.Name = "m_rotRight";
this.m_rotRight.Size = new System.Drawing.Size(96, 24);
this.m_rotRight.TabIndex = 14;
this.m_rotRight.Text = "Right";
this.m_rotRight.Click += new System.EventHandler(this.OnRotateRight);
//
// m_mirrorVertical
//
this.m_mirrorVertical.Location = new System.Drawing.Point(112, 88);
this.m_mirrorVertical.Name = "m_mirrorVertical";
this.m_mirrorVertical.Size = new System.Drawing.Size(96, 24);
this.m_mirrorVertical.TabIndex = 6;
this.m_mirrorVertical.Text = "Vertical";
this.m_mirrorVertical.Click += new System.EventHandler(this.OnVerticalMirror);
//
// m_fileMenu
//
this.m_fileMenu.Index = 0;
this.m_fileMenu.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
this.m_new,
this.m_open,
this.m_save,
this.m_saveAs,
this.m_break1,
this.m_quit});
this.m_fileMenu.Text = "&File";
//
// m_break1
//
this.m_break1.Index = 4;
this.m_break1.Text = "-";
//
// m_scrollUp
//
this.m_scrollUp.Location = new System.Drawing.Point(8, 168);
this.m_scrollUp.Name = "m_scrollUp";
this.m_scrollUp.Size = new System.Drawing.Size(96, 24);
this.m_scrollUp.TabIndex = 10;
this.m_scrollUp.Text = "Up";
this.m_scrollUp.Click += new System.EventHandler(this.OnUpScroll);
//
// m_scrollDown
//
this.m_scrollDown.Location = new System.Drawing.Point(112, 168);
this.m_scrollDown.Name = "m_scrollDown";
this.m_scrollDown.Size = new System.Drawing.Size(96, 24);
this.m_scrollDown.TabIndex = 11;
this.m_scrollDown.Text = "Down";
this.m_scrollDown.Click += new System.EventHandler(this.OnDownScroll);
//
// m_adjustGroup
//
this.m_adjustGroup.Controls.Add(this.m_grabFont);
this.m_adjustGroup.Controls.Add(this.m_edge);
this.m_adjustGroup.Controls.Add(this.m_dropShadow);
this.m_adjustGroup.Controls.Add(this.label6);
this.m_adjustGroup.Controls.Add(this.m_rotRight);
this.m_adjustGroup.Controls.Add(this.m_rotLeft);
this.m_adjustGroup.Controls.Add(this.label5);
this.m_adjustGroup.Controls.Add(this.m_scrollDown);
this.m_adjustGroup.Controls.Add(this.m_scrollUp);
this.m_adjustGroup.Controls.Add(this.m_scrollRight);
this.m_adjustGroup.Controls.Add(this.m_scrollLeft);
this.m_adjustGroup.Controls.Add(this.label4);
this.m_adjustGroup.Controls.Add(this.m_mirrorVertical);
this.m_adjustGroup.Controls.Add(this.m_mirrorHorizontal);
this.m_adjustGroup.Controls.Add(this.label3);
this.m_adjustGroup.Controls.Add(this.m_clear);
this.m_adjustGroup.Controls.Add(this.m_applyAll);
this.m_adjustGroup.Location = new System.Drawing.Point(424, 64);
this.m_adjustGroup.Name = "m_adjustGroup";
this.m_adjustGroup.Size = new System.Drawing.Size(216, 384);
this.m_adjustGroup.TabIndex = 3;
this.m_adjustGroup.TabStop = false;
this.m_adjustGroup.Text = "Adjustments and Effects";
//
// m_globaladjustGroup
//
this.m_globaladjustGroup.Controls.Add(this.m_resize);
this.m_globaladjustGroup.Location = new System.Drawing.Point(424, 8);
this.m_globaladjustGroup.Name = "m_globaladjustGroup";
this.m_globaladjustGroup.Size = new System.Drawing.Size(216, 48);
this.m_globaladjustGroup.TabIndex = 2;
this.m_globaladjustGroup.TabStop = false;
this.m_globaladjustGroup.Text = "Global Adjustments";
//
// m_codeSelect
//
this.m_codeSelect.Location = new System.Drawing.Point(88, 64);
this.m_codeSelect.Maximum = new System.Decimal(new int[] {
126,
0,
0,
0});
this.m_codeSelect.Minimum = new System.Decimal(new int[] {
32,
0,
0,
0});
this.m_codeSelect.Name = "m_codeSelect";
this.m_codeSelect.ReadOnly = true;
this.m_codeSelect.Size = new System.Drawing.Size(64, 20);
this.m_codeSelect.TabIndex = 10;
this.m_codeSelect.Value = new System.Decimal(new int[] {
32,
0,
0,
0});
this.m_codeSelect.ValueChanged += new System.EventHandler(this.OnSelectByCode);
//
// m_helpMenu
//
this.m_helpMenu.Index = 1;
this.m_helpMenu.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
this.m_about});
this.m_helpMenu.Text = "&Help";
//
// label1
//
this.label1.Location = new System.Drawing.Point(16, 64);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(72, 24);
this.label1.TabIndex = 1;
this.label1.Text = "ASCII Code:";
this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
//
// label2
//
this.label2.Location = new System.Drawing.Point(160, 64);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(72, 24);
this.label2.TabIndex = 3;
this.label2.Text = "Character:";
this.label2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
//
// MainForm
//
this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
this.ClientSize = new System.Drawing.Size(650, 479);
this.Controls.Add(this.m_adjustGroup);
this.Controls.Add(this.m_globaladjustGroup);
this.Controls.Add(this.m_selectGroup);
this.Controls.Add(this.m_editGroup);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
this.MaximizeBox = false;
this.Menu = this.m_menu;
this.MinimumSize = new System.Drawing.Size(648, 504);
this.Name = "MainForm";
this.Text = "Bitmap Font Editor";
this.Closing += new System.ComponentModel.CancelEventHandler(this.OnClosing);
this.m_selectGroup.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.m_charSelect)).EndInit();
this.m_adjustGroup.ResumeLayout(false);
this.m_globaladjustGroup.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.m_codeSelect)).EndInit();
this.ResumeLayout(false);
}
#endregion
private bool EditChanged
{
get {return m_edit.BitmapChar!=null && m_edit.BitmapChar.Changed;}
}
private bool ChangesAllowed
{
get {return (!m_chars.Changed && !EditChanged) || Util.YesNo("Abandon changes?");}
}
void OnAbout(object sender, System.EventArgs e)
{
Util.About();
}
void OnNew(object sender, System.EventArgs e)
{
if (ChangesAllowed)
{
m_chars=new BitmapCharList();
m_edit.BitmapChar=new BitmapChar();
OnSelectChar(null,null);
m_save.Enabled=false;
}
}
void OnOpen(object sender, System.EventArgs e)
{
if (ChangesAllowed)
{
OpenFileDialog fsel=new OpenFileDialog();
fsel.FileName=m_path;
fsel.Filter="Bitmap Font Files (*.bmf)|*.bmf|All files (*.*)|*.*";
if (fsel.ShowDialog()==DialogResult.OK)
{
using(FileStream str=File.Open(fsel.FileName,FileMode.Open))
{
try
{
m_chars=BitmapCharList.Input(str);
m_path=fsel.FileName;
m_save.Enabled=true;
str.Close();
}
catch (Exception ex)
{
Util.Error("Error opening " + fsel.FileName + ":\n" + ex.Message);
}
}
}
m_edit.BitmapChar=m_chars[m_selected];
}
}
void OnSave(object sender, System.EventArgs e)
{
FetchEdit();
using(FileStream str=File.Open(m_path,FileMode.Create))
{
try
{
m_chars.Output(str);
str.Close();
}
catch (Exception ex)
{
Util.Error("Error writing " + m_path + ":\n" + ex.Message);
}
}
}
void OnSaveAs(object sender, System.EventArgs e)
{
SaveFileDialog fsel=new SaveFileDialog();
fsel.FileName=m_path;
fsel.Filter="Bitmap Font Files (*.bmf)|*.bmf|All files (*.*)|*.*";
if (fsel.ShowDialog()==DialogResult.OK)
{
FetchEdit();
using(FileStream str=File.Open(fsel.FileName,FileMode.Create))
{
try
{
m_chars.Output(str);
m_path=fsel.FileName;
str.Close();
}
catch (Exception ex)
{
Util.Error("Error writing " + fsel.FileName + ":\n" + ex.Message);
}
}
}
}
void OnQuit(object sender, System.EventArgs e)
{
Close();
}
void OnClosing(object sender, System.ComponentModel.CancelEventArgs e)
{
if (!ChangesAllowed)
{
e.Cancel=true;
}
}
private void FetchEdit()
{
if (EditChanged)
{
m_chars[m_selected]=m_edit.BitmapChar;
}
}
private void SelectChar(int sel)
{
m_inSelect=true;
FetchEdit();
m_selected=sel;
m_charSelect.Value=sel;
m_codeSelect.Value=sel+32;
m_asciiSelect.SelectedIndex=sel;
m_edit.BitmapChar=new BitmapChar(m_chars[m_selected]);
m_inSelect=false;
}
void OnSelectByCode(object sender, System.EventArgs e)
{
if (!m_inSelect)
{
SelectChar(Convert.ToInt32(m_codeSelect.Value)-32);
}
}
void OnSelectByChar(object sender, System.EventArgs e)
{
if (!m_inSelect)
{
SelectChar(m_asciiSelect.SelectedIndex);
}
}
void OnSelectChar(object sender, System.EventArgs e)
{
if (!m_inSelect)
{
SelectChar(m_charSelect.Value);
}
}
void OnRevert(object sender, System.EventArgs e)
{
m_edit.BitmapChar=new BitmapChar(m_chars[m_selected]);
}
void OnResize(object sender, System.EventArgs e)
{
int w=m_edit.CharWidth;
int h=m_edit.CharHeight;
if (Util.YesNo("Sure you want to resize all characters to " + w + " by " + h))
{
foreach (BitmapChar c in m_chars)
{
c.Resize(w,h);
}
}
}
void OnClear(object sender, System.EventArgs e)
{
FetchEdit();
if (m_applyAll.Checked)
{
if (Util.YesNo("Clear ALL Characters?"))
{
foreach (BitmapChar c in m_chars)
{
c.Clear(m_edit.SelectedBackground);
}
}
}
else
{
m_chars[m_selected].Clear(m_edit.SelectedBackground);
}
m_edit.BitmapChar=new BitmapChar(m_chars[m_selected]);
}
void OnHorizontalMirror(object sender, System.EventArgs e)
{
FetchEdit();
if (m_applyAll.Checked)
{
foreach (BitmapChar c in m_chars)
{
c.MirrorHorizontal();
}
}
else
{
m_chars[m_selected].MirrorHorizontal();
}
m_edit.BitmapChar=new BitmapChar(m_chars[m_selected]);
}
void OnVerticalMirror(object sender, System.EventArgs e)
{
FetchEdit();
if (m_applyAll.Checked)
{
foreach (BitmapChar c in m_chars)
{
c.MirrorVertical();
}
}
else
{
m_chars[m_selected].MirrorVertical();
}
m_edit.BitmapChar=new BitmapChar(m_chars[m_selected]);
}
private void Scroll(int dx, int dy)
{
FetchEdit();
if (m_applyAll.Checked)
{
foreach (BitmapChar c in m_chars)
{
c.Scroll(dx,dy);
}
}
else
{
m_chars[m_selected].Scroll(dx,dy);
}
m_edit.BitmapChar=new BitmapChar(m_chars[m_selected]);
}
void OnLeftScroll(object sender, System.EventArgs e)
{
Scroll(-1,0);
}
void OnRightScroll(object sender, System.EventArgs e)
{
Scroll(1,0);
}
void OnUpScroll(object sender, System.EventArgs e)
{
Scroll(0,-1);
}
void OnDownScroll(object sender, System.EventArgs e)
{
Scroll(0,1);
}
void OnRotateLeft(object sender, System.EventArgs e)
{
FetchEdit();
if (m_applyAll.Checked)
{
foreach (BitmapChar c in m_chars)
{
c.RotateLeft();
}
}
else
{
m_chars[m_selected].RotateLeft();
}
m_edit.BitmapChar=new BitmapChar(m_chars[m_selected]);
}
void OnRotateRight(object sender, System.EventArgs e)
{
FetchEdit();
if (m_applyAll.Checked)
{
foreach (BitmapChar c in m_chars)
{
c.RotateRight();
}
}
else
{
m_chars[m_selected].RotateRight();
}
m_edit.BitmapChar=new BitmapChar(m_chars[m_selected]);
}
void OnDropShadow(object sender, System.EventArgs e)
{
if (m_shadowForm.ShowDialog()==DialogResult.OK)
{
DropShadowForm.Shadow shadow=m_shadowForm.ShadowSize;
Color col=m_shadowForm.ShadowColour;
FetchEdit();
if (m_applyAll.Checked)
{
foreach (BitmapChar c in m_chars)
{
c.DropShadow(shadow.DX,shadow.DY,col);
}
}
else
{
m_chars[m_selected].DropShadow(shadow.DX,shadow.DY,col);
}
m_edit.BitmapChar=new BitmapChar(m_chars[m_selected]);
}
}
void OnEdge(object sender, System.EventArgs e)
{
AlphaColourDialog d=new AlphaColourDialog("Select Glow Colour");
d.Color=m_glowCol;
if (d.ShowDialog()==DialogResult.OK)
{
m_glowCol=d.Color;
FetchEdit();
if (m_applyAll.Checked)
{
foreach (BitmapChar c in m_chars)
{
c.Edge(m_glowCol);
}
}
else
{
m_chars[m_selected].Edge(m_glowCol);
}
m_edit.BitmapChar=new BitmapChar(m_chars[m_selected]);
}
}
private void GrabChar(Bitmap bmp, BitmapChar c)
{
int x,y;
int mx,my;
c.Clear(m_edit.BackColor);
mx=Int32.MinValue;
my=Int32.MinValue;
for(y=0;y