]> Shamusworld >> Repos - ttedit/commitdiff
Separated out app object, added character window.
authorShamus Hammons <jlhamm@acm.org>
Thu, 19 Mar 2009 21:01:07 +0000 (21:01 +0000)
committerShamus Hammons <jlhamm@acm.org>
Thu, 19 Mar 2009 21:01:07 +0000 (21:01 +0000)
Makefile
src/charwindow.cpp
src/charwindow.h
src/editwindow.cpp
src/editwindow.h
src/ttedit.cpp
src/ttedit.h
ttedit.pro

index 8dc2ae16b6cc65bcfb6f4bf6bd5f1335f0b66e88..baaff9389cd8aa3416d63662f3bb860e1c10f2be 100755 (executable)
--- a/Makefile
+++ b/Makefile
@@ -1,6 +1,6 @@
 #############################################################################
 # Makefile for building: ttedit
-# Generated by qmake (2.01a) (Qt 4.5.0-rc1) on: Fri Mar 13 16:09:54 2009
+# Generated by qmake (2.01a) (Qt 4.5.0) on: Thu Mar 19 15:27:43 2009
 # Project:  ttedit.pro
 # Template: app
 # Command: /usr/bin/qmake -unix -o Makefile ttedit.pro
@@ -43,25 +43,31 @@ OBJECTS_DIR   = obj/
 ####### Files
 
 SOURCES       = src/ttedit.cpp \
+               src/ttemainwindow.cpp \
                src/editwindow.cpp \
                src/glyphpoints.cpp \
                src/debug.cpp \
                src/toolwindow.cpp \
+               src/charwindow.cpp \
                src/vector.cpp \
-               src/graphicprimitives.cpp obj/moc_ttedit.cpp \
+               src/graphicprimitives.cpp obj/moc_ttemainwindow.cpp \
                obj/moc_editwindow.cpp \
                obj/moc_toolwindow.cpp \
+               obj/moc_charwindow.cpp \
                obj/qrc_ttedit.cpp
 OBJECTS       = obj/ttedit.o \
+               obj/ttemainwindow.o \
                obj/editwindow.o \
                obj/glyphpoints.o \
                obj/debug.o \
                obj/toolwindow.o \
+               obj/charwindow.o \
                obj/vector.o \
                obj/graphicprimitives.o \
-               obj/moc_ttedit.o \
+               obj/moc_ttemainwindow.o \
                obj/moc_editwindow.o \
                obj/moc_toolwindow.o \
+               obj/moc_charwindow.o \
                obj/qrc_ttedit.o
 DIST          = /usr/share/qt4/mkspecs/common/g++.conf \
                /usr/share/qt4/mkspecs/common/unix.conf \
@@ -159,7 +165,7 @@ qmake:  FORCE
 
 dist: 
        @$(CHK_DIR_EXISTS) obj/ttedit1.0.0 || $(MKDIR) obj/ttedit1.0.0 
-       $(COPY_FILE) --parents $(SOURCES) $(DIST) obj/ttedit1.0.0/ && $(COPY_FILE) --parents src/ttedit.h src/editwindow.h src/glyphpoints.h src/types.h src/debug.h src/toolwindow.h src/vector.h src/graphicprimitives.h src/list.h obj/ttedit1.0.0/ && $(COPY_FILE) --parents ttedit.qrc obj/ttedit1.0.0/ && $(COPY_FILE) --parents src/ttedit.cpp src/editwindow.cpp src/glyphpoints.cpp src/debug.cpp src/toolwindow.cpp src/vector.cpp src/graphicprimitives.cpp obj/ttedit1.0.0/ && (cd `dirname obj/ttedit1.0.0` && $(TAR) ttedit1.0.0.tar ttedit1.0.0 && $(COMPRESS) ttedit1.0.0.tar) && $(MOVE) `dirname obj/ttedit1.0.0`/ttedit1.0.0.tar.gz . && $(DEL_FILE) -r obj/ttedit1.0.0
+       $(COPY_FILE) --parents $(SOURCES) $(DIST) obj/ttedit1.0.0/ && $(COPY_FILE) --parents src/ttedit.h src/ttemainwindow.h src/editwindow.h src/glyphpoints.h src/types.h src/debug.h src/toolwindow.h src/charwindow.h src/vector.h src/graphicprimitives.h src/list.h obj/ttedit1.0.0/ && $(COPY_FILE) --parents ttedit.qrc obj/ttedit1.0.0/ && $(COPY_FILE) --parents src/ttedit.cpp src/ttemainwindow.cpp src/editwindow.cpp src/glyphpoints.cpp src/debug.cpp src/toolwindow.cpp src/charwindow.cpp src/vector.cpp src/graphicprimitives.cpp obj/ttedit1.0.0/ && (cd `dirname obj/ttedit1.0.0` && $(TAR) ttedit1.0.0.tar ttedit1.0.0 && $(COMPRESS) ttedit1.0.0.tar) && $(MOVE) `dirname obj/ttedit1.0.0`/ttedit1.0.0.tar.gz . && $(DEL_FILE) -r obj/ttedit1.0.0
 
 
 clean:compiler_clean 
@@ -178,22 +184,26 @@ mocclean: compiler_moc_header_clean compiler_moc_source_clean
 
 mocables: compiler_moc_header_make_all compiler_moc_source_make_all
 
-compiler_moc_header_make_all: obj/moc_ttedit.cpp obj/moc_editwindow.cpp obj/moc_toolwindow.cpp
+compiler_moc_header_make_all: obj/moc_ttemainwindow.cpp obj/moc_editwindow.cpp obj/moc_toolwindow.cpp obj/moc_charwindow.cpp
 compiler_moc_header_clean:
-       -$(DEL_FILE) obj/moc_ttedit.cpp obj/moc_editwindow.cpp obj/moc_toolwindow.cpp
-obj/moc_ttedit.cpp: src/ttedit.h
-       /usr/bin/moc $(DEFINES) $(INCPATH) src/ttedit.h -o obj/moc_ttedit.cpp
+       -$(DEL_FILE) obj/moc_ttemainwindow.cpp obj/moc_editwindow.cpp obj/moc_toolwindow.cpp obj/moc_charwindow.cpp
+obj/moc_ttemainwindow.cpp: src/ttemainwindow.h
+       /usr/bin/moc $(DEFINES) $(INCPATH) src/ttemainwindow.h -o obj/moc_ttemainwindow.cpp
 
 obj/moc_editwindow.cpp: src/types.h \
                src/toolwindow.h \
                src/glyphpoints.h \
-               src/ttedit.h \
                src/editwindow.h
        /usr/bin/moc $(DEFINES) $(INCPATH) src/editwindow.h -o obj/moc_editwindow.cpp
 
 obj/moc_toolwindow.cpp: src/toolwindow.h
        /usr/bin/moc $(DEFINES) $(INCPATH) src/toolwindow.h -o obj/moc_toolwindow.cpp
 
+obj/moc_charwindow.cpp: src/glyphpoints.h \
+               src/types.h \
+               src/charwindow.h
+       /usr/bin/moc $(DEFINES) $(INCPATH) src/charwindow.h -o obj/moc_charwindow.cpp
+
 compiler_rcc_make_all: obj/qrc_ttedit.cpp
 compiler_rcc_clean:
        -$(DEL_FILE) obj/qrc_ttedit.cpp
@@ -232,12 +242,16 @@ compiler_clean: compiler_moc_header_clean compiler_rcc_clean
 ####### Compile
 
 obj/ttedit.o: src/ttedit.cpp src/ttedit.h \
+               src/ttemainwindow.h
+       $(CXX) -c $(CXXFLAGS) $(INCPATH) -o obj/ttedit.o src/ttedit.cpp
+
+obj/ttemainwindow.o: src/ttemainwindow.cpp src/ttemainwindow.h \
                src/editwindow.h \
                src/types.h \
                src/toolwindow.h \
                src/glyphpoints.h \
                src/charwindow.h \
-               src/tte_res.h \
+               src/ttedit.h \
                src/debug.h \
                res/cur1.xpm \
                res/cur2.xpm \
@@ -251,16 +265,17 @@ obj/ttedit.o: src/ttedit.cpp src/ttedit.h \
                res/tool1.xpm \
                res/tool2.xpm \
                res/tool3.xpm
-       $(CXX) -c $(CXXFLAGS) $(INCPATH) -o obj/ttedit.o src/ttedit.cpp
+       $(CXX) -c $(CXXFLAGS) $(INCPATH) -o obj/ttemainwindow.o src/ttemainwindow.cpp
 
 obj/editwindow.o: src/editwindow.cpp src/editwindow.h \
                src/types.h \
                src/toolwindow.h \
                src/glyphpoints.h \
-               src/ttedit.h \
                src/graphicprimitives.h \
                src/debug.h \
-               src/vector.h
+               src/vector.h \
+               src/charwindow.h \
+               src/ttedit.h
        $(CXX) -c $(CXXFLAGS) $(INCPATH) -o obj/editwindow.o src/editwindow.cpp
 
 obj/glyphpoints.o: src/glyphpoints.cpp src/glyphpoints.h \
@@ -275,6 +290,12 @@ obj/toolwindow.o: src/toolwindow.cpp src/toolwindow.h \
                src/types.h
        $(CXX) -c $(CXXFLAGS) $(INCPATH) -o obj/toolwindow.o src/toolwindow.cpp
 
+obj/charwindow.o: src/charwindow.cpp src/charwindow.h \
+               src/glyphpoints.h \
+               src/types.h \
+               src/debug.h
+       $(CXX) -c $(CXXFLAGS) $(INCPATH) -o obj/charwindow.o src/charwindow.cpp
+
 obj/vector.o: src/vector.cpp src/vector.h
        $(CXX) -c $(CXXFLAGS) $(INCPATH) -o obj/vector.o src/vector.cpp
 
@@ -282,8 +303,8 @@ obj/graphicprimitives.o: src/graphicprimitives.cpp src/graphicprimitives.h \
                src/types.h
        $(CXX) -c $(CXXFLAGS) $(INCPATH) -o obj/graphicprimitives.o src/graphicprimitives.cpp
 
-obj/moc_ttedit.o: obj/moc_ttedit.cpp 
-       $(CXX) -c $(CXXFLAGS) $(INCPATH) -o obj/moc_ttedit.o obj/moc_ttedit.cpp
+obj/moc_ttemainwindow.o: obj/moc_ttemainwindow.cpp 
+       $(CXX) -c $(CXXFLAGS) $(INCPATH) -o obj/moc_ttemainwindow.o obj/moc_ttemainwindow.cpp
 
 obj/moc_editwindow.o: obj/moc_editwindow.cpp 
        $(CXX) -c $(CXXFLAGS) $(INCPATH) -o obj/moc_editwindow.o obj/moc_editwindow.cpp
@@ -291,6 +312,9 @@ obj/moc_editwindow.o: obj/moc_editwindow.cpp
 obj/moc_toolwindow.o: obj/moc_toolwindow.cpp 
        $(CXX) -c $(CXXFLAGS) $(INCPATH) -o obj/moc_toolwindow.o obj/moc_toolwindow.cpp
 
+obj/moc_charwindow.o: obj/moc_charwindow.cpp 
+       $(CXX) -c $(CXXFLAGS) $(INCPATH) -o obj/moc_charwindow.o obj/moc_charwindow.cpp
+
 obj/qrc_ttedit.o: obj/qrc_ttedit.cpp 
        $(CXX) -c $(CXXFLAGS) $(INCPATH) -o obj/qrc_ttedit.o obj/qrc_ttedit.cpp
 
index 4c601c8392e27ae21dc27fca89ba784fa5d884ce..d9e6ee3ac2182931867b11a4464ee30a77cbe6bb 100755 (executable)
 // Who  When        What
 // ---  ----------  -------------------------------------------------------------
 // JLH  08/28/2008  Created this file
+// JLH  03/19/2009  Converted from wxWidgets to Qt
 //
 
 // FIXED:
 //
 // STILL TO BE DONE:
 //
-// - Fix problem with owned window causing main window refresh problems
-//   (ironically enough, it doesn't seem to be a problem anymore...)
+// - Fix "window disappears when tool win comes up" problem
+// - Render of main window points
 //
 
 #include "charwindow.h"
