]> Shamusworld >> Repos - ttedit/blob - src/ttedit.cpp
Too many changes between last commit and here. I forgot that
[ttedit] / src / ttedit.cpp
1 //\r
2 // TTEDIT.CPP - The TrueType Editor\r
3 // by James L. Hammons\r
4 // (C) 2004 Underground Software\r
5 //\r
6 // JLH = James L. Hammons <jlhamm@acm.org>\r
7 //\r
8 // Who  When        What\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
16 //\r
17 \r
18 // FIXED:\r
19 //\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
22 //\r
23 // STILL TO BE DONE:\r
24 //\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
30 //\r
31 \r
32 // Uncomment this for debugging...\r
33 #define DEBUG\r
34 #define DEBUGFOO                        // Various tool debugging...\r
35 #define DEBUGTP                         // Toolpalette debugging...\r
36 \r
37 #include "ttedit.h"\r
38 #include "charwindow.h"\r
39 #include "toolwindow.h"\r
40 #include "editwindow.h"\r
41 #include "tte_res.h"                                                    // Resource IDs\r
42 #ifdef DEBUG\r
43 #include "debug.h"\r
44 #endif\r
45 \r
46 // Pixmap resouces\r
47 \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
60 \r
61 \r
62 IMPLEMENT_APP(TTEditApp)                                                // Run the main application loop\r
63 \r
64 bool TTEditApp::OnInit()\r
65 {\r
66         wxLog * logTarget = new wxLogStderr();//fopen("!ttedit_log.txt", "wb"));\r
67         wxLog::SetActiveTarget(logTarget);\r
68 #ifdef DEBUG\r
69         OpenDebugLog();\r
70 #endif\r
71 \r
72         // Initialize all the top-level window members to NULL.\r
73         mainFrame = NULL;\r
74         charWin = NULL;\r
75         toolPalette = NULL;\r
76 \r
77 //Shouldn't we check to see if it was successful? This just assumes\r
78         CreateResources();\r
79 \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
83 \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
87 \r
88         toolPalette = new ToolWindow(mainFrame, _(""), wxDefaultPosition, wxDefaultSize,\r
89                 wxBORDER_NONE | wxFRAME_NO_TASKBAR | wxFRAME_FLOAT_ON_PARENT);\r
90 \r
91         return true;\r
92 }\r
93 \r
94 int TTEditApp::OnExit()\r
95 {\r
96 #ifdef DEBUG\r
97         CloseDebugLog();\r
98 #endif\r
99 \r
100         return 0;\r
101 }\r
102 \r
103 void TTEditApp::CreateResources(void)\r
104 {\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
107 \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
112 \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
117 \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
122 \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
127 \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
132 \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
137 \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
142 \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
147 }\r
148 \r
149 \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
155 END_EVENT_TABLE()\r
156 \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
159 {\r
160         // Initialize child subwindow members (and hopefully avoid subtle bugs)\r
161 //      mainWindow = NULL;\r
162 \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
169 \r
170         if (tb != NULL)\r
171         {\r
172                 // Create buttons\r
173 \r
174                 wxBitmap tool1(tool1_xpm);\r
175                 wxBitmap tool2(tool2_xpm);\r
176                 wxBitmap tool3(tool3_xpm);\r
177 \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
181                 tb->Realize();\r
182         }\r
183 \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
200 \r
201         // Create child subwindows\r
202         mainWindow = new TTEditWindow(this);\r
203 \r
204         Centre(wxBOTH);                                                         // Centre frame on the screen\r
205         Show(true);                                                                     // Show the frame\r
206 }\r
207 \r
208 TTEditFrame::~TTEditFrame()\r
209 {\r
210 }\r
211 \r
212 void TTEditFrame::OnOpen(wxCommandEvent &e)\r
213 {\r
214         wxFileDialog fd(this, _("Choose a font to load"), _(""), _(""), _("TTF files (*.ttf)|*.ttf|All files (*.*)|*.*"), wxOPEN);\r
215 \r
216         if (fd.ShowModal() != wxID_OK)\r
217             return;\r
218 \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
221         {\r
222                 wxMessageDialog dlg(NULL, _("Load font failed!"), _("Houston, we have a problem..."), wxOK | wxICON_ERROR);\r
223                 dlg.ShowModal();\r
224         }\r
225 \r
226 //Huzzah! It works! Now just need scaling, scrolling, etc...\r
227 //      pts = app.font.GetGlyphPoints(45);\r
228 }\r
229 \r
230 void TTEditFrame::OnAbout(wxCommandEvent &e)\r
231 {\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
233         dlg.ShowModal();\r
234 }\r
235 \r
236 void TTEditFrame::OnExit(wxCommandEvent &e)\r
237 {\r
238         app.toolPalette->Destroy();\r
239         this->Destroy();\r
240 }\r
241 \r
242 void TTEditFrame::OnCloseWindow(wxCloseEvent &e)\r
243 {\r
244         app.toolPalette->Destroy();\r
245         this->Destroy();\r
246 }\r