# KO si sihT
-OBJECTS = \
- obj/bezier.o \
- obj/charnames.o \
- obj/charwindow.o \
- obj/debug.o \
- obj/editwindow.o \
- obj/glyphpoints.o \
- obj/registry.o \
- obj/toolwindow.o \
- obj/ttf.o \
- obj/vector.o \
- obj/$(PROGRAM).o \
+OBJECTS = \
+ obj/charnames.o \
+ obj/charwindow.o \
+ obj/debug.o \
+ obj/editwindow.o \
+ obj/glyphpoints.o \
+ obj/graphicprimitives.o \
+ obj/registry.o \
+ obj/toolwindow.o \
+ obj/ttf.o \
+ obj/vector.o \
+ obj/$(PROGRAM).o \
$(ICON)
BIN_PROGRAM = $(PROGRAM)$(EXESUFFIX)
+++ /dev/null
-//\r
-// Bezier curve fitter\r
-// by James L. Hammons\r
-// (C) 2005 Underground Software\r
-//\r
-// This function takes three points and draws a curve using a\r
-// second order Bezier function.\r
-//\r
-// JLH = James L. Hammons <jlhamm@acm.org>\r
-//\r
-// Who When What\r
-// --- ---------- -------------------------------------------------------------\r
-// JLH 03/14/1998 Created this file\r
-// JLH 01/20/2005 Converted to use wxWidgets\r
-//\r
-\r
-#include "bezier.h"\r
-\r
-double abs(double n) // Helper function\r
-{\r
- return (n < 0 ? -n : n);\r
-}\r
-\r
-void Bezier(wxDC &dc, point p1, point p2, point p3)\r
-{\r
- double step = abs(p1.x - p3.x), tmp = abs(p1.y - p3.y);\r
- step = (tmp > step ? tmp : step); // Get the larger of the two...\r
- step = (step > 0 ? 1/step : 1); // & convert to valid step value\r
-\r
-// MoveToEx(hdc, (int)p1.x, (int)p1.y, NULL);\r
- wxCoord prevX = (wxCoord)p1.x, prevY = (wxCoord)p1.y;\r
-\r
- for(double u=0; u<=1; u+=step)\r
- {\r
- double _2u = 2*u, _uu = u*u, _2uu = 2*_uu,\r
- x = (p1.x * (1 - _2u + _uu)) + (p2.x * (_2u - _2uu)) + (p3.x * _uu),\r
- y = (p1.y * (1 - _2u + _uu)) + (p2.y * (_2u - _2uu)) + (p3.y * _uu);\r
-// LineTo(hdc, (int)x, (int)y);\r
- dc.DrawLine(prevX, prevY, (wxCoord)x, (wxCoord)y);\r
- prevX = (wxCoord)x, prevY = (wxCoord)y;\r
- }\r
-\r
-// LineTo(hdc, (int)p3.x, (int)p3.y);\r
- dc.DrawLine(prevX, prevY, (wxCoord)p3.x, (wxCoord)p3.y);\r
-}\r
+++ /dev/null
-// True Type Hack\r
-//\r
-// Bezier Curve fitter header\r
-//\r
-// This function takes three points and draws a curve using a\r
-// second order Bezier function.\r
-\r
-#ifndef __BEZIER_H__\r
-#define __BEZIER_H__\r
-\r
-#include <wx/wx.h> // For device context\r
-\r
-struct point\r
-{\r
- float x, y;\r
-\r
- point(float xx = 0, float yy = 0): x(xx), y(yy) {}\r
-};\r
-\r
-void Bezier(wxDC &, point, point, point);\r
-\r
-#endif // __BEZIER_H__\r
#define DEBUGTP // Toolpalette debugging...\r
\r
#include "editwindow.h"\r
-#include "bezier.h"\r
+#include "graphicprimitives.h"\r
#include "toolwindow.h"\r
#include "debug.h"\r
#include "vector.h"\r
return;\r
}\r
\r
- // Extract current point from lParam/calc offset from previous point\r
+ if (e.MiddleIsDown())\r
+ {\r
+ // Calc offset from previous point\r
+ pt = e.GetPosition();\r
+ ptOffset.x = pt.x - ptPrevious.x,\r
+ ptOffset.y = pt.y - ptPrevious.y;\r
\r
- pt = e.GetPosition();\r
- ptOffset.x = pt.x - ptPrevious.x,\r
- ptOffset.y = pt.y - ptPrevious.y;\r
+// Then multiply it by the scaling factor. Whee!\r
+ // This looks wacky because we're using screen coords for the offset...\r
+ // Otherwise, we would subtract both offsets!\r
+ offsetX -= ptOffset.x, offsetY += ptOffset.y;\r
+ Refresh();\r
+\r
+ return;\r
+ }\r
\r
// if (e.LeftIsDown())\r
// {\r
+#if 0\r
if (tool == TOOLScroll)\r
{\r
+ // Extract current point from lParam/calc offset from previous point\r
+\r
+ pt = e.GetPosition();\r
+ ptOffset.x = pt.x - ptPrevious.x,\r
+ ptOffset.y = pt.y - ptPrevious.y;\r
+\r
// NOTE: OffsetViewportOrg operates in DEVICE UNITS...\r
\r
//Seems there's no equivalent for this in wxWidgets...!\r
offsetX -= ptOffset.x, offsetY += ptOffset.y;\r
Refresh();\r
}\r
- else if (tool == TOOLAddPt || tool == TOOLAddPoly || tool == TOOLSelect)\r
+ else\r
+#endif\r
+ if (tool == TOOLAddPt || tool == TOOLAddPoly || tool == TOOLSelect)\r
{\r
if (tool != TOOLAddPt || pts.GetNumPoints() > 0)//yecch.\r
{\r
return wxPoint(dc.LogicalToDeviceX(x), dc.LogicalToDeviceY(y));\r
}\r
\r
-//\r
-// Draw a round dot (5x5, centered on [x, y])\r
-//\r
-void TTEditWindow::DrawRoundDot(wxDC &dc, int32 x, int32 y)\r
-{\r
- wxPoint pt[8];\r
-\r
- pt[0].x = x - 1, pt[0].y = y - 2;\r
- pt[1].x = x + 1, pt[1].y = y - 2;\r
- pt[2].x = x + 2, pt[2].y = y - 1;\r
- pt[3].x = x + 2, pt[3].y = y + 1;\r
- pt[4].x = x + 1, pt[4].y = y + 2;\r
- pt[5].x = x - 1, pt[5].y = y + 2;\r
- pt[6].x = x - 2, pt[6].y = y + 1;\r
- pt[7].x = x - 2, pt[7].y = y - 1;\r
-\r
- dc.DrawPolygon(8, pt);\r
-}\r
-\r
-//\r
-// Draw a sqaure dot (5x5, centered on [x, y])\r
-//\r
-void TTEditWindow::DrawSquareDot(wxDC &dc, int32 x, int32 y)\r
-{\r
- wxPoint pt[4];\r
-\r
- pt[0].x = x - 2, pt[0].y = y - 2;\r
- pt[1].x = x + 2, pt[1].y = y - 2;\r
- pt[2].x = x + 2, pt[2].y = y + 2;\r
- pt[3].x = x - 2, pt[3].y = y + 2;\r
-\r
- dc.DrawPolygon(4, pt);\r
-}\r
-\r
-//\r
-// Draw a sqaure dot (nxn, centered on [x, y])\r
-//\r
-void TTEditWindow::DrawSquareDotN(wxDC &dc, int32 x, int32 y, uint32 n)\r
-{\r
- wxPoint pt[4];\r
- uint32 offset = (n - 1) / 2;\r
-\r
- pt[0].x = x - offset, pt[0].y = y - offset;\r
- pt[1].x = x + offset, pt[1].y = y - offset;\r
- pt[2].x = x + offset, pt[2].y = y + offset;\r
- pt[3].x = x - offset, pt[3].y = y + offset;\r
-\r
- dc.DrawPolygon(4, pt);\r
-}\r
-\r
-//\r
-// Draw a round dot (nxn, centered on [x, y])\r
-//\r
-void TTEditWindow::DrawRoundDotN(wxDC &dc, int32 x, int32 y, uint32 n)\r
-{\r
- dc.DrawCircle(x, y, (n / 2) + 1);\r
-}\r
-\r
\r
#if 0\r
\r
protected:\r
wxPoint GetAdjustedMousePosition(wxMouseEvent &e);\r
wxPoint GetAdjustedClientPosition(wxCoord x, wxCoord y);\r
- void DrawRoundDot(wxDC &, int32, int32);\r
- void DrawSquareDot(wxDC &, int32, int32);\r
- void DrawRoundDotN(wxDC &, int32, int32, uint32);\r
- void DrawSquareDotN(wxDC &, int32, int32, uint32);\r
\r
DECLARE_EVENT_TABLE()\r
};\r
--- /dev/null
+//\r
+// Graphics primitives\r
+//\r
+// Various graphic functions that are slightly more complex than those that\r
+// come with various widget libraries.\r
+//\r
+// by James L. Hammons\r
+// (C) 2005 Underground Software\r
+//\r
+// JLH = James L. Hammons <jlhamm@acm.org>\r
+//\r
+// Who When What\r
+// --- ---------- -------------------------------------------------------------\r
+// JLH 03/14/1998 Created this file\r
+// JLH 01/20/2005 Converted to use wxWidgets\r
+// JLH 08/30/2008 Repurposed file to handle more than just bezier curves\r
+//\r
+\r
+#include "graphicprimitives.h"\r
+\r
+double abs(double n) // Helper function\r
+{\r
+ return (n < 0 ? -n : n);\r
+}\r
+\r
+//\r
+// This function takes three points and draws a curve using a second order\r
+// Bezier function.\r
+//\r
+void Bezier(wxDC &dc, point p1, point p2, point p3)\r
+{\r
+ double step = abs(p1.x - p3.x), tmp = abs(p1.y - p3.y);\r
+ step = (tmp > step ? tmp : step); // Get the larger of the two...\r
+ step = (step > 0 ? 1/step : 1); // & convert to valid step value\r
+\r
+ wxCoord prevX = (wxCoord)p1.x, prevY = (wxCoord)p1.y;\r
+\r
+ for(double u=0; u<=1; u+=step)\r
+ {\r
+ double _2u = 2*u, _uu = u*u, _2uu = 2*_uu;\r
+ double x = (p1.x * (1 - _2u + _uu)) + (p2.x * (_2u - _2uu)) + (p3.x * _uu);\r
+ double y = (p1.y * (1 - _2u + _uu)) + (p2.y * (_2u - _2uu)) + (p3.y * _uu);\r
+\r
+ dc.DrawLine(prevX, prevY, (wxCoord)x, (wxCoord)y);\r
+ prevX = (wxCoord)x, prevY = (wxCoord)y;\r
+ }\r
+\r
+ dc.DrawLine(prevX, prevY, (wxCoord)p3.x, (wxCoord)p3.y);\r
+}\r
+\r
+//\r
+// Draw a round dot (5x5, centered on [x, y])\r
+//\r
+void DrawRoundDot(wxDC &dc, int32 x, int32 y)\r
+{\r
+ wxPoint pt[8];\r
+\r
+ pt[0].x = x - 1, pt[0].y = y - 2;\r
+ pt[1].x = x + 1, pt[1].y = y - 2;\r
+ pt[2].x = x + 2, pt[2].y = y - 1;\r
+ pt[3].x = x + 2, pt[3].y = y + 1;\r
+ pt[4].x = x + 1, pt[4].y = y + 2;\r
+ pt[5].x = x - 1, pt[5].y = y + 2;\r
+ pt[6].x = x - 2, pt[6].y = y + 1;\r
+ pt[7].x = x - 2, pt[7].y = y - 1;\r
+\r
+ dc.DrawPolygon(8, pt);\r
+}\r
+\r
+//\r
+// Draw a sqaure dot (5x5, centered on [x, y])\r
+//\r
+void DrawSquareDot(wxDC &dc, int32 x, int32 y)\r
+{\r
+ wxPoint pt[4];\r
+\r
+ pt[0].x = x - 2, pt[0].y = y - 2;\r
+ pt[1].x = x + 2, pt[1].y = y - 2;\r
+ pt[2].x = x + 2, pt[2].y = y + 2;\r
+ pt[3].x = x - 2, pt[3].y = y + 2;\r
+\r
+ dc.DrawPolygon(4, pt);\r
+}\r
+\r
+//\r
+// Draw a sqaure dot (nxn, centered on [x, y])\r
+//\r
+void DrawSquareDotN(wxDC &dc, int32 x, int32 y, uint32 n)\r
+{\r
+ wxPoint pt[4];\r
+ uint32 offset = (n - 1) / 2;\r
+\r
+ pt[0].x = x - offset, pt[0].y = y - offset;\r
+ pt[1].x = x + offset, pt[1].y = y - offset;\r
+ pt[2].x = x + offset, pt[2].y = y + offset;\r
+ pt[3].x = x - offset, pt[3].y = y + offset;\r
+\r
+ dc.DrawPolygon(4, pt);\r
+}\r
+\r
+//\r
+// Draw a round dot (nxn, centered on [x, y])\r
+//\r
+void DrawRoundDotN(wxDC &dc, int32 x, int32 y, uint32 n)\r
+{\r
+ dc.DrawCircle(x, y, (n / 2) + 1);\r
+}\r
--- /dev/null
+//\r
+// Graphics primitives\r
+//\r
+// Various graphic functions that are slightly more complex than those that\r
+// come with various widget libraries.\r
+//\r
+\r
+#ifndef __GRAPHICPRIMITIVES_H__\r
+#define __GRAPHICPRIMITIVES_H__\r
+\r
+#include <wx/wx.h> // For device context\r
+#include "types.h" // For int32\r
+\r
+struct point\r
+{\r
+ float x, y;\r
+\r
+ point(float xx = 0, float yy = 0): x(xx), y(yy) {}\r
+};\r
+\r
+void Bezier(wxDC &, point, point, point);\r
+void DrawRoundDot(wxDC &, int32, int32);\r
+void DrawSquareDot(wxDC &, int32, int32);\r
+void DrawRoundDotN(wxDC &, int32, int32, uint32);\r
+void DrawSquareDotN(wxDC &, int32, int32, uint32);\r
+\r
+#endif // __GRAPHICPRIMITIVES_H__\r