+#include "debug.h"
+
+CharWindow::CharWindow(QWidget * parent/*= NULL*/): QWidget(parent, Qt::Tool), path(NULL)
+{
+       setWindowTitle("Character: Unknown");
+}
+
+void CharWindow::MakePathFromPoints(GlyphPoints * gp)
+{
+       if (gp == NULL)
+               return;
+
+       if (path != NULL)
+               delete path;
+
+       path = new QPainterPath();
+
+#if 0
+       try
+       {
+               path->moveTo(gp->GetX(0), gp->GetY(0));
+       }
+       catch (int e)
+       {
+               if (e == GP_OUT_OF_RANGE)
+                       WriteLogMsg("CharWindow: Caught GP_OUT_OF_RANGE exception.\n");
+       }
+
+       for(int i=1; i<gp->GetNumPoints(); i++)
+       {
+       }
+#endif
+
+       // Draw curve formed by points
+
+       for(int poly=0; poly<gp->GetNumPolys(); poly++)
+       {
+               if (gp->GetNumPoints(poly) > 2)
+               {
+                       // Initial move...
+                       // If it's not on curve, then move to it, otherwise move to last point...
+
+                       int x, y;
+
+                       if (gp->GetOnCurve(poly, gp->GetNumPoints(poly) - 1))
+                               x = (int)gp->GetX(poly, gp->GetNumPoints(poly) - 1), y = (int)gp->GetY(poly, gp->GetNumPoints(poly) - 1);
+                       else
+                               x = (int)gp->GetX(poly, 0), y = (int)gp->GetY(poly, 0);
+
+                       path->moveTo(x, y);
+
+                       for(int i=0; i<gp->GetNumPoints(poly); i++)
+                       {
+                               if (gp->GetOnCurve(poly, i))
+                               {
+//                                     p.drawLine(x, y, gp->GetX(poly, i), gp->GetY(poly, i));
+                                       x = (int)gp->GetX(poly, i), y = (int)gp->GetY(poly, i);
+                                       path->lineTo(x, y);
+                               }
+                               else
+                               {
+                                       uint32 prev = gp->GetPrev(poly, i), next = gp->GetNext(poly, i);
+                                       float px = gp->GetX(poly, prev), py = gp->GetY(poly, prev),
+                                               nx = gp->GetX(poly, next), ny = gp->GetY(poly, next);
+
+                                       if (!gp->GetOnCurve(poly, prev))
+                                               px = (px + gp->GetX(poly, i)) / 2.0f,
+                                               py = (py + gp->GetY(poly, i)) / 2.0f;
+
+                                       if (!gp->GetOnCurve(poly, next))
+                                               nx = (nx + gp->GetX(poly, i)) / 2.0f,
+                                               ny = (ny + gp->GetY(poly, i)) / 2.0f;
+
+//                                     Bezier(p, point(px, py), point(gp->GetX(poly, i), gp->GetY(poly, i)), point(nx, ny));
+//                                     path->moveTo(px, py);
+                                       path->quadTo(gp->GetX(poly, i), gp->GetY(poly, i), nx, ny);
+                                       x = (int)nx, y = (int)ny;
+
+                                       if (gp->GetOnCurve(poly, next))
+                                               i++;                                    // Following point is on curve, so move past it
+                               }
+                       }
+
+                       path->closeSubpath();
+               }
+       }
+
+
+#if 0
+       // Draw curve formed by points
+
+       for(int poly=0; poly<pts.GetNumPolys(); poly++)
+       {
+               if (pts.GetNumPoints(poly) > 2)
+               {
+                       // Initial move...
+                       // If it's not on curve, then move to it, otherwise move to last point...
+
+                       int x, y;
+
+                       if (pts.GetOnCurve(poly, pts.GetNumPoints(poly) - 1))
+                               x = (int)pts.GetX(poly, pts.GetNumPoints(poly) - 1), y = (int)pts.GetY(poly, pts.GetNumPoints(poly) - 1);
+                       else
+                               x = (int)pts.GetX(poly, 0), y = (int)pts.GetY(poly, 0);
+
+                       for(int i=0; i<pts.GetNumPoints(poly); i++)
+                       {
+                               if (pts.GetOnCurve(poly, i))
+//                                     LineTo(hdc, pts.GetX(poly, i), pts.GetY(poly, i));
+                               {
+                                       p.drawLine(x, y, pts.GetX(poly, i), pts.GetY(poly, i));
+                                       x = (int)pts.GetX(poly, i), y = (int)pts.GetY(poly, i);
+                               }
+                               else
+                               {
+                                       uint32 prev = pts.GetPrev(poly, i), next = pts.GetNext(poly, i);
+                                       float px = pts.GetX(poly, prev), py = pts.GetY(poly, prev),
+                                               nx = pts.GetX(poly, next), ny = pts.GetY(poly, next);
+
+                                       if (!pts.GetOnCurve(poly, prev))
+                                               px = (px + pts.GetX(poly, i)) / 2.0f,
+                                               py = (py + pts.GetY(poly, i)) / 2.0f;
+
+                                       if (!pts.GetOnCurve(poly, next))
+                                               nx = (nx + pts.GetX(poly, i)) / 2.0f,
+                                               ny = (ny + pts.GetY(poly, i)) / 2.0f;
+
+                                       Bezier(p, point(px, py), point(pts.GetX(poly, i), pts.GetY(poly, i)), point(nx, ny));
+                                       x = (int)nx, y = (int)ny;
+
+                                       if (pts.GetOnCurve(poly, next))
+                                               i++;                                    // Following point is on curve, so move past it
+                               }
+                       }
+               }
+       }
+#endif
+}
+
+QSize CharWindow::minimumSizeHint() const
+{
+       return QSize(50, 50);
+}
+
+QSize CharWindow::sizeHint() const
+{
+       return QSize(200, 200);
+}
+
+void CharWindow::paintEvent(QPaintEvent * /*event*/)
+{
+       if (path == NULL)
+               return;
+
+       QPainter p(this);
+
+// Need to translate as well...
+//     p.scale(1.0, -1.0);
+       p.drawPath(*path);
+}
 
 
+#if 0
 BEGIN_EVENT_TABLE(CharWindow, wxMiniFrame)
        EVT_PAINT(CharWindow::OnPaint)
 //     EVT_MOUSE_EVENTS(CharWindow::OnMouseEvent)
@@ -54,3 +216,4 @@ void CharWindow::OnPaint(wxPaintEvent &e)
 
 //     memDC.SelectObject(wxNullBitmap);
 }
+#endif
index 0f6add1955ee43195d216d5cd7acf95c3507eef1..cabd343bd9ed8f6589713f7e0bdc6150ed9022f8 100755 (executable)
@@ -2,12 +2,34 @@
 // CHARWINDOW.H: Header file
 //
 // by James L. Hammons
-// (C) 2008 Underground Software
+// (C) 2009 Underground Software
 //
 
 #ifndef __CHARWINDOW_H__
 #define __CHARWINDOW_H__
 
+#include <QtGui>
+#include "glyphpoints.h"
+
+class CharWindow: public QWidget
+{
+       Q_OBJECT
+
+       public:
+               CharWindow(QWidget * parent = NULL);
+               void MakePathFromPoints(GlyphPoints * gp);
+
+       protected:
+               QSize minimumSizeHint() const;
+               QSize sizeHint() const;
+               void paintEvent(QPaintEvent * event);
+
+       private:
+               QImage img;
+               QPainterPath * path;
+};
+
+#if 0
 #include <wx/wx.h>                                                             // So that whoever uses this can without having
                                                                                                // to pull in a bunch of references manually
 #include <wx/minifram.h>
@@ -29,5 +51,6 @@ class CharWindow: public wxMiniFrame
 
        DECLARE_EVENT_TABLE()
 };
+#endif
 
 #endif // __CHARWINDOW_H__
index b0952ca6ded33e365a448da5b487dc8050a49f19..97546ef5c3a54ea151eed268410e6c4a2be940e2 100755 (executable)
 #include "graphicprimitives.h"
 #include "debug.h"
 #include "vector.h"
+#include "charwindow.h"
+#include "ttedit.h"
 
-EditWindow::EditWindow(QWidget * parent/*=NULL*/): QWidget(parent),
+EditWindow::EditWindow(QWidget * parent/*= NULL*/): QWidget(parent),
        scale(1.0), offsetX(-10), offsetY(-10), tool(TOOLSelect),
        ptHighlight(-1), oldPtHighlight(-1), ptNextHighlight(-1), oldPtNextHighlight(-1),
        polyFirstPoint(true)
@@ -81,8 +83,8 @@ QPoint EditWindow::GetAdjustedMousePosition(QMouseEvent * event)
 {
        QSize winSize = size();
        // This is undoing the transform, e.g. going from client coords to local coords.
-       // In essence, the height - y is height + (y * -1), the (y * -1) term doing the conversion
-       // of the y-axis from increasing bottom to top.
+       // In essence, the height - y is height + (y * -1), the (y * -1) term doing the
+       // conversion of the y-axis from increasing bottom to top.
        return QPoint(offsetX + event->x(), offsetY + (winSize.height() - event->y()));
 }
 
@@ -94,6 +96,13 @@ QPoint EditWindow::GetAdjustedClientPosition(int x, int y)
        return QPoint(-offsetX + x, (winSize.height() - (-offsetY + y)) * +1.0);
 }
 
+/*
+TODO:
+ o  Different colors for polys on selected points
+ o  Different colors for handles on non-selected polys
+ o  Line of sight (dashed, dotted) for off-curve points
+ o  Repaints for press/release of CTRL/SHIFT during point creation
+*/
 void EditWindow::paintEvent(QPaintEvent * /*event*/)
 {
        QPainter p(this);
@@ -541,1608 +550,10 @@ void EditWindow::mouseReleaseEvent(QMouseEvent * event)
        {
 //             if (tool == TOOLScroll || tool == TOOLZoom)
 //                     ReleaseMouse();
+//this is prolly too much
+               ((TTEdit *)qApp)->charWnd->MakePathFromPoints(&pts);
+               ((TTEdit *)qApp)->charWnd->update();
        }
 
        event->accept();
 }
