|
|
#ifndef GDIPSHAPE_HPP
#define GDIPSHAPE_HPP
class TestShapeInterface; class TestShape; class LineShape; class ArcShape; class BezierShape; class RectShape; class EllipseShape; class PieShape; class PolygonShape; class CurveShape; class ClosedCurveShape;
class TestRectGradShape; class TestRadialGradShape; class TestTriangleGradShape; class TestPathGradShape;
class TestShapeInterface : public TestConfigureInterface, public TestDialogInterface { public: // initialize shape parameters to that of compatible shape
virtual VOID Initialize(TestShape *shape) = 0;
// add point to shape
virtual BOOL AddPoint(HWND hwnd, Point pt) = 0;
// user indicates we're done shape
virtual VOID DoneShape(HWND hwnd) = 0;
// last point added directly by a user
virtual BOOL EndPoint(HWND hwnd, Point pt) = 0;
// remove last control point from shape
virtual BOOL RemovePoint(HWND hwnd) = 0;
// do we encapsulate an entire shape?
virtual BOOL IsComplete() = 0;
// are there no control points for this shape?
virtual BOOL IsEmpty() = 0;
// draw control points ONLY
virtual VOID DrawPoints(Graphics* g) = 0;
// draw entire shape (no control points)
virtual VOID DrawShape(Graphics* g) = 0;
// add shape to path if complete
virtual VOID AddToPath(GraphicsPath* path) = 0;
// write instructions to create function
virtual VOID AddToFile(OutputFile* outfile) = 0;
// get type of shape
virtual INT GetType() = 0;
// return DC containing shape picture
virtual HDC CreatePictureDC(HWND hwnd, RECT *rect) = 0; };
class TestShape: public TestShapeInterface { public:
TestShape() : pen(NULL), brush(NULL), done(FALSE), shapeName(NULL), disabled(FALSE) { pts.Reset();
// !! hack for distinct names
static INT shapeCount = 0; shapeName = (LPTSTR)malloc(sizeof(TCHAR)*100); sprintf(shapeName, _T("Shape (%d)"), shapeCount++);
hdcPic = NULL; }
~TestShape() { if (hdcPic) DeleteDC(hdcPic);
delete pen; delete brush; if (shapeName) free(shapeName); }
// useful helper functions
static TestShape* CreateNewShape(INT type);
// temporary overload for those who don't implement these.
virtual VOID Initialize() { };
virtual VOID Initialize(TestShape *shape) { this->Initialize(); };
virtual HDC CreatePictureDC(HWND hwnd, RECT *rect);
virtual VOID SetBrush(TestBrush *newbrush) { delete brush; brush = newbrush; }
virtual VOID SetPen(TestPen *newpen) { delete pen; pen = newpen; } virtual TestBrush* GetBrush() { return brush; }
virtual TestPen* GetPen() { return pen; }
virtual VOID SetDisabled(BOOL disabled) { this->disabled = disabled; }
virtual BOOL GetDisabled() { return disabled; }
virtual BOOL EndPoint(HWND hwnd, Point pt); virtual BOOL RemovePoint(HWND hwnd); virtual VOID DrawPoints(Graphics* g); virtual BOOL MoveControlPoint(Point origPt, Point newPt); virtual VOID AddToPath(GraphicsPath* path); virtual VOID AddToFile(OutputFile* outfile);
virtual BOOL IsEmpty() { return (pts.GetCount() == 0); }
virtual INT GetCount() { return pts.GetCount(); }
virtual INT GetType() { ASSERT(FALSE); return -1; }
virtual LPTSTR GetShapeName() { // !! alter name based on Disabled/Not disabled?!?
return shapeName; }
/*
virtual INT* ShapeCount() { static INT shapeCount = 0; return &shapeCount; }
virtual INT* RevCount() { static INT revCount = 0; return &revCount; }
virtual TestShape* Clone() { TestShape* newShape = new TestShape(); *newShape = *this;
// clone GDI+ brush and pen
newShape->brush = brush->Clone(); newShape->pen = pen->Clone(); // make extra copy of dynamic point array and shape name
newShape->pts.RenewDataBuffer(); } */
public: // for use by other objects in system for temporary storage
DWORD dwFlags;
protected: TestBrush *brush; TestPen *pen;
PointArray pts; BOOL done;
LPTSTR shapeName; BOOL disabled;
HDC hdcPic; };
class LineShape : public TestShape { public: friend class LineShape;
// Shape usage methods
virtual VOID Initialize(TestShape *shape); virtual BOOL AddPoint(HWND hwnd, Point pt); virtual VOID DoneShape(HWND hwnd); virtual BOOL RemovePoint(HWND hwnd); virtual BOOL IsComplete(); virtual VOID DrawShape(Graphics* g); virtual VOID AddToPath(GraphicsPath* path); virtual VOID AddToFile(OutputFile* outfile);
// Configuration Interface
virtual BOOL ChangeSettings(HWND hwnd); virtual VOID Initialize();
// Dialog Management Interface
virtual VOID InitDialog(HWND hwnd); virtual BOOL SaveValues(HWND hwnd); virtual BOOL ProcessDialog(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
virtual INT GetType() { return LineType; } };
class ArcShape : public TestShape { public: friend class ArcShape; // Shape usage methods
virtual VOID Initialize(TestShape *shape); virtual BOOL AddPoint(HWND hwnd, Point pt); virtual VOID DoneShape(HWND hwnd); virtual BOOL RemovePoint(HWND hwnd); virtual BOOL IsComplete(); virtual VOID DrawShape(Graphics* g); virtual VOID AddToPath(GraphicsPath* path); virtual VOID AddToFile(OutputFile* outfile);
// Configuration Interface
virtual BOOL ChangeSettings(HWND hwnd); virtual VOID Initialize();
// Dialog Management Interface
virtual VOID InitDialog(HWND hwnd); virtual BOOL SaveValues(HWND hwnd); virtual BOOL ProcessDialog(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
virtual INT GetType() { return ArcType; }
private: REAL start; REAL sweep; BOOL popup; };
class BezierShape : public TestShape { public: friend class BezierShape;
// Shape usage methods
virtual VOID Initialize(TestShape *shape); virtual BOOL AddPoint(HWND hwnd, Point pt); virtual VOID DoneShape(HWND hwnd); virtual BOOL RemovePoint(HWND hwnd); virtual BOOL IsComplete(); virtual VOID DrawShape(Graphics* g); virtual VOID AddToPath(GraphicsPath* path); virtual VOID AddToFile(OutputFile* outfile);
// Configuration Interface
virtual BOOL ChangeSettings(HWND hwnd); virtual VOID Initialize();
// Dialog Management Interface
virtual VOID InitDialog(HWND hwnd); virtual BOOL SaveValues(HWND hwnd); virtual BOOL ProcessDialog(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
virtual INT GetType() { return BezierType; } };
class RectShape : public TestShape { public: friend class RectShape; // Shape usage methods
virtual VOID Initialize(TestShape *shape); virtual BOOL AddPoint(HWND hwnd, Point pt); virtual VOID DoneShape(HWND hwnd); virtual BOOL RemovePoint(HWND hwnd); virtual BOOL IsComplete(); virtual VOID DrawShape(Graphics* g); virtual VOID AddToPath(GraphicsPath* path); virtual VOID AddToFile(OutputFile* outfile);
// Configuration Interface
virtual BOOL ChangeSettings(HWND hwnd); virtual VOID Initialize();
// Dialog Management Interface
virtual VOID InitDialog(HWND hwnd); virtual BOOL SaveValues(HWND hwnd); virtual BOOL ProcessDialog(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
virtual INT GetType() { return RectType; } };
class EllipseShape : public TestShape { public: friend class EllipseShape; // Shape usage methods
virtual VOID Initialize(TestShape *shape); virtual BOOL AddPoint(HWND hwnd, Point pt); virtual VOID DoneShape(HWND hwnd); virtual BOOL RemovePoint(HWND hwnd); virtual BOOL IsComplete(); virtual VOID DrawShape(Graphics* g); virtual VOID AddToPath(GraphicsPath* path); virtual VOID AddToFile(OutputFile* outfile);
// Configuration Interface
virtual BOOL ChangeSettings(HWND hwnd); virtual VOID Initialize();
// Dialog Management Interface
virtual VOID InitDialog(HWND hwnd); virtual BOOL SaveValues(HWND hwnd); virtual BOOL ProcessDialog(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
virtual INT GetType() { return EllipseType; } };
class PieShape : public TestShape { public: friend class PieShape; // Shape usage methods
virtual VOID Initialize(TestShape *shape); virtual BOOL AddPoint(HWND hwnd, Point pt); virtual VOID DoneShape(HWND hwnd); virtual BOOL RemovePoint(HWND hwnd); virtual BOOL IsComplete(); virtual VOID DrawShape(Graphics* g); virtual VOID AddToPath(GraphicsPath* path); virtual VOID AddToFile(OutputFile* outfile);
// Configuration Interface
virtual BOOL ChangeSettings(HWND hwnd); virtual VOID Initialize();
// Dialog Management Interface
virtual VOID InitDialog(HWND hwnd); virtual BOOL SaveValues(HWND hwnd); virtual BOOL ProcessDialog(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
virtual INT GetType() { return PieType; }
private: REAL start; REAL sweep; BOOL popup; };
class PolygonShape : public TestShape { public: friend class PolygonShape; // Shape usage methods
virtual VOID Initialize(TestShape *shape); virtual BOOL AddPoint(HWND hwnd, Point pt); virtual VOID DoneShape(HWND hwnd); virtual BOOL RemovePoint(HWND hwnd); virtual BOOL IsComplete(); virtual VOID DrawShape(Graphics* g); virtual VOID AddToPath(GraphicsPath* path); virtual VOID AddToFile(OutputFile* outfile);
// Configuration Interface
virtual BOOL ChangeSettings(HWND hwnd); virtual VOID Initialize();
// Dialog Management Interface
virtual VOID InitDialog(HWND hwnd); virtual BOOL SaveValues(HWND hwnd); virtual BOOL ProcessDialog(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
virtual INT GetType() { return PolygonType; } };
class CurveShape : public TestShape { public: friend class CurveShape; // Shape usage methods
virtual VOID Initialize(TestShape *shape); virtual BOOL AddPoint(HWND hwnd, Point pt); virtual VOID DoneShape(HWND hwnd); virtual BOOL RemovePoint(HWND hwnd); virtual BOOL IsComplete(); virtual VOID DrawShape(Graphics* g); virtual VOID AddToPath(GraphicsPath* path); virtual VOID AddToFile(OutputFile* outfile);
// Configuration Interface
virtual BOOL ChangeSettings(HWND hwnd); virtual VOID Initialize();
// Dialog Management Interface
virtual VOID InitDialog(HWND hwnd); virtual BOOL SaveValues(HWND hwnd); virtual BOOL ProcessDialog(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
virtual INT GetType() { return CurveType; }
private: REAL tension; INT offset; INT numSegments; BOOL popup; };
class ClosedCurveShape : public TestShape { public: friend class ClosedCurveShape; // Shape usage methods
virtual VOID Initialize(TestShape *shape); virtual BOOL AddPoint(HWND hwnd, Point pt); virtual VOID DoneShape(HWND hwnd); virtual BOOL RemovePoint(HWND hwnd); virtual BOOL IsComplete(); virtual VOID DrawShape(Graphics* g); virtual VOID AddToPath(GraphicsPath* path); virtual VOID AddToFile(OutputFile* outfile);
// Configuration Interface
virtual BOOL ChangeSettings(HWND hwnd); virtual VOID Initialize();
// Dialog Management Interface
virtual VOID InitDialog(HWND hwnd); virtual BOOL SaveValues(HWND hwnd); virtual BOOL ProcessDialog(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
virtual INT GetType() { return ClosedCurveType; }
private: REAL tension; BOOL popup; }; //*******************************************************************
//
// TestGradShapeInterface
//
//
//
//*******************************************************************
class TestGradShape : public TestShape { public: TestGradShape() { argb.Reset(); } virtual VOID DrawPoints(Graphics* g);
protected: INT FindControlPoint(Point pt); INT FindLocationToInsert(Point pt);
ARGBArray argb;
INT curIndex; ARGB tmpArgb; };
//*******************************************************************
//
// TestTriangleGradShape
//
//
//
//*******************************************************************
#define TriangleCount 3
class TestTriangleGradShape : public TestGradShape { public: TestTriangleGradShape() { argb.Reset();
blend[0] = blend[1] = blend[2] = NULL; gdiBrush = NULL; }
~TestTriangleGradShape() { for (INT i = 0; i < 3; i++) if (blend[i]) free(blend[i]);
delete gdiBrush; }
// Shape usage methods
virtual VOID Initialize(TestShape *shape); virtual BOOL AddPoint(HWND hwnd, Point pt); virtual VOID DoneShape(HWND hwnd); virtual BOOL EndPoint(HWND hwnd, Point pt); virtual BOOL RemovePoint(HWND hwnd);
virtual BOOL IsComplete(); virtual VOID DrawShape(Graphics* g); virtual BOOL MoveControlPoint(Point origPt, Point newPt);
// Configuration Interface
virtual BOOL ChangeSettings(HWND hwnd); virtual VOID Initialize();
// Dialog Management Interface
virtual VOID InitDialog(HWND hwnd); virtual BOOL SaveValues(HWND hwnd); virtual BOOL ProcessDialog(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
VOID Initialize(Point* pts, ARGB* argb, REAL** blend, INT* blendCount); Point* GetPoints() { return pts.GetDataBuffer(); }
ARGB* GetARGB() { return argb.GetDataBuffer(); }
REAL** GetBlend() { return &blend[0]; }
INT* GetBlendCount() { return &count[0]; }
private: TriangleGradientBrush* gdiBrush; REAL* blend[3]; INT count[3]; };
//*******************************************************************
//
// TestPathGradShape
//
//
//
//*******************************************************************
class TestPathGradShape : public TestGradShape { public: TestPathGradShape() { argb.Reset();
surroundBlend = centerBlend = NULL; surroundCount = centerCount = 0; gdiBrush = NULL; }
~TestPathGradShape() { if (surroundBlend) free(surroundBlend);
if (centerBlend) free(centerBlend);
delete gdiBrush; }
// Shape usage methods
virtual VOID Initialize(TestShape *shape); virtual BOOL AddPoint(HWND hwnd, Point pt); virtual VOID DoneShape(HWND hwnd); virtual BOOL EndPoint(HWND hwnd, Point pt); virtual BOOL RemovePoint(HWND hwnd);
virtual BOOL IsComplete(); virtual VOID DrawShape(Graphics* g); virtual BOOL MoveControlPoint(Point origPt, Point newPt);
// Configuration Interface
virtual BOOL ChangeSettings(HWND hwnd); virtual VOID Initialize();
// Dialog Management Interface
virtual VOID InitDialog(HWND hwnd); virtual BOOL SaveValues(HWND hwnd); virtual BOOL ProcessDialog(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
VOID Initialize(PointArray* pts, ARGBArray* argb, REAL* surroundBlend, INT surroundColor, REAL* centerBlend, INT centerColor); Point* GetPoints() { return pts.GetDataBuffer(); }
ARGB* GetARGB() { return argb.GetDataBuffer(); }
REAL* GetCenterBlend() { return centerBlend; }
INT GetCenterBlendCount() { return centerCount; }
REAL* GetSurroundBlend() { return surroundBlend; }
INT GetSurroundBlendCount() { return surroundCount; }
private: PathGradientBrush* gdiBrush;
REAL* surroundBlend; REAL* centerBlend; INT surroundCount, centerCount; };
#endif // _GDIPSHAPE_HPP
|