2 // TTEDIT.CPP - The TrueType Editor
\r
3 // by James L. Hammons
\r
4 // (C) 2004 Underground Software
\r
6 // JLH = James L. Hammons <jlhamm@acm.org>
\r
9 // --- ---------- -------------------------------------------------------------
\r
10 // JLH 04/10/2002 Created this file
\r
11 // JLH 05/10/2004 Translated file from ASM to CPP
\r
12 // JLH 05/14/2004 Added rudimentary editing capability to tool palette tools
\r
13 // JLH 11/18/2006 Initial port to Linux
\r
14 // JLH 08/27/2008 Fixed tool palette focus problems
\r
15 // JLH 08/28/2008 Split out classes defined here into separate files
\r
20 // - Fix problem with tool palette not getting focus 1st time it's called up [DONE]
\r
21 // - Split out windows/classes defined here into their own files [DONE]
\r
23 // STILL TO BE DONE:
\r
25 // - Fix bug in Glyphpoints when dragging on an empty canvas or loading a font
\r
26 // - Fix scrolling, zooming, settings (ini)
\r
27 // - Finish conversion to wxWidgets for cross-platform portability
\r
28 // - Fix problem with owned window causing main window refresh problems
\r
29 // (ironically enough, it doesn't seem to be a problem anymore...)
\r
32 // Uncomment this for debugging...
\r
34 #define DEBUGFOO // Various tool debugging...
\r
35 #define DEBUGTP // Toolpalette debugging...
\r
38 #include "charwindow.h"
\r
39 #include "toolwindow.h"
\r
40 #include "editwindow.h"
\r
41 #include "tte_res.h" // Resource IDs
\r
48 #include "res/cur1.xpm"
\r
49 #include "res/cur2.xpm"
\r
50 #include "res/cur3.xpm"
\r
51 #include "res/cur4.xpm"
\r
52 #include "res/cur5.xpm"
\r
53 #include "res/cur6.xpm"
\r
54 #include "res/cur7.xpm"
\r
55 #include "res/cur8.xpm"
\r
56 #include "res/ttedit.xpm" // *nix only, but small enough to not matter
\r
57 #include "res/tool1.xpm"
\r
58 #include "res/tool2.xpm"
\r
59 #include "res/tool3.xpm"
\r
62 IMPLEMENT_APP(TTEditApp) // Run the main application loop
\r
64 bool TTEditApp::OnInit()
\r
66 wxLog * logTarget = new wxLogStderr();//fopen("!ttedit_log.txt", "wb"));
\r
67 wxLog::SetActiveTarget(logTarget);
\r
72 // Initialize all the top-level window members to NULL.
\r
77 //Shouldn't we check to see if it was successful? This just assumes
\r
80 mainFrame = new TTEditFrame(NULL, _("TTEdit"), wxPoint(155, 165), wxSize(300, 300),
\r
81 wxDEFAULT_FRAME_STYLE | wxFULL_REPAINT_ON_RESIZE);
\r
82 // wxMINIMIZE_BOX | wxRESIZE_BOX | wxMAXIMIZE_BOX | | wxSYSTEM_MENU | wxCAPTION);
\r
84 // charWin = new CharWindow(NULL);//, _T("Own3d W1nd0w"), wxDefaultPosition, wxDefaultSize);
\r
85 charWin = new CharWindow(mainFrame, _("Own3d W1nd0w"), wxDefaultPosition, wxDefaultSize,
\r
86 wxCAPTION | wxRESIZE_BORDER);
\r
88 toolPalette = new ToolWindow(mainFrame, _(""), wxDefaultPosition, wxDefaultSize,
\r
89 wxBORDER_NONE | wxFRAME_NO_TASKBAR | wxFRAME_FLOAT_ON_PARENT);
\r
94 int TTEditApp::OnExit()
\r
103 void TTEditApp::CreateResources(void)
\r
105 // This is a sucky way to create cursors, but at least it's cross-platform...
\r
106 // NOTE: Need to fix hotspots on a few... !!! FIX !!!
\r
108 wxBitmap cursorBM1(cur1_xpm);
\r
109 wxImage cursorImage1 = cursorBM1.ConvertToImage();
\r
110 cursorImage1.SetMaskFromImage(cursorImage1, 0xFF, 0xFF, 0xFF);
\r
111 cur[0] = new wxCursor(cursorImage1);
\r
113 wxBitmap cursorBM2(cur2_xpm);
\r
114 wxImage cursorImage2 = cursorBM2.ConvertToImage();
\r
115 cursorImage2.SetMaskFromImage(cursorImage2, 0xFF, 0xFF, 0xFF);
\r
116 cur[1] = new wxCursor(cursorImage2);
\r
118 wxBitmap cursorBM3(cur3_xpm);
\r
119 wxImage cursorImage3 = cursorBM3.ConvertToImage();
\r
120 cursorImage3.SetMaskFromImage(cursorImage3, 0xFF, 0xFF, 0xFF);
\r
121 cur[2] = new wxCursor(cursorImage3);
\r
123 wxBitmap cursorBM4(cur4_xpm);
\r
124 wxImage cursorImage4 = cursorBM4.ConvertToImage();
\r
125 cursorImage4.SetMaskFromImage(cursorImage4, 0xFF, 0xFF, 0xFF);
\r
126 cur[3] = new wxCursor(cursorImage4);
\r
128 wxBitmap cursorBM5(cur5_xpm);
\r
129 wxImage cursorImage5 = cursorBM5.ConvertToImage();
\r
130 cursorImage5.SetMaskFromImage(cursorImage5, 0xFF, 0xFF, 0xFF);
\r
131 cur[4] = new wxCursor(cursorImage5);
\r
133 wxBitmap cursorBM6(cur6_xpm);
\r
134 wxImage cursorImage6 = cursorBM6.ConvertToImage();
\r
135 cursorImage6.SetMaskFromImage(cursorImage6, 0xFF, 0xFF, 0xFF);
\r
136 cur[5] = new wxCursor(cursorImage6);
\r
138 wxBitmap cursorBM7(cur7_xpm);
\r
139 wxImage cursorImage7 = cursorBM7.ConvertToImage();
\r
140 cursorImage7.SetMaskFromImage(cursorImage7, 0xFF, 0xFF, 0xFF);
\r
141 cur[6] = new wxCursor(cursorImage7);
\r
143 wxBitmap cursorBM8(cur8_xpm);
\r
144 wxImage cursorImage8 = cursorBM8.ConvertToImage();
\r
145 cursorImage8.SetMaskFromImage(cursorImage8, 0xFF, 0xFF, 0xFF);
\r
146 cur[7] = new wxCursor(cursorImage8);
\r
150 BEGIN_EVENT_TABLE(TTEditFrame, wxFrame)
\r
151 EVT_MENU(IDM_OPEN, TTEditFrame::OnOpen)
\r
152 EVT_MENU(IDM_EXIT, TTEditFrame::OnExit)
\r
153 EVT_MENU(IDM_ABOUT, TTEditFrame::OnAbout)
\r
154 EVT_CLOSE(TTEditFrame::OnCloseWindow)
\r
157 TTEditFrame::TTEditFrame(wxFrame * parent, const wxString &title, const wxPoint &pos,
\r
158 const wxSize &size, long style): wxFrame(parent, -1, title, pos, size, style), app(wxGetApp()), mainWindow(NULL)
\r
160 // Initialize child subwindow members (and hopefully avoid subtle bugs)
\r
161 // mainWindow = NULL;
\r
163 SetIcon(wxICON(ttedit));
\r
164 // CreateStatusBar(2); // Create 2 panes
\r
165 int widths[2] = { -1, 120 };
\r
166 wxStatusBar * sb = CreateStatusBar(2, 0); // Create 2 panes
\r
167 sb->SetStatusWidths(2, widths);
\r
168 wxToolBar * tb = CreateToolBar();
\r
174 wxBitmap tool1(tool1_xpm);
\r
175 wxBitmap tool2(tool2_xpm);
\r
176 wxBitmap tool3(tool3_xpm);
\r
178 tb->AddTool(ID_TBLEFT, _("Prev char"), tool1, _("Go to prev char"), wxITEM_NORMAL);
\r
179 tb->AddTool(ID_TBRIGHT, _("Next char"), tool2, _("Go to next char"), wxITEM_NORMAL);
\r
180 tb->AddTool(ID_TBCHARWIN, _("Char Wnd"), tool3, _("Toggle char window"), wxITEM_NORMAL);
\r
184 // Create a menu bar for the frame
\r
185 menuBar = new wxMenuBar;
\r
186 wxMenu * menu1 = new wxMenu;
\r
187 menu1->Append(IDM_NEW, _("&New\tCtrl+N"), _("Create a new font."));
\r
188 menu1->Append(IDM_OPEN, _("&Open...\tCtrl+O"), _("Opens an existing font."));
\r
189 menu1->Append(IDM_SAVE, _("&Save\tCtrl+S"), _("Save the current font."));
\r
190 menu1->Append(IDM_SAVEAS, _("Save &As..."), _("Save the current font under a different name."));
\r
191 menu1->AppendSeparator();
\r
192 menu1->Append(IDM_EXIT, _("E&xit\tAlt+X"), _("Quits the TTEdit program."));
\r
193 menuBar->Append(menu1, _("&File"));
\r
194 wxMenu * menu2 = new wxMenu;
\r
195 menu2->Append(IDM_HELPTOPICS, _("&Help Topics"), _("Displays the Help contents and index."));
\r
196 menu2->AppendSeparator();
\r
197 menu2->Append(IDM_ABOUT, _("&About TTEdit"), _("Displays information about TTEdit."));
\r
198 menuBar->Append(menu2, _("&Help"));
\r
199 SetMenuBar(menuBar);
\r
201 // Create child subwindows
\r
202 mainWindow = new TTEditWindow(this);
\r
204 Centre(wxBOTH); // Centre frame on the screen
\r
205 Show(true); // Show the frame
\r
208 TTEditFrame::~TTEditFrame()
\r
212 void TTEditFrame::OnOpen(wxCommandEvent &e)
\r
214 wxFileDialog fd(this, _("Choose a font to load"), _(""), _(""), _("TTF files (*.ttf)|*.ttf|All files (*.*)|*.*"), wxOPEN);
\r
216 if (fd.ShowModal() != wxID_OK)
\r
219 // Hmm. The font object is causing a massive crash... (gdb says it's in "Load")
\r
220 if (app.font.Load((char *)fd.GetPath().c_str()) != true)
\r
222 wxMessageDialog dlg(NULL, _("Load font failed!"), _("Houston, we have a problem..."), wxOK | wxICON_ERROR);
\r
226 //Huzzah! It works! Now just need scaling, scrolling, etc...
\r
227 // pts = app.font.GetGlyphPoints(45);
\r
230 void TTEditFrame::OnAbout(wxCommandEvent &e)
\r
232 wxMessageDialog dlg(NULL, _("TrueType Edit v1.0.1\n\nA handy tool for editing TrueType fonts!\nby James \"Shamus\" Hammons\n(C) 2006 Underground Software"), _("About TrueType Edit"), wxOK | wxICON_INFORMATION);
\r
236 void TTEditFrame::OnExit(wxCommandEvent &e)
\r
238 app.toolPalette->Destroy();
\r
242 void TTEditFrame::OnCloseWindow(wxCloseEvent &e)
\r
244 app.toolPalette->Destroy();
\r