-
-
-
-#if 0
-#include "editwindow.h"
-#include "graphicprimitives.h"
-#include "toolwindow.h"
-#include "debug.h"
-#include "vector.h"
-
-
-BEGIN_EVENT_TABLE(TTEditWindow, wxWindow)
-       EVT_PAINT(TTEditWindow::OnPaint)
-       EVT_MOUSE_EVENTS(TTEditWindow::OnMouseEvent)
-END_EVENT_TABLE()
-
-TTEditWindow::TTEditWindow(wxFrame * parent, const wxPoint &pos, const wxSize &size, long style):
-       wxWindow(parent, -1, pos, size, style | wxFULL_REPAINT_ON_RESIZE),
-       app(wxGetApp()), scale(1.0), offsetX(-10), offsetY(-10), tool(TOOLSelect),
-       ptHighlight(-1), oldPtHighlight(-1), ptNextHighlight(-1), oldPtNextHighlight(-1),
-       polyFirstPoint(true), bmp(NULL)
-{
-       SetCursor(*(app.cur[tool]));
-       SetBackgroundColour(wxColour(0xFF, 0xFF, 0xFF));
-
-       wxString s;
-       s.Printf(_("Zoom: %.2f%%"), scale * 100.0);
-       parent->SetStatusText(s, 1);
-}
-
-TTEditWindow::~TTEditWindow(void)
-{
-       if (bmp)
-               delete bmp;
-}
-
-void TTEditWindow::OnPaint(wxPaintEvent &e)
-{
-       wxPaintDC dc(this);
-//Doesn't do crap!
-//dc.SetBackground(*wxWHITE_BRUSH);
-
-// Due to the screwiness of wxWidgets coord system, the origin is ALWAYS
-// the upper left corner--regardless of axis orientation, etc...
-       wxCoord width, height;
-       dc.GetSize(&width, &height);
-
-       dc.SetDeviceOrigin(-offsetX, height - (-offsetY));
-       dc.SetAxisOrientation(true, true);
-
-// Scrolling can be done by using OffsetViewportOrgEx
-// Scaling can be done by adjusting SetWindowExtEx (it's denominator of txform)
-// you'd use: % = ViewportExt / WindowExt
-// But it makes the window look like crap: fuggetuboutit.
-// Instead, we have to scale EVERYTHING by hand. Crap!
-// It's not *that* bad, but not as convenient either...
-
-       dc.SetPen(*(wxThePenList->FindOrCreatePen(wxColour(0x00, 0x00, 0xFF), 1, wxDOT)));
-//     dc.DrawLine(0, 0, 10, 10);
-
-    // Draw coordinate axes
-
-       dc.CrossHair(0, 0);
-
-    // Draw points
-
-       for(int i=0; i<pts.GetNumPoints(); i++)
-       {
-               if (i == ptHighlight)
-               {
-                       dc.SetPen(*(wxThePenList->FindOrCreatePen(wxColour(0xFF, 0x00, 0x00), 1, wxSOLID)));
-//                     SelectObject(hdc, hRedPen1);
-
-                       if (pts.GetOnCurve(i))
-                       {
-                               DrawSquareDotN(dc, pts.GetX(i), pts.GetY(i), 7);
-                               DrawSquareDotN(dc, pts.GetX(i), pts.GetY(i), 9);
-                       }
-                       else
-                       {
-                               DrawRoundDotN(dc, pts.GetX(i), pts.GetY(i), 7);
-                               DrawRoundDotN(dc, pts.GetX(i), pts.GetY(i), 9);
-                       }
-               }
-               else if ((i == ptHighlight || i == ptNextHighlight) && tool == TOOLAddPt)
-               {
-                       dc.SetPen(*(wxThePenList->FindOrCreatePen(wxColour(0x00, 0xAF, 0x00), 1, wxSOLID)));
-//                     SelectObject(hdc, hGreenPen1);
-
-                       if (pts.GetOnCurve(i))
-                       {
-                               DrawSquareDotN(dc, pts.GetX(i), pts.GetY(i), 7);
-                               DrawSquareDotN(dc, pts.GetX(i), pts.GetY(i), 9);
-                       }
-                       else
-                       {
-                               DrawRoundDotN(dc, pts.GetX(i), pts.GetY(i), 7);
-                               DrawRoundDotN(dc, pts.GetX(i), pts.GetY(i), 9);
-                       }
-               }
-               else
-               {
-                       dc.SetPen(*(wxThePenList->FindOrCreatePen(wxColour(0x00, 0x00, 0x00), 1, wxSOLID)));
-//                     SelectObject(hdc, hBlackPen1);
-
-                       if (pts.GetOnCurve(i))
-                               DrawSquareDot(dc, pts.GetX(i), pts.GetY(i));
-                       else
-                               DrawRoundDot(dc, pts.GetX(i), pts.GetY(i));
-               }
-
-               if (tool == TOOLDelPt && i == ptHighlight)
-               {
-                       dc.SetPen(*(wxThePenList->FindOrCreatePen(wxColour(0xFF, 0x00, 0x00), 1, wxSOLID)));
-//                     SelectObject(hdc, hRedPen1);
-//                     MoveToEx(hdc, pts.GetX(i) - 5, pts.GetY(i) - 5, NULL);
-//                     LineTo(hdc, pts.GetX(i) + 5, pts.GetY(i) + 5);
-//                     LineTo(hdc, pts.GetX(i) - 5, pts.GetY(i) - 5);//Lameness!
-//                     MoveToEx(hdc, pts.GetX(i) - 5, pts.GetY(i) + 5, NULL);
-//                     LineTo(hdc, pts.GetX(i) + 5, pts.GetY(i) - 5);
-//                     LineTo(hdc, pts.GetX(i) - 5, pts.GetY(i) + 5);//More lameness!!
-                       dc.DrawLine(pts.GetX(i) - 5, pts.GetY(i) - 5, pts.GetX(i) + 5, pts.GetY(i) + 5);
-                       dc.DrawLine(pts.GetX(i) + 5, pts.GetY(i) - 5, pts.GetX(i) - 5, pts.GetY(i) + 5);
-               }
-       }
-
-//             SelectObject(hdc, hBlackPen1);
-       dc.SetPen(*(wxThePenList->FindOrCreatePen(wxColour(0x00, 0x00, 0x00), 1, wxSOLID)));
-
-       // Draw curve formed by points
-
-       for(int poly=0; poly<pts.GetNumPolys(); poly++)
-       {
-               if (pts.GetNumPoints(poly) > 2)
-               {
-                       // Initial move...
-                       // If it's not on curve, then move to it, otherwise move to last point...
-
-                       wxCoord x, y;
-
-                       if (pts.GetOnCurve(poly, pts.GetNumPoints(poly) - 1))
-                               x = (wxCoord)pts.GetX(poly, pts.GetNumPoints(poly) - 1), y = (wxCoord)pts.GetY(poly, pts.GetNumPoints(poly) - 1);
-                       else
-                               x = (wxCoord)pts.GetX(poly, 0), y = (wxCoord)pts.GetY(poly, 0);
-
-                       for(int i=0; i<pts.GetNumPoints(poly); i++)
-                       {
-                               if (pts.GetOnCurve(poly, i))
-//                                     LineTo(hdc, pts.GetX(poly, i), pts.GetY(poly, i));
-                               {
-                                       dc.DrawLine(x, y, pts.GetX(poly, i), pts.GetY(poly, i));
-                                       x = (wxCoord)pts.GetX(poly, i), y = (wxCoord)pts.GetY(poly, i);
-                               }
-                               else
-                               {
-                                       uint32 prev = pts.GetPrev(poly, i), next = pts.GetNext(poly, i);
-                                       float px = pts.GetX(poly, prev), py = pts.GetY(poly, prev),
-                                               nx = pts.GetX(poly, next), ny = pts.GetY(poly, next);
-
-                                       if (!pts.GetOnCurve(poly, prev))
-                                               px = (px + pts.GetX(poly, i)) / 2.0f,
-                                               py = (py + pts.GetY(poly, i)) / 2.0f;
-
-                                       if (!pts.GetOnCurve(poly, next))
-                                               nx = (nx + pts.GetX(poly, i)) / 2.0f,
-                                               ny = (ny + pts.GetY(poly, i)) / 2.0f;
-
-                                       Bezier(dc, point(px, py), point(pts.GetX(poly, i), pts.GetY(poly, i)), point(nx, ny));
-                                       x = (wxCoord)nx, y = (wxCoord)ny;
-
-                                       if (pts.GetOnCurve(poly, next))
-                                               i++;                                    // Following point is on curve, so move past it
-                               }
-                       }
-               }
-       }
-
-//             SelectObject(hdc, oldPen);                              // Restore the stuff we disrupted...
-       dc.SetPen(wxNullPen);
-//             SelectObject(hdc, oldBrush);
-//             EndPaint(hWnd, &ps);
-}
-
-void TTEditWindow::OnMouseEvent(wxMouseEvent &e)
-{
-#ifdef DEBUGTP
-//printf("!!! This window %s focus...!\n", (HasCapture() ? "has" : "doesn't have"));
-#endif
-       if (e.RightDown())
-       {
-               // Handle tool palette (NOTE: tool palette deals with RightUp event.)
-
-               wxPoint pt = ClientToScreen(e.GetPosition());
-               app.toolPalette->Move(pt);
-               app.toolPalette->Show(true);
-               SetCursor(*wxSTANDARD_CURSOR);
-               app.toolPalette->SetCursor(*wxSTANDARD_CURSOR);
-               app.toolPalette->prevTool = TOOLSelect;
-               app.toolPalette->Refresh(false);
-               CaptureMouse();
-       }
-       else if (e.RightUp())
-       {
-               ToolType newTool = app.toolPalette->FindSelectedTool();//, oldTool = tool;
-
-               // We only change the tool if a new one was actually selected. Otherwise, we do nothing.
-               if (newTool != TOOLNone)
-               {
-                       tool = newTool;
-
-                       if (tool == TOOLScroll || tool == TOOLZoom || tool == TOOLAddPoly
-                               || tool == TOOLDelPoly)
-                               ptHighlight = -1;
-
-                       if (tool == TOOLAddPoly)
-                               polyFirstPoint = true;
-               }
-
-               ReleaseMouse();
-               app.toolPalette->Show(false);
-               SetCursor(*(app.cur[tool]));
-       }
-       else if (e.LeftDown())
-       {
-               if (tool == TOOLScroll || tool == TOOLZoom)
-                       CaptureMouse();                                         // Make sure we capture the mouse when in scroll/zoom mode
-               else if (tool == TOOLAddPt)             // "Add Point" tool
-               {
-                       if (pts.GetNumPoints() > 0)
-                       {
-                               wxPoint pt = GetAdjustedMousePosition(e);
-                               pts.InsertPoint(pts.GetNext(ptHighlight), pt.x, pt.y, (e.ShiftDown() | e.ControlDown() ? false : true));
-                               ptHighlight = ptNextHighlight;
-                               Refresh();
-                       }
-               }
-               else if (tool == TOOLAddPoly)   // "Add Poly" tool
-               {
-#ifdef DEBUGFOO
-WriteLogMsg("Adding point... # polys: %u, # points: %u", pts.GetNumPolys(), pts.GetNumPoints());
-#endif
-                       if (polyFirstPoint)
-                       {
-                               polyFirstPoint = false;
-                               pts.AddNewPolyAtEnd();
-                       }
-
-                       wxPoint pt = GetAdjustedMousePosition(e);
-                       // Append a point to the end of the structure
-                       pts += IPoint(pt.x, pt.y, (e.ShiftDown() | e.ControlDown() ? false : true));
-                       ptHighlight = pts.GetNumPoints() - 1;
-                       Refresh();
-#ifdef DEBUGFOO
-WriteLogMsg(" --> [# polys: %u, # points: %u]\n", pts.GetNumPolys(), pts.GetNumPoints());
-#endif
-               }
-               else if (tool == TOOLSelect || tool == TOOLPolySelect)
-               {
-                       if (pts.GetNumPoints() > 0)
-                       {
-                               pt = GetAdjustedClientPosition(pts.GetX(ptHighlight), pts.GetY(ptHighlight));
-                               WarpPointer(pt.x, pt.y);
-
-                               if (e.ShiftDown() | e.ControlDown())
-                                       pts.SetOnCurve(ptHighlight, !pts.GetOnCurve(ptHighlight));
-                       }
-               }
-               else if (tool == TOOLDelPt)
-               {
-                       if (pts.GetNumPoints() > 0)
-//Or could use:
-//                     if (ptHighlight != -1)
-                       {
-//This assumes that WM_MOUSEMOVE happens before this!
-//The above commented out line should take care of this contingency... !!! FIX !!!
-                               pts.DeletePoint(ptHighlight);
-                               Refresh();
-                       }
-               }
-       }
-       else if (e.LeftUp())
-       {
-               if (tool == TOOLScroll || tool == TOOLZoom)
-                       ReleaseMouse();
-       }
-       else if (e.MiddleDown())
-       {
-               SetCursor(*(app.cur[2]));                               // Scrolling cursor
-       }
-       else if (e.MiddleUp())
-       {
-               SetCursor(*(app.cur[tool]));                    // Restore previous cursor
-       }
-       else if (e.Dragging())
-       {
-               if (e.RightIsDown())
-               {
-                       ToolType newTool = app.toolPalette->FindSelectedTool();
-
-                       if (newTool != app.toolPalette->prevTool)
-                       {
-                               app.toolPalette->prevTool = newTool;
-                               app.toolPalette->Refresh(false);
-                       }
-
-//                     return;
-               }
-               else if (e.MiddleIsDown())
-               {
-                   // Calc offset from previous point
-                       pt = e.GetPosition();
-                       ptOffset.x = pt.x - ptPrevious.x,
-                       ptOffset.y = pt.y - ptPrevious.y;
-
-// Then multiply it by the scaling factor. Whee!
-                       // This looks wacky because we're using screen coords for the offset...
-                       // Otherwise, we would subtract both offsets!
-                       offsetX -= ptOffset.x, offsetY += ptOffset.y;
-                       Refresh();
-//                     ptPrevious = pt;
-
-//                     return;
-               }
-
-               else if (e.LeftIsDown())
-               {
-#if 0
-                       if (tool == TOOLScroll)
-                       {
-                           // Extract current point from lParam/calc offset from previous point
-
-                               pt = e.GetPosition();
-                               ptOffset.x = pt.x - ptPrevious.x,
-                               ptOffset.y = pt.y - ptPrevious.y;
-
-                               // NOTE: OffsetViewportOrg operates in DEVICE UNITS...
-
-//Seems there's no equivalent for this in wxWidgets...!
-//!!! FIX !!!
-//                             hdc = GetDC(hWnd);
-//                             OffsetViewportOrgEx(hdc, ptOffset.x, ptOffset.y, NULL);
-//                             ReleaseDC(hWnd, hdc);
-
-// this shows that it works, so the logic above must be faulty...
-// And it is. It should convert the coords first, then do the subtraction to figure the offset...
-// Above: DONE
-// Then multiply it by the scaling factor. Whee!
-                               // This looks wacky because we're using screen coords for the offset...
-                               // Otherwise, we would subtract both offsets!
-                               offsetX -= ptOffset.x, offsetY += ptOffset.y;
-                               Refresh();
-                       }
-                       else
-#endif
-                       if (tool == TOOLAddPt || tool == TOOLAddPoly || tool == TOOLSelect)
-                       {
-                               if (tool != TOOLAddPt || pts.GetNumPoints() > 0)//yecch.
-                               {
-//temporary, for testing. BTW, Select drag bug is here...!
-#if 1
-                                       wxPoint pt2 = GetAdjustedMousePosition(e);
-                                       pts.SetXY(ptHighlight, pt2.x, pt2.y);
-                                       Refresh();
-#endif
-                               }
-                       }
-                       else if (tool == TOOLPolySelect)
-                       {
-                               if (pts.GetNumPoints() > 0)
-                               {
-                                       wxPoint pt2 = GetAdjustedMousePosition(e);
-                                       // Should also set onCurve here as well, depending on keystate
-//Or should we?
-                                       pts.OffsetPoly(pts.GetPoly(ptHighlight), pt2.x - pts.GetX(ptHighlight), pt2.y - pts.GetY(ptHighlight));
-                                       Refresh();
-                               }
-                       }
-               }
-
-               ptPrevious = pt;
-       }
-       else if (e.Moving())
-       {
-//             else    // Moving, not dragging...
-//             {
-                       if (tool == TOOLSelect || tool == TOOLDelPt || tool == TOOLAddPt
-                               || tool == TOOLPolySelect)// || tool == TOOLAddPoly)
-                       {
-                               wxPoint pt2 = GetAdjustedMousePosition(e);
-                               double closest = 1.0e+99;
-
-                               for(int i=0; i<pts.GetNumPoints(); i++)
-                               {
-                                       double dist = ((pt2.x - pts.GetX(i)) * (pt2.x - pts.GetX(i)))
-                                               + ((pt2.y - pts.GetY(i)) * (pt2.y - pts.GetY(i)));
-
-                                       if (dist < closest)
-                                               closest = dist, ptHighlight = i;
-                               }
-
-                               if (ptHighlight != oldPtHighlight)
-                               {
-                                       oldPtHighlight = ptHighlight;
-                                       Refresh();
-                               }
-
-                               // What follows here looks like voodoo, but is really simple. What we do is
-                               // check to see if the mouse point has a perpendicular intersection with any of
-                               // the line segments. If it does, calculate the length of the perpendicular
-                               // and choose the smallest length. If there is no perpendicular, then choose the
-                               // length of line connecting the closer of either the first endpoint or the
-                               // second and choose the smallest of those.
-
-                               // There is one bit of math that looks like voodoo to me ATM--will explain once
-                               // I understand it better (the calculation of the length of the perpendicular).
-
-                               if (pts.GetNumPoints() > 1 && tool == TOOLAddPt)
-                               {
-                                       double smallest = 1.0e+99;
-
-                                       for(int i=0; i<pts.GetNumPoints(); i++)
-                                       {
-                                               int32 p1x = pts.GetX(i), p1y = pts.GetY(i),
-                                                       p2x = pts.GetX(pts.GetNext(i)), p2y = pts.GetY(pts.GetNext(i));
-
-                                               vector ls(p2x, p2y, 0, p1x, p1y, 0), v1(pt2.x, pt2.y, 0, p1x, p1y, 0),
-                                                       v2(pt2.x, pt2.y, 0, p2x, p2y, 0);
-                                               double pp = ls.dot(v1) / ls.length(), dist;
-// Geometric interpretation:
-// pp is the paremeterized point on the vector ls where the perpendicular intersects ls.
-// If pp < 0, then the perpendicular lies beyond the 1st endpoint. If pp > length of ls,
-// then the perpendicular lies beyond the 2nd endpoint.
-
-                                               if (pp < 0.0)
-                                                       dist = v1.length();
-                                               else if (pp > ls.length())
-                                                       dist = v2.length();
-                                               else                                    // distance = ?Det?(ls, v1) / |ls|
-                                                       dist = fabs((ls.x * v1.y - v1.x * ls.y) / ls.length());
-
-//The answer to the above looks like it might be found here:
-//
-//If the segment endpoints are s and e, and the point is p, then the test for the perpendicular
-//intercepting the segment is equivalent to insisting that the two dot products {s-e}.{s-p} and
-//{e-s}.{e-p} are both non-negative.  Perpendicular distance from the point to the segment is
-//computed by first computing the area of the triangle the three points form, then dividing by the
-//length of the segment.  Distances are done just by the Pythagorean theorem.  Twice the area of the
-//triangle formed by three points is the determinant of the following matrix:
-//
-//sx sy 1
-//ex ey 1
-//px py 1
-//
-//(???) By translating the start point to the origin, this can be rewritten as:
-//By subtracting row 1 from all rows, you get the following:
-//
-//0         0         0
-//(ex - sx) (ey - sy) 0
-//(px - sx) (py - sy) 0
-//
-//which greatly simplifies the calculation of the determinant.
-
-                                               if (dist < smallest)
-                                                       smallest = dist, ptNextHighlight = pts.GetNext(i), ptHighlight = i;
-                                       }
-
-                                       if (ptNextHighlight != oldPtNextHighlight)
-                                       {
-                                               oldPtNextHighlight = ptNextHighlight;
-                                               Refresh();
-                                       }
-                               }
-                       }
-//             }
-
-               ptPrevious = e.GetPosition();
-       }
-}
-
-wxPoint TTEditWindow::GetAdjustedMousePosition(wxMouseEvent &e)
-{
-       wxCoord width, height;
-       wxClientDC dc(this);
-
-       dc.GetSize(&width, &height);
-       dc.SetDeviceOrigin(-offsetX, height - (-offsetY));
-       dc.SetAxisOrientation(true, true);
-
-#if 0
-wxStatusBar * sb = ((wxFrame *)GetParent())->GetStatusBar();
-wxString s;
-s.Printf("Logical mouse pos: %d, %d (%d, %d)", pt.x, pt.y, width, height);
-sb->SetStatusText(s);
-#endif
-
-       return e.GetLogicalPosition(dc);
-}
-
-wxPoint TTEditWindow::GetAdjustedClientPosition(wxCoord x, wxCoord y)
-{
-       wxCoord width, height;
-       wxClientDC dc(this);
-
-       dc.GetSize(&width, &height);
-       dc.SetDeviceOrigin(-offsetX, height - (-offsetY));
-       dc.SetAxisOrientation(true, true);
-
-       return wxPoint(dc.LogicalToDeviceX(x), dc.LogicalToDeviceY(y));
-}
-
-
-#if 0
-
-!!! OLD STUFF !!!
-
-
-LRESULT CALLBACK WndProc(HWND hWnd, UINT msgID, WPARAM wParam, LPARAM lParam)
-{
-       RECT rc1, rc2;
-       HDC hdc;
-       POINT pt, ptOffset;
-       SIZE sz;
-       PAINTSTRUCT ps;
-
-       switch (msgID)
-       {
-       case WM_CREATE:
-
-               MiscCenterWnd(hWnd, GetDesktopWindow());
-               InitCommonControls();
-               hStatusBar = CreateStatusWindow(WS_CHILD | WS_VISIBLE, statusBarTxt, hWnd, ID_STATUSBAR);
-
-               if (!hStatusBar)
-                       return -1;
-
-// clean this crap up!
-// well, the only crappy thing here is using a POINT as an int array, but otherwise, this is OK
-               wsprintf(strBuf, zoom, 1000);
-               hdc = GetDC(hWnd);
-               GetTextExtentPoint32(hdc, strBuf, lstrlen(strBuf), &sz);
-               ReleaseDC(hWnd, hdc);
-               zoomWndWidth = sz.cx;
-               wsprintf(strBuf, zoom, 100);
-
-               GetClientRect(hWnd, &rc1);
-               pt.x = rc1.right - zoomWndWidth, pt.y = -1;
-               SendMessage(hStatusBar, SB_SETPARTS, 2, (LPARAM)&pt);
-               SendMessage(hStatusBar, SB_SETTEXT, (0 | SBT_NOBORDERS), (LPARAM)statusBarTxt);
-               SendMessage(hStatusBar, SB_SETTEXT, 1, (LPARAM)strBuf);
-
-               hToolBar = CreateToolbarEx(hWnd, WS_CHILD | WS_BORDER | WS_VISIBLE | TBSTYLE_TOOLTIPS,
-                       IDR_TOOLBAR1, 3, hInst, IDB_TOOLBAR1, tbButtons, 4, 16, 16, 16, 16, sizeof(TBBUTTON));
-
-               if (!hToolBar)
-                       return -1;
-
-               CreateNewDoc();
-
-// The following can only be done because we use a private DC (using "CS_OWNDC")
-// (Is that true???)
-// Set the mapping to draw the character so it fits in the viewport...
-               hdc = GetDC(hWnd);
-               GetClientRect(hWnd, &rc1);
-               GetClientRect(hStatusBar, &rc2);
-               rc1.bottom -= rc2.bottom;
-               SetMapMode(hdc, MM_ISOTROPIC);
-               SetWindowExtEx(hdc, rc1.right, rc1.bottom, NULL);
-               SetViewportExtEx(hdc, rc1.right, -rc1.bottom, NULL);
-               SetViewportOrgEx(hdc, 0, rc1.bottom, NULL);
-               ReleaseDC(hWnd, hdc);
-               break;
-
-       case WM_CLOSE:
-
-               if (SaveChanges())
-               {
-                       wpM.length = wpC.length = sizeof(WINDOWPLACEMENT);
-                       GetWindowPlacement(hMainWnd, &wpM);
-                       GetWindowPlacement(hCharWnd, &wpC);
-
-                       if (!IsWindowVisible(hCharWnd))         // Needed because Windows lies about visibility
-                               wpC.showCmd = SW_HIDE;
-
-                       hdc = GetDC(hWnd);
-                       GetViewportOrgEx(hdc, &ptVPM);
-                       ReleaseDC(hWnd, hdc);
-
-                       DestroyWindow(hWnd);
-               }
-
-               break;
-
-       case WM_DESTROY:
-
-               PostQuitMessage(0);
-               break;
-
-       case WM_NCLBUTTONDOWN:
-
-               if (wParam == HTCAPTION)
-               {
-                       NCMouseDown = true;
-                       GetWindowRect(hMainWnd, &rc1);
-                       GetWindowRect(hCharWnd, &rc2);
-                       ptWinOffset.x = rc2.left - rc1.left;
-                       ptWinOffset.y = rc2.top - rc1.top;
-               }
-
-               // Let Windows do its thing with this msg, or weird things will happen...
-
-               DefWindowProc(hWnd, msgID, wParam, lParam);
-               NCMouseDown = false;
-               break;
-
-       case WM_WINDOWPOSCHANGING:
-
-               if (NCMouseDown)
-               {
-                       WINDOWPOS * wp = (WINDOWPOS *)lParam;
-
-                       if (wp->hwnd == hMainWnd && !(wp->flags & SWP_NOMOVE))
-                               SetWindowPos(hCharWnd, 0, wp->x + ptWinOffset.x, wp->y + ptWinOffset.y,
-                                               0, 0, SWP_NOZORDER | SWP_NOSIZE | SWP_NOACTIVATE);
-               }
-
-               return DefWindowProc(hWnd, msgID, wParam, lParam);      // Seems this is needed... Bleah!
-
-       case WM_PAINT:
-       {
-               hdc = BeginPaint(hWnd, &ps);
-
-// Scrolling can be done by using OffsetViewportOrgEx
-// Scaling can be done by adjusting SetWindowExtEx (it's denominator of txform)
-// you'd use: % = ViewportExt / WindowExt
-// But it makes the window look like crap: fuggetuboutit.
-// Instead, we have to scale EVERYTHING by hand. Crap!
-
-               // Apparently, you *must* save the individual object types (pen, brush, etc.)
-
-               HGDIOBJ oldPen = SelectObject(hdc, hBluePen1),
-                       oldBrush = SelectObject(hdc, hNullBrush);
-
-           // Draw coordinate axes
-
-               MoveToEx(hdc, 0, -32000, NULL);
-               LineTo(hdc, 0, 32000);
-               MoveToEx(hdc, -32000, 0, NULL);
-               LineTo(hdc, 32000, 0);
-
-           // Draw points
-
-               for(int i=0; i<pts.GetNumPoints(); i++)
-               {
-                       if (i == ptHighlight)
-                       {
-                               SelectObject(hdc, hRedPen1);
-
-                               if (pts.GetOnCurve(i))
-                               {
-                                       DrawSquareDotN(hdc, pts.GetX(i), pts.GetY(i), 7);
-                                       DrawSquareDotN(hdc, pts.GetX(i), pts.GetY(i), 9);
-                               }
-                               else
-                               {
-                                       DrawRoundDotN(hdc, pts.GetX(i), pts.GetY(i), 7);
-                                       DrawRoundDotN(hdc, pts.GetX(i), pts.GetY(i), 9);
-                               }
-                       }
-                       else if ((i == ptHighlight || i == ptNextHighlight) && currentTool == TOOLAddPt)
-                       {
-                               SelectObject(hdc, hGreenPen1);
-
-                               if (pts.GetOnCurve(i))
-                               {
-                                       DrawSquareDotN(hdc, pts.GetX(i), pts.GetY(i), 7);
-                                       DrawSquareDotN(hdc, pts.GetX(i), pts.GetY(i), 9);
-                               }
-                               else
-                               {
-                                       DrawRoundDotN(hdc, pts.GetX(i), pts.GetY(i), 7);
-                                       DrawRoundDotN(hdc, pts.GetX(i), pts.GetY(i), 9);
-                               }
-                       }
-                       else
-                       {
-                               SelectObject(hdc, hBlackPen1);
-
-                               if (pts.GetOnCurve(i))
-                                       DrawSquareDot(hdc, pts.GetX(i), pts.GetY(i));
-                               else
-                                       DrawRoundDot(hdc, pts.GetX(i), pts.GetY(i));
-                       }
-
-                       if (currentTool == TOOLDelPt && i == ptHighlight)
-                       {
-                               SelectObject(hdc, hRedPen1);
-                               MoveToEx(hdc, pts.GetX(i) - 5, pts.GetY(i) - 5, NULL);
-                               LineTo(hdc, pts.GetX(i) + 5, pts.GetY(i) + 5);
-                               LineTo(hdc, pts.GetX(i) - 5, pts.GetY(i) - 5);//Lameness!
-                               MoveToEx(hdc, pts.GetX(i) - 5, pts.GetY(i) + 5, NULL);
-                               LineTo(hdc, pts.GetX(i) + 5, pts.GetY(i) - 5);
-                               LineTo(hdc, pts.GetX(i) - 5, pts.GetY(i) + 5);//More lameness!!
-                       }
-               }
-
-               SelectObject(hdc, hBlackPen1);
-
-               // Draw curve formed by points
-
-               for(int poly=0; poly<pts.GetNumPolys(); poly++)
-               {
-                       if (pts.GetNumPoints(poly) > 2)
-                       {
-                               // Initial move...
-                               // If it's not on curve, then move to it, otherwise move to last point...
-
-                               if (pts.GetOnCurve(poly, pts.GetNumPoints(poly) - 1))
-                                       MoveToEx(hdc, pts.GetX(poly, pts.GetNumPoints(poly) - 1), pts.GetY(poly, pts.GetNumPoints(poly) - 1), NULL);
-                               else
-                                       MoveToEx(hdc, pts.GetX(poly, 0), pts.GetY(poly, 0), NULL);
-
-                               for(int i=0; i<pts.GetNumPoints(poly); i++)
-                               {
-                                       if (pts.GetOnCurve(poly, i))
-                                               LineTo(hdc, pts.GetX(poly, i), pts.GetY(poly, i));
-                                       else
-                                       {
-                                               uint32 prev = pts.GetPrev(poly, i), next = pts.GetNext(poly, i);
-                                               float px = pts.GetX(poly, prev), py = pts.GetY(poly, prev),
-                                                       nx = pts.GetX(poly, next), ny = pts.GetY(poly, next);
-
-                                               if (!pts.GetOnCurve(poly, prev))
-                                                       px = (px + pts.GetX(poly, i)) / 2.0f,
-                                                       py = (py + pts.GetY(poly, i)) / 2.0f;
-
-                                               if (!pts.GetOnCurve(poly, next))
-                                                       nx = (nx + pts.GetX(poly, i)) / 2.0f,
-                                                       ny = (ny + pts.GetY(poly, i)) / 2.0f;
-
-                                               Bezier(hdc, point(px, py), point(pts.GetX(poly, i), pts.GetY(poly, i)), point(nx, ny));
-
-                                               if (pts.GetOnCurve(poly, next))
-                                                       i++;                                    // Following point is on curve, so move past it
-                                       }
-                               }
-                       }
-               }
-
-               SelectObject(hdc, oldPen);                              // Restore the stuff we disrupted...
-               SelectObject(hdc, oldBrush);
-               EndPaint(hWnd, &ps);
-               break;
-       }
-       case WM_SIZE:
-
-               // Apparently this is needed since these windows don't update themselves.
-               SendMessage(hStatusBar, msgID, wParam, lParam);
-               SendMessage(hToolBar, msgID, wParam, lParam);
-
-               // This is needed to make the 2nd status pane visible
-               GetClientRect(hWnd, &rc1);
-               pt.x = rc1.right - zoomWndWidth, pt.y = -1;
-               SendMessage(hStatusBar, SB_SETPARTS, 2, (LPARAM)&pt);
-               break;
-
-       case WM_RBUTTONDOWN:
-
-               GetCursorPos(&pt);
-               SetWindowPos(hToolPalWnd, 0, pt.x, pt.y, 0, 0, SWP_NOZORDER | SWP_NOSIZE | SWP_SHOWWINDOW);
-               SetFocus(hToolPalWnd);
-               SetCapture(hToolPalWnd);                                // Ensure tool palette gets RButtonUp
-               SetCursor(LoadCursor(NULL, MAKEINTRESOURCE(IDC_ARROW)));        // Tool pallete has "regular" cursor
-               break;
-
-       case WM_LBUTTONDOWN:
-
-               mouseDown = true;
-
-               if (currentTool == TOOLScroll || currentTool == TOOLZoom)
-                       SetCapture(hWnd);                                       // Make sure we capture the mouse when in scroll/zoom mode
-               else if (currentTool == TOOLAddPt)              // "Add Point" tool
-               {
-                       if (pts.GetNumPoints() > 0)
-                       {
-//Do we really need to put a cap on this???
-//Maybe...
-//                             if (pts.GetNumPoints() < 16)
-//                             {
-                               pt.x = lParam & 0xFFFF, pt.y = lParam >> 16;
-                               hdc = GetDC(hWnd);
-                               DPtoLP(hdc, &pt, 1);
-                               pts.InsertPoint(pts.GetNext(ptHighlight), pt.x, pt.y, (wParam & (MK_SHIFT | MK_CONTROL) ? false : true));
-                               ptHighlight = ptNextHighlight;
-                               ReleaseDC(hWnd, hdc);
-                               InvalidateRect(hWnd, NULL, TRUE);
-//                             }
-                       }
-               }
-               else if (currentTool == TOOLAddPoly)    // "Add Poly" tool
-               {
-#ifdef DEBUGFOO
-wsprintf(strBuf, "Adding point... # polys: %u, # points: %u", pts.GetNumPolys(), pts.GetNumPoints());
-WriteLogMsg(strBuf);
-#endif
-                       if (polyFirstPoint)
-                       {
-                               polyFirstPoint = false;
-                               pts.AddNewPolyAtEnd();
-                       }
-
-//Do we really need to put a cap on this???
-//Maybe...
-//                     if (pts.GetNumPoints() < 16)
-//                     {
-                       pt.x = lParam & 0xFFFF, pt.y = lParam >> 16;
-                       hdc = GetDC(hWnd);
-                       DPtoLP(hdc, &pt, 1);
-                       ReleaseDC(hWnd, hdc);
-                       // Append a point to the end of the structure
-                       pts += IPoint(pt.x, pt.y, (wParam & (MK_SHIFT | MK_CONTROL) ? false : true));
-ptHighlight = pts.GetNumPoints() - 1;
-                       InvalidateRect(hWnd, NULL, TRUE);
-//                     }
-#ifdef DEBUGFOO
-wsprintf(strBuf, " --> [# polys: %u, # points: %u]\xD\xA", pts.GetNumPolys(), pts.GetNumPoints());
-WriteLogMsg(strBuf);
-#endif
-               }
-               else if (currentTool == TOOLSelect || currentTool == TOOLPolySelect)
-               {
-                       if (pts.GetNumPoints() > 0)
-                       {
-                               pt.x = pts.GetX(ptHighlight), pt.y = pts.GetY(ptHighlight);
-                               hdc = GetDC(hWnd);
-                               LPtoDP(hdc, &pt, 1);
-                               ClientToScreen(hWnd, &pt);
-                               SetCursorPos(pt.x, pt.y);
-                               ReleaseDC(hWnd, hdc);
-
-                               if (wParam & (MK_SHIFT | MK_CONTROL))
-                                       pts.SetOnCurve(ptHighlight, !pts.GetOnCurve(ptHighlight));
-                       }
-               }
-               else if (currentTool == TOOLDelPt)
-               {
-                       if (pts.GetNumPoints() > 0)
-//Or could use:
-//                     if (ptHighlight != -1)
-                       {
-//This assumes that WM_MOUSEMOVE happens before this!
-//The above commented out line should take care of this contingency... !!! FIX !!!
-                               pts.DeletePoint(ptHighlight);
-                               InvalidateRect(hWnd, NULL, TRUE);
-                       }
-               }
-
-               break;
-
-       case WM_LBUTTONUP:
-
-               mouseDown = false;
-
-               if (currentTool == TOOLScroll || currentTool == TOOLZoom)
-                       ReleaseCapture();
-
-               break;
-
-       case WM_MOUSEMOVE:
-
-               SetCursor(hCur[currentTool]);
-
-           // Extract current point from lParam/calc offset from previous point
-
-               pt.x = lParam & 0xFFFF, pt.y = lParam >> 16;
-               ptOffset.x = pt.x - ptPrevious.x,
-               ptOffset.y = pt.y - ptPrevious.y;
-
-               if (mouseDown)
-               {
-                       if (currentTool == TOOLScroll)
-                       {
-                               // NOTE: OffsetViewportOrg operates in DEVICE UNITS...
-
-                               hdc = GetDC(hWnd);
-                               OffsetViewportOrgEx(hdc, ptOffset.x, ptOffset.y, NULL);
-                               ReleaseDC(hWnd, hdc);
-
-// this shows that it works, so the logic above must be faulty...
-// And it is. It should convert the coords first, then do the subtraction to figure the offset...
-// Above: DONE
-// Then multiply it by the scaling factor. Whee!
-
-                               InvalidateRect(hWnd, NULL, TRUE);
-//                             SendMessage(hWnd, WM_PAINT, NULL, NULL);
-                       }
-                       else if (currentTool == TOOLAddPt || currentTool == TOOLAddPoly || currentTool == TOOLSelect)
-                       {
-                               if (currentTool != TOOLAddPt || pts.GetNumPoints() > 0)//yecch.
-                               {
-                                       POINT pt2;
-                                       pt2.x = pt.x, pt2.y = pt.y;
-                                       // Should also set onCurve here as well, depending on keystate
-//Or should we?
-                                       hdc = GetDC(hWnd);
-                                       DPtoLP(hdc, &pt2, 1);
-                                       pts.SetXY(ptHighlight, pt2.x, pt2.y);
-                                       ReleaseDC(hWnd, hdc);
-                                       InvalidateRect(hWnd, NULL, TRUE);
-                               }
-                       }
-                       else if (currentTool == TOOLPolySelect)
-                       {
-                               if (pts.GetNumPoints() > 0)
-                               {
-                                       POINT pt2;
-                                       pt2.x = pt.x, pt2.y = pt.y;
-                                       // Should also set onCurve here as well, depending on keystate
-//Or should we?
-                                       hdc = GetDC(hWnd);
-                                       DPtoLP(hdc, &pt2, 1);
-                                       pts.OffsetPoly(pts.GetPoly(ptHighlight), pt2.x - pts.GetX(ptHighlight), pt2.y - pts.GetY(ptHighlight));
-                                       ReleaseDC(hWnd, hdc);
-                                       InvalidateRect(hWnd, NULL, TRUE);
-                               }
-                       }
-               }
-               else
-               {
-                       if (currentTool == TOOLSelect || currentTool == TOOLDelPt || currentTool == TOOLAddPt
-                               || currentTool == TOOLPolySelect)// || currentTool == TOOLAddPoly)
-                       {
-                               POINT pt2;
-                               pt2.x = pt.x, pt2.y = pt.y;
-                               hdc = GetDC(hWnd);
-                               DPtoLP(hdc, &pt2, 1);
-                               ReleaseDC(hWnd, hdc);
-
-                               double closest = 1.0e+99;
-
-                               for(int i=0; i<pts.GetNumPoints(); i++)
-                               {
-                                       double dist = ((pt2.x - pts.GetX(i)) * (pt2.x - pts.GetX(i)))
-                                               + ((pt2.y - pts.GetY(i)) * (pt2.y - pts.GetY(i)));
-
-                                       if (dist < closest)
-                                               closest = dist, ptHighlight = i;
-                               }
-
-                               if (ptHighlight != oldPtHighlight)
-                               {
-                                       oldPtHighlight = ptHighlight;
-                                       InvalidateRect(hWnd, NULL, TRUE);
-                               }
-
-                               // What follows here looks like voodoo, but is really simple. What we do is
-                               // check to see if the mouse point has a perpendicular intersection with any of
-                               // the line segments. If it does, calculate the length of the perpendicular
-                               // and choose the smallest length. If there is no perpendicular, then choose the
-                               // length of line connecting the closer of either the first endpoint or the
-                               // second and choose the smallest of those.
-
-                               // There is one bit of math that looks like voodoo to me ATM--will explain once
-                               // I understand it better (the calculation of the length of the perpendicular).
-
-                               if (pts.GetNumPoints() > 1 && currentTool == TOOLAddPt)
-                               {
-                                       double smallest = 1.0e+99;
-
-                                       for(int i=0; i<pts.GetNumPoints(); i++)
-                                       {
-                                               int32 p1x = pts.GetX(i), p1y = pts.GetY(i),
-                                                       p2x = pts.GetX(pts.GetNext(i)), p2y = pts.GetY(pts.GetNext(i));
-
-                                               vector ls(p2x, p2y, 0, p1x, p1y, 0), v1(pt2.x, pt2.y, 0, p1x, p1y, 0),
-                                                       v2(pt2.x, pt2.y, 0, p2x, p2y, 0);
-                                               double pp = ls.dot(v1) / ls.length(), dist;
-// Geometric interpretation:
-// pp is the paremeterized point on the vector ls where the perpendicular intersects ls.
-// If pp < 0, then the perpendicular lies beyond the 1st endpoint. If pp > length of ls,
-// then the perpendicular lies beyond the 2nd endpoint.
-
-                                               if (pp < 0.0)
-                                                       dist = v1.length();
-                                               else if (pp > ls.length())
-                                                       dist = v2.length();
-                                               else                                    // distance = ?Det?(ls, v1) / |ls|
-                                                       dist = abs((ls.x * v1.y - v1.x * ls.y) / ls.length());
-
-//The answer to the above looks like it might be found here:
-//
-//If the segment endpoints are s and e, and the point is p, then the test for the perpendicular
-//intercepting the segment is equivalent to insisting that the two dot products {s-e}.{s-p} and
-//{e-s}.{e-p} are both non-negative.  Perpendicular distance from the point to the segment is
-//computed by first computing the area of the triangle the three points form, then dividing by the
-//length of the segment.  Distances are done just by the Pythagorean theorem.  Twice the area of the
-//triangle formed by three points is the determinant of the following matrix:
-//
-//sx sy 1
-//ex ey 1
-//px py 1
-//
-//(???) By translating the start point to the origin, this can be rewritten as:
-//By subtracting row 1 from all rows, you get the following:
-//
-//0         0         0
-//(ex - sx) (ey - sy) 0
-//(px - sx) (py - sy) 0
-//
-//which greatly simplifies the calculation of the determinant.
-
-                                               if (dist < smallest)
-                                                       smallest = dist, ptNextHighlight = pts.GetNext(i), ptHighlight = i;
-                                       }
-
-                                       if (ptNextHighlight != oldPtNextHighlight)
-                                       {
-                                               oldPtNextHighlight = ptNextHighlight;
-                                               InvalidateRect(hWnd, NULL, TRUE);
-                                       }
-                               }
-                       }
-               }
-
-               ptPrevious.x = pt.x, ptPrevious.y = pt.y;
-
-               break;
-
-       case WM_NOTIFY:
-
-               if (((NMHDR *)lParam)->code == TTN_NEEDTEXT)
-               {
-                       LoadString(hInst, ((TOOLTIPTEXT *)lParam)->hdr.idFrom + 0x80, toolTipTxt, 16);
-                       ((TOOLTIPTEXT *)lParam)->lpszText = toolTipTxt;
-               }
-
-               break;
-
-       case WM_MENUSELECT:
-       {
-               statusBarTxt[0] = 0;                                    // Clear status bar text
-               uint16 flags = wParam >> 16;                    // Extract flags
-
-               if (!(flags & MFT_SEPARATOR))
-               {
-                       uint16 id = wParam & 0xFFFF;
-
-                       if (flags & MF_POPUP)
-                       {
-                               if (flags & MF_SYSMENU)
-                                       id = IDS_SYSMENU;
-                               else
-                                       id = IDM_FILEMENU + wParam;
-                       }
-
-                       LoadString(hInst, id, statusBarTxt, 64);
-               }
-
-               SendMessage(hStatusBar, SB_SETTEXT, 0 + SBT_NOBORDERS, (LPARAM)statusBarTxt);
-               break;
-       }
-       case WM_COMMAND:
-       {
-               uint16 cmd = wParam & 0xFFFF;
-
-               if (cmd == IDM_NEW)
-               {
-//                   call   CmdIDM_NEW
-               }
-               else if (cmd == IDM_OPEN)
-               {
-//                   call   SaveChanges
-//                   .IF (eax)
-//                     movmov ofn.hwndOwner, eax, hMainWnd
-//                     mov    ofn.Flags, OFN_PATHMUSTEXIST + OFN_FILEMUSTEXIST
-//                     invoke GetOpenFileName, ADDR ofn
-//                     .IF (eax)
-////////
-//jmp @F
-//szDMsg1a     BYTE    "Could not open the file (GetOpenFileName)...", 0
-//szDMsg1b     BYTE    "Open error!", 0
-//szDMsg1c     BYTE    "About to attempt to open file...", 0
-//@@:
-////invoke MessageBox, hWnd, ADDR szDMsg1a, ADDR szDMsg1b, MB_ICONERROR or MB_OK
-//invoke MessageBox, hMainWnd, ADDR szDMsg1c, ADDR szFile, MB_ICONERROR or MB_OK
-//                       invoke LoadTTF, ADDR szFile
-//
-//////
-//                       // <<< FILE OPEN CODE HERE >>>
-//                       or     fFileStatus, NAMEDbit
-//                       and    fFileStatus, NOT CHANGEDbit
-//                       call   NewWindowName
-//                       mov    eax, TRUE      // return TRUE
-//                       jmp    Return
-//                       //��������������������������������������
-//OpenError:             invoke GetLastError
-//                       // <<< FILE OPEN ERROR CODE HERE >>>
-//                     .ENDIF
-//                     zero   eax      // return FALSE
-//                   .ENDIF
-               }
-               else if (cmd == IDM_SAVEAS)
-               {
-//                   and    fFileStatus, NOT NAMEDbit
-//                   call   CmdIDM_SAVE
-               }
-               else if (cmd == IDM_SAVE)
-               {
-//                   call   CmdIDM_SAVE
-               }
-               else if (cmd == IDM_ABOUT)
-                       DialogBoxParam(hInst, MAKEINTRESOURCE(IDD_ABOUT), hMainWnd, AboutProc, NULL);
-               else if (cmd == IDM_EXIT)
-                       SendMessage(hWnd, WM_CLOSE, 0, 0);
-               else if (cmd == ID_TBCHARWIN)
-               {
-                       ShowWindow(hCharWnd, (IsWindowVisible(hCharWnd) ? SW_HIDE : SW_SHOWNOACTIVATE));
-
-#ifdef DEBUGFOO
-wpC.length = sizeof(WINDOWPLACEMENT);
-GetWindowPlacement(hCharWnd, &wpC);
-wsprintf(strBuf, "Char window showCmd = %08X...\n", wpC.showCmd);
-WriteLogMsg(strBuf);
-#endif
-               }
-               else
-                       return DefWindowProc(hWnd, msgID, wParam, lParam);
-
-               break;
-       }
-       default:
-               return DefWindowProc(hWnd, msgID, wParam, lParam);
-       }
-
-       return 0;
-}
-
-//
-// Initialize TTF data
-//
-void CreateNewDoc(void)
-{
-}
-
-//
-// Save changes to document before quitting
-//
-bool SaveChanges(void)
-{
-       return true;
-}
-
-
-
-//
-// ABOUT Dialog WndProc
-//
-BOOL CALLBACK AboutProc(HWND hDlg, UINT msgID, WPARAM wParam, LPARAM lParam)
-{
-       switch (msgID)
-       {
-       case WM_INITDIALOG:
-
-               MiscCenterWnd(hDlg, hMainWnd);
-               break;
-
-       case WM_COMMAND:
-
-               if (wParam == IDOK || wParam == IDCANCEL)
-                       EndDialog(hDlg, TRUE);
-
-               break;
-
-       default:
-               return FALSE;
-       }
-
-       return TRUE;
-}
-
-//
-// Character Window WndProc
-//
-WndProcCW      PROC  STDCALL, hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
-
-               mov    eax, uMsg                // pickup our message
-               .IF (eax == WM_PAINT)
-                 mov    eax, 0                 // Non-sense... (placeholder!)
-// Scan conversion etc. goes here...
-               .ELSEIF (eax == WM_LBUTTONDOWN)
-                 invoke SetCapture, hCharWnd
-               .ELSEIF (eax == WM_LBUTTONUP)
-                 invoke ReleaseCapture
-                 invoke SetFocus, hMainWnd     // Make sure the main wnd keeps focus!
-               .ELSEIF (eax == WM_NCLBUTTONDOWN)
-                 invoke DefWindowProc, hWnd, uMsg, wParam, lParam // Let it do its thing
-                 invoke SetFocus, hMainWnd     // Make sure the main wnd keeps focus!
-               .ELSE
-DefProc:         invoke DefWindowProc, hWnd, uMsg, wParam, lParam
-               .ENDIF
-               ret
-
-WndProcCW      ENDP
-
-//
-// Character Window WndProc
-//
-LRESULT CALLBACK WndProcCW(HWND hWnd, UINT msgID, WPARAM wParam, LPARAM lParam)
-{
-       switch (msgID)
-       {
-       default:
-               return DefWindowProc(hWnd, msgID, wParam, lParam);
-       }
-
-       return 0;
-}
-
-
-// Function prototypes
-
-int32 FindSelectedTool(void);
-
-//
-// Tool Palette WndProc
-//
-LRESULT CALLBACK WndProcTP(HWND hWnd, UINT msgID, WPARAM wParam, LPARAM lParam)
-{
-       PAINTSTRUCT ps;
-       HDC hdc;
-       POINT pt;
-       static uint32 prevTool = -1;
-
-       switch (msgID)
-       {
-       case WM_PAINT:
-       {
-               hdc = BeginPaint(hWnd, &ps);
-               HDC newDC = CreateCompatibleDC(NULL);
-               SelectObject(newDC, hBMToolPal1);
-               BitBlt(hdc, 0, 0, sizeTPBM.x, sizeTPBM.y, newDC, 0, 0, SRCCOPY);
-               DeleteDC(newDC);
-
-// This is crappy. Find some way to tighten this up!
-               int32 tool = FindSelectedTool();
-
-               if (tool != -1)
-               {
-                       newDC = CreateCompatibleDC(NULL);
-                       SelectObject(newDC, hBMToolPal1);
-                   //need ul corner of bitmap, ul corner of dest, width/height
-                       pt.x = sizeStamp.x * (tool & 0x03), pt.y = sizeStamp.y * (tool >> 2);
-                       BitBlt(hdc, pt.x, pt.y, sizeStamp.x, sizeStamp.y, newDC, pt.x, pt.y, NOTSRCCOPY);
-                       DeleteDC(newDC);
-               }
-
-               EndPaint(hWnd, &ps);
-               break;
-       }
-       case WM_MOUSEMOVE:
-       {
-               int32 tool = FindSelectedTool();
-
-               if (tool != prevTool)
-               {
-                       prevTool = tool;
-                       InvalidateRect(hWnd, NULL, FALSE);
-               }
-
-               break;
-       }
-       case WM_RBUTTONUP:
-       {
-               int32 tool = FindSelectedTool(), oldTool = currentTool;
-
-               if (tool != -1)
-                       currentTool = tool;
-
-               if (currentTool != TOOLSelect && currentTool != TOOLDelPt && currentTool != TOOLAddPt
-                       && currentTool != TOOLPolySelect)
-                       ptHighlight = -1;
-
-               if (currentTool != oldTool)
-                       InvalidateRect(hMainWnd, NULL, TRUE);
-
-               if (currentTool == TOOLAddPoly)
-#ifdef DEBUGFOO
-{
-#endif
-                       polyFirstPoint = true;
-#ifdef DEBUGFOO
-wsprintf(strBuf, "--> Selected poly tool, polyFirstPoint is %s\n", polyFirstPoint ? "true" : "false");
-WriteLogMsg(strBuf);
-}
-#endif
-
-               ReleaseCapture();
-               ShowWindow(hToolPalWnd, SW_HIDE);
-               SetFocus(hMainWnd);                                             // Make sure the main wnd keeps focus!
-
-               break;
-       }
-       default:
-               return DefWindowProc(hWnd, msgID, wParam, lParam);
-       }
-
-       return 0;
-}
-
-//
-// Find which tool we're pointing at
-// Use: xcoord = mouse.x / (bmsize.x/4), ycoord = mouse.y / (bmsize.y/2)
-//
-int32 FindSelectedTool(void)
-{
-       POINT pt;
-
-       GetCursorPos(&pt);
-       ScreenToClient(hToolPalWnd, &pt);
-
-       uint32 x = (uint32)pt.x / sizeStamp.x, y = (uint32)pt.y / sizeStamp.y, tool = -1;
-
-       if (x < 4 && y < 2)
-//     {
-               tool = (y * 4) + x;
-
-//             if (tool == 7)
-//                     tool = -1;                                                      // 7 has no tool...
-//     }
-
-       return tool;
-}
-
-
-//
-// Misc center window
-//
-void MiscCenterWnd(HWND hChild, HWND hParent)
-{
-       RECT parent, child;
-
-       if (!GetWindowRect(hParent, &parent) || !GetWindowRect(hChild, &child))
-               return;
-
-       int32 x = parent.left + (((parent.right - parent.left) - (child.right - child.left)) / 2),
-               y = parent.top + (((parent.bottom - parent.top) - (child.bottom - child.top)) / 2);
-
-       if (x < 0)
-               x = 0;
-       else if (x > GetSystemMetrics(SM_CXFULLSCREEN) - (child.right - child.left))
-               x = GetSystemMetrics(SM_CXFULLSCREEN) - (child.right - child.left);
-
-       if (y < 0)
-               y = 0;
-       else if (y > GetSystemMetrics(SM_CYFULLSCREEN) - (child.bottom - child.top))
-               y = GetSystemMetrics(SM_CYFULLSCREEN) - (child.bottom - child.top);
-
-       SetWindowPos(hChild, NULL, x, y, 0, 0, SWP_NOSIZE | SWP_NOZORDER);
-}
-
-//
-// Allow only one instance
-//
-bool OnlyOneInstance(void)
-{
-       HWND window = FindWindow(className, NULL);
-
-       if (window == NULL)
-               return true;
-
-       ShowWindow(window, SW_SHOWNORMAL);
-       SetWindowPos(window, NULL, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE);
-
-       return false;
-}
-
-//
-// Load/Allocate all resources
-//
-bool LoadResources(void)
-{
-       hCur[0] = LoadCursor(hInst, MAKEINTRESOURCE(IDC_CURSOR1));
-       hCur[1] = LoadCursor(hInst, MAKEINTRESOURCE(IDC_CURSOR2));
-       hCur[2] = LoadCursor(hInst, MAKEINTRESOURCE(IDC_CURSOR3));
-       hCur[3] = LoadCursor(hInst, MAKEINTRESOURCE(IDC_CURSOR4));
-       hCur[4] = LoadCursor(hInst, MAKEINTRESOURCE(IDC_CURSOR5));
-       hCur[5] = LoadCursor(hInst, MAKEINTRESOURCE(IDC_CURSOR6));
-       hCur[6] = LoadCursor(hInst, MAKEINTRESOURCE(IDC_CURSOR7));
-       hCur[7] = LoadCursor(hInst, MAKEINTRESOURCE(IDC_CURSOR8));
-
-       BITMAP bm;
-
-       hBMToolPal1 = LoadBitmap(hInst, MAKEINTRESOURCE(IDB_TOOLPAL1));
-       GetObject(hBMToolPal1, sizeof(bm), &bm);
-
-       // Set up sizes
-
-       sizeTPBM.x = bm.bmWidth, sizeTPBM.y = bm.bmHeight;
-       sizeStamp.x = bm.bmWidth / 4, sizeStamp.y = bm.bmHeight / 2;
-
-       hBluePen1 = CreatePen(PS_DOT, 1, 0x00FF0000);
-       hRedPen1 = CreatePen(PS_SOLID, 1, 0x000000FF);
-       hGreenPen1 = CreatePen(PS_SOLID, 1, 0x0000AF00);
-       hBlackPen1 = CreatePen(PS_SOLID, 1, 0x00000000);
-
-       LOGBRUSH lb = { BS_NULL, 0, 0 };
-
-       hNullBrush = CreateBrushIndirect(&lb);
-
-       return true;
-}
-
-//
-// Deallocate all resources
-//
-void DeallocateResources(void)
-{
-       DeleteObject(hBMToolPal1);
-       DeleteObject(hBluePen1);
-       DeleteObject(hRedPen1);
-       DeleteObject(hGreenPen1);
-       DeleteObject(hBlackPen1);
-       DeleteObject(hNullBrush);
-}
-
-//
-// Save all application specific data, so we can pick up where we last left off...
-//
-void SaveAppState(void)
-{
-       SetINIInt("Main", "flags", wpM.flags);
-       SetINIInt("Main", "showCmd", wpM.showCmd);
-       SetINIInt("Main", "x1", wpM.rcNormalPosition.left);
-       SetINIInt("Main", "y1", wpM.rcNormalPosition.top);
-       SetINIInt("Main", "x2", wpM.rcNormalPosition.right);
-       SetINIInt("Main", "y2", wpM.rcNormalPosition.bottom);
-
-       SetINIInt("Main", "vpx", ptVPM.x);
-       SetINIInt("Main", "vpy", ptVPM.y);
-
-       SetINIInt("Char", "flags", wpC.flags);
-       SetINIInt("Char", "showCmd", wpC.showCmd);
-       SetINIInt("Char", "x1", wpC.rcNormalPosition.left);
-       SetINIInt("Char", "y1", wpC.rcNormalPosition.top);
-       SetINIInt("Char", "x2", wpC.rcNormalPosition.right);
-       SetINIInt("Char", "y2", wpC.rcNormalPosition.bottom);
-
-       // Need to write out currently opened font, character looking at, other misc. crap
-//     SetINIString("Main", "currentFile", pDoc->GetPathName());
-//     SetINIInt("Main", "currentChar", pDoc->character_num);
-}
-
-//
-// Restore all application specific data previously saved
-//
-bool RestoreAppState(void)
-{
-       InitINIFile();
-
-       WINDOWPLACEMENT wp;
-       wp.length = sizeof(WINDOWPLACEMENT);
-       GetWindowPlacement(hMainWnd, &wp);
-
-       wp.flags = GetINIInt("Main", "flags", wp.flags);
-       wp.showCmd = GetINIInt("Main", "showCmd", wp.showCmd);
-       wp.rcNormalPosition.left = GetINIInt("Main", "x1", wp.rcNormalPosition.left);
-       wp.rcNormalPosition.top = GetINIInt("Main", "y1", wp.rcNormalPosition.top);
-       wp.rcNormalPosition.right = GetINIInt("Main", "x2", wp.rcNormalPosition.right);
-       wp.rcNormalPosition.bottom = GetINIInt("Main", "y2", wp.rcNormalPosition.bottom);
-
-       SetWindowPlacement(hMainWnd, &wp);
-
-       HDC hdc;
-       POINT pt;
-       hdc = GetDC(hMainWnd);
-       GetViewportOrgEx(hdc, &pt);
-
-       pt.x = GetINIInt("Main", "vpx", pt.x);
-       pt.y = GetINIInt("Main", "vpy", pt.y);
-
-       SetViewportOrgEx(hdc, pt.x, pt.y, NULL);
-       ReleaseDC(hMainWnd, hdc);
-
-       GetWindowPlacement(hCharWnd, &wp);
-
-       wp.flags = GetINIInt("Char", "flags", wp.flags);
-       wp.showCmd = GetINIInt("Char", "showCmd", wp.showCmd);
-       wp.rcNormalPosition.left = GetINIInt("Char", "x1", wp.rcNormalPosition.left);
-       wp.rcNormalPosition.top = GetINIInt("Char", "y1", wp.rcNormalPosition.top);
-       wp.rcNormalPosition.right = GetINIInt("Char", "x2", wp.rcNormalPosition.right);
-       wp.rcNormalPosition.bottom = GetINIInt("Char", "y2", wp.rcNormalPosition.bottom);
-
-       SetWindowPlacement(hCharWnd, &wp);
-
-       if (wp.showCmd == SW_HIDE)
-               SendMessage(hToolBar, TB_SETSTATE, ID_TBCHARWIN, MAKELONG(TBSTATE_ENABLED, 0));
-
-//  CString lastFile = theApplicationObject.GetProfileString(version, "currentFile", "");
-//  int lastChar = theApplicationObject.GetProfileInt(version, "currentChar", 0);
-//  if (lastFile.GetLength())
-//  {
-//    // Attempt to restore the last session by open the last file used, etc...
-//    if (!pDoc->m_myFont.Load(lastFile))
-//    {
-//      // Err, make sure you can support any allegations you make below, buddy!
-//      AfxMessageBox("The last file opened with TTF Edit\n\rseems to have been moved or deleted.");
-//    }
-//    else
-//    {
-//      pDoc->m_myFont.SetGlyph(lastChar);  // Set TTF object to last used char
-//      pDoc->character_num = lastChar;
-//      pDoc->SetPathName(lastFile);
-//
-//      BYTE name[512];
-//      pDoc->m_myFont.GetCharName(lastChar, name);
-//      m_wndOwned.SetWindowText((char *)name);
-//    }
-//  }
-
-       return true;
-}
-
-//
-// Initialization
-//
-bool Initialization(void)
-{
-       WNDCLASSEX wcex;
-
-       if (!LoadResources())
-               return false;
-
-       RtlFillMemory(&wcex, sizeof(WNDCLASSEX), 0);
-       wcex.cbSize = sizeof(WNDCLASSEX);
-       wcex.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC;
-       wcex.lpfnWndProc = WndProc;
-       wcex.hInstance = hInst;
-       wcex.hIcon = LoadIcon(hInst, MAKEINTRESOURCE(IDI_ICON));
-       wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
-       wcex.lpszMenuName = MAKEINTRESOURCE(IDM_MENU);
-       wcex.lpszClassName = className;
-       wcex.hIconSm = (HICON)LoadImage(hInst, MAKEINTRESOURCE(IDI_ICON), IMAGE_ICON, 16, 16, NULL);
-
-       if (!RegisterClassEx(&wcex))
-               return false;
-
-       hMainWnd = CreateWindowEx(NULL, className, className, WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN,
-               0, 0, 0x1A0, 0x180, NULL, NULL, hInst, NULL);
-
-       if (!hMainWnd)
-               return false;
-
-       ShowWindow(hMainWnd, nCmdShow);
-       UpdateWindow(hMainWnd);
-
-       // Character window creation
-
-       wcex.lpfnWndProc = WndProcCW;
-       wcex.lpszMenuName = NULL;
-       wcex.lpszClassName = CNCharWin;
-       wcex.hCursor = LoadCursor(NULL, IDC_ARROW);     // Owned windows have "regular" cursors
-
-       if (!RegisterClassEx(&wcex))
-               return false;
-
-       hCharWnd = CreateWindowEx(WS_EX_WINDOWEDGE | WS_EX_TOOLWINDOW, CNCharWin,
-               curCharName, WS_POPUP | WS_CAPTION | WS_VISIBLE | WS_THICKFRAME,
-               100, 100, 120, 120, hMainWnd, NULL, hInst, NULL);
-
-       if (!hCharWnd)
-               return false;
-
-       ShowWindow(hCharWnd, SW_SHOWNORMAL);
-       UpdateWindow(hCharWnd);
-       SetFocus(hMainWnd);                                                     // Make sure main wnd has focus!
-
-       // Tool palette window creation
-
-       wcex.lpfnWndProc = WndProcTP;
-       wcex.lpszClassName = CNToolPal;
-
-       if (!RegisterClassEx(&wcex))
-               return false;
-
-       hToolPalWnd = CreateWindowEx(WS_EX_WINDOWEDGE, CNToolPal, NULL, WS_POPUP,
-               0, 0, sizeTPBM.x, sizeTPBM.y, hMainWnd, NULL, hInst, NULL);
-
-       if (!hToolPalWnd)
-               return false;
-
-// Note: A better way to handle this would be to have a sub that registers ALL
-//       classes beforehand and passes a TRUE/FALSE back depending on whether or not
-//       all the classes were able to be registered or not, THEN create the windows
-//       and controls...
-
-       RestoreAppState();                                                      // Restore app related stuff
-
-       return true;
-}
-
-#endif
-#endif
index f31298cc1305d5d041d200d6a1806194e11ec4a9..1b24dde34c675dd8cb32bd5c11ad617169f6cf75 100755 (executable)
@@ -10,7 +10,6 @@
 
 #include <QtGui>
 #include "types.h"
-//#include "ttedit.h"                                                          // For TTEditApp
 #include "toolwindow.h"                                                        // For ToolType enum
 #include "glyphpoints.h"
 
@@ -36,7 +35,6 @@ class EditWindow: public QWidget
 
                QImage image;
                QPoint pt, ptOffset, ptPrevious;
-//             TTEditApp & app;                                                // Reference to the application object
                double scale;                                                   // Window scaling factor
                int32 offsetX, offsetY;                                 // Window offsets
                ToolType tool;                                                  // Current tool
@@ -48,43 +46,4 @@ class EditWindow: public QWidget
                QCursor cur[8];
 };
 
-#if 0
-#include <wx/wx.h>                                                             // So that whoever uses this can without having
-                                                                                               // to pull in a bunch of references manually
-#include "types.h"
-#include "ttedit.h"                                                            // For TTEditApp
-#include "toolwindow.h"                                                        // For ToolType enum
-#include "glyphpoints.h"
-
-class TTEditWindow: public wxWindow
-{
-       private:
-               TTEditApp & app;                                                // Reference to the application object
-               double scale;                                                   // Window scaling factor
-               int32 offsetX, offsetY;                                 // Window offsets
-               ToolType tool;                                                  // Current tool
-               GlyphPoints pts;                                                // Glyph point structure
-               int32 ptHighlight, oldPtHighlight, ptNextHighlight, oldPtNextHighlight;
-               bool polyFirstPoint;
-
-       protected:
-       public:
-               wxBitmap * bmp;
-               wxPoint pt, ptOffset, ptPrevious;
-
-               // Constructor and destructor
-               TTEditWindow(wxFrame * parent, const wxPoint &pos = wxDefaultPosition, const wxSize &size = wxDefaultSize, long style = 0);
-               ~TTEditWindow(void);
-
-               void OnPaint(wxPaintEvent &e);
-               void OnMouseEvent(wxMouseEvent &e);
-
-       protected:
-               wxPoint GetAdjustedMousePosition(wxMouseEvent &e);
-               wxPoint GetAdjustedClientPosition(wxCoord x, wxCoord y);
-
-       DECLARE_EVENT_TABLE()
-};
-#endif
-
 #endif // __EDITWINDOW_H__
index c8123773ce2bfd885d23197e36a42ae2f99c9c74..54617e944e4ec6d47f485cb2c05d741814bb44db 100755 (executable)
 //
 
 // Uncomment this for debugging...
-#define DEBUG
-#define DEBUGFOO                       // Various tool debugging...
-#define DEBUGTP                                // Toolpalette debugging...
+//#define DEBUG
+//#define DEBUGFOO                     // Various tool debugging...
+//#define DEBUGTP                              // Toolpalette debugging...
 
-//#include <QtGui>
 #include "ttedit.h"
 #include <QApplication>
-#include "editwindow.h"
+#include "ttemainwindow.h"
+//#include "charwindow.h"
 
-// Here's the main application loop--short and simple...
-int main(int argc, char * argv[])
-{
-       Q_INIT_RESOURCE(ttedit);        // This must the same name as the exe filename
-
-       QApplication app(argc, argv);
-       TTEMainWindow TTEWin;
-       TTEWin.show();
-       return app.exec();
-}
-
-
-TTEMainWindow::TTEMainWindow()
-{
-       editWnd = new EditWindow(this);
-       setCentralWidget(editWnd);
-       setWindowIcon(QIcon(":/res/ttedit.png"));
-       setWindowTitle("TTEdit!");
-
-#if 0
-//     createActions();
-       newAct = new QAction(QIcon(":/images/new.png"), tr("&New"), this);
-       newAct->setShortcuts(QKeySequence::New);
-       newAct->setStatusTip(tr("Create a new file"));
-       connect(newAct, SIGNAL(triggered()), this, SLOT(newFile()));
-
-       openAct = new QAction(QIcon(":/images/open.png"), tr("&Open..."), this);
-       openAct->setShortcuts(QKeySequence::Open);
-       openAct->setStatusTip(tr("Open an existing file"));
-       connect(openAct, SIGNAL(triggered()), this, SLOT(open()));
-
-       aboutQtAct = new QAction(tr("About &Qt"), this);
-       aboutQtAct->setStatusTip(tr("Show the Qt library's About box"));
-       connect(aboutQtAct, SIGNAL(triggered()), qApp, SLOT(aboutQt()));
-
-//     createMenus();
-       fileMenu = menuBar()->addMenu(tr("&File"));
-       fileMenu->addAction(newAct);
-       fileMenu->addAction(openAct);
-       fileMenu->addAction(saveAct);
-       fileMenu->addAction(saveAsAct);
-       fileMenu->addSeparator();
-       fileMenu->addAction(exitAct);
-
-       editMenu = menuBar()->addMenu(tr("&Edit"));
-       editMenu->addAction(cutAct);
-       editMenu->addAction(copyAct);
-       editMenu->addAction(pasteAct);
-
-       menuBar()->addSeparator();
-
-       helpMenu = menuBar()->addMenu(tr("&Help"));
-       helpMenu->addAction(aboutAct);
-       helpMenu->addAction(aboutQtAct);
-
-//     createToolBars();
-       fileToolBar = addToolBar(tr("File"));
-       fileToolBar->addAction(newAct);
-       fileToolBar->addAction(openAct);
-       fileToolBar->addAction(saveAct);
-
-       editToolBar = addToolBar(tr("Edit"));
-       editToolBar->addAction(cutAct);
-       editToolBar->addAction(copyAct);
-       editToolBar->addAction(pasteAct);
-#endif
-
-       //      Create status bar
-       statusBar()->showMessage(tr("Ready"));
-
-       ReadSettings();
-
-//     connect(textEdit->document(), SIGNAL(contentsChanged()),
-//                     this, SLOT(documentWasModified()));
-
-//     setCurrentFile("");
-       setUnifiedTitleAndToolBarOnMac(true);
-}
-
-void TTEMainWindow::closeEvent(QCloseEvent * event)
-{
-       WriteSettings();
-       event->accept(); // ignore() if can't close for some reason
-}
-
-void TTEMainWindow::Open(void)
-{
-}
-
-void TTEMainWindow::ReadSettings(void)
-{
-       QSettings settings("Underground Software", "TTEdit");
-       QPoint pos = settings.value("pos", QPoint(200, 200)).toPoint();
-       QSize size = settings.value("size", QSize(400, 400)).toSize();
-       resize(size);
-       move(pos);
-}
-
-void TTEMainWindow::WriteSettings(void)
-{
-       QSettings settings("Underground Software", "TTEdit");
-       settings.setValue("pos", pos());
-       settings.setValue("size", size());
-}
-
-
-#if 0
-#include "ttedit.h"
-#include "charwindow.h"
-#include "toolwindow.h"
-#include "editwindow.h"
-#include "tte_res.h"                                                   // Resource IDs
-#ifdef DEBUG
-#include "debug.h"
-#endif
-
-// Pixmap resouces
-
-#include "res/cur1.xpm"
-#include "res/cur2.xpm"
-#include "res/cur3.xpm"
-#include "res/cur4.xpm"
-#include "res/cur5.xpm"
-#include "res/cur6.xpm"
-#include "res/cur7.xpm"
-#include "res/cur8.xpm"
-#include "res/ttedit.xpm"                                              // *nix only, but small enough to not matter
-#include "res/tool1.xpm"
-#include "res/tool2.xpm"
-#include "res/tool3.xpm"
-
-
-IMPLEMENT_APP(TTEditApp)                                               // Run the main application loop
-
-bool TTEditApp::OnInit()
-{
-       wxLog * logTarget = new wxLogStderr();//fopen("!ttedit_log.txt", "wb"));
-       wxLog::SetActiveTarget(logTarget);
-#ifdef DEBUG
-       OpenDebugLog();
-#endif
-
-       // Initialize all the top-level window members to NULL.
-       mainFrame = NULL;
-       charWin = NULL;
-       toolPalette = NULL;
-       for(int i=0; i<8; i++)
-               cur[i] = NULL;
+// Main app constructor--we stick globally accessible stuff here...
 
-//Shouldn't we check to see if it was successful? This just assumes
-       CreateResources();
-
-       mainFrame = new TTEditFrame(NULL, _("TTEdit"), wxPoint(155, 165), wxSize(300, 300),
-               wxDEFAULT_FRAME_STYLE | wxFULL_REPAINT_ON_RESIZE);
-//             wxMINIMIZE_BOX | wxRESIZE_BOX | wxMAXIMIZE_BOX | | wxSYSTEM_MENU | wxCAPTION);
-
-//     charWin = new CharWindow(NULL);//, _T("Own3d W1nd0w"), wxDefaultPosition, wxDefaultSize);
-       charWin = new CharWindow(mainFrame, _("Own3d W1nd0w"), wxDefaultPosition, wxDefaultSize,
-               wxCAPTION | wxRESIZE_BORDER | wxFRAME_NO_TASKBAR | wxFRAME_FLOAT_ON_PARENT);
-
-       toolPalette = new ToolWindow(mainFrame, _(""), wxDefaultPosition, wxDefaultSize,
-               wxBORDER_NONE | wxFRAME_NO_TASKBAR | wxFRAME_FLOAT_ON_PARENT);
-
-       return true;
-}
-
-int TTEditApp::OnExit()
-{
-#ifdef DEBUG
-       CloseDebugLog();
-#endif
-       for(int i=0; i<8; i++)
-               if (cur[i])
-                       delete cur[i];
-
-       return 0;
-}
-
-//
-// OS dependent method of creating cursor (works for Win32 and GTK+)
-//
-#define CREATE_CURSOR(storage, name, hsx, hsy) \
-       wxBitmap name##_bitmap(name##_xpm); \
-       wxImage name##_image = name##_bitmap.ConvertToImage(); \
-       name##_image.SetOption(wxIMAGE_OPTION_CUR_HOTSPOT_X, hsx); \
-       name##_image.SetOption(wxIMAGE_OPTION_CUR_HOTSPOT_Y, hsy); \
-       storage = new wxCursor(name##_image);
-
-void TTEditApp::CreateResources(void)
-{
-       // This is a sucky way to create cursors, but at least it's cross-platform...
-       // NOTE: Need to fix hotspots on a few... !!! FIX !!! [DONE]
-
-       CREATE_CURSOR(cur[0], cur1, 1, 1);
-       CREATE_CURSOR(cur[1], cur2, 1, 1);
-       CREATE_CURSOR(cur[2], cur3, 11, 11);    // Prolly won't need this soon (scroll)...
-       CREATE_CURSOR(cur[3], cur4, 15, 13);    // Prolly won't need this soon (zoom)...
-       CREATE_CURSOR(cur[4], cur5, 1, 1);
-       CREATE_CURSOR(cur[5], cur6, 1, 1);
-       CREATE_CURSOR(cur[6], cur7, 1, 1);
-       CREATE_CURSOR(cur[7], cur8, 1, 1);
-}
-
-
-BEGIN_EVENT_TABLE(TTEditFrame, wxFrame)
-       EVT_MENU(IDM_OPEN, TTEditFrame::OnOpen)
-       EVT_MENU(IDM_EXIT, TTEditFrame::OnExit)
-       EVT_MENU(IDM_ABOUT, TTEditFrame::OnAbout)
-       EVT_MENU(ID_TBCHARWIN, TTEditFrame::OnCharWindow)
-       EVT_CLOSE(TTEditFrame::OnCloseWindow)
-END_EVENT_TABLE()
-
-TTEditFrame::TTEditFrame(wxFrame * parent, const wxString &title, const wxPoint &pos,
-       const wxSize &size, long style): wxFrame(parent, -1, title, pos, size, style), app(wxGetApp()), mainWindow(NULL)
-{
-       // Initialize child subwindow members (and hopefully avoid subtle bugs)
-//     mainWindow = NULL;
-
-       SetIcon(wxICON(ttedit));
-//     CreateStatusBar(2);                                                     // Create 2 panes
-       int widths[2] = { -1, 120 };
-       wxStatusBar * sb = CreateStatusBar(2, 0);       // Create 2 panes
-       sb->SetStatusWidths(2, widths);
-       wxToolBar * tb = CreateToolBar();
-
-       if (tb != NULL)
-       {
-               // Create buttons
-
-               wxBitmap tool1(tool1_xpm);
-               wxBitmap tool2(tool2_xpm);
-               wxBitmap tool3(tool3_xpm);
-
-               tb->AddTool(ID_TBLEFT, _("Prev char"), tool1, _("Go to prev char"), wxITEM_NORMAL);
-               tb->AddTool(ID_TBRIGHT, _("Next char"), tool2, _("Go to next char"), wxITEM_NORMAL);
-               tb->AddTool(ID_TBCHARWIN, _("Char Wnd"), tool3, _("Toggle char window"), wxITEM_CHECK);
-               tb->Realize();
-       }
-
-       // Create a menu bar for the frame
-       menuBar = new wxMenuBar;
-       wxMenu * menu1 = new wxMenu;
-       menu1->Append(IDM_NEW, _("&New\tCtrl+N"), _("Create a new font."));
-       menu1->Append(IDM_OPEN, _("&Open...\tCtrl+O"), _("Opens an existing font."));
-       menu1->Append(IDM_SAVE, _("&Save\tCtrl+S"), _("Save the current font."));
-       menu1->Append(IDM_SAVEAS, _("Save &As..."), _("Save the current font under a different name."));
-       menu1->AppendSeparator();
-       menu1->Append(IDM_EXIT, _("E&xit\tAlt+X"), _("Quits the TTEdit program."));
-       menuBar->Append(menu1, _("&File"));
-       wxMenu * menu2 = new wxMenu;
-       menu2->Append(IDM_HELPTOPICS, _("&Help Topics"), _("Displays the Help contents and index."));
-       menu2->AppendSeparator();
-       menu2->Append(IDM_ABOUT, _("&About TTEdit"), _("Displays information about TTEdit."));
-       menuBar->Append(menu2, _("&Help"));
-       SetMenuBar(menuBar);
-
-       // Create child subwindows
-       mainWindow = new TTEditWindow(this);
-
-       Centre(wxBOTH);                                                         // Centre frame on the screen
-       Show(true);                                                                     // Show the frame
-}
-
-TTEditFrame::~TTEditFrame()
+TTEdit::TTEdit(int argc, char * argv[]): QApplication(argc, argv), charWnd(NULL)
 {
 }
 
-void TTEditFrame::OnOpen(wxCommandEvent &e)
-{
-       wxFileDialog fd(this, _("Choose a font to load"), _(""), _(""), _("TTF files (*.ttf)|*.ttf|All files (*.*)|*.*"), wxOPEN);
-
-       if (fd.ShowModal() != wxID_OK)
-           return;
-
-// Hmm. The font object is causing a massive crash... (gdb says it's in "Load")
-       if (app.font.Load((char *)fd.GetPath().c_str()) != true)
-       {
-               wxMessageDialog dlg(NULL, _("Load font failed!"), _("Houston, we have a problem..."), wxOK | wxICON_ERROR);
-               dlg.ShowModal();
-       }
 
-//Huzzah! It works! Now just need scaling, scrolling, etc...
-//     pts = app.font.GetGlyphPoints(45);
-}
-
-void TTEditFrame::OnAbout(wxCommandEvent &e)
-{
-       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);
-       dlg.ShowModal();
-}
-
-void TTEditFrame::OnExit(wxCommandEvent &e)
-{
-       app.toolPalette->Destroy();
-       this->Destroy();
-}
-
-void TTEditFrame::OnCharWindow(wxCommandEvent &e)
+// Here's the main application loop--short and simple...
+int main(int argc, char * argv[])
 {
-       app.charWin->Show(e.IsChecked() ? true : false);
+       Q_INIT_RESOURCE(ttedit);        // This must the same name as the exe filename
 
-       if (e.IsChecked())
-               Raise();
+//     QApplication app(argc, argv);
+//printf("TTEdit app(argc, argv);\n");
+       TTEdit app(argc, argv);
+//printf("TTEMainWindow mainWindow;\n");
+       TTEMainWindow mainWindow;
+//printf("mainWindow.show();\n");
+       mainWindow.show();
+//OK, it gets to here at least...
+//printf("return app.exec();\n");
+       return app.exec();
 }
 
-void TTEditFrame::OnCloseWindow(wxCloseEvent &e)
-{
-       app.toolPalette->Destroy();
-       this->Destroy();
-}
-#endif
index d92c33aa611d28f98a35570201b0b44e37a4dbb0..3adf6e8ba509bf31dbd93b2020f1ef57fe8fe389 100755 (executable)
 //Hrm. uh??? I thought this wasn't the way to do this stuff...???
 #include <QtGui>
 
-#if 0
-//#include <wx/wx.h>                                                           // So that whoever uses this can without having
-                                                                                               // to pull in a bunch of references manually
-//#include "ttf.h"
-
-// Forward declarations
-
-//class TTEditWin;
-//class TTEditWindow;
-//class CharWindow;
-//class ToolWindow;
-
-//
-// Class representing the entire Application
-//
-class TTEditApp: public QMainWindow
-{
-       public:
-               TTEditFrame * mainFrame;
-               CharWindow * charWin;
-               ToolWindow * toolPalette;
-               TTF font;
-               wxCursor * cur[8];
-
-               bool OnInit();
-               int OnExit();
-               void CreateResources(void);
-};
-
-DECLARE_APP(TTEditApp)
-#endif
 // Forward declarations
+class CharWindow;
 
-//class TTEditWin;
-class EditWindow;
-
-
-class TTEMainWindow: public QMainWindow
+class TTEdit: public QApplication
 {
-       // All Qt apps require this macro
-       Q_OBJECT
-
        public:
-               TTEMainWindow();
-
-       protected:
-               void closeEvent(QCloseEvent * event);
+               TTEdit(int argc, char * argv[]);
 
-       private slots:
-               void Open();
-
-       private:
-               void ReadSettings(void);
-               void WriteSettings(void);
-
-               EditWindow * editWnd;
-#if 0
-       private:
-       protected:
        public:
-               TTEditApp & app;                                                // Reference to the application object
-               // Subwindows for reference within the program.
-               TTEditWindow * mainWindow;
-               wxMenuBar * menuBar;
-
-               // Constructor and destructor
-               TTEditFrame(wxFrame * parent, const wxString &title, const wxPoint &pos, const wxSize &size, long style);
-               ~TTEditFrame(void);
-
-               void OnCloseWindow(wxCloseEvent &e);
-               void OnOpen(wxCommandEvent &e);
-               void OnExit(wxCommandEvent &e);
-               void OnAbout(wxCommandEvent &e);
-               void OnCharWindow(wxCommandEvent &e);
-
-       DECLARE_EVENT_TABLE()
-#endif
+               CharWindow * charWnd;
 };
 
 #endif // __TTEDIT_H__
index 7315add6c93f0b36c8b66eaa88a565c2b5ed77b9..1e7c4433bfd33b9e56b8422f4c86125fbaa64611 100644 (file)
@@ -1,22 +1,28 @@
 # Use 'qmake -o Makefile ttedit.pro'
 
 CONFIG += qt
+#debug doesn't do shit
+#CONFIG += qt debug
 
 HEADERS += src/ttedit.h
+HEADERS += src/ttemainwindow.h
 HEADERS += src/editwindow.h
 HEADERS += src/glyphpoints.h
 HEADERS += src/types.h
 HEADERS += src/debug.h
 HEADERS += src/toolwindow.h
+HEADERS += src/charwindow.h
 HEADERS += src/vector.h
 HEADERS += src/graphicprimitives.h
 HEADERS += src/list.h
 
 SOURCES += src/ttedit.cpp
+SOURCES += src/ttemainwindow.cpp
 SOURCES += src/editwindow.cpp
 SOURCES += src/glyphpoints.cpp
 SOURCES += src/debug.cpp
 SOURCES += src/toolwindow.cpp
+SOURCES += src/charwindow.cpp
 SOURCES += src/vector.cpp
 SOURCES += src/graphicprimitives.cpp