From 6ceef8efe9e38313dba9f7c8a64efcb344a0056e Mon Sep 17 00:00:00 2001 From: Julian Smart Date: Sun, 23 Mar 2003 19:06:57 +0000 Subject: [PATCH] Removed obsolete library. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@19736 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- contrib/include/wx/canvas/bbox.h | 76 - contrib/include/wx/canvas/canvas.h | 863 ------ contrib/include/wx/canvas/liner.h | 58 - contrib/include/wx/canvas/polygon.h | 220 -- contrib/samples/canvas/Makefile.in | 10 - contrib/samples/canvas/simple/Makefile.in | 23 - contrib/samples/canvas/simple/SimpleVC.dsp | 176 -- contrib/samples/canvas/simple/SimpleVC.dsw | 29 - contrib/samples/canvas/simple/makefile.b32 | 18 - contrib/samples/canvas/simple/makefile.g95 | 14 - contrib/samples/canvas/simple/makefile.vc | 14 - contrib/samples/canvas/simple/mondrian.ico | Bin 766 -> 0 bytes contrib/samples/canvas/simple/mondrian.xpm | 44 - contrib/samples/canvas/simple/simple.cpp | 172 -- contrib/samples/canvas/simple/simple.h | 80 - contrib/samples/canvas/simple/simple.rc | 3 - contrib/samples/canvas/simple/smile.xpm | 42 - contrib/samples/canvas/test/Makefile.in | 25 - contrib/samples/canvas/test/TestVC.dsp | 175 -- contrib/samples/canvas/test/TestVC.dsw | 29 - contrib/samples/canvas/test/makefile.b32 | 18 - contrib/samples/canvas/test/makefile.g95 | 14 - contrib/samples/canvas/test/makefile.vc | 14 - contrib/samples/canvas/test/pat36.bmp | Bin 190 -> 0 bytes contrib/samples/canvas/test/pat4.bmp | Bin 630 -> 0 bytes contrib/samples/canvas/test/smile.xpm | 42 - contrib/samples/canvas/test/test.cpp | 747 ----- contrib/samples/canvas/test/test.h | 216 -- contrib/samples/canvas/test/test.rc | 3 - contrib/src/canvas/CanvasVC.dsp | 102 - contrib/src/canvas/CanvasVC.dsw | 29 - contrib/src/canvas/Makefile.in | 26 - contrib/src/canvas/bbox.cpp | 369 --- contrib/src/canvas/canvas.cpp | 2949 -------------------- contrib/src/canvas/liner.cpp | 660 ----- contrib/src/canvas/makefile.b32 | 17 - contrib/src/canvas/makefile.g95 | 16 - contrib/src/canvas/makefile.vc | 159 -- contrib/src/canvas/polygon.cpp | 1453 ---------- 39 files changed, 8905 deletions(-) delete mode 100644 contrib/include/wx/canvas/bbox.h delete mode 100644 contrib/include/wx/canvas/canvas.h delete mode 100644 contrib/include/wx/canvas/liner.h delete mode 100644 contrib/include/wx/canvas/polygon.h delete mode 100644 contrib/samples/canvas/Makefile.in delete mode 100644 contrib/samples/canvas/simple/Makefile.in delete mode 100644 contrib/samples/canvas/simple/SimpleVC.dsp delete mode 100644 contrib/samples/canvas/simple/SimpleVC.dsw delete mode 100644 contrib/samples/canvas/simple/makefile.b32 delete mode 100644 contrib/samples/canvas/simple/makefile.g95 delete mode 100644 contrib/samples/canvas/simple/makefile.vc delete mode 100644 contrib/samples/canvas/simple/mondrian.ico delete mode 100644 contrib/samples/canvas/simple/mondrian.xpm delete mode 100644 contrib/samples/canvas/simple/simple.cpp delete mode 100644 contrib/samples/canvas/simple/simple.h delete mode 100644 contrib/samples/canvas/simple/simple.rc delete mode 100644 contrib/samples/canvas/simple/smile.xpm delete mode 100644 contrib/samples/canvas/test/Makefile.in delete mode 100644 contrib/samples/canvas/test/TestVC.dsp delete mode 100644 contrib/samples/canvas/test/TestVC.dsw delete mode 100644 contrib/samples/canvas/test/makefile.b32 delete mode 100644 contrib/samples/canvas/test/makefile.g95 delete mode 100644 contrib/samples/canvas/test/makefile.vc delete mode 100644 contrib/samples/canvas/test/pat36.bmp delete mode 100644 contrib/samples/canvas/test/pat4.bmp delete mode 100644 contrib/samples/canvas/test/smile.xpm delete mode 100644 contrib/samples/canvas/test/test.cpp delete mode 100644 contrib/samples/canvas/test/test.h delete mode 100644 contrib/samples/canvas/test/test.rc delete mode 100644 contrib/src/canvas/CanvasVC.dsp delete mode 100644 contrib/src/canvas/CanvasVC.dsw delete mode 100644 contrib/src/canvas/Makefile.in delete mode 100644 contrib/src/canvas/bbox.cpp delete mode 100644 contrib/src/canvas/canvas.cpp delete mode 100644 contrib/src/canvas/liner.cpp delete mode 100644 contrib/src/canvas/makefile.b32 delete mode 100644 contrib/src/canvas/makefile.g95 delete mode 100644 contrib/src/canvas/makefile.vc delete mode 100644 contrib/src/canvas/polygon.cpp diff --git a/contrib/include/wx/canvas/bbox.h b/contrib/include/wx/canvas/bbox.h deleted file mode 100644 index 49a2e555ac..0000000000 --- a/contrib/include/wx/canvas/bbox.h +++ /dev/null @@ -1,76 +0,0 @@ -#ifndef __WXBOUNDINGBOX_H__ -#define __WXBOUNDINGBOX_H__ - -#if defined(__GNUG__) && !defined(__APPLE__) - #pragma interface "bbox.cpp" -#endif - -#ifndef WX_PRECOMP - #include "wx/wx.h" -#endif - -#include "wx/matrix.h" -#include "wx/geometry.h" - -enum OVERLAP {_IN,_ON,_OUT}; - -//Purpose The wxBoundingBox class stores one wxBoundingBox. -//The wxBoundingBox is defined by two coordiates, -//a upperleft coordinate and a lowerright coordinate. -class wxBoundingBox -{ -public: - wxBoundingBox(); - wxBoundingBox(const wxBoundingBox&); - wxBoundingBox(const wxPoint2DDouble&); - wxBoundingBox(double xmin, double ymin, double xmax, double ymax); - - bool And(wxBoundingBox*, double Marge = 0); - - void EnLarge(const double Marge); - void Shrink(const double Marge); - - void Expand(const wxPoint2DDouble& , const wxPoint2DDouble&); - void Expand(const wxPoint2DDouble&); - void Expand(double x,double y); - void Expand(const wxBoundingBox& bbox); - - OVERLAP Intersect( wxBoundingBox &, double Marge = 0); - bool LineIntersect(const wxPoint2DDouble& begin, const wxPoint2DDouble& end ); - bool PointInBox( const wxPoint2DDouble&, double Marge = 0); - bool PointInBox( double, double, double Marge = 0); - - void Reset(); - - void Translate( wxPoint2DDouble& ); - void MapBbox( const wxTransformMatrix& matrix); - - double GetWidth() {return m_maxx-m_minx;}; - double GetHeight(){return m_maxy-m_miny;}; - bool GetValid() const; - void SetValid(bool); - - void SetBoundingBox(const wxPoint2DDouble& a_point); - - void SetMin(double, double); - void SetMax(double, double); - inline wxPoint2DDouble GetMin(); - inline wxPoint2DDouble GetMax(); - inline double GetMinX(){return m_minx;}; - inline double GetMinY(){return m_miny;}; - inline double GetMaxX(){return m_maxx;}; - inline double GetMaxY(){return m_maxy;}; - - wxBoundingBox& operator+( wxBoundingBox& ); - wxBoundingBox& operator=( const wxBoundingBox& ); - -protected: - //bounding box in world - double m_minx; - double m_miny; - double m_maxx; - double m_maxy; - bool m_validbbox; -}; - -#endif diff --git a/contrib/include/wx/canvas/canvas.h b/contrib/include/wx/canvas/canvas.h deleted file mode 100644 index 5d8a2addf3..0000000000 --- a/contrib/include/wx/canvas/canvas.h +++ /dev/null @@ -1,863 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: canvas.h -// Author: Robert Roebling -// Created: XX/XX/XX -// Copyright: 2000 (c) Robert Roebling -// Licence: wxWindows Licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef __WXCANVAS_H__ -#define __WXCANVAS_H__ - -#if defined(__GNUG__) && !defined(__APPLE__) - #pragma interface "canvas.cpp" -#endif - -#ifndef WX_PRECOMP - #include "wx/wx.h" -#endif - -#include "wx/image.h" -#include "wx/txtstrm.h" -#include "wx/geometry.h" -#include "wx/matrix.h" -#include "bbox.h" - - -//---------------------------------------------------------------------------- -// decls -//---------------------------------------------------------------------------- - -class wxCanvas; -class wxCanvasAdmin; - -//---------------------------------------------------------------------------- -// wxCanvasObject -//---------------------------------------------------------------------------- -enum wxDRAG_MODE -{ - wxDRAG_RECTANGLE, - wxDRAG_ONTOP, - wxDRAG_REDRAW -}; - -//:defenition -// wxCanvasObject is the base class for Canvas Objects. -// All Objects for drawing one the canvas are derived from this class. -// It supports dragging and moving methods that can be used in derived -// classes for defining several ways of dragging. -// Also it is possible to plug in events handlers to do this for all derived classes at once. -// -// wxCanvasObjects have themselves as their event handlers by default, -// but their event handlers could be set to another object entirely. This -// separation can reduce the amount of derivation required, and allow -// alteration of a wxCanvasObject functionality -class wxCanvasObject: public wxEvtHandler -{ - DECLARE_CLASS(wxCanvasObject) -public: - - wxCanvasObject(); - - //If the position (x,y) is within the object this return a pointer to the object - //Normally this function needs to be defined for each derived wxCanvasObject. - //The default is a simple bounding box test. - virtual wxCanvasObject* IsHitWorld( double x, double y, double margin = 0 ); - - //render this object to the canvas (either on its buffer or directly on the canvas) - //this depends on the wxDC that is set for the active canvas. - virtual void Render(wxTransformMatrix* cworld, int clip_x, int clip_y, int clip_width, int clip_height ); - - //x position in world coordinates of the object - virtual double GetPosX()=0; - //y position in world coordinates of the object - virtual double GetPosY()=0; - - //set position in world coordinates for the object - virtual void SetPosXY( double x, double y)=0; - - //absolute moving the object to position x,y in world coordinates - //also does an update of the old and new area - virtual void MoveAbsolute( double x, double y ); - - //relative moving the object to position x,y in world coordinates - //also does an update of the old and new area - virtual void MoveRelative( double x, double y ); - - //relative translate the object to position x,y in world coordinates - //does NOT update the old and new area - //this function must be defined for each derived object, - //it is used internally for dragging and moving objects. - virtual void TransLate( double x, double y )=0; - - //choose one of the three diffrenet drag methods | - //DRAG_RECTANGLE = as a rectangle when drag is in progress | - //DRAG_ONTOP = only redraw the object when dragging | - //DRAG_REDRAW = redraw the damaged areas when dragging - void SetDragMode(wxDRAG_MODE mode) { m_dragmode=mode; }; - - //return the dragmode - wxDRAG_MODE GetDragMode() { return m_dragmode; }; - - //called when starting a drag - virtual void DragStart(); - //called when dragging is in progress - virtual void DragRelative( double x, double y); - //called when dragging is ended - virtual void DragEnd(); - - //return the object if it is part of the given object or - //if the given object is part of a group within this object. - //For group objects this means recursively search for it. - virtual wxCanvasObject* Contains( wxCanvasObject* obj ); - - //calculate the boundingbox in world coordinates - virtual void CalcBoundingBox()=0; - - //write the object as SVG (scalable vector grafhics - virtual void WriteSVG( wxTextOutputStream &stream ); - - //get the administrator for the object, - //this will give access to the canvas's where it is displayed upon. - //It is used to render the object to the active canvas. - //Conversion from world to Device coordinates and visa versa is - //done using the Active canvas at that moment. - wxCanvasAdmin *GetAdmin() { return m_admin; } - - //set the administrator - virtual void SetAdmin( wxCanvasAdmin *admin ) { m_admin = admin; } - - //is this a control type of canvas object - bool IsControl() { return m_isControl; } - //is this a vector type of canvas object - bool IsVector() { return m_isVector; } - //is this an Image type of canvas object - bool IsImage() { return m_isImage; } - - //get minimum X of the boundingbox in world coordinates - inline double GetXMin() { return m_bbox.GetMinX(); } - //get minimum Y of the boundingbox in world coordinates - inline double GetYMin() { return m_bbox.GetMinY(); } - //get maximum X of the boundingbox in world coordinates - inline double GetXMax() { return m_bbox.GetMaxX(); } - //get maximum Y of the boundingbox in world coordinates - inline double GetYMax() { return m_bbox.GetMaxY(); } - - //get boundingbox - inline wxBoundingBox GetBbox() { return m_bbox; } - - //redirect all mouse events for the canvas to this object - void CaptureMouse(); - //release the mouse capture for this object - void ReleaseMouse(); - //is the mouse captured for this object - bool IsCapturedMouse(); - - //set if this object will visible (be rendered or not) - inline void SetVisible(bool visible) { m_visible=visible; } - //get visibility - inline bool GetVisible() {return m_visible; } - - //can the object be dragged - inline void SetDraggable(bool drag) { m_dragable=drag; } - //get if the object can be dragged - inline bool GetDraggable() {return m_dragable; } - - //get absolute area in the device coordinates where the object - //its boundingbox in world coordinates is first translated using the matrix. - wxRect GetAbsoluteArea(const wxTransformMatrix& cworld); - - //get currently used eventhandler (always the first in the list) - wxEvtHandler *GetEventHandler() const { return m_eventHandler; } - - //process an event for the object, starting with the first eventhandler - // in the list. - bool ProcessCanvasObjectEvent(wxEvent& event); - - // push/pop event handler: allows to chain a custom event handler to - // already existing ones - void PushEventHandler( wxEvtHandler *handler ); - - //remove first eventhandler in the list (one will be always stay in) - wxEvtHandler *PopEventHandler( bool deleteHandler = FALSE ); - //append an eventhandler to the list, this event handler will be called - //if the other skipped the event to process. - void AppendEventHandler(wxEvtHandler *handler); - //remove last event handler in the list (one will always stay in) - wxEvtHandler *RemoveLastEventHandler(bool deleteHandler); - -protected: - - //administator for rendering and accessing the canvas's - wxCanvasAdmin* m_admin; - - //active event handler, default the object itself - wxEvtHandler* m_eventHandler; - - bool m_isControl:1; - bool m_isVector:1; - bool m_isImage:1; - bool m_visible:1; - bool m_dragable:1; - wxDRAG_MODE m_dragmode:3; - - //boundingbox in world coordinates - wxBoundingBox m_bbox; - - //used for dragging - wxBitmap m_atnewpos; -}; - -//:defenition -// wxCanvasObjectGroup is a container for wxCanvas derived Objects. -// It renders itself by calling the render methods of the wxCanvasObjects it contains. -// It can have nested groups also, in the same way as the other wxCanvasObjects it already contains. -// The group has a matrix to position/rotate/scale the group. -class wxCanvasObjectGroup: public wxCanvasObject -{ - DECLARE_CLASS(wxCanvasObjectGroup) -public: - wxCanvasObjectGroup(double x, double y); - virtual ~wxCanvasObjectGroup(); - - void SetAdmin(wxCanvasAdmin* admin); - - //prepend a wxCanvasObject to this group - virtual void Prepend( wxCanvasObject* obj ); - //append a wxCanvasObject to this group - virtual void Append( wxCanvasObject* obj ); - //insert a wxCanvasObject to this group - virtual void Insert( size_t before, wxCanvasObject* obj ); - //remove the given object from the group - virtual void Remove( wxCanvasObject* obj ); - - //those this group contain the given object. - //in case of nested groups also search in there to the lowwest level. - virtual wxCanvasObject* Contains( wxCanvasObject* obj ); - - //returns index of the given wxCanvasObject in this group - virtual int IndexOf( wxCanvasObject* obj ); - - double GetPosX() { return lworld.GetValue(2,0); } - double GetPosY() { return lworld.GetValue(2,1); } - void SetPosXY( double x, double y) {lworld.SetValue(2,0,x);lworld.SetValue(2,1,y);CalcBoundingBox();}; - - void TransLate( double x, double y ); - - void CalcBoundingBox(); - //remove all wxCanvasObjects from the group (flag for deletion of the objectsalso) - void DeleteContents( bool ); - virtual void Render(wxTransformMatrix* cworld,int x, int y, int width, int height ); - virtual void WriteSVG( wxTextOutputStream &stream ); - - //recursive call the IsHitWorld on all contained objects, the first - //one that is hit will be returned - wxCanvasObject* IsHitWorld( double x, double y, double margin = 0 ); - - //recursive calls for contained objects to set eventhandlers, - //and also sets its own eventhandler - void PushEventHandler( wxEvtHandler *handler ); - //recursive calls for contained objects to set eventhandlers, - //and also sets its own eventhandler - wxEvtHandler *PopEventHandler( bool deleteHandler = FALSE ); - //recursive calls for contained objects to set eventhandlers, - //and also sets its own eventhandler - void AppendEventHandler(wxEvtHandler *handler); - //recursive calls for contained objects to set eventhandlers, - //and also sets its own eventhandler - wxEvtHandler *RemoveLastEventHandler(bool deleteHandler); - -protected: - - //to position the object - wxTransformMatrix lworld; - - wxList m_objects; - - friend class wxCanvas; -}; - -//:defenition -// wxCanvasObjectRef is a reference to any wxCanvasObject derived class. -// It does not duplicate the referenced object. -// It has a matrix to reposition/rotate/scale the object it references. -// The position/matrix of the referenced Object is accumulated with the one here. -class wxCanvasObjectRef: public wxCanvasObject -{ - DECLARE_CLASS(wxCanvasObjectRef) -public: - wxCanvasObjectRef(double x, double y,wxCanvasObject* obj); - - //set rotation for the reference - void SetRotation(double rotation); - - //set scale in x and y ( > zero) - void SetScale( double scalex, double scaley ); - - void SetAdmin(wxCanvasAdmin* admin); - - double GetPosX() { return lworld.GetValue(2,0); } - double GetPosY() { return lworld.GetValue(2,1); } - void SetPosXY( double x, double y) {lworld.SetValue(2,0,x);lworld.SetValue(2,1,y);CalcBoundingBox();}; - - void TransLate( double x, double y ); - void CalcBoundingBox(); - virtual void Render(wxTransformMatrix* cworld,int x, int y, int width, int height ); - virtual void WriteSVG( wxTextOutputStream &stream ); - - //return this object if one of the objects it references is hit - wxCanvasObject* IsHitWorld( double x, double y, double margin = 0 ); - virtual wxCanvasObject* Contains( wxCanvasObject* obj ); - - //recursive calls for contained objects to set eventhandlers, - //and also sets its own eventhandler - void PushEventHandler( wxEvtHandler *handler ); - //recursive calls for contained objects to set eventhandlers, - //and also sets its own eventhandler - wxEvtHandler *PopEventHandler( bool deleteHandler = FALSE ); - //recursive calls for contained objects to set eventhandlers, - //and also sets its own eventhandler - void AppendEventHandler(wxEvtHandler *handler); - //recursive calls for contained objects to set eventhandlers, - //and also sets its own eventhandler - wxEvtHandler *RemoveLastEventHandler(bool deleteHandler); - -protected: - - //to position the object - wxTransformMatrix lworld; - - //reference to another wxCanvasObject - wxCanvasObject* m_obj; -}; - -//:defenition -// wxCanvasRect -class wxCanvasRect: public wxCanvasObject -{ - DECLARE_CLASS(wxCanvasRect) -public: - wxCanvasRect( double x, double y, double w, double h , double radius=0 ); - void SetBrush( const wxBrush& brush) { m_brush = brush; }; - void SetPen( const wxPen& pen) { m_pen = pen; CalcBoundingBox(); }; - - double GetPosX() { return m_x; } - double GetPosY() { return m_y; } - void SetPosXY( double x, double y) {m_x=x; m_y=y; CalcBoundingBox();}; - - void TransLate( double x, double y ); - void CalcBoundingBox(); - - virtual void Render(wxTransformMatrix* cworld, int clip_x, int clip_y, int clip_width, int clip_height ); - virtual void WriteSVG( wxTextOutputStream &stream ); - -private: - wxPen m_pen; - wxBrush m_brush; - - double m_x; - double m_y; - double m_width; - double m_height; - double m_radius; -}; - -//---------------------------------------------------------------------------- -// wxCanvasCircle -//---------------------------------------------------------------------------- -class wxCanvasCircle: public wxCanvasObject -{ -public: - wxCanvasCircle( double x, double y, double radius ); - void SetBrush( const wxBrush& brush) { m_brush = brush; }; - void SetPen( const wxPen& pen) { m_pen = pen; CalcBoundingBox(); }; - - double GetPosX() { return m_x; } - double GetPosY() { return m_y; } - void SetPosXY( double x, double y) {m_x=x; m_y=y;CalcBoundingBox(); }; - - void TransLate( double x, double y ); - - void CalcBoundingBox(); - - virtual void Render(wxTransformMatrix* cworld, int clip_x, int clip_y, int clip_width, int clip_height ); - virtual void WriteSVG( wxTextOutputStream &stream ); - - wxCanvasObject* IsHitWorld( double x, double y, double margin = 0 ); - -private: - wxPen m_pen; - wxBrush m_brush; - - double m_x; - double m_y; - double m_radius; -}; - -//:defenition -// wxCanvasEllipse -class wxCanvasEllipse: public wxCanvasObject -{ -public: - wxCanvasEllipse( double x, double y, double width, double height ); - void SetBrush( const wxBrush& brush) { m_brush = brush; }; - void SetPen( const wxPen& pen) { m_pen = pen; CalcBoundingBox(); }; - - double GetPosX() { return m_x; } - double GetPosY() { return m_y; } - void SetPosXY( double x, double y) {m_x=x; m_y=y; CalcBoundingBox();}; - - void TransLate( double x, double y ); - - void CalcBoundingBox(); - - virtual void Render(wxTransformMatrix* cworld, int clip_x, int clip_y, int clip_width, int clip_height ); - virtual void WriteSVG( wxTextOutputStream &stream ); - - wxCanvasObject* IsHitWorld( double x, double y, double margin = 0 ); - -private: - wxPen m_pen; - wxBrush m_brush; - - double m_x; - double m_y; - double m_width; - double m_height; -}; - -//:defenition -// wxCanvasEllipticArc -class wxCanvasEllipticArc: public wxCanvasObject -{ -public: - wxCanvasEllipticArc( double x, double y, double width, double height, double start, double end ); - void SetBrush( const wxBrush& brush) { m_brush = brush; }; - void SetPen( const wxPen& pen) { m_pen = pen; CalcBoundingBox(); }; - - double GetPosX() { return m_x; } - double GetPosY() { return m_y; } - void SetPosXY( double x, double y) {m_x=x; m_y=y; CalcBoundingBox();}; - - void TransLate( double x, double y ); - void CalcBoundingBox(); - - virtual void Render(wxTransformMatrix* cworld, int clip_x, int clip_y, int clip_width, int clip_height ); - virtual void WriteSVG( wxTextOutputStream &stream ); - - wxCanvasObject* IsHitWorld( double x, double y, double margin = 0 ); - -private: - wxPen m_pen; - wxBrush m_brush; - - double m_x; - double m_y; - double m_width; - double m_height; - double m_start; - double m_end; -}; - -//:defenition -// wxCanvasLine -class wxCanvasLine: public wxCanvasObject -{ -public: - wxCanvasLine( double x1, double y1, double x2, double y2 ); - void SetPen( const wxPen& pen) { m_pen = pen; CalcBoundingBox(); }; - - - double GetPosX() { return m_x1; } - double GetPosY() { return m_y1; } - void SetPosXY( double x, double y) {m_x1=x; m_y1=y; CalcBoundingBox();}; - - void TransLate( double x, double y ); - - void CalcBoundingBox(); - - virtual void Render(wxTransformMatrix* cworld, int clip_x, int clip_y, int clip_width, int clip_height ); - virtual void WriteSVG( wxTextOutputStream &stream ); - - wxCanvasObject* IsHitWorld( double x, double y, double margin = 0 ); - -private: - wxPen m_pen; - - double m_x1; - double m_y1; - double m_x2; - double m_y2; -}; - -//:defenition -// wxCanvasImage -class wxCanvasImage: public wxCanvasObject -{ -public: - wxCanvasImage( const wxImage &image, double x, double y, double w, double h ); - - double GetPosX() { return m_x; } - double GetPosY() { return m_y; } - void SetPosXY( double x, double y); - - void TransLate( double x, double y ); - - void CalcBoundingBox(); - - virtual void Render(wxTransformMatrix* cworld, int clip_x, int clip_y, int clip_width, int clip_height ); - virtual void WriteSVG( wxTextOutputStream &stream ); - -private: - double m_x; - double m_y; - double m_width; - double m_height; - - wxImage m_image; - int m_orgw,m_orgh; - - // cache - wxBitmap m_cBitmap; - wxImage m_cImage; - int m_cW; - int m_cH; - double m_cR; -}; - -//---------------------------------------------------------------------------- -// wxCanvasControl -//---------------------------------------------------------------------------- - -class wxCanvasControl: public wxCanvasObject -{ -public: - wxCanvasControl( wxWindow *control ); - ~wxCanvasControl(); - - double GetPosX(); - double GetPosY(); - void SetPosXY( double x, double y); - - void TransLate( double x, double y ); - void MoveRelative( double x, double y ); - - void CalcBoundingBox(); - -private: - wxWindow *m_control; -}; - -//:defenition -// wxCanvasText -class wxCanvasText: public wxCanvasObject -{ -public: - wxCanvasText( const wxString &text, double x, double y, const wxString &foneFile, int size ); - ~wxCanvasText(); - - double GetPosX() { return m_x; } - double GetPosY() { return m_y; } - void SetPosXY( double x, double y) {m_x=x; m_y=y;CalcBoundingBox(); }; - - void TransLate( double x, double y ); - - void CalcBoundingBox(); - - virtual void Render(wxTransformMatrix* cworld, int clip_x, int clip_y, int clip_width, int clip_height ); - virtual void WriteSVG( wxTextOutputStream &stream ); - - void SetRGB( unsigned char red, unsigned char green, unsigned char blue ); - void SetFlag( int flag ); - int GetFlag() { return m_flag; } - -private: - wxString m_text; - double m_x; - double m_y; - unsigned char *m_alpha; - void *m_faceData; - int m_flag; - int m_red; - int m_green; - int m_blue; - wxString m_fontFileName; - int m_size; -}; - -//:defenition -// wxCanvas is used to display a wxCanvasGroupObject, which contains wxCanvasObject derived -// drawable objects. The group to draw is called the root. -// All objects are defined in world coordinates, relative to its parent (e.g. nested groups) -// There are methods to convert from world to device coordinates and visa versa. -// Rendering a draw is normally started on the root, it to a buffer, afterwords -// an update of the damaged parts will blitted from the buffer to the screen. -// This is done in Idle time, but can also be forced. -// World coordinates can be with the Y axis going up are down. -// The area of the drawing in world coordinates that is visible on the canvas -// can be set. Parts of this area can be zoomed into resulting in scroll bars -// to be displayed. -class wxCanvas: public wxScrolledWindow -{ -public: - // constructors and destructors - wxCanvas( wxCanvasAdmin* admin ,wxWindow *parent, wxWindowID id = -1, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxScrolledWindowStyle ); - virtual ~wxCanvas(); - - //background colour for the canvas - virtual void SetColour( const wxColour& background ); - - //update the area given in device coordinates - virtual void Update( int x, int y, int width, int height, bool blit = TRUE ); - - //blit all updated areas now to the screen, else it will happen in idle time. - //Use this to support dragging for instance, becuase in such cases idle time - //will take to long. - virtual void UpdateNow(); - - //prevent canvas activety - virtual void Freeze(); - //allow canvas activety - virtual void Thaw(); - - //get the buffer that is used for rendering in general - inline wxBitmap *GetBuffer() { return &m_buffer; } - //get the DC that is used for rendering - inline wxDC *GetDC() { return m_renderDC; } - //set the DC that is used for rendering - inline void SetDC(wxDC* dc) { m_renderDC=dc; } - - inline int GetBufferWidth() { return m_buffer.GetWidth(); } - inline int GetBufferHeight() { return m_buffer.GetHeight(); } - - //updating is needed for the canvas if the buffer did change - bool NeedUpdate() { return m_needUpdate; } - bool IsFrozen() { return m_frozen; } - - //blit damaged areas in the buffer to the screen - void BlitBuffer( wxDC &dc ); - - //redirect events to this canvas object - void SetCaptureMouse( wxCanvasObject *obj ); - //are events redirected, if so return the object else NULL - inline wxCanvasObject* GetCaptured() { return m_captureMouse;} - - //set the root group where the objects for this canvas are stored - void SetRoot(wxCanvasObjectGroup* aroot){m_root=aroot;} - - //get root group that is displayed on the canvas - wxCanvasObjectGroup* GetRoot(){return m_root;} - - //scroll the window in device coordinates - virtual void ScrollWindow( int dx, int dy, - const wxRect* rect = (wxRect *) NULL ); - - //get y axis orientation - virtual bool GetYaxis() { return FALSE; } - - //get the visible part in world coordinates - virtual double GetMinX() const; - virtual double GetMinY() const; - virtual double GetMaxX() const; - virtual double GetMaxY() const; - - //convert from window to virtual coordinates - virtual double DeviceToLogicalX(int x) const; - virtual double DeviceToLogicalY(int y) const; - virtual double DeviceToLogicalXRel(int x) const; - virtual double DeviceToLogicalYRel(int y) const; - virtual int LogicalToDeviceX(double x) const; - virtual int LogicalToDeviceY(double y) const; - virtual int LogicalToDeviceXRel(double x) const; - virtual int LogicalToDeviceYRel(double y) const; - -protected: - wxBitmap m_buffer; - - //always available and m_buffer selected - wxDC* m_renderDC; - - bool m_needUpdate; - wxList m_updateRects; - wxCanvasObjectGroup* m_root; - - wxColour m_background; - bool m_frozen; - wxCanvasObject *m_lastMouse; - wxCanvasObject *m_captureMouse; - - int m_oldDeviceX,m_oldDeviceY; - - wxCanvasAdmin* m_admin; - -private: - int m_bufferX,m_bufferY; - -protected: - void OnMouse( wxMouseEvent &event ); - void OnPaint( wxPaintEvent &event ); - void OnSize( wxSizeEvent &event ); - void OnIdle( wxIdleEvent &event ); - void OnSetFocus( wxFocusEvent &event ); - void OnKillFocus( wxFocusEvent &event ); - void OnEraseBackground( wxEraseEvent &event ); - -private: - DECLARE_CLASS(wxCanvas) - DECLARE_EVENT_TABLE() -}; - - - -class wxVectorCanvas: public wxCanvas -{ -public: - // constructors and destructors - wxVectorCanvas( wxCanvasAdmin* admin ,wxWindow *parent, wxWindowID id = -1, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxScrolledWindowStyle ); - - //scroll the window in device coordinates - virtual void ScrollWindow( int dx, int dy, - const wxRect* rect = (wxRect *) NULL ); - - //set if the Yaxis goes up or down - void SetYaxis(bool up) { m_yaxis=up; } - - //get currently used Yaxis setting - virtual bool GetYaxis() { return m_yaxis; } - - //to set the total area in world coordinates that can be scrolled. - // when totaly zoomed out (SetMappingScroll same size as given here), - // this will be the area displayed. - // To display all of a drawing, set this here to the boundingbox of the root group - // of the canvas. - void SetScroll(double vx1,double vy1,double vx2,double vy2); - - //given the virtual size to be displayed, the mappingmatrix will be calculated - //in such a manner that it fits (same ratio in width and height) to the window size. - //The window size is used to intitialize the mapping. - //The virtual size is just an indication, it will be ajusted to fit in the client window ratio. - //When border is set an extra margin is added so that the drawing will fit nicely. - // To display all of a drawing, set this here to the boundingbox of the root group - // of the canvas. - void SetMappingScroll(double vx1,double vy1,double vx2,double vy2,bool border); - - //matrix for calculating the virtual coordinate given a screen coordinate - wxTransformMatrix GetInverseMappingMatrix(); - - //matrix for calculating the screen coordinate given a virtual coordinate - wxTransformMatrix GetMappingMatrix(); - - //get minimum X of the visible part in world coordinates - virtual double GetMinX() const; - virtual double GetMinY() const; - virtual double GetMaxX() const; - virtual double GetMaxY() const; - - //convert from window to virtual coordinates and back - virtual double DeviceToLogicalX(int x) const; - virtual double DeviceToLogicalY(int y) const; - virtual double DeviceToLogicalXRel(int x) const; - virtual double DeviceToLogicalYRel(int y) const; - virtual int LogicalToDeviceX(double x) const; - virtual int LogicalToDeviceY(double y) const; - virtual int LogicalToDeviceXRel(double x) const; - virtual int LogicalToDeviceYRel(double y) const; - -protected: - // up or down - bool m_yaxis; - - // holds the matrix for mapping from virtual to screen coordinates - wxTransformMatrix m_mapping_matrix; - - // holds the inverse of the mapping matrix - wxTransformMatrix m_inverse_mapping; - - //virtual coordinates of total drawing - double m_virtm_minX, m_virtm_minY, m_virtm_maxX, m_virtm_maxY; - - // virtual coordinates box - double m_virt_minX, m_virt_minY, m_virt_maxX, m_virt_maxY; - - // bounding box - double m_minX, m_minY, m_maxX, m_maxY; - - //are scroll bars active? - bool m_scrolled; - -private: - void OnScroll(wxScrollWinEvent& event); - void OnChar( wxKeyEvent &event ); - void OnSize( wxSizeEvent &event ); - -private: - DECLARE_CLASS(wxVectorCanvas) - DECLARE_EVENT_TABLE() -}; - - - -//:defenition -//Contains a list of wxCanvas Objects that will be maintained through this class. -//Each wxCanvasObject can be displayed on several wxCanvas Objects at the same time. -//The active wxCanvas is used to render and convert coordinates from world to device. -//So it is important to set the active wxCanvas based on the wxCanvas that has the focus -//or is scrolled etc. This is normally done within wxCanvas when appropriate. -class wxCanvasAdmin -{ -public: - // constructors and destructors - wxCanvasAdmin(); - virtual ~wxCanvasAdmin(); - - //convert from window to virtual coordinates - double DeviceToLogicalX(int x) const; - //convert from window to virtual coordinates - double DeviceToLogicalY(int y) const; - //convert from window to virtual coordinates relatif - double DeviceToLogicalXRel(int x) const; - //convert from window to virtual coordinates relatif - double DeviceToLogicalYRel(int y) const; - //convert from virtual to window coordinates - int LogicalToDeviceX(double x) const; - //convert from virtual to window coordinates - int LogicalToDeviceY(double y) const; - //convert from virtual to window coordinates relatif - int LogicalToDeviceXRel(double x) const; - //convert from virtual to window coordinates relatif - int LogicalToDeviceYRel(double y) const; - - //update in the buffer off all canvases, the area given in world coordinates - virtual void Update(wxCanvasObject* obj, double x, double y, double width, double height); - - //blit all updated areas now to the screen, else it will happen in idle time. - //Use this to support dragging for instance, becuase in such cases idle time - //will take to long. - virtual void UpdateNow(); - - //append another canvas - virtual void Append( wxCanvas* canvas ); - - //remove a canvas - virtual void Remove( wxCanvas* canvas ); - - //set the given canvas as active (for rendering, coordinate conversion etc.) - void SetActive(wxCanvas* activate); - - //get active canvas - inline wxCanvas* GetActive() {return m_active;}; - -private: - wxList m_canvaslist; - wxCanvas* m_active; -}; - -#endif - // WXCANVAS - diff --git a/contrib/include/wx/canvas/liner.h b/contrib/include/wx/canvas/liner.h deleted file mode 100644 index e543c0fc9c..0000000000 --- a/contrib/include/wx/canvas/liner.h +++ /dev/null @@ -1,58 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: liner.h -// Author: Klaas Holwerda -// Created: 1/10/2000 -// Copyright: 2000 (c) Klaas Holwerda -// Licence: wxWindows Licence -///////////////////////////////////////////////////////////////////////////// -#ifndef __WXLINER_H -#define __WXLINER_H - -#if defined(__GNUG__) && !defined(__APPLE__) - #pragma interface "liner.cpp" -#endif - - -#include "wx/geometry.h" - -enum OUTPRODUCT {R_IS_LEFT,R_IS_ON,R_IS_RIGHT}; - -// Status of a point to a wxLine -enum R_PointStatus {R_LEFT_SIDE, R_RIGHT_SIDE, R_ON_AREA, R_IN_AREA}; - -class wxLine -{ -public: - // constructors and destructor - wxLine( double x1, double y1, double x2, double y2 ); - wxLine( const wxPoint2DDouble& a, const wxPoint2DDouble& b); - ~wxLine(); - - wxPoint2DDouble GetBeginPoint(); // Get the beginpoint from a wxLine - wxPoint2DDouble GetEndPoint(); // Get the endpoint from a wxLine - bool CheckIntersect( wxLine&, double Marge); // Check if two wxLines intersects - int Intersect( wxLine&, wxPoint2DDouble& bp ,wxPoint2DDouble& ep ,double Marge) ; // Intersects two wxLines - bool Intersect( wxLine& lijn, wxPoint2DDouble& crossing); //intersect two (infinit) lines - R_PointStatus PointOnLine( const wxPoint2DDouble& a_Point, double& Distance, double Marge ); //For an infinite wxLine - R_PointStatus PointInLine( const wxPoint2DDouble& a_Point, double& Distance, double Marge ); //For a non-infinite wxLine - OUTPRODUCT OutProduct( const wxLine& two, double accur); // outproduct of two wxLines - double Calculate_Y( double X); // Caclulate Y if X is known - void Virtual_Point( wxPoint2DDouble& a_point, double distance) const; - wxLine& operator=( const wxLine&); // assignment operator - void CalculateLineParameters(); // Calculate the parameters if nessecary - void OffsetContour( const wxLine& nextline, double factor,wxPoint2DDouble& offsetpoint) const; - -private: - - int ActionOnTable1(R_PointStatus,R_PointStatus); // Function needed for Intersect - int ActionOnTable2(R_PointStatus,R_PointStatus); // Function needed for Intersect - - double m_AA; - double m_BB; - double m_CC; - wxPoint2DDouble m_a; - wxPoint2DDouble m_b; - bool m_valid_parameters; -}; - -#endif diff --git a/contrib/include/wx/canvas/polygon.h b/contrib/include/wx/canvas/polygon.h deleted file mode 100644 index a86ca8f3f9..0000000000 --- a/contrib/include/wx/canvas/polygon.h +++ /dev/null @@ -1,220 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: polygon.h -// Author: Klaas Holwerda -// Created: XX/XX/XX -// Copyright: 2000 (c) Klaas Holwerda -// Licence: wxWindows Licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef __WXPOLYGON_H__ -#define __WXPOLYGON_H__ - -#if defined(__GNUG__) && !defined(__APPLE__) - #pragma interface "polygon.cpp" -#endif - -#ifndef WX_PRECOMP - #include "wx/wx.h" -#endif - -#include "wx/matrix.h" -#include "wx/geometry.h" -#include "bbox.h" -#include "canvas.h" - -enum INOUTPOLY {OUTSIDE_POLY,INSIDE_POLY,ON_POLY}; - -//---------------------------------------------------------------------------- -// wxCanvasPolygon -//---------------------------------------------------------------------------- - -class wxCanvasPolygon: public wxCanvasObject -{ -public: - wxCanvasPolygon( int n, wxPoint2DDouble points[], bool spline = FALSE ); - ~wxCanvasPolygon(); - void SetBrush( const wxBrush& brush) { m_brush = brush; } - void SetPen( const wxPen& pen) { m_pen = pen; CalcBoundingBox(); } - - //set colour 1 - //being the background color if filling with a monochrome bitmap - //or in case of gradient filling the starting colour for the fill - void SetColour1( const wxColour& fg) { m_textfg=fg;} - //set colour 1 - //being the foreground color if filling with a monochrome bitmap - //or in case of gradient filling the ending colour for the fill - void SetColour2( const wxColour& bg) { m_textbg=bg;} - //transparent filling when bitmapbrush is monochrome - void SetTransParent(bool transp) { m_transp=transp;} - //gradient filling using lines chnging in colour from colour1 to colour2 - void SetGradient(bool gradient, const wxPen& gpen, double distance) - { m_gradient=gradient; - m_gpen=gpen; - m_gdistance=distance; - } - - double GetPosX() { return m_points[0].m_x; } - double GetPosY() { return m_points[0].m_y; } - void SetPosXY( double x, double y); - - void TransLate( double x, double y ); - void CalcBoundingBox(); - - virtual void Render(wxTransformMatrix* cworld, int clip_x, int clip_y, int clip_width, int clip_height ); - virtual void WriteSVG( wxTextOutputStream &stream ); - - wxCanvasObject* IsHitWorld( double x, double y, double margin = 0 ); - - INOUTPOLY PointInPolygon(const wxPoint2DDouble& P, double marge); - -private: - - bool MoveUp(double horline, int& index, int direction); - void DetectCriticalPoints(); - void FillPolygon(wxTransformMatrix* cworld, int clip_x, int clip_y, int clip_width, int clip_height ); - wxList m_CRlist; - wxList m_AETlist; - - - wxBrush m_brush; - wxPen m_pen; - wxColour m_textbg; - wxColour m_textfg; - - //if brush is of type bitmap with a mask fill with mask transparent - bool m_transp; - bool m_gradient; - wxPen m_gpen; - double m_gdistance; - - bool m_spline; - - int m_n; - wxPoint2DDouble* m_points; -}; - -//---------------------------------------------------------------------------- -// wxCanvasPolyline -//---------------------------------------------------------------------------- - -class wxCanvasPolyline: public wxCanvasObject -{ -public: - wxCanvasPolyline(int n, wxPoint2DDouble points[]); - ~wxCanvasPolyline(); - void SetPen( const wxPen& pen) { m_pen = pen; CalcBoundingBox(); } - - double GetPosX() { return m_points[0].m_x; } - double GetPosY() { return m_points[0].m_y; } - void SetPosXY( double x, double y); - - void TransLate( double x, double y ); - void CalcBoundingBox(); - - virtual void Render(wxTransformMatrix* cworld, int clip_x, int clip_y, int clip_width, int clip_height ); - virtual void WriteSVG( wxTextOutputStream &stream ); - - wxCanvasObject* IsHitWorld( double x, double y, double margin = 0 ); - - bool PointOnPolyline(const wxPoint2DDouble& P, double marge); - -private: - - wxPen m_pen; - - int m_n; - wxPoint2DDouble* m_points; -}; - -//---------------------------------------------------------------------------- -// wxCanvasPolygon -//---------------------------------------------------------------------------- - -class wxCanvasPolygonL: public wxCanvasObject -{ -public: - wxCanvasPolygonL(wxList* points, bool spline = FALSE); - ~wxCanvasPolygonL(); - void SetBrush( const wxBrush& brush) { m_brush = brush; } - void SetPen( const wxPen& pen) { m_pen = pen; CalcBoundingBox(); } - void SetColour1( const wxColour& fg) { m_textfg=fg;} - void SetColour2( const wxColour& bg) { m_textbg=bg;} - void SetTransParent(bool transp) { m_transp=transp;} - - double GetPosX(); - double GetPosY(); - void SetPosXY( double x, double y); - void TransLate( double x, double y ); - void CalcBoundingBox(); - - virtual void Render(wxTransformMatrix* cworld, int clip_x, int clip_y, int clip_width, int clip_height ); - virtual void WriteSVG( wxTextOutputStream &stream ); - - wxCanvasObject* IsHitWorld( double x, double y, double margin = 0 ); - - INOUTPOLY PointInPolygon(const wxPoint2DDouble& P, double marge); - -private: - - wxBrush m_brush; - wxPen m_pen; - bool m_spline; - wxColour m_textbg; - wxColour m_textfg; - //if brush is of type bitmap with a mask fill with mask transparent - bool m_transp; - - wxList* m_lpoints; -}; - -//---------------------------------------------------------------------------- -// wxCanvasPolyline -//---------------------------------------------------------------------------- - -class wxCanvasPolylineL: public wxCanvasObject -{ -public: - wxCanvasPolylineL(wxList* points, bool spline ); - ~wxCanvasPolylineL(); - void SetPen( const wxPen& pen) { m_pen = pen; CalcBoundingBox(); } - - double GetPosX(); - double GetPosY(); - void SetPosXY( double x, double y); - - void TransLate( double x, double y ); - void CalcBoundingBox(); - - virtual void Render(wxTransformMatrix* cworld, int clip_x, int clip_y, int clip_width, int clip_height ); - virtual void WriteSVG( wxTextOutputStream &stream ); - - wxCanvasObject* IsHitWorld( double x, double y, double margin = 0 ); - - bool PointOnPolyline(const wxPoint2DDouble& P, double marge); - -private: - wxPen m_pen; - bool m_spline; - - wxList* m_lpoints; -}; - -//active edge table -class wxAET -{ -public: - inline void CalculateLineParameters( const wxPoint2DDouble& p1 , const wxPoint2DDouble& p2 ); - inline void CalculateXs( double y ); - - //line paramters - bool m_horizontal; - double m_BdivA; - double m_CdivA; - int m_index; - int m_direction; - //intersection point with scanline; - double m_xs; -}; - -#endif - diff --git a/contrib/samples/canvas/Makefile.in b/contrib/samples/canvas/Makefile.in deleted file mode 100644 index 8eb2e333c7..0000000000 --- a/contrib/samples/canvas/Makefile.in +++ /dev/null @@ -1,10 +0,0 @@ -# $Id$ - -CONTRIB_SAMPLES=test simple - -all: - @for d in $(CONTRIB_SAMPLES); do (cd $$d && $(MAKE)); done - -clean: - @for d in $(CONTRIB_SAMPLES); do (cd $$d && $(MAKE) clean); done - diff --git a/contrib/samples/canvas/simple/Makefile.in b/contrib/samples/canvas/simple/Makefile.in deleted file mode 100644 index b92c3904af..0000000000 --- a/contrib/samples/canvas/simple/Makefile.in +++ /dev/null @@ -1,23 +0,0 @@ -# -# File: Makefile.in -# Author: Julian Smart -# Created: 2000 -# Updated: -# Copyright: (c) 2000 Julian Smart -# -# "%W% %G%" -# -# Makefile for the multicell example (UNIX). - -top_srcdir = @top_srcdir@/.. -top_builddir = ../../../.. -program_dir = contrib/samples/canvas/simple - -PROGRAM=simple - -OBJECTS=simple.o - -APPEXTRALIBS=$(top_builddir)/lib/lib@WX_LIBRARY_BASENAME@_canvas-@WX_RELEASE@.@WX_TARGET_LIBRARY_TYPE@ -APPEXTRADEFS=-I$(top_srcdir)/contrib/include - -include $(top_builddir)/src/makeprog.env diff --git a/contrib/samples/canvas/simple/SimpleVC.dsp b/contrib/samples/canvas/simple/SimpleVC.dsp deleted file mode 100644 index cb0cb67f39..0000000000 --- a/contrib/samples/canvas/simple/SimpleVC.dsp +++ /dev/null @@ -1,176 +0,0 @@ -# Microsoft Developer Studio Project File - Name="SimpleVC" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Application" 0x0101 - -CFG=SimpleVC - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "SimpleVC.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "SimpleVC.mak" CFG="SimpleVC - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "SimpleVC - Win32 Release" (based on "Win32 (x86) Application") -!MESSAGE "SimpleVC - Win32 Debug" (based on "Win32 (x86) Application") -!MESSAGE "SimpleVC - Win32 Debug DLL" (based on "Win32 (x86) Application") -!MESSAGE "SimpleVC - Win32 Release DLL" (based on "Win32 (x86) Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -MTL=midl.exe -RSC=rc.exe - -!IF "$(CFG)" == "SimpleVC - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c -# ADD CPP /nologo /MD /W3 /GX /O1 /Ob2 /I "../../../../include" /I "../../../../contrib/include" /I "../../../../lib/msw" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "__WINDOWS__" /D "__WXMSW__" /D "__WIN95__" /D "__WIN32__" /D WINVER=0x0400 /D "STRICT" /FD /c -# SUBTRACT CPP /YX -# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 -# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 -# ADD BASE RSC /l 0x809 /d "NDEBUG" -# ADD RSC /l 0x809 /i "../../../include" /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib winmm.lib /nologo /subsystem:windows /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib comctl32.lib rpcrt4.lib wsock32.lib winmm.lib wxmsw.lib png.lib zlib.lib jpeg.lib tiff.lib regex.lib canvas.lib /nologo /subsystem:windows /machine:I386 /nodefaultlib:"libc.lib" /nodefaultlib:"libci.lib" /nodefaultlib:"msvcrtd.lib" /out:"Release/simple.exe" /libpath:"../../../../lib" - -!ELSEIF "$(CFG)" == "SimpleVC - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c -# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "../../../../include" /I "../../../../contrib/include" /I "../../../../lib/mswd" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "__WINDOWS__" /D "__WXMSW__" /D DEBUG=1 /D "__WXDEBUG__" /D "__WIN95__" /D "__WIN32__" /D WINVER=0x0400 /D "STRICT" /FD /c -# SUBTRACT CPP /YX /Yc /Yu -# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 -# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 -# ADD BASE RSC /l 0x809 /d "_DEBUG" -# ADD RSC /l 0x809 /i "../../../include" /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib winmm.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib comctl32.lib rpcrt4.lib wsock32.lib winmm.lib wxmswd.lib pngd.lib zlibd.lib jpegd.lib tiffd.lib regexd.lib canvasd.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd.lib" /nodefaultlib:"libcid.lib" /nodefaultlib:"msvcrt.lib" /out:"Debug/simple.exe" /pdbtype:sept /libpath:"../../../../lib" - -!ELSEIF "$(CFG)" == "SimpleVC - Win32 Debug DLL" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "DebugDLL" -# PROP BASE Intermediate_Dir "DebugDLL" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "DebugDLL" -# PROP Intermediate_Dir "DebugDLL" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c -# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "../../../../include" /I "../../../../contrib/include" /I "../../../../lib/mswdlld" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "__WINDOWS__" /D "__WXMSW__" /D DEBUG=1 /D "__WXDEBUG__" /D "__WIN95__" /D "__WIN32__" /D WINVER=0x0400 /D "STRICT" /D WXUSINGDLL=1 /Yu"wx/wxprec.h" /FD /c -# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 -# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 -# ADD BASE RSC /l 0x809 /d "_DEBUG" -# ADD RSC /l 0x809 /i "../../../include" /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib winmm.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib comctl32.lib rpcrt4.lib wsock32.lib winmm.lib wxmsw250d.lib canvasd.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd.lib" /nodefaultlib:"libcid.lib" /out:"DebugDLL/simple.exe" /pdbtype:sept /libpath:"../../../../lib" - -!ELSEIF "$(CFG)" == "SimpleVC - Win32 Release DLL" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "ReleaseDLL" -# PROP BASE Intermediate_Dir "ReleaseDLL" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "ReleaseDLL" -# PROP Intermediate_Dir "ReleaseDLL" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c -# ADD CPP /nologo /MD /W3 /GX /O1 /Ob2 /I "../../../../include" /I "../../../../contrib/include" /I "../../../../lib/mswdll" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "__WINDOWS__" /D "__WXMSW__" /D "__WIN95__" /D "__WIN32__" /D WINVER=0x0400 /D "STRICT" /D WXUSINGDLL=1 /FD /c -# SUBTRACT CPP /YX -# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 -# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 -# ADD BASE RSC /l 0x809 /d "NDEBUG" -# ADD RSC /l 0x809 /i "../../../include" /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib winmm.lib /nologo /subsystem:windows /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib comctl32.lib rpcrt4.lib wsock32.lib winmm.lib wxmsw250.lib canvas.lib /nologo /subsystem:windows /machine:I386 /nodefaultlib:"libc.lib" /nodefaultlib:"libci.lib" /out:"ReleaseDLL/simple.exe" /libpath:"../../../../lib" - -!ENDIF - -# Begin Target - -# Name "SimpleVC - Win32 Release" -# Name "SimpleVC - Win32 Debug" -# Name "SimpleVC - Win32 Debug DLL" -# Name "SimpleVC - Win32 Release DLL" -# Begin Source File - -SOURCE=.\simple.cpp - -!IF "$(CFG)" == "SimpleVC - Win32 Release" - -!ELSEIF "$(CFG)" == "SimpleVC - Win32 Debug" - -# SUBTRACT CPP /YX /Yc /Yu - -!ELSEIF "$(CFG)" == "SimpleVC - Win32 Debug DLL" - -# SUBTRACT CPP /YX /Yc /Yu - -!ELSEIF "$(CFG)" == "SimpleVC - Win32 Release DLL" - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=.\simple.rc -# ADD BASE RSC /l 0x809 -# ADD RSC /l 0x809 /i "../../../../include" /i "..\..\include" -# SUBTRACT RSC /i "../../../include" -# End Source File -# End Target -# End Project diff --git a/contrib/samples/canvas/simple/SimpleVC.dsw b/contrib/samples/canvas/simple/SimpleVC.dsw deleted file mode 100644 index 292e7d3bcc..0000000000 --- a/contrib/samples/canvas/simple/SimpleVC.dsw +++ /dev/null @@ -1,29 +0,0 @@ -Microsoft Developer Studio Workspace File, Format Version 6.00 -# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! - -############################################################################### - -Project: "SimpleVC"=.\SimpleVC.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Global: - -Package=<5> -{{{ -}}} - -Package=<3> -{{{ -}}} - -############################################################################### - diff --git a/contrib/samples/canvas/simple/makefile.b32 b/contrib/samples/canvas/simple/makefile.b32 deleted file mode 100644 index cf1a3c52fb..0000000000 --- a/contrib/samples/canvas/simple/makefile.b32 +++ /dev/null @@ -1,18 +0,0 @@ -# -# File: makefile.b32 -# Author: Julian Smart -# Created: 1999 -# Updated: -# Copyright: -# -# Makefile : Builds sample for 32-bit BC++ - -WXDIR = $(WXWIN) - -TARGET=simple - -EXTRALIBS=$(WXDIR)\lib\canvas.lib -OBJECTS = $(TARGET).obj - -!include $(WXDIR)\src\makeprog.b32 - diff --git a/contrib/samples/canvas/simple/makefile.g95 b/contrib/samples/canvas/simple/makefile.g95 deleted file mode 100644 index cfdeb5417c..0000000000 --- a/contrib/samples/canvas/simple/makefile.g95 +++ /dev/null @@ -1,14 +0,0 @@ -# File: makefile.g95 for Plot demo -# Author: Julian Smart -# Created: 2001-06-12 -# Updated: - -WXDIR = ../../../.. - -TARGET = simple -OBJECTS = $(TARGET).o -EXTRAINC = -I$(WXDIR)/contrib/include -EXTRALIBS = -lcanvas - -include $(WXDIR)/src/makeprog.g95 - diff --git a/contrib/samples/canvas/simple/makefile.vc b/contrib/samples/canvas/simple/makefile.vc deleted file mode 100644 index cec2a51dd6..0000000000 --- a/contrib/samples/canvas/simple/makefile.vc +++ /dev/null @@ -1,14 +0,0 @@ -# File: makefile.vc for Plot sample -# Author: Julian Smart -# Created: 2001-06-12 -# Updated: - -WXDIR = $(WXWIN) -PROGRAM = simple - -OBJECTS = $(PROGRAM).obj -EXTRALIBS = $(WXDIR)\lib\canvas$(LIBEXT).lib -EXTRAINC = -I$(WXDIR)\contrib\include - -!include $(WXDIR)\src\makeprog.vc - diff --git a/contrib/samples/canvas/simple/mondrian.ico b/contrib/samples/canvas/simple/mondrian.ico deleted file mode 100644 index 2310c5d275a87af295d5ea8dc79ea417a5e74c53..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 766 zcmZQzU<5)11px*Sc)`TLAO@s0fLH;D9e|jTfdxnc0ZSetScrollbars( 10, 10, 40, 40 ); - - // The wxCanvasAdmin need to know about all Admin wxCanvas objects. - m_admin->Append( canvas ); - - // One wxCanvas is the active one (current rendering and current - // world coordinates). - m_admin->SetActive( canvas ); - - // One object group is the root in every canvas. - wxCanvasObjectGroup *root = new wxCanvasObjectGroup(0,0); - root->DeleteContents( TRUE ); - - // Bunch of rects and images. - wxBitmap bitmap( smile_xpm ); - wxImage image( bitmap.ConvertToImage() ); - - m_smile1 = new wxCanvasImage( image, 0,70,32,32 ); - root->Append( m_smile1 ); - - wxCanvasCircle *circ = new wxCanvasCircle( 170,70,50 ); - circ->SetBrush( *wxBLUE_BRUSH ); - root->Append( circ ); - - int i; - for (i = 10; i < 300; i+=10) - { - wxCanvasRect *r = new wxCanvasRect( i,50,3,140 ); - r->SetBrush( *wxRED_BRUSH ); - root->Append( r ); - } - - m_smile2 = new wxCanvasImage( image, 0,110,32,32 ); - root->Append( m_smile2 ); - - for (i = 15; i < 300; i+=10) - { - wxCanvasRect *r = new wxCanvasRect( i,50,3,140 ); - r->SetBrush( *wxRED_BRUSH ); - root->Append( r ); - } - - // This will call all object and children recursivly so - // all know what their wxCanvasAdmin is. Call at the end. - root->SetAdmin( m_admin ); - - // One object group is the root object. - canvas->SetRoot( root ); - - m_timer = new wxTimer( this ); - m_timer->Start( 80, FALSE ); -} - -MyFrame::~MyFrame() -{ - delete m_timer; -} - -void MyFrame::CreateMyMenuBar() -{ - wxMenu *file_menu = new wxMenu; - file_menu->Append( ID_QUIT, "Quit...", "Quit program" ); - - wxMenuBar *menu_bar = new wxMenuBar(); - menu_bar->Append( file_menu, "File" ); - - SetMenuBar( menu_bar ); -} - -// WDR: handler implementations for MyFrame - -void MyFrame::OnQuit( wxCommandEvent &event ) -{ - Close( TRUE ); -} - -void MyFrame::OnCloseWindow( wxCloseEvent &event ) -{ - // if ! saved changes -> return - - Destroy(); -} - -void MyFrame::OnTimer( wxTimerEvent &event ) -{ - m_smile1->MoveRelative( 1, 0); - m_smile2->MoveRelative( 1, 0); - - wxWakeUpIdle(); -} - -//------------------------------------------------------------------------------ -// MyApp -//------------------------------------------------------------------------------ - -IMPLEMENT_APP(MyApp) - -MyApp::MyApp() -{ -} - -bool MyApp::OnInit() -{ - MyFrame *frame = new MyFrame( NULL, -1, "SuperApp", wxPoint(20,20), wxSize(500,340) ); - frame->Show( TRUE ); - - return TRUE; -} - -int MyApp::OnExit() -{ - return 0; -} - diff --git a/contrib/samples/canvas/simple/simple.h b/contrib/samples/canvas/simple/simple.h deleted file mode 100644 index c3671154e7..0000000000 --- a/contrib/samples/canvas/simple/simple.h +++ /dev/null @@ -1,80 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: simple.h -// Author: XX -// Created: XX/XX/XX -// Copyright: -///////////////////////////////////////////////////////////////////////////// - -#ifndef __simple_H__ -#define __simple_H__ - -#if defined(__GNUG__) && !defined(__APPLE__) - #pragma interface "simple.cpp" -#endif - -// Include wxWindows' headers - -#ifndef WX_PRECOMP - #include -#endif - -#include "wx/canvas/canvas.h" -#include "wx/timer.h" - -//---------------------------------------------------------------------------- -// constants -//---------------------------------------------------------------------------- - -#define ID_QUIT 101 - -// WDR: class declarations - -//---------------------------------------------------------------------------- -// MyFrame -//---------------------------------------------------------------------------- - -class MyFrame: public wxFrame -{ -public: - // constructors and destructors - MyFrame( wxWindow *parent, wxWindowID id, const wxString &title, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxDEFAULT_FRAME_STYLE ); - ~MyFrame(); - -private: - // WDR: method declarations for MyFrame - void CreateMyMenuBar(); - -private: - // WDR: member variable declarations for MyFrame - wxCanvasImage *m_smile1; - wxCanvasImage *m_smile2; - wxCanvasAdmin *m_admin; - wxTimer *m_timer; - -private: - // WDR: handler declarations for MyFrame - void OnQuit( wxCommandEvent &event ); - void OnCloseWindow( wxCloseEvent &event ); - void OnTimer( wxTimerEvent &event ); - -private: - DECLARE_EVENT_TABLE() -}; - -//---------------------------------------------------------------------------- -// MyApp -//---------------------------------------------------------------------------- - -class MyApp: public wxApp -{ -public: - MyApp(); - - virtual bool OnInit(); - virtual int OnExit(); -}; - -#endif diff --git a/contrib/samples/canvas/simple/simple.rc b/contrib/samples/canvas/simple/simple.rc deleted file mode 100644 index 878f3352fb..0000000000 --- a/contrib/samples/canvas/simple/simple.rc +++ /dev/null @@ -1,3 +0,0 @@ -#include "wx/msw/wx.rc" - - diff --git a/contrib/samples/canvas/simple/smile.xpm b/contrib/samples/canvas/simple/smile.xpm deleted file mode 100644 index 4773967aa8..0000000000 --- a/contrib/samples/canvas/simple/smile.xpm +++ /dev/null @@ -1,42 +0,0 @@ -/* XPM */ -static char * smile_xpm[] = { -/* width height ncolors chars_per_pixel */ -"32 32 4 1", -/* colors */ -" s None c None", -". c #000000", -"+ c #ff0000", -"@ c #ffff00", -/* pixels */ -" ........ ", -" ...@@@@@@@@... ", -" ..@@@@@@@@@@@@@@.. ", -" ..@@@@@@@@@@@@@@@@.. ", -" .@@@@@@@@@@@@@@@@@@@@. ", -" .@@@@@@@@@@@@@@@@@@@@@@. ", -" .@@@@@@@@@@@@@@@@@@@@@@@@. ", -" ..@@@@@@@@@@@@@@@@@@@@@@@@.. ", -" .@@@@@@@@ @@@@@@ @@@@@@@@. ", -" .@@@@@@@@ @@@@ @@@@@@@@. ", -" .@@@@@@@@ @@@@ @@@@@@@@. ", -" .@@@@@@@@ @@@@ @@@@@@@@. ", -".@@@@@@@@@ @@@@ @@@@@@@@@.", -".@@@@@@@@@ @@@@ @@@@@@@@@.", -".@@@@@@@@@@ @@@@@@ @@@@@@@@@@.", -".@@@@@@@.@@@@@@@@@@@@@@.@@@@@@@.", -".@@@@@@@.@@@@@@@@@@@@@@.@@@@@@@.", -".@@@@@@.@@@@@@@@@@@@@@@@.@@@@@@.", -".@@@....@@@@@@@@@@@@@@@@....@@@.", -".@@@@@@@.@@@@@@@@@@@@@@.@@@@@@@.", -" .@@@@@@@.@@@@@@@@@@@@.@@@@@@@. ", -" .@@@@@@@..@@@@@@@@@@..@@@@@@@. ", -" .@@@@@@@@...@@@@@@...@@@@@@@@. ", -" .@@@@@@@@.+......+.@@@@@@@@. ", -" ..@@@@@@@@.++++++.@@@@@@@@.. ", -" .@@@@@@@@@.++++.@@@@@@@@@. ", -" .@@@@@@@@@....@@@@@@@@@. ", -" .@@@@@@@@@@@@@@@@@@@@. ", -" ..@@@@@@@@@@@@@@@@.. ", -" ..@@@@@@@@@@@@@@.. ", -" ...@@@@@@@@... ", -" ........ "}; diff --git a/contrib/samples/canvas/test/Makefile.in b/contrib/samples/canvas/test/Makefile.in deleted file mode 100644 index 081537852d..0000000000 --- a/contrib/samples/canvas/test/Makefile.in +++ /dev/null @@ -1,25 +0,0 @@ -# -# File: Makefile.in -# Author: Julian Smart -# Created: 2000 -# Updated: -# Copyright: (c) 2000 Julian Smart -# -# "%W% %G%" -# -# Makefile for the multicell example (UNIX). - -top_srcdir = @top_srcdir@/.. -top_builddir = ../../../.. -program_dir = contrib/samples/canvas/test - -PROGRAM=test - -OBJECTS=test.o - -DATAFILES = pat4.bmp pat36.bmp - -APPEXTRALIBS=$(top_builddir)/lib/lib@WX_LIBRARY_BASENAME@_canvas-@WX_RELEASE@.@WX_TARGET_LIBRARY_TYPE@ -APPEXTRADEFS=-I$(top_srcdir)/contrib/include - -include $(top_builddir)/src/makeprog.env diff --git a/contrib/samples/canvas/test/TestVC.dsp b/contrib/samples/canvas/test/TestVC.dsp deleted file mode 100644 index e0221cfaff..0000000000 --- a/contrib/samples/canvas/test/TestVC.dsp +++ /dev/null @@ -1,175 +0,0 @@ -# Microsoft Developer Studio Project File - Name="TestVC" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Application" 0x0101 - -CFG=TestVC - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "TestVC.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "TestVC.mak" CFG="TestVC - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "TestVC - Win32 Release" (based on "Win32 (x86) Application") -!MESSAGE "TestVC - Win32 Debug" (based on "Win32 (x86) Application") -!MESSAGE "TestVC - Win32 Debug DLL" (based on "Win32 (x86) Application") -!MESSAGE "TestVC - Win32 Release DLL" (based on "Win32 (x86) Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -MTL=midl.exe -RSC=rc.exe - -!IF "$(CFG)" == "TestVC - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c -# ADD CPP /nologo /MD /W3 /GX /O1 /Ob2 /I "../../../../include" /I "../../../../contrib/include" /I "../../../../lib/msw" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "__WINDOWS__" /D "__WXMSW__" /D "__WIN95__" /D "__WIN32__" /D WINVER=0x0400 /D "STRICT" /FD /c -# SUBTRACT CPP /YX -# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 -# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 -# ADD BASE RSC /l 0x809 /d "NDEBUG" -# ADD RSC /l 0x809 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib winmm.lib /nologo /subsystem:windows /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib comctl32.lib rpcrt4.lib wsock32.lib winmm.lib wxmsw.lib png.lib zlib.lib jpeg.lib tiff.lib regex.lib canvas.lib /nologo /subsystem:windows /machine:I386 /nodefaultlib:"libc.lib" /nodefaultlib:"libci.lib" /nodefaultlib:"msvcrtd.lib" /out:"Release/test.exe" /libpath:"../../../../lib" - -!ELSEIF "$(CFG)" == "TestVC - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c -# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "../../../../include" /I "../../../../contrib/include" /I "../../../../lib/mswd" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "__WINDOWS__" /D "__WXMSW__" /D DEBUG=1 /D "__WXDEBUG__" /D "__WIN95__" /D "__WIN32__" /D WINVER=0x0400 /D "STRICT" /FD /c -# SUBTRACT CPP /YX /Yc /Yu -# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 -# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 -# ADD BASE RSC /l 0x809 /d "_DEBUG" -# ADD RSC /l 0x809 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib winmm.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib comctl32.lib rpcrt4.lib wsock32.lib winmm.lib wxmswd.lib pngd.lib zlibd.lib jpegd.lib tiffd.lib regexd.lib canvasd.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd.lib" /nodefaultlib:"libcid.lib" /nodefaultlib:"msvcrt.lib" /out:"Debug/test.exe" /pdbtype:sept /libpath:"../../../../lib" - -!ELSEIF "$(CFG)" == "TestVC - Win32 Debug DLL" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "DebugDLL" -# PROP BASE Intermediate_Dir "DebugDLL" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "DebugDLL" -# PROP Intermediate_Dir "DebugDLL" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c -# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "../../../../include" /I "../../../../contrib/include" /I "../../../../lib/mswdlld" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "__WINDOWS__" /D "__WXMSW__" /D DEBUG=1 /D "__WXDEBUG__" /D "__WIN95__" /D "__WIN32__" /D WINVER=0x0400 /D "STRICT" /D WXUSINGDLL=1 /Yu"wx/wxprec.h" /FD /c -# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 -# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 -# ADD BASE RSC /l 0x809 /d "_DEBUG" -# ADD RSC /l 0x809 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib winmm.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib comctl32.lib rpcrt4.lib wsock32.lib winmm.lib wxmsw250d.lib canvasd.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd.lib" /nodefaultlib:"libcid.lib" /out:"DebugDLL/test.exe" /pdbtype:sept /libpath:"../../../../lib" - -!ELSEIF "$(CFG)" == "TestVC - Win32 Release DLL" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "ReleaseDLL" -# PROP BASE Intermediate_Dir "ReleaseDLL" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "ReleaseDLL" -# PROP Intermediate_Dir "ReleaseDLL" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c -# ADD CPP /nologo /MD /W3 /GX /O1 /Ob2 /I "../../../../include" /I "../../../../contrib/include" /I "../../../../lib/mswdll" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "__WINDOWS__" /D "__WXMSW__" /D "__WIN95__" /D "__WIN32__" /D WINVER=0x0400 /D "STRICT" /D WXUSINGDLL=1 /FD /c -# SUBTRACT CPP /YX -# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 -# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 -# ADD BASE RSC /l 0x809 /d "NDEBUG" -# ADD RSC /l 0x809 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib winmm.lib /nologo /subsystem:windows /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib comctl32.lib rpcrt4.lib wsock32.lib winmm.lib wxmsw250.lib canvas.lib /nologo /subsystem:windows /machine:I386 /nodefaultlib:"libc.lib" /nodefaultlib:"libci.lib" /out:"ReleaseDLL/test.exe" /libpath:"../../../../lib" - -!ENDIF - -# Begin Target - -# Name "TestVC - Win32 Release" -# Name "TestVC - Win32 Debug" -# Name "TestVC - Win32 Debug DLL" -# Name "TestVC - Win32 Release DLL" -# Begin Source File - -SOURCE=.\test.cpp - -!IF "$(CFG)" == "TestVC - Win32 Release" - -!ELSEIF "$(CFG)" == "TestVC - Win32 Debug" - -# SUBTRACT CPP /YX /Yc /Yu - -!ELSEIF "$(CFG)" == "TestVC - Win32 Debug DLL" - -# SUBTRACT CPP /YX /Yc /Yu - -!ELSEIF "$(CFG)" == "TestVC - Win32 Release DLL" - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=.\test.rc -# ADD BASE RSC /l 0x809 -# ADD RSC /l 0x809 /i "../../../../include" -# End Source File -# End Target -# End Project diff --git a/contrib/samples/canvas/test/TestVC.dsw b/contrib/samples/canvas/test/TestVC.dsw deleted file mode 100644 index a6f2c1c809..0000000000 --- a/contrib/samples/canvas/test/TestVC.dsw +++ /dev/null @@ -1,29 +0,0 @@ -Microsoft Developer Studio Workspace File, Format Version 6.00 -# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! - -############################################################################### - -Project: "TestVC"=.\TestVC.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Global: - -Package=<5> -{{{ -}}} - -Package=<3> -{{{ -}}} - -############################################################################### - diff --git a/contrib/samples/canvas/test/makefile.b32 b/contrib/samples/canvas/test/makefile.b32 deleted file mode 100644 index f02102e2a1..0000000000 --- a/contrib/samples/canvas/test/makefile.b32 +++ /dev/null @@ -1,18 +0,0 @@ -# -# File: makefile.b32 -# Author: Julian Smart -# Created: 1999 -# Updated: -# Copyright: -# -# Makefile : Builds sample for 32-bit BC++ - -WXDIR = $(WXWIN) - -TARGET=test - -EXTRALIBS=$(WXDIR)\lib\canvas.lib -OBJECTS = $(TARGET).obj - -!include $(WXDIR)\src\makeprog.b32 - diff --git a/contrib/samples/canvas/test/makefile.g95 b/contrib/samples/canvas/test/makefile.g95 deleted file mode 100644 index 3d389e0ce9..0000000000 --- a/contrib/samples/canvas/test/makefile.g95 +++ /dev/null @@ -1,14 +0,0 @@ -# File: makefile.g95 for Plot demo -# Author: Julian Smart -# Created: 2001-06-12 -# Updated: - -WXDIR = ../../../.. - -TARGET = test -OBJECTS = $(TARGET).o -EXTRAINC = -I$(WXDIR)/contrib/include -EXTRALIBS = -lcanvas - -include $(WXDIR)/src/makeprog.g95 - diff --git a/contrib/samples/canvas/test/makefile.vc b/contrib/samples/canvas/test/makefile.vc deleted file mode 100644 index 86332a918c..0000000000 --- a/contrib/samples/canvas/test/makefile.vc +++ /dev/null @@ -1,14 +0,0 @@ -# File: makefile.vc for Plot sample -# Author: Julian Smart -# Created: 2001-06-12 -# Updated: - -WXDIR = $(WXWIN) -PROGRAM = test - -OBJECTS = $(PROGRAM).obj -EXTRALIBS = $(WXDIR)\lib\canvas$(LIBEXT).lib -EXTRAINC = -I$(WXDIR)\contrib\include - -!include $(WXDIR)\src\makeprog.vc - diff --git a/contrib/samples/canvas/test/pat36.bmp b/contrib/samples/canvas/test/pat36.bmp deleted file mode 100644 index 861248a50a5ca7190fce9734c5b1ec559245417e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 190 zcmYkzu?@mN429umQc&IqN68e4M9)mzWavf-8>CEu^7u_q#FIYTvh3UasXZg@ipx(Z zn56ctdpXfk#&*iQ(9!IT-8<}cz!}wED(mW5le->noa8&UKMV7Wj&=ynhANe!a8bc@ F@CTb}O3?rS diff --git a/contrib/samples/canvas/test/pat4.bmp b/contrib/samples/canvas/test/pat4.bmp deleted file mode 100644 index 7e5fe5b2c2a20d2c5e7327fe310b7200305ac5c1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 630 zcmb`EK@P$&3FzqsaDv*KhgezcAJ>31{R{; Nk^jfXL+{^L4_?dnE_(m~ diff --git a/contrib/samples/canvas/test/smile.xpm b/contrib/samples/canvas/test/smile.xpm deleted file mode 100644 index 4773967aa8..0000000000 --- a/contrib/samples/canvas/test/smile.xpm +++ /dev/null @@ -1,42 +0,0 @@ -/* XPM */ -static char * smile_xpm[] = { -/* width height ncolors chars_per_pixel */ -"32 32 4 1", -/* colors */ -" s None c None", -". c #000000", -"+ c #ff0000", -"@ c #ffff00", -/* pixels */ -" ........ ", -" ...@@@@@@@@... ", -" ..@@@@@@@@@@@@@@.. ", -" ..@@@@@@@@@@@@@@@@.. ", -" .@@@@@@@@@@@@@@@@@@@@. ", -" .@@@@@@@@@@@@@@@@@@@@@@. ", -" .@@@@@@@@@@@@@@@@@@@@@@@@. ", -" ..@@@@@@@@@@@@@@@@@@@@@@@@.. ", -" .@@@@@@@@ @@@@@@ @@@@@@@@. ", -" .@@@@@@@@ @@@@ @@@@@@@@. ", -" .@@@@@@@@ @@@@ @@@@@@@@. ", -" .@@@@@@@@ @@@@ @@@@@@@@. ", -".@@@@@@@@@ @@@@ @@@@@@@@@.", -".@@@@@@@@@ @@@@ @@@@@@@@@.", -".@@@@@@@@@@ @@@@@@ @@@@@@@@@@.", -".@@@@@@@.@@@@@@@@@@@@@@.@@@@@@@.", -".@@@@@@@.@@@@@@@@@@@@@@.@@@@@@@.", -".@@@@@@.@@@@@@@@@@@@@@@@.@@@@@@.", -".@@@....@@@@@@@@@@@@@@@@....@@@.", -".@@@@@@@.@@@@@@@@@@@@@@.@@@@@@@.", -" .@@@@@@@.@@@@@@@@@@@@.@@@@@@@. ", -" .@@@@@@@..@@@@@@@@@@..@@@@@@@. ", -" .@@@@@@@@...@@@@@@...@@@@@@@@. ", -" .@@@@@@@@.+......+.@@@@@@@@. ", -" ..@@@@@@@@.++++++.@@@@@@@@.. ", -" .@@@@@@@@@.++++.@@@@@@@@@. ", -" .@@@@@@@@@....@@@@@@@@@. ", -" .@@@@@@@@@@@@@@@@@@@@. ", -" ..@@@@@@@@@@@@@@@@.. ", -" ..@@@@@@@@@@@@@@.. ", -" ...@@@@@@@@... ", -" ........ "}; diff --git a/contrib/samples/canvas/test/test.cpp b/contrib/samples/canvas/test/test.cpp deleted file mode 100644 index ac52ef0f9f..0000000000 --- a/contrib/samples/canvas/test/test.cpp +++ /dev/null @@ -1,747 +0,0 @@ -/* - * Program: canvas - * - * Author: Robert Roebling - * - * Copyright: (C) 1998, Robert Roebling - * - */ - -#ifdef __GNUG__ - #pragma implementation "test.cpp" -#endif - -// For compilers that support precompilation -#include "wx/wxprec.h" - -#ifdef __BORLANDC__ - #pragma hdrstop -#endif - -#include "test.h" -#include "smile.xpm" - -//----------------------------------------------------- -// class MywxCanvasObjectRef -//----------------------------------------------------- - -BEGIN_EVENT_TABLE(MywxCanvasObjectRef,wxCanvasObjectRef) - EVT_MOUSE_EVENTS( MywxCanvasObjectRef::OnMouseEvent ) -END_EVENT_TABLE() - -IMPLEMENT_DYNAMIC_CLASS(MywxCanvasObjectRef, wxCanvasObjectRef) - -MywxCanvasObjectRef::MywxCanvasObjectRef(double x, double y,wxCanvasObjectGroup* group) - :wxCanvasObjectRef(x,y,group) -{ -} - -MywxCanvasObjectRef::MywxCanvasObjectRef() - :wxCanvasObjectRef(0,0,NULL) -{ -} - -MywxCanvasObjectRef::~MywxCanvasObjectRef() -{ -} - -void MywxCanvasObjectRef::OnMouseEvent(wxMouseEvent &event) -{ - if (!m_dragable) - { - event.Skip(); - return; - } - - static double xprev; - static double yprev; - - //new position of the mouse relative within the object - double x = m_admin->DeviceToLogicalX(event.GetX()); - double y = m_admin->DeviceToLogicalY(event.GetY()); - - if (event.LeftDown()) - { - CaptureMouse(); - if (m_dragmode != wxDRAG_REDRAW) - DragStart(); - } - else if (event.LeftUp()) - { - ReleaseMouse(); - if (m_dragmode != wxDRAG_REDRAW) - DragEnd(); - } - else if (IsCapturedMouse()) - { - if (m_dragmode != wxDRAG_REDRAW) - DragRelative(x-xprev,y-yprev); - else - MoveRelative(x-xprev,y-yprev); - m_admin->UpdateNow(); - } - xprev=x; - yprev=y; - //well do something extra - if (IsCapturedMouse()) - m_admin->GetActive()->SetCursor(*wxHOURGLASS_CURSOR); - else - m_admin->GetActive()->SetCursor(*wxSTANDARD_CURSOR); -} - -//--------------------------------------------------- -// class MyEventHandler -//--------------------------------------------------- - -BEGIN_EVENT_TABLE(MyEventHandler,wxEvtHandler) - EVT_MOUSE_EVENTS( MyEventHandler::OnMouseEvent ) -END_EVENT_TABLE() - -MyEventHandler::MyEventHandler() -{ -} - -void MyEventHandler::OnMouseEvent(wxMouseEvent &event) -{ - wxCanvasObject* obj=(wxCanvasObject*)event.GetEventObject(); - - if (!obj->GetDraggable()) - return; - - static double xprev; - static double yprev; - - wxCanvasAdmin* adm=obj->GetAdmin(); - - //new position of the mouse relative within the object - double x = adm->DeviceToLogicalX(event.GetX()); - double y = adm->DeviceToLogicalY(event.GetY()); - - if (event.LeftDown()) - { - obj->CaptureMouse(); - if (obj->GetDragMode() != wxDRAG_REDRAW) - obj->DragStart(); - } - else if (event.LeftUp()) - { - obj->ReleaseMouse(); - if (obj->GetDragMode() != wxDRAG_REDRAW) - obj->DragEnd(); - } - else if (obj->IsCapturedMouse()) - { - if (obj->GetDragMode() != wxDRAG_REDRAW) - obj->DragRelative(x-xprev,y-yprev); - else - obj->MoveRelative(x-xprev,y-yprev); - adm->UpdateNow(); - } - xprev=x; - yprev=y; - //well do something extra - if (obj->IsCapturedMouse()) - obj->GetAdmin()->GetActive()->SetCursor(*wxHOURGLASS_CURSOR); - else - obj->GetAdmin()->GetActive()->SetCursor(*wxSTANDARD_CURSOR); -} - -//------------------------------------------------ -// class MyFrame -//------------------------------------------------ - -class MyApp; -class MyCanvas; - -BEGIN_EVENT_TABLE(MyFrame, wxFrame) - EVT_MENU(SPLIT_VERTICAL, MyFrame::SplitVertical) - EVT_MENU(SPLIT_HORIZONTAL, MyFrame::SplitHorizontal) - EVT_MENU(SPLIT_UNSPLIT, MyFrame::Unsplit) - EVT_MENU(SPLIT_QUIT, MyFrame::Quit) - EVT_MENU(SPLIT_SETMINSIZE, MyFrame::SetMinSize) - - EVT_UPDATE_UI(SPLIT_VERTICAL, MyFrame::UpdateUIVertical) - EVT_UPDATE_UI(SPLIT_HORIZONTAL, MyFrame::UpdateUIHorizontal) - EVT_UPDATE_UI(SPLIT_UNSPLIT, MyFrame::UpdateUIUnsplit) - - EVT_MENU (ID_ABOUT, MyFrame::OnAbout) - EVT_TIMER (-1, MyFrame::OnTimer) -END_EVENT_TABLE() - -// My frame constructor -MyFrame::MyFrame(wxFrame* frame, const wxString& title, const wxPoint& pos, const wxSize& size): - wxFrame(frame, SPLITTER_FRAME, title, pos, size) -{ - m_eventhandler =new MyEventHandler(); - - wxPathList pathList; - pathList.Add("."); - pathList.Add(".."); - - wxString path = pathList.FindValidPath("pat36.bmp"); - gs_bmp36_mono.LoadFile(path, wxBITMAP_TYPE_BMP); - wxMask* mask36 = new wxMask(gs_bmp36_mono, *wxBLACK); - /* associate a monochrome mask with this bitmap */ - gs_bmp36_mono.SetMask(mask36); - - CreateStatusBar(2); - - // Make a menubar - fileMenu = new wxMenu; - fileMenu->Append(SPLIT_VERTICAL, "Split &Vertically\tCtrl-V", "Split vertically"); - fileMenu->Append(SPLIT_HORIZONTAL, "Split &Horizontally\tCtrl-H", "Split horizontally"); - fileMenu->Append(SPLIT_UNSPLIT, "&Unsplit", "Unsplit"); -// fileMenu->Append(SPLIT_UNSPLIT, "&Unsplit\tCtrl-U", "Unsplit"); - fileMenu->AppendSeparator(); - fileMenu->Append(SPLIT_SETMINSIZE, "Set &min size", "Set minimum pane size"); - fileMenu->AppendSeparator(); - fileMenu->Append(SPLIT_QUIT, "E&xit\tAlt-X", "Exit"); - fileMenu->Append( ID_ABOUT, "&About..."); - - - menuBar = new wxMenuBar; - menuBar->Append(fileMenu, "&File"); - - SetMenuBar(menuBar); - - m_splitter = new MySplitterWindow(this, SPLITTER_WINDOW); - - m_canvas1 = new MyCanvas(&m_canvasadmin, m_splitter, CANVAS1, wxPoint(0, 0), wxSize(400, 400),wxHSCROLL|wxVSCROLL); - m_canvas1->SetYaxis(FALSE); - m_canvas1->SetMappingScroll(-300,-300,500,500,false); - m_canvas1->SetScroll(-400,-400,600,600); - m_canvas1->SetColour(wxColour(255, 255, 255) ); - m_canvas1->SetCursor(wxCursor(wxCURSOR_MAGNIFIER)); - - m_canvas2 = new MyCanvas(&m_canvasadmin, m_splitter, CANVAS2, wxPoint(0, 0), wxSize(400, 400),wxHSCROLL|wxVSCROLL); - m_canvas2->SetMappingScroll(-100,-100,500,500,false); - m_canvas2->SetScroll(-400,-400,600,600); - m_canvas2->SetColour( wxColour(187, 215, 243) ); - m_canvas2->Show(FALSE); - - m_canvasadmin.Append(m_canvas1); - m_canvasadmin.Append(m_canvas2); - m_canvasadmin.SetActive(m_canvas1); - - m_splitter->Initialize(m_canvas1); - SetStatusText("Min pane size = 0", 1); - - int widths[] = { -1, 100 }; - SetStatusWidths( 2, widths ); - - //root group always at 0,0 - m_datatree = new wxCanvasObjectGroup(0,0); - m_datatree->DeleteContents( TRUE ); - m_datatree->SetAdmin(&m_canvasadmin); - - wxBitmap bitmap( smile_xpm ); - wxImage image( bitmap.ConvertToImage() ); - -// m_sm1 = new wxCanvasImage( image, 0,70,32,32 ); -// m_datatree->Append( m_sm1 ); - - int i; - for (i = 10; i < 300; i+=10) - { - wxCanvasRect *r = new wxCanvasRect( i,50,3,140 ); - r->SetBrush( *wxRED_BRUSH ); - m_datatree->Append( r ); - } - - -// m_sm2 = new wxCanvasImage( image, 0,140,24,24 ); -// m_datatree->Append( m_sm2 ); - - for (i = 15; i < 300; i+=10) - { - wxCanvasRect* rec= new wxCanvasRect( i,50,3,140 ); - rec->SetBrush(wxBrush(wxColour(0,10+i,2+i),wxSOLID)); - rec->SetDraggable(FALSE); - m_datatree->Append( rec ); - } - -/* - wxButton *button = new wxButton( m_canvas1, -1, "Hello", wxPoint(80,50) ); - m_datatree->Append( new wxCanvasControl( button ) ); - - m_datatree->Append( new wxCanvasText( "Hello", 180, 50, - wxGetApp().GetFontPath() + "/times.ttf", 20 ) ); - - m_datatree->Append( new wxCanvasText( "How are you?", 180, 10, - wxGetApp().GetFontPath() + "/times.ttf", 8 ) ); - - m_datatree->Append( new wxCanvasText( "How are you?", 180, 20, - wxGetApp().GetFontPath() + "/times.ttf", 10 ) ); - - m_datatree->Append( new wxCanvasText( "How are you?", 180, 30, - wxGetApp().GetFontPath() + "/times.ttf", 12 ) ); - m_sm3 = new wxCanvasImage( image, 0,210,32,32 ); - m_datatree->Append( m_sm3 ); -*/ - for (i = 10; i < 300; i+=10) - m_datatree->Append( new wxCanvasLine( 10,-15,i,300 ) ); -/* - m_sm4 = new wxCanvasImage( image, 0,270,64,32 ); - m_sm4->SetDragMode(wxDRAG_RECTANGLE); - m_datatree->Append( m_sm4 ); -*/ - -// m_canvas->Append( new wxCanvasLine( 10,-1500e6,50,300000e6, 0,255,0 ) ); -// m_canvas->Append( new wxCanvasLine( 10,-150000,50,300000, 0,255,0 ) ); - - - //make a group of wxCanvasObjects - wxCanvasObjectGroup* group1 = new wxCanvasObjectGroup(0,0); - - wxCanvasLine* line = new wxCanvasLine( 10,-35,50,190); - line->SetPen(wxPen(wxColour(255,161,5),5,wxDOT_DASH )); - group1->Prepend( line ); - group1->Prepend( new wxCanvasImage( image, 4,38,32,32 ) ); - wxCanvasRect* rec3 = new wxCanvasRect(20,-20,50,170); - rec3->SetBrush(wxBrush(wxColour(0,120,240),wxSOLID)); - rec3->SetPen(wxPen(wxColour(252,54,252 ),3,wxSOLID)); - group1->Prepend( rec3 ); - - wxCanvasRect* rec2 = new wxCanvasRect(10,20,104,52); - rec2->SetBrush(wxBrush(wxColour(0,240,240),wxSOLID)); - rec2->SetPen(wxPen(wxColour(210,40,50 ),1,wxSOLID)); - group1->Prepend( rec2 ); - - - - wxPoint2DDouble* todraw2 = new wxPoint2DDouble[3]; - todraw2[0].m_x=230; - todraw2[0].m_y=220; - todraw2[1].m_x=300; - todraw2[1].m_y=200; - todraw2[2].m_x=300; - todraw2[2].m_y=300; - wxCanvasPolyline* poly2= new wxCanvasPolyline(3,todraw2); - poly2->SetPen(wxPen(wxColour(200,0,64 ),4,wxDOT)); - m_datatree->Prepend( poly2 ); - - - - //make another group of wxCanvasObjects - wxCanvasObjectGroup* group2 = new wxCanvasObjectGroup(0,0); - group2->Prepend( new wxCanvasImage( image, 60,38,52,32 ) ); - wxCanvasRect* rr = new wxCanvasRect(10,20,104,52,30); - rr->SetBrush(wxBrush(wxColour(10,17,255),wxHORIZONTAL_HATCH )); - rr->SetPen(wxPen(wxColour(9,115,64 ),4,wxSOLID)); - group2->Prepend( rr ); - - - //this a reference to group2 put into group1 - MywxCanvasObjectRef* m_subref = new MywxCanvasObjectRef(60,50, group2); - m_subref->SetRotation(35); - m_subref->SetRotation(0); - group1->Prepend( m_subref ); - - - wxPoint2DDouble* todraw = new wxPoint2DDouble[5]; - todraw[0].m_x=-30; - todraw[0].m_y=-20; - todraw[1].m_x=100; - todraw[1].m_y=0; - todraw[2].m_x=100; - todraw[2].m_y=100; - todraw[3].m_x=50; - todraw[3].m_y=150; - todraw[4].m_x=0; - todraw[4].m_y=100; - - wxCanvasPolygon* poly= new wxCanvasPolygon(5,todraw); - poly->SetBrush(wxBrush(wxColour(100,17,255),wxCROSSDIAG_HATCH )); - poly->SetPen(wxPen(wxColour(9,115,64 ),4,wxSOLID)); - group1->Prepend( poly ); - - wxPoint2DDouble* todraw4 = new wxPoint2DDouble[4]; - - todraw4[0].m_x=-50; - todraw4[0].m_y=-30; - todraw4[1].m_x=-50; - todraw4[1].m_y=70; - todraw4[2].m_x=150; - todraw4[2].m_y=70; - todraw4[3].m_x=150; - todraw4[3].m_y=-30; - - wxCanvasPolygon* poly5= new wxCanvasPolygon(4,todraw4); - poly5->SetBrush(wxBrush(wxColour(100,17,255),wxCROSSDIAG_HATCH )); -// poly5->SetBrush(wxBrush(wxColour(100,17,255),wxSOLID )); -// poly5->SetPen(wxPen(wxColour(9,115,64 ),1,wxSOLID)); - poly5->SetPen(wxPen(wxColour(9,115,64 ),4,wxSOLID)); - wxCanvasObjectGroup* group3 = new wxCanvasObjectGroup(0,0); - group3->Prepend( poly5 ); - - wxList* pointlist = new wxList(); - wxPoint2DDouble* point = new wxPoint2DDouble(0,0); - pointlist->Append((wxObject*)point); - point = new wxPoint2DDouble(-300,100); - pointlist->Append((wxObject*)point); - point = new wxPoint2DDouble(-100,100); - pointlist->Append((wxObject*)point); - point = new wxPoint2DDouble(-100,0); - pointlist->Append((wxObject*)point); - point = new wxPoint2DDouble(-200,50); - pointlist->Append((wxObject*)point); - - wxCanvasPolygonL* poly15= new wxCanvasPolygonL(pointlist,TRUE); - poly15->SetColour1(wxColour(250,78,216 )); - poly15->SetColour2(*wxRED); - poly15->SetBrush(wxBrush(gs_bmp36_mono)); - poly15->SetTransParent(TRUE); - poly15->SetPen(wxPen(*wxRED,4,wxSOLID)); - group1->Prepend( poly15 ); - - wxList* pointlist2 = new wxList(); - wxPoint2DDouble* point2 = new wxPoint2DDouble(-400,100); - pointlist2->Append((wxObject*)point2); - point2 = new wxPoint2DDouble(-400,200); - pointlist2->Append((wxObject*)point2); - point2 = new wxPoint2DDouble(0,200); - pointlist2->Append((wxObject*)point2); - point2 = new wxPoint2DDouble(0,100); - pointlist2->Append((wxObject*)point2); - point2 = new wxPoint2DDouble(-200,175); - pointlist2->Append((wxObject*)point2); - - wxCanvasPolylineL* poly16= new wxCanvasPolylineL(pointlist2,TRUE); - poly16->SetPen(wxPen(wxColour(9,115,64 ),4,wxSOLID)); - m_datatree->Prepend( poly16 ); - - - wxPoint2DDouble* todraw6 = new wxPoint2DDouble[5]; - todraw6[0].m_x=50; - todraw6[0].m_y=305; - todraw6[1].m_x=-200; - todraw6[1].m_y=200; - todraw6[2].m_x=0; - todraw6[2].m_y=500; - todraw6[3].m_x=300; - todraw6[3].m_y=200; - todraw6[4].m_x=-300; - todraw6[4].m_y=-300; - - wxCanvasPolygon* poly17= new wxCanvasPolygon(5,todraw6,TRUE); - poly17->SetBrush(wxBrush(wxColour(100,17,255),wxSOLID)); - poly17->SetPen(wxPen(wxColour(10,17,25),16,wxLONG_DASH )); - poly17->SetColour1(*wxGREEN); - poly17->SetColour2(*wxRED); - poly17->SetGradient(TRUE,wxPen(wxColour(0,0,0),0,wxSOLID),0); - wxCanvasObjectRef* m_refc = new wxCanvasObjectRef(0,-200, poly17); - m_refc->SetRotation(90); - m_datatree->Prepend( m_refc ); - wxCanvasObjectRef* m_refd = new wxCanvasObjectRef(200,-50, poly17); - m_refd->SetRotation(0); - m_datatree->Append( m_refd ); - - //now make two references to group1 into root group of the canvas - m_ref = new MywxCanvasObjectRef(350,-200, group1); - m_ref->SetRotation(25); - //TODO if rotation is 0 scaling is weird -// m_ref->SetScale(2,3.2); - m_datatree->Append( m_ref ); - - group3->Prepend( m_ref ); - - - //this a reference to group2 put into group1 - MywxCanvasObjectRef* subref2 = new MywxCanvasObjectRef(20,130, group2); - subref2->SetRotation(15); - group3->Prepend( subref2 ); - m_datatree->Prepend( subref2 ); - - m_ref2 = new MywxCanvasObjectRef(80,450, group1); - m_ref2->SetRotation(-35); - m_ref2->SetDragMode(wxDRAG_RECTANGLE); - m_datatree->Prepend( m_ref2 ); - - wxCanvasCircle* cir = new wxCanvasCircle( -100, -150, 100 ); - cir->SetBrush(wxBrush(wxColour(19,215,6),wxHORIZONTAL_HATCH )); - cir->SetPen(wxPen(wxColour(198,3,105 ),30,wxSOLID)); - cir->SetDragMode(wxDRAG_REDRAW); - m_datatree->Prepend( cir ); - - wxCanvasEllipse* elp = new wxCanvasEllipse( -100, 250, 100,300 ); - elp->SetBrush(wxBrush(wxColour(100,17,55),wxVERTICAL_HATCH )); - elp->SetPen(wxPen(wxColour(2,255,6 ),10,wxDOT)); - m_datatree->Prepend( elp ); - - wxCanvasEllipticArc* aelp = new wxCanvasEllipticArc( -230, 250, 100,300, 30,270 ); - aelp->SetBrush(wxBrush(wxColour(100,17,155),wxSOLID )); - aelp->SetPen(wxPen(wxColour(1,215,6 ),10,wxSOLID)); - m_datatree->Prepend( aelp ); - - //HOW BAD DO THINGS GET - int kk; - for (kk=0;kk<100;kk++) - { -// MywxCanvasObjectRef* m_refx = new MywxCanvasObjectRef(180,50+kk*30, group1); -// m_refx->SetRotation(-35); -// m_datatree->Prepend( m_refx ); - } - -/* - m_log = new wxTextCtrl( this, -1, "", wxPoint(0,0), wxSize(100,100), wxTE_MULTILINE ); - wxLog *old_log = wxLog::SetActiveTarget( new wxLogTextCtrl( m_log ) ); - delete old_log; - - wxBoxSizer *topsizer = new wxBoxSizer( wxVERTICAL ); - - topsizer->Add( m_canvas, 1, wxEXPAND ); - topsizer->Add( m_log, 0, wxEXPAND ); - - SetAutoLayout( TRUE ); - SetSizer( topsizer ); -*/ - - //fancy background - wxPoint2DDouble* todraw8 = new wxPoint2DDouble[4]; - todraw8[0].m_x=-350; - todraw8[0].m_y=-350; - todraw8[1].m_x=-350; - todraw8[1].m_y=550; - todraw8[2].m_x=550; - todraw8[2].m_y=550; - todraw8[3].m_x=550; - todraw8[3].m_y=-350; - - wxCanvasPolygon* poly18= new wxCanvasPolygon(4,todraw8); - poly18->SetPen(wxPen(wxColour(10,17,25),16,wxTRANSPARENT )); - poly18->SetColour1(wxColour(0,0,0)); - poly18->SetColour2(wxColour(0,255,255)); - poly18->SetGradient(TRUE,wxPen(wxColour(0,0,0),0,wxSOLID),0); - - wxCanvasObjectRef* m_refb = new wxCanvasObjectRef(200,0, poly18); - m_refb->SetRotation(90); - - m_datatree->Prepend( m_refb ); - -/* - wxCanvasCircle* cir = new wxCanvasCircle( -100, -150, 100 ); - cir->SetBrush(wxBrush(wxColour(19,215,6),wxHORIZONTAL_HATCH )); - cir->SetPen(wxPen(wxColour(198,3,105 ),30,wxSOLID)); - m_datatree->Prepend( cir ); -*/ - m_datatree->SetAdmin(&m_canvasadmin); - m_datatree->AppendEventHandler( m_eventhandler ); - m_canvas1->SetRoot(m_datatree); - - //wxCanvasObjectGroup* group3 = new wxCanvasObjectGroup(0,0); - // group3->Prepend( cir ); - - group3->SetAdmin(&m_canvasadmin); - m_canvas2->SetRoot(group3); - - m_timer = new wxTimer( this ); - //m_timer->Start( 100, FALSE ); -} - -MyFrame::~MyFrame() -{ - m_datatree->RemoveLastEventHandler( FALSE ); - delete m_eventhandler; - delete m_timer; -} - -void MyFrame::Quit(wxCommandEvent& WXUNUSED(event) ) -{ - Close(TRUE); -} - -void MyFrame::SplitHorizontal(wxCommandEvent& WXUNUSED(event) ) -{ - if ( m_splitter->IsSplit() ) - m_splitter->Unsplit(); - m_canvas1->Show(TRUE); - m_canvas2->Show(TRUE); - m_splitter->SplitHorizontally( m_canvas1, m_canvas2 ); - UpdatePosition(); -} - -void MyFrame::SplitVertical(wxCommandEvent& WXUNUSED(event) ) -{ - if ( m_splitter->IsSplit() ) - m_splitter->Unsplit(); - m_canvas1->Show(TRUE); - m_canvas2->Show(TRUE); - m_splitter->SplitVertically( m_canvas1, m_canvas2 ); - UpdatePosition(); -} - -void MyFrame::Unsplit(wxCommandEvent& WXUNUSED(event) ) -{ - if ( m_splitter->IsSplit() ) - m_splitter->Unsplit(); - SetStatusText("No splitter"); -} - -void MyFrame::SetMinSize(wxCommandEvent& WXUNUSED(event) ) -{ - wxString str; - str.Printf( _T("%d"), m_splitter->GetMinimumPaneSize()); - str = wxGetTextFromUser("Enter minimal size for panes:", "", str, this); - if ( str.IsEmpty() ) - return; - - int minsize = wxStrtol( str, (wxChar**)NULL, 10 ); - m_splitter->SetMinimumPaneSize(minsize); - str.Printf( _T("Min pane size = %d"), minsize); - SetStatusText(str, 1); -} - -void MyFrame::UpdateUIHorizontal(wxUpdateUIEvent& event) -{ - event.Enable( ( (!m_splitter->IsSplit()) || (m_splitter->GetSplitMode() != wxSPLIT_HORIZONTAL) ) ); -} - -void MyFrame::UpdateUIVertical(wxUpdateUIEvent& event) -{ - event.Enable( ( (!m_splitter->IsSplit()) || (m_splitter->GetSplitMode() != wxSPLIT_VERTICAL) ) ); -} - -void MyFrame::UpdateUIUnsplit(wxUpdateUIEvent& event) -{ - event.Enable( m_splitter->IsSplit() ); -} - -void MyFrame::UpdatePosition() -{ - wxString str; - str.Printf( "Sash position = %d", m_splitter->GetSashPosition()); - SetStatusText(str); -} - -void MyFrame::OnQuit( wxCommandEvent &WXUNUSED(event) ) -{ - Close( TRUE ); -} - -void MyFrame::OnTimer( wxTimerEvent &WXUNUSED(event) ) -{ - m_sm1->MoveRelative( 1, 0); - m_sm2->MoveRelative( 1, 0); - m_sm3->MoveRelative( 1, 0); - m_sm4->MoveRelative( 2, 0); - -// m_ref->MoveRelative( 1, 0 ); - m_ref2->MoveRelative( 2, 0 ); - m_canvas1->UpdateNow(); - - - wxWakeUpIdle(); -} - -void MyFrame::OnAbout( wxCommandEvent &WXUNUSED(event) ) -{ - (void)wxMessageBox( "wxCanvas demo\n" - "Robert Roebling (c) 1998,2000 \n Modified by Klaas Holwerda 2000", - "About wxCanvas Demo", wxICON_INFORMATION | wxOK ); -} - - -//------------------------------------------------ -// class MyCanvas -//------------------------------------------------ - -// the event tables connect the wxWindows events with the functions (event -// handlers) which process them. -BEGIN_EVENT_TABLE(MyCanvas,wxVectorCanvas) - EVT_MOUSE_EVENTS (MyCanvas::OnMouseEvent) -END_EVENT_TABLE() - -MyCanvas::MyCanvas(wxCanvasAdmin* admin, MySplitterWindow *parent, wxWindowID id, - const wxPoint &position, const wxSize& size, long style ) : - wxVectorCanvas( admin, parent, id, position, size, style ) -{ - m_parent=parent; -} - -void MyCanvas::OnMouseEvent(wxMouseEvent& event) -{ - wxClientDC dc(this); - PrepareDC(dc); - - wxPoint pos = event.GetPosition(); - - m_mouse_worldx = DeviceToLogicalX( pos.x ); - m_mouse_worldy = DeviceToLogicalY( pos.y ); - - wxString str; - str.Printf( "Current mouse position: %f,%f", m_mouse_worldx, m_mouse_worldy ); - m_parent->SetStatusText( str ); - - if (!event.m_controlDown && !GetCaptured()) - { - if (event.LeftDown()) - { - m_zoom_x1=m_zoom_x2=pos.x; - m_zoom_y1=m_zoom_y2=pos.y; - } - if (event.RightDown()) - { - SetMappingScroll(m_virtm_minX,m_virtm_minY,m_virtm_maxX,m_virtm_maxY,0); - Update( 0,0, GetBufferWidth(), GetBufferHeight(), TRUE ); - UpdateNow(); - } - if (event.LeftUp()) - { - m_zoom_x2=pos.x; - m_zoom_y2=pos.y; - double x_virt_min=DeviceToLogicalX(m_zoom_x1); - double y_virt_min=DeviceToLogicalY(m_zoom_y2); - double x_virt_max=DeviceToLogicalX(m_zoom_x2); - double y_virt_max=DeviceToLogicalY(m_zoom_y1); - SetMappingScroll(x_virt_min,y_virt_min,x_virt_max,y_virt_max,0); - Update( 0,0, GetBufferWidth(), GetBufferHeight(), TRUE ); - UpdateNow(); - } - if (event.Dragging()&& event.m_leftDown) - { - dc.SetLogicalFunction(wxINVERT); - dc.DrawRectangle(m_zoom_x1,m_zoom_y1,m_zoom_x2-m_zoom_x1,m_zoom_y2-m_zoom_y1 ); - m_zoom_x2=pos.x; - m_zoom_y2=pos.y; - dc.DrawRectangle(m_zoom_x1,m_zoom_y1,m_zoom_x2-m_zoom_x1,m_zoom_y2-m_zoom_y1 ); - } - } - else - { - wxVectorCanvas::OnMouse(event); - } -} - - -//----------------------------------------------------------------------------- -// MyApp -//----------------------------------------------------------------------------- - -// main program - -IMPLEMENT_APP(MyApp) - -bool MyApp::OnInit() -{ - m_fontpath = getenv("TRUETYPE"); - m_fontpath = "c:/WINNT/Fonts/times.ttf"; - if ( !m_fontpath ) - { - wxLogError("Please set env var TRUETYPE to the path where times.ttf lives."); - - return FALSE; - - } - -#if wxUSE_LIBPNG - wxImage::AddHandler( new wxPNGHandler ); -#endif - - wxFrame *frame = new MyFrame((wxFrame *) NULL, "wxCanvas Example", wxPoint(0,0), wxSize(400,500)); - frame->Show( TRUE ); - - SetTopWindow(frame); - - return TRUE; -} - diff --git a/contrib/samples/canvas/test/test.h b/contrib/samples/canvas/test/test.h deleted file mode 100644 index d617baeb6f..0000000000 --- a/contrib/samples/canvas/test/test.h +++ /dev/null @@ -1,216 +0,0 @@ -/* - * Program: canvas - * - * Author: Robert Roebling - * - * Copyright: (C) 1998, Robert Roebling - * - */ -// For compilers that support precompilation, includes "wx/wx.h". - -#ifndef __test_H__ -#define __test_H__ - -#if defined(__GNUG__) && !defined(__APPLE__) - #pragma interface "test.cpp" -#endif - -#ifndef WX_PRECOMP - #include "wx/wx.h" -#endif - -#include -#include -#include -#include -#include - -#include "wx/canvas/canvas.h" -#include "wx/canvas/polygon.h" - -class MyCanvas; - -// derived classes -class MywxCanvasObjectRef: public wxCanvasObjectRef -{ - DECLARE_DYNAMIC_CLASS(MywxCanvasObjectRef) - -public: - MywxCanvasObjectRef(); - MywxCanvasObjectRef(double x, double y, wxCanvasObjectGroup* group); - ~MywxCanvasObjectRef(); - - void OnMouseEvent(wxMouseEvent &event); - -private: - DECLARE_EVENT_TABLE() -}; - - -class MyEventHandler: public wxEvtHandler -{ -public: - MyEventHandler(); - - void OnMouseEvent(wxMouseEvent &event); - -private: - - DECLARE_EVENT_TABLE() -}; - - -class MySplitterWindow : public wxSplitterWindow -{ -public: - MySplitterWindow(wxFrame *parent, wxWindowID id) - : wxSplitterWindow(parent, id, wxDefaultPosition, wxDefaultSize, wxSP_3D ) - { - m_frame = parent; - } - - virtual bool OnSashPositionChange(int newSashPosition) - { - if ( !wxSplitterWindow::OnSashPositionChange(newSashPosition) ) - return FALSE; - - wxString str; - str.Printf( _T("Sash position = %d"), newSashPosition); - m_frame->SetStatusText(str); - - return TRUE; - } - - void SetStatusText(const wxString& str ){m_frame->SetStatusText(str);} - -private: - wxFrame *m_frame; -}; - - -// MyFrame -const int ID_ABOUT = 109; - -// MyFrame -class MyFrame: public wxFrame -{ -public: - MyFrame(wxFrame* frame, const wxString& title, const wxPoint& pos, const wxSize& size); - virtual ~MyFrame(); - - // Menu commands - void SplitHorizontal(wxCommandEvent& event); - void SplitVertical(wxCommandEvent& event); - void Unsplit(wxCommandEvent& event); - void SetMinSize(wxCommandEvent& event); - void Quit(wxCommandEvent& event); - - // Menu command update functions - void UpdateUIHorizontal(wxUpdateUIEvent& event); - void UpdateUIVertical(wxUpdateUIEvent& event); - void UpdateUIUnsplit(wxUpdateUIEvent& event); - - void OnAbout( wxCommandEvent &event ); - void OnNewFrame( wxCommandEvent &event ); - void OnQuit( wxCommandEvent &event ); - void OnTimer( wxTimerEvent &event ); - - wxCanvasObject *m_sm1; - wxCanvasObject *m_sm2; - wxCanvasObject *m_sm3; - wxCanvasObject *m_sm4; - - MywxCanvasObjectRef *m_ref; - MywxCanvasObjectRef *m_ref2; - - wxTimer *m_timer; - wxTextCtrl *m_log; - - wxBitmap gs_bmp36_mono; - -private: - - void UpdatePosition(); - - wxMenu* fileMenu; - wxMenuBar* menuBar; - MyCanvas* m_canvas1; - MyCanvas* m_canvas2; - MySplitterWindow* m_splitter; - - wxCanvasAdmin m_canvasadmin; - - wxCanvasObjectGroup* m_datatree; - - DECLARE_EVENT_TABLE() - - MyEventHandler* m_eventhandler; -}; - -// ID for the menu commands -enum -{ - SPLIT_QUIT, - SPLIT_HORIZONTAL, - SPLIT_VERTICAL, - SPLIT_UNSPLIT, - SPLIT_SETMINSIZE -}; - -// Window ids -#define SPLITTER_WINDOW 100 -#define SPLITTER_FRAME 101 -#define CANVAS1 102 -#define CANVAS2 103 - -class MyCanvas: public wxVectorCanvas -{ -public: - MyCanvas( wxCanvasAdmin* admin, MySplitterWindow *parent, wxWindowID id = -1, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxScrolledWindowStyle ); - - void OnMouseEvent(wxMouseEvent& event); - -private: - - //mouse position used for displaying it in the statusbar - int m_mouse_x; - //mouse position used for displaying it in the statusbar - int m_mouse_y; - //mouse position used for displaying it in the statusbar - double m_mouse_worldx; - //mouse position used for displaying it in the statusbar - double m_mouse_worldy; - - //mouse position used for zooming - double m_zoom_x1; - //mouse position used for zooming - double m_zoom_y1; - //mouse position used for zooming - double m_zoom_x2; - //mouse position used for zooming - double m_zoom_y2; - - //declare events - DECLARE_EVENT_TABLE() - - //parent of the canvas - MySplitterWindow *m_parent; -}; - -// MyApp - -class MyApp: public wxApp -{ -public: - virtual bool OnInit(); - - const wxString& GetFontPath() const { return m_fontpath; } - -private: - wxString m_fontpath; -}; - -#endif diff --git a/contrib/samples/canvas/test/test.rc b/contrib/samples/canvas/test/test.rc deleted file mode 100644 index 878f3352fb..0000000000 --- a/contrib/samples/canvas/test/test.rc +++ /dev/null @@ -1,3 +0,0 @@ -#include "wx/msw/wx.rc" - - diff --git a/contrib/src/canvas/CanvasVC.dsp b/contrib/src/canvas/CanvasVC.dsp deleted file mode 100644 index f0d3c5ca94..0000000000 --- a/contrib/src/canvas/CanvasVC.dsp +++ /dev/null @@ -1,102 +0,0 @@ -# Microsoft Developer Studio Project File - Name="CanvasVC" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Static Library" 0x0104 - -CFG=CanvasVC - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "CanvasVC.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "CanvasVC.mak" CFG="CanvasVC - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "CanvasVC - Win32 Release" (based on "Win32 (x86) Static Library") -!MESSAGE "CanvasVC - Win32 Debug" (based on "Win32 (x86) Static Library") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "CanvasVC - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c -# ADD CPP /nologo /MD /W3 /GX /O1 /Ob2 /I "../../../include" /I "../../include" /I "../../../lib/msw" /D "WIN32" /D "_WINDOWS" /D "__WINDOWS__" /D "__WXMSW__" /D "__WIN95__" /D "__WIN32__" /D WINVER=0x0400 /D "STRICT" /FD /c -# SUBTRACT CPP /YX -# ADD BASE RSC /l 0x809 -# ADD RSC /l 0x809 -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LIB32=link.exe -lib -# ADD BASE LIB32 /nologo -# ADD LIB32 /nologo /out:"..\..\..\lib\canvas.lib" - -!ELSEIF "$(CFG)" == "CanvasVC - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c -# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "../../../include" /I "../../include" /I "../../../lib/mswd" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "__WINDOWS__" /D "__WXMSW__" /D DEBUG=1 /D "__WXDEBUG__" /D "__WIN95__" /D "__WIN32__" /D WINVER=0x0400 /D "STRICT" /FD /c -# SUBTRACT CPP /YX -# ADD BASE RSC /l 0x809 -# ADD RSC /l 0x809 -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LIB32=link.exe -lib -# ADD BASE LIB32 /nologo -# ADD LIB32 /nologo /out:"..\..\..\lib\canvasd.lib" - -!ENDIF - -# Begin Target - -# Name "CanvasVC - Win32 Release" -# Name "CanvasVC - Win32 Debug" -# Begin Source File - -SOURCE=.\bbox.cpp -# End Source File -# Begin Source File - -SOURCE=.\canvas.cpp -# End Source File -# Begin Source File - -SOURCE=.\liner.cpp -# End Source File -# Begin Source File - -SOURCE=.\polygon.cpp -# End Source File -# End Target -# End Project diff --git a/contrib/src/canvas/CanvasVC.dsw b/contrib/src/canvas/CanvasVC.dsw deleted file mode 100644 index 8dde96eb1e..0000000000 --- a/contrib/src/canvas/CanvasVC.dsw +++ /dev/null @@ -1,29 +0,0 @@ -Microsoft Developer Studio Workspace File, Format Version 6.00 -# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! - -############################################################################### - -Project: "CanvasVC"=.\CanvasVC.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Global: - -Package=<5> -{{{ -}}} - -Package=<3> -{{{ -}}} - -############################################################################### - diff --git a/contrib/src/canvas/Makefile.in b/contrib/src/canvas/Makefile.in deleted file mode 100644 index 555666e305..0000000000 --- a/contrib/src/canvas/Makefile.in +++ /dev/null @@ -1,26 +0,0 @@ -# $Id$ - -top_srcdir = @top_srcdir@/.. -top_builddir = ../../.. -libsrc_dir = contrib/src/canvas - -TARGET_LIBNAME=lib@WX_LIBRARY_BASENAME@_canvas-@WX_RELEASE@ - -LIBVERSION_CURRENT=@WX_CURRENT@ -LIBVERSION_REVISION=@WX_REVISION@ -LIBVERSION_AGE=@WX_AGE@ - - -HEADER_PATH=$(top_srcdir)/contrib/include/wx -HEADER_SUBDIR=canvas - -HEADERS=canvas.h bbox.h liner.h polygon.h - -OBJECTS=canvas.o bbox.o liner.o polygon.o -DEPFILES=$(OBJECTS:.o=.d) - -APPEXTRADEFS=-I$(top_srcdir)/contrib/include - -include $(top_builddir)/src/makelib.env - --include $(DEPFILES) diff --git a/contrib/src/canvas/bbox.cpp b/contrib/src/canvas/bbox.cpp deleted file mode 100644 index b284a86c76..0000000000 --- a/contrib/src/canvas/bbox.cpp +++ /dev/null @@ -1,369 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: bbox.cpp -// Author: Klaas Holwerda -// Created: XX/XX/XX -// Copyright: 2000 (c) Klaas Holwerda -// Licence: wxWindows Licence -///////////////////////////////////////////////////////////////////////////// - -#ifdef __GNUG__ - #pragma implementation "bbox.cpp" -#endif - -// For compilers that support precompilation, includes "wx/wx.h". -#include "wx/wxprec.h" - -#ifdef __BORLANDC__ - #pragma hdrstop -#endif - -#include "wx/canvas/bbox.h" - -wxBoundingBox::wxBoundingBox() -{ - m_minx = m_miny = m_maxx = m_maxy = 0.0; - m_validbbox = FALSE; -} - - -wxBoundingBox::wxBoundingBox(const wxBoundingBox &other) -{ - m_minx = other.m_minx; - m_miny = other.m_miny; - m_maxx = other.m_maxx; - m_maxy = other.m_maxy; - m_validbbox= other.m_validbbox; -} - - -wxBoundingBox::wxBoundingBox(const wxPoint2DDouble& a) -{ - m_minx = a.m_x; - m_maxx = a.m_x; - m_miny = a.m_y; - m_maxy = a.m_y; - m_validbbox = TRUE; -} - -wxBoundingBox::wxBoundingBox(double xmin, double ymin, double xmax, double ymax) -{ - m_minx = xmin; - m_miny = ymin; - m_maxx = xmax; - m_maxy = ymax; - m_validbbox = TRUE; -} - -// This function checks if two bboxes intersect -bool wxBoundingBox::And(wxBoundingBox *_bbox, double Marge) -{ - assert (m_validbbox == TRUE); - assert (_bbox->GetValid()); - m_minx = wxMax(m_minx, _bbox->m_minx); - m_maxx = wxMin(m_maxx, _bbox->m_maxx); - m_miny = wxMax(m_miny, _bbox->m_miny); - m_maxy = wxMin(m_maxy, _bbox->m_maxy); - return (bool) - ( - ((m_minx - Marge) < (m_maxx + Marge)) && - ((m_miny - Marge) < (m_maxy + Marge)) - ); -} - -// Shrink the boundingbox with the given marge -void wxBoundingBox::Shrink(const double Marge) -{ - assert (m_validbbox == TRUE); - - m_minx += Marge; - m_maxx -= Marge; - m_miny += Marge; - m_maxy -= Marge; -} - - -// Expand the boundingbox with another boundingbox -void wxBoundingBox::Expand(const wxBoundingBox &other) -{ - if (!m_validbbox) - { - *this=other; - } - else - { - m_minx = wxMin(m_minx, other.m_minx); - m_maxx = wxMax(m_maxx, other.m_maxx); - m_miny = wxMin(m_miny, other.m_miny); - m_maxy = wxMax(m_maxy, other.m_maxy); - } -} - - -// Expand the boundingbox with a point -void wxBoundingBox::Expand(const wxPoint2DDouble& a_point) -{ - if (!m_validbbox) - { - m_minx = m_maxx = a_point.m_x; - m_miny = m_maxy = a_point.m_y; - m_validbbox=TRUE; - } - else - { - m_minx = wxMin(m_minx, a_point.m_x); - m_maxx = wxMax(m_maxx, a_point.m_x); - m_miny = wxMin(m_miny, a_point.m_y); - m_maxy = wxMax(m_maxy, a_point.m_y); - } -} - -// Expand the boundingbox with a point -void wxBoundingBox::Expand(double x,double y) -{ - if (!m_validbbox) - { - m_minx = m_maxx = x; - m_miny = m_maxy = y; - m_validbbox=TRUE; - } - else - { - m_minx = wxMin(m_minx, x); - m_maxx = wxMax(m_maxx, x); - m_miny = wxMin(m_miny, y); - m_maxy = wxMax(m_maxy, y); - } -} - - -// Expand the boundingbox with two points -void wxBoundingBox::Expand(const wxPoint2DDouble& a, const wxPoint2DDouble& b) -{ - Expand(a); - Expand(b); -} - -// Enlarge the boundingbox with the given marge -void wxBoundingBox::EnLarge(const double marge) -{ - if (!m_validbbox) - { - m_minx = m_maxx = marge; - m_miny = m_maxy = marge; - m_validbbox=TRUE; - } - else - { - m_minx -= marge; - m_maxx += marge; - m_miny -= marge; - m_maxy += marge; - } -} - -// Calculates if two boundingboxes intersect. If so, the function returns _ON. -// If they do not intersect, two scenario's are possible: -// other is outside this -> return _OUT -// other is inside this -> return _IN -OVERLAP wxBoundingBox::Intersect(wxBoundingBox &other, double Marge) -{ - assert (m_validbbox == TRUE); - - // other boundingbox must exist - assert (&other); - - if (((m_minx - Marge) > (other.m_maxx + Marge)) || - ((m_maxx + Marge) < (other.m_minx - Marge)) || - ((m_maxy + Marge) < (other.m_miny - Marge)) || - ((m_miny - Marge) > (other.m_maxy + Marge))) - return _OUT; - - // Check if other.bbox is inside this bbox - if ((m_minx <= other.m_minx) && - (m_maxx >= other.m_maxx) && - (m_maxy >= other.m_maxy) && - (m_miny <= other.m_miny)) - return _IN; - - // Boundingboxes intersect - return _ON; -} - - -// Checks if a line intersects the boundingbox -bool wxBoundingBox::LineIntersect(const wxPoint2DDouble& begin, const wxPoint2DDouble& end ) -{ - assert (m_validbbox == TRUE); - - return (bool) - !(((begin.m_y > m_maxy) && (end.m_y > m_maxy)) || - ((begin.m_y < m_miny) && (end.m_y < m_miny)) || - ((begin.m_x > m_maxx) && (end.m_x > m_maxx)) || - ((begin.m_x < m_minx) && (end.m_x < m_minx))); -} - - -// Is the given point in the boundingbox ?? -bool wxBoundingBox::PointInBox(double x, double y, double Marge) -{ - assert (m_validbbox == TRUE); - - if ( x >= (m_minx - Marge) && x <= (m_maxx + Marge) && - y >= (m_miny - Marge) && y <= (m_maxy + Marge) ) - return TRUE; - return FALSE; -} - - -// -// Is the given point in the boundingbox ?? -// -bool wxBoundingBox::PointInBox(const wxPoint2DDouble& a, double Marge) -{ - assert (m_validbbox == TRUE); - - return PointInBox(a.m_x, a.m_y, Marge); -} - - -wxPoint2DDouble wxBoundingBox::GetMin() -{ - assert (m_validbbox == TRUE); - - return wxPoint2DDouble(m_minx, m_miny); -} - - -wxPoint2DDouble wxBoundingBox::GetMax() -{ - assert (m_validbbox == TRUE); - - return wxPoint2DDouble(m_maxx, m_maxy); -} - -bool wxBoundingBox::GetValid() const -{ - return m_validbbox; -} - -void wxBoundingBox::SetMin(double px, double py) -{ - m_minx = px; - m_miny = py; - if (!m_validbbox) - { - m_maxx = px; - m_maxy = py; - m_validbbox = TRUE; - } -} - -void wxBoundingBox::SetMax(double px, double py) -{ - m_maxx = px; - m_maxy = py; - if (!m_validbbox) - { - m_minx = px; - m_miny = py; - m_validbbox = TRUE; - } -} - -void wxBoundingBox::SetValid(bool value) -{ - m_validbbox = value; -} - -// adds an offset to the boundingbox -// usage : a_boundingbox.Translate(a_point); -void wxBoundingBox::Translate(wxPoint2DDouble& offset) -{ - assert (m_validbbox == TRUE); - - m_minx += offset.m_x; - m_maxx += offset.m_x; - m_miny += offset.m_y; - m_maxy += offset.m_y; -} - - -// clears the bounding box settings -void wxBoundingBox::Reset() -{ - m_minx = 0.0; - m_maxx = 0.0; - m_miny = 0.0; - m_maxy = 0.0; - m_validbbox = FALSE; -} - - -void wxBoundingBox::SetBoundingBox(const wxPoint2DDouble& a_point) -{ - m_minx = a_point.m_x; - m_maxx = a_point.m_x; - m_miny = a_point.m_y; - m_maxy = a_point.m_y; -} - - -// Expands the boundingbox with the given point -// usage : a_boundingbox = a_boundingbox + pointer_to_an_offset; -wxBoundingBox& wxBoundingBox::operator+(wxBoundingBox &other) -{ - assert (m_validbbox == TRUE); - assert (other.GetValid()); - - Expand(other); - return *this; -} - - -// makes a boundingbox same as the other -wxBoundingBox& wxBoundingBox::operator=( const wxBoundingBox &other) -{ - assert (other.GetValid()); - - m_minx = other.m_minx; - m_maxx = other.m_maxx; - m_miny = other.m_miny; - m_maxy = other.m_maxy; - m_validbbox = other.m_validbbox; - return *this; -} - -void wxBoundingBox::MapBbox( const wxTransformMatrix& matrix) -{ - assert (m_validbbox == TRUE); - - double x1,y1,x2,y2,x3,y3,x4,y4; - - matrix.TransformPoint( m_minx, m_miny, x1, y1 ); - matrix.TransformPoint( m_minx, m_maxy, x2, y2 ); - matrix.TransformPoint( m_maxx, m_maxy, x3, y3 ); - matrix.TransformPoint( m_maxx, m_miny, x4, y4 ); - - double xmin = wxMin(x1,x2); - xmin = wxMin(xmin,x3); - xmin = wxMin(xmin,x4); - - double xmax = wxMax( x1, x2); - xmax = wxMax(xmax,x3); - xmax = wxMax(xmax,x4); - - double ymin = wxMin(y1, y2); - ymin = wxMin(ymin,y3); - ymin = wxMin(ymin,y4); - - double ymax = wxMax(y1,y2); - ymax = wxMax(ymax,y3); - ymax = wxMax(ymax,y4); - - // Use these min and max values to set the new boundingbox - m_minx = xmin; - m_miny = ymin; - m_maxx = xmax; - m_maxy = ymax; -} - diff --git a/contrib/src/canvas/canvas.cpp b/contrib/src/canvas/canvas.cpp deleted file mode 100644 index 5cced63809..0000000000 --- a/contrib/src/canvas/canvas.cpp +++ /dev/null @@ -1,2949 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: canvas.cpp -// Author: Robert Roebling -// Created: XX/XX/XX -// Copyright: 2000 (c) Robert Roebling -// Licence: wxWindows Licence -///////////////////////////////////////////////////////////////////////////// - -#ifdef __GNUG__ - #pragma implementation "canvas.cpp" -#endif - -// For compilers that support precompilation, includes "wx/wx.h". -#include "wx/wxprec.h" - -#ifdef __BORLANDC__ - #pragma hdrstop -#endif - -#include "wx/canvas/canvas.h" -#include "wx/canvas/polygon.h" -#include "wx/canvas/liner.h" - -#ifdef __WXGTK__ - #include - #include - #include "wx/gtk/win_gtk.h" -#endif - -#ifndef wxUSE_FREETYPE - #define wxUSE_FREETYPE 0 -#endif - -#if wxUSE_FREETYPE - #include -#endif - -//#define CANVASDEBUG - -//---------------------------------------------------------------------------- -// globals -//---------------------------------------------------------------------------- - -static const double pi = 3.1415926535; - -#if wxUSE_FREETYPE -FT_Library g_freetypeLibrary; -#endif - -//---------------------------------------------------------------------------- -// wxCanvasObject -//---------------------------------------------------------------------------- - -IMPLEMENT_CLASS(wxCanvasObject, wxEvtHandler) - -wxCanvasObject::wxCanvasObject() -{ - // the default event handler is just this object - m_eventHandler=this; - m_admin = NULL; - m_isControl = FALSE; - m_isVector = FALSE; - m_isImage = FALSE; - m_visible = TRUE; - m_dragmode = wxDRAG_ONTOP; -// handy when debugging -// m_dragmode = wxDRAG_RECTANGLE; - m_dragable = TRUE; -} - -bool wxCanvasObject::ProcessCanvasObjectEvent(wxEvent& event) -{ - return m_eventHandler->ProcessEvent(event); -} - -void wxCanvasObject::PushEventHandler(wxEvtHandler *handler) -{ - handler->SetNextHandler(GetEventHandler()); - m_eventHandler=handler; -} - -wxEvtHandler *wxCanvasObject::PopEventHandler(bool deleteHandler) -{ - wxEvtHandler *handlerA = m_eventHandler; - if ( handlerA ) - { - wxEvtHandler *handlerB = handlerA->GetNextHandler(); - handlerA->SetNextHandler((wxEvtHandler *)NULL); - m_eventHandler=handlerB; - if ( deleteHandler ) - { - delete handlerA; - handlerA = (wxEvtHandler *)NULL; - } - } - - return handlerA; -} - -void wxCanvasObject::AppendEventHandler(wxEvtHandler *handler) -{ - GetEventHandler()->SetNextHandler(handler); -} - -wxEvtHandler *wxCanvasObject::RemoveLastEventHandler(bool deleteHandler) -{ - //always the first in the row - wxEvtHandler *handlerA = m_eventHandler; - wxEvtHandler *handlerB=handlerA; - //goto the end - while ( handlerA->GetNextHandler() ) - { - handlerB = handlerA; - handlerA = handlerA->GetNextHandler(); - } - - handlerB->SetNextHandler((wxEvtHandler *)NULL); - if ( deleteHandler ) - { - delete handlerA; - } - - return GetEventHandler(); -} - -wxRect wxCanvasObject::GetAbsoluteArea(const wxTransformMatrix& cworld) -{ - wxBoundingBox tmp=m_bbox; - tmp.MapBbox(cworld); - - int x1 = m_admin->LogicalToDeviceX( tmp.GetMinX() ); - int y1 = m_admin->LogicalToDeviceY( tmp.GetMinY() ); - int x2 = m_admin->LogicalToDeviceX( tmp.GetMaxX() ); - int y2 = m_admin->LogicalToDeviceY( tmp.GetMaxY() ); - - if (x1 > x2) - { - int tmp = x1; - x1 = x2; - x2 = tmp; - } - if (y1 > y2) - { - int tmp = y1; - y1 = y2; - y2 = tmp; - } - - wxRect tmparea; - tmparea.x = x1; - tmparea.y = y1; - tmparea.width = x2-x1; // FIXME +1 ? - tmparea.height = y2-y1; // FIXME +1 ? - - return tmparea; -} - -void wxCanvasObject::MoveAbsolute( double x, double y ) -{ - //save old position of boundingbox - double oldx = GetXMin(); - double oldy = GetYMin(); - double w = m_bbox.GetWidth(); - double h = m_bbox.GetHeight(); - - SetPosXY(x,y); - - double newx=GetXMin(); - double newy=GetYMin(); - - double leftu,rightu,bottomu,topu ; - leftu = wxMin (oldx, newx ) ; - rightu = wxMax (oldx + w, newx + w) ; - topu = wxMin (oldy, newy) ; - bottomu = wxMax (oldy + h, newy + h) ; - - if ( rightu - leftu < 2*w && bottomu - topu < 2*h ) - { - m_admin->Update( this,leftu, topu, rightu - leftu, bottomu - topu); - } - else - { - m_admin->Update( this, oldx, oldy, w, h ); - m_admin->Update( this, newx, newy, w, h ); - } -} - -void wxCanvasObject::MoveRelative( double x, double y ) -{ - //save old position of boundingbox - double oldx = GetXMin(); - double oldy = GetYMin(); - double w = m_bbox.GetWidth(); - double h = m_bbox.GetHeight(); - - TransLate(x,y); - - double newx=GetXMin(); - double newy=GetYMin(); - - double leftu,rightu,bottomu,topu ; - leftu = wxMin (oldx, newx ) ; - rightu = wxMax (oldx + w, newx + w) ; - topu = wxMin (oldy, newy) ; - bottomu = wxMax (oldy + h, newy + h) ; - - if ( rightu - leftu < 2*w && bottomu - topu < 2*h ) - { - m_admin->Update( this,leftu, topu, rightu - leftu, bottomu - topu); - } - else - { - m_admin->Update( this, oldx, oldy, w, h ); - m_admin->Update( this, newx, newy, w, h ); - } -} - - -void wxCanvasObject::DragStart() -{ - if (m_dragmode == wxDRAG_RECTANGLE) - { - this->SetVisible(FALSE); - wxTransformMatrix help; - double x = GetXMin(); - double y = GetYMin(); - double w = m_bbox.GetWidth(); - double h = m_bbox.GetHeight(); - m_admin->Update( this, x, y, w, h ); - m_admin->UpdateNow(); - - wxRect recold=GetAbsoluteArea(help); - wxClientDC dc(m_admin->GetActive()); - dc.SetPen(*wxBLACK_PEN); - dc.SetBrush(*wxTRANSPARENT_BRUSH); - dc.SetLogicalFunction(wxINVERT); - dc.DrawRectangle(recold); - dc.SetBrush(wxNullBrush); - dc.SetPen(wxNullPen); - } - else if (m_dragmode != wxDRAG_REDRAW) - { - this->SetVisible(FALSE); - wxTransformMatrix help; - double x = GetXMin(); - double y = GetYMin(); - double w = m_bbox.GetWidth(); - double h = m_bbox.GetHeight(); - - wxRect recnew=GetAbsoluteArea(help); - - //redraw in buffer what should be there without this object - m_admin->Update( this, x, y, w, h ); - m_admin->GetActive()->Freeze(); - - //save the drawing (without the object itself to a bitmap) - m_atnewpos = wxBitmap(recnew.width,recnew.height); - wxMemoryDC dcm; - dcm.SelectObject(*m_admin->GetActive()->GetBuffer()); - wxMemoryDC tmp; - tmp.SelectObject(m_atnewpos); - tmp.Blit(0,0,recnew.width,recnew.height,&dcm,recnew.x,recnew.y,wxCOPY,FALSE); - tmp.SelectObject(wxNullBitmap); - dcm.SelectObject(wxNullBitmap); - } -} - - -void wxCanvasObject::DragRelative( double x, double y) -{ - if (m_dragmode == wxDRAG_RECTANGLE) - { - wxTransformMatrix help; - - wxRect recold=GetAbsoluteArea(help); - - TransLate(x,y); - - wxRect recnew=GetAbsoluteArea(help); - - wxClientDC dc(m_admin->GetActive()); - dc.SetPen(*wxBLACK_PEN); - dc.SetBrush(*wxTRANSPARENT_BRUSH); - dc.SetLogicalFunction(wxINVERT); - dc.DrawRectangle(recold); - dc.DrawRectangle(recnew); - dc.SetBrush(wxNullBrush); - dc.SetPen(wxNullPen); - } - else if (m_dragmode != wxDRAG_REDRAW) - { - wxClientDC dc(m_admin->GetActive()); - wxMemoryDC tmp; - - wxTransformMatrix help; - wxRect recold=GetAbsoluteArea(help); - - //restore what was there (without the object itself) - wxMemoryDC dcm; - dcm.SelectObject(*m_admin->GetActive()->GetBuffer()); - tmp.SelectObject(m_atnewpos); - dcm.Blit(recold.x,recold.y,recold.width,recold.height,&tmp,0,0,wxCOPY,FALSE); - - TransLate(x,y); - - wxRect recnew=GetAbsoluteArea(help); - - //save the contents of the buffer at the new position - tmp.Blit(0,0,recnew.width,recnew.height,&dcm,recnew.x,recnew.y,wxCOPY,FALSE); - tmp.SelectObject(wxNullBitmap); - - //m_atnewpos = m_admin->GetActive()->GetBuffer()->GetSubBitmap( recnew ); - - this->SetVisible(TRUE); - //redraw object into the buffer - m_admin->GetActive()->SetDC(&dcm); - Render(&help,recnew.x,recnew.y,recnew.width,recnew.height); - - //draw the union or seperate to the canvas - double leftu,rightu,bottomu,topu ; - leftu = wxMin (recold.x, recnew.x ) ; - rightu = wxMax (recold.x + recold.width, recnew.x + recnew.width ) ; - topu = wxMin (recold.y, recnew.y) ; - bottomu = wxMax (recold.y + recold.height, recnew.y + recnew.height) ; - - if ( rightu - leftu < 2*recold.width && bottomu - topu < 2*recold.height) - { - dc.Blit(leftu,topu,rightu - leftu,bottomu - topu,&dcm,leftu,topu,wxCOPY,FALSE); - } - else - { - //do them seperate - //first redraw what should be at the old position in the canvas - dc.Blit(recold.x,recold.y,recold.width,recold.height,&dcm,recold.x,recold.y,wxCOPY,FALSE); - //blit the new position of the object to the canvas - dc.Blit(recnew.x,recnew.y,recnew.width,recnew.height,&dcm,recnew.x,recnew.y,wxCOPY,FALSE); - } - dcm.SelectObject(wxNullBitmap); - this->SetVisible(FALSE); - } - else - MoveRelative(x,y); -} - - -void wxCanvasObject::DragEnd() -{ - m_atnewpos = wxBitmap(0,0); - m_admin->GetActive()->Thaw(); - this->SetVisible(TRUE); - double x = GetXMin(); - double y = GetYMin(); - double w = m_bbox.GetWidth(); - double h = m_bbox.GetHeight(); - m_admin->Update( this, x, y, w, h ); - m_admin->UpdateNow(); -} - -wxCanvasObject* wxCanvasObject::IsHitWorld( double x, double y, double margin ) -{ - if ((x >= m_bbox.GetMinX()-margin) && - (x <= m_bbox.GetMaxX()+margin) && - (y >= m_bbox.GetMinY()-margin) && - (y <= m_bbox.GetMaxY()+margin)) - { - return this; - } - - return (wxCanvasObject*) NULL; -} - -wxCanvasObject* wxCanvasObject::Contains( wxCanvasObject* obj ) -{ - if (obj == this) - return this; - - return (wxCanvasObject*) NULL; -} - -void wxCanvasObject::CaptureMouse() -{ - m_admin->GetActive()->SetCaptureMouse( this ); -} - -void wxCanvasObject::ReleaseMouse() -{ - m_admin->GetActive()->SetCaptureMouse( NULL ); -} - -bool wxCanvasObject::IsCapturedMouse() -{ - return (m_admin->GetActive()->GetCaptured() == this); -} - - -void wxCanvasObject::Render(wxTransformMatrix* cworld, int clip_x, int clip_y, int clip_width, int clip_height ) -{ -} - -void wxCanvasObject::CalcBoundingBox() -{ -} - -void wxCanvasObject::WriteSVG( wxTextOutputStream &stream ) -{ -} - -//---------------------------------------------------------------------------- -// wxCanvasObjectGroup -//---------------------------------------------------------------------------- - -IMPLEMENT_CLASS(wxCanvasObjectGroup, wxCanvasObject) - -wxCanvasObjectGroup::wxCanvasObjectGroup(double x, double y) -{ - lworld.Translate(x,y); - //no objects make the bounding box the x,y and take care of it later - m_bbox.Expand(x,y); -} - -wxCanvasObjectGroup::~wxCanvasObjectGroup() -{ -} - -void wxCanvasObjectGroup::PushEventHandler(wxEvtHandler *handler) -{ - wxCanvasObject::PushEventHandler(handler); - wxNode *node = m_objects.First(); - while (node) - { - wxCanvasObject *obj = (wxCanvasObject*) node->Data(); - - obj->PushEventHandler(handler); - - node = node->Next(); - } -} - -wxEvtHandler *wxCanvasObjectGroup::PopEventHandler(bool deleteHandler) -{ - wxNode *node = m_objects.First(); - while (node) - { - wxCanvasObject *obj = (wxCanvasObject*) node->Data(); - - obj->PopEventHandler(deleteHandler); - - node = node->Next(); - } - return wxCanvasObject::PopEventHandler(deleteHandler); -} - -void wxCanvasObjectGroup::AppendEventHandler(wxEvtHandler *handler) -{ - wxCanvasObject::AppendEventHandler(handler); - wxNode *node = m_objects.First(); - while (node) - { - wxCanvasObject *obj = (wxCanvasObject*) node->Data(); - - obj->AppendEventHandler(handler); - - node = node->Next(); - } -} - -wxEvtHandler *wxCanvasObjectGroup::RemoveLastEventHandler(bool deleteHandler) -{ - wxNode *node = m_objects.First(); - while (node) - { - wxCanvasObject *obj = (wxCanvasObject*) node->Data(); - - obj->RemoveLastEventHandler(deleteHandler); - - node = node->Next(); - } - return wxCanvasObject::RemoveLastEventHandler(deleteHandler); -} - -void wxCanvasObjectGroup::TransLate( double x, double y ) -{ - lworld.Translate(x,y); - CalcBoundingBox(); -} - -void wxCanvasObjectGroup::SetAdmin(wxCanvasAdmin* admin) -{ - m_admin=admin; - wxNode *node = m_objects.First(); - while (node) - { - wxCanvasObject *obj = (wxCanvasObject*) node->Data(); - - obj->SetAdmin(admin); - - node = node->Next(); - } -} - -void wxCanvasObjectGroup::DeleteContents( bool flag) -{ - m_objects.DeleteContents( flag ); - m_bbox.SetValid(FALSE); - CalcBoundingBox(); -} - -void wxCanvasObjectGroup::Prepend( wxCanvasObject* obj ) -{ - m_objects.Insert( obj ); - if (m_objects.First()) - { - m_bbox.Expand(obj->GetBbox()); - } - else - { - m_bbox.SetValid(FALSE); - CalcBoundingBox(); - } -} - -void wxCanvasObjectGroup::Append( wxCanvasObject* obj ) -{ - m_objects.Append( obj ); - if (m_objects.First()) - { - m_bbox.Expand(obj->GetBbox()); - } - else - { - m_bbox.SetValid(FALSE); - CalcBoundingBox(); - } -} - -void wxCanvasObjectGroup::Insert( size_t before, wxCanvasObject* obj ) -{ - m_objects.Insert( before, obj ); - m_bbox.SetValid(FALSE); - if (m_objects.First()) - { - m_bbox.Expand(obj->GetBbox()); - } - else - { - m_bbox.SetValid(FALSE); - CalcBoundingBox(); - } -} - -void wxCanvasObjectGroup::Remove( wxCanvasObject* obj ) -{ - m_objects.DeleteObject( obj ); - m_bbox.SetValid(FALSE); - CalcBoundingBox(); -} - -void wxCanvasObjectGroup::CalcBoundingBox() -{ - m_bbox.SetValid(FALSE); - wxNode *node = m_objects.First(); - while (node) - { - wxCanvasObject *obj = (wxCanvasObject*) node->Data(); - - - obj->CalcBoundingBox(); - wxBoundingBox tmp; - tmp=obj->GetBbox(); - tmp.MapBbox(lworld); - - m_bbox.Expand( tmp ); - node = node->Next(); - } -} - -void wxCanvasObjectGroup::Render(wxTransformMatrix* cworld, int x, int y, int width, int height ) -{ - if (!m_visible) return; - - wxTransformMatrix backup = *cworld; - *cworld *= lworld; - - wxNode *node = m_objects.First(); - - if (!node) return; - - -#ifdef CANVASDEBUG - wxRect absarea=GetAbsoluteArea(*cworld); - wxDC *dc = m_admin->GetActive()->GetDC(); - dc->SetPen(*wxBLACK_PEN); - dc->SetBrush(*wxTRANSPARENT_BRUSH); - dc->DrawRectangle( absarea.x , absarea.y , absarea.width , absarea.height ); - dc->SetBrush(wxNullBrush); - dc->SetPen(wxNullPen); -#endif - //TODO the next will only work if all boundingboxes stay up to date (problem when mowing currently - /* - if (! ( wxMax(absarea.x, x) < wxMin(absarea.x + absarea.width , x + width ) && - wxMax(absarea.y, y) < wxMin(absarea.y + absarea.height , y + height ) - ) - ) - return; - */ - - // cycle through all objects - while (node) - { - wxCanvasObject *obj = (wxCanvasObject*) node->Data(); - - if (!obj->IsControl() && obj->GetVisible()) - { - - //get area at the absolute position - wxRect absareaobject = obj->GetAbsoluteArea(*cworld); - - // If we have 10.000 objects, we will go through - // this 10.000 times for each update, so we have - // to optimise carefully. - int clip_x = absareaobject.x; - int clip_width = absareaobject.width; - if (clip_x < x) - { - clip_width -= x-clip_x; - clip_x = x; - } - if (clip_width > 0) - { - if (clip_x + clip_width > x + width) - clip_width = x+width-clip_x; - - if (clip_width > 0) - { - int clip_y = absareaobject.y; - int clip_height = absareaobject.height; - if (clip_y < y) - { - clip_height -= y-clip_y; - clip_y = y; - } - if (clip_height > 0) - { - if (clip_y + clip_height > y + height) - clip_height = y+height-clip_y; - - if (clip_height > 0) - { - obj->Render(cworld, clip_x, clip_y, clip_width, clip_height ); - } - } - } - } - } - - node = node->Next(); - } - *cworld = backup; -} - -void wxCanvasObjectGroup::WriteSVG( wxTextOutputStream &stream ) -{ -} - -wxCanvasObject* wxCanvasObjectGroup::IsHitWorld( double x, double y, double margin ) -{ - //KKKfirst check if within bbox - //will only work if they are always uptodate - //if (!m_bbox.PointInBox(x,y,margin)) - // return (wxCanvasObject*) NULL; - - wxTransformMatrix inverse = lworld; - double xh,yh; - inverse.Invert(); - inverse.TransformPoint(x,y,xh,yh); - - wxCanvasObject *obj=0; - wxNode *node = m_objects.Last(); - while (node) - { - obj=(wxCanvasObject*) node->Data(); - - if (!obj->IsControl() ) - { - if (obj->IsHitWorld(xh,yh,margin)) - { - return obj; - } - } - node = node->Previous(); - } - - return (wxCanvasObject*) NULL; -} - -wxCanvasObject* wxCanvasObjectGroup::Contains( wxCanvasObject* obj ) -{ - wxCanvasObject* cobj; - wxNode *node = m_objects.First(); - while (node) - { - cobj=(wxCanvasObject*) node->Data(); - - if (cobj->Contains(obj)) - { - return obj; - } - node = node->Next(); - } - - return (wxCanvasObject*) NULL; -} - -int wxCanvasObjectGroup::IndexOf( wxCanvasObject* obj ) -{ - return m_objects.IndexOf( obj ); -} - -//---------------------------------------------------------------------------- -// wxCanvasObjectRef -//---------------------------------------------------------------------------- - -IMPLEMENT_CLASS(wxCanvasObjectRef, wxCanvasObject) - -wxCanvasObjectRef::wxCanvasObjectRef(double x, double y, wxCanvasObject* obj) - : wxCanvasObject() -{ - lworld.Translate(x,y); - m_obj = obj; - - m_bbox.SetValid(FALSE); - wxBoundingBox tmp; - tmp=obj->GetBbox(); - tmp.MapBbox(lworld); - m_bbox.Expand( tmp ); -} - -void wxCanvasObjectRef::PushEventHandler(wxEvtHandler *handler) -{ - wxCanvasObject::PushEventHandler(handler); - m_obj->PushEventHandler(handler); -} - -wxEvtHandler *wxCanvasObjectRef::PopEventHandler(bool deleteHandler) -{ - m_obj->PopEventHandler(deleteHandler); - return wxCanvasObject::PopEventHandler(deleteHandler); -} - -void wxCanvasObjectRef::AppendEventHandler(wxEvtHandler *handler) -{ - wxCanvasObject::AppendEventHandler(handler); - m_obj->AppendEventHandler(handler); -} - -wxEvtHandler *wxCanvasObjectRef::RemoveLastEventHandler(bool deleteHandler) -{ - m_obj->RemoveLastEventHandler(deleteHandler); - return wxCanvasObject::RemoveLastEventHandler(deleteHandler); -} - -void wxCanvasObjectRef::TransLate( double x, double y ) -{ - lworld.Translate(x,y); - CalcBoundingBox(); -} - -wxCanvasObject* wxCanvasObjectRef::Contains( wxCanvasObject* obj ) -{ - if (obj == this || m_obj->Contains(obj)) - return this; - - return (wxCanvasObject*) NULL; -} - - -void wxCanvasObjectRef::SetRotation(double rotation) -{ - lworld.SetRotation(rotation); - CalcBoundingBox(); -} - -void wxCanvasObjectRef::SetScale(double scalex,double scaley) -{ - lworld.Scale(scalex,scaley,lworld.GetValue(2,0),lworld.GetValue(2,1)); - CalcBoundingBox(); -} - -void wxCanvasObjectRef::SetAdmin(wxCanvasAdmin* admin) -{ - m_admin = admin; - m_obj->SetAdmin(admin); -} - -void wxCanvasObjectRef::CalcBoundingBox() -{ - m_bbox.SetValid(FALSE); - m_obj->CalcBoundingBox(); - - wxBoundingBox tmp; - tmp=m_obj->GetBbox(); - tmp.MapBbox(lworld); - m_bbox.Expand( tmp ); -} - -void wxCanvasObjectRef::Render(wxTransformMatrix* cworld, int x, int y, int width, int height ) -{ - if (!m_visible) return; - - //get the absolute area (without the local matrix included) - //the boundingbox is relative to the parent. - wxRect absarea=GetAbsoluteArea(*cworld); - - wxTransformMatrix backup = *cworld; - *cworld *= lworld; - -#ifdef CANVASDEBUG - wxDC *dc = m_admin->GetActive()->GetDC(); - dc->SetPen(*wxBLACK_PEN); - dc->SetBrush(*wxTRANSPARENT_BRUSH); - dc->DrawRectangle( absarea.x , absarea.y , absarea.width , absarea.height ); - dc->SetBrush(wxNullBrush); - dc->SetPen(wxNullPen); -#endif - - int clip_x = absarea.x; - int clip_width = absarea.width; - if (clip_x < x) - { - clip_width -= x-clip_x; - clip_x = x; - } - if (clip_width > 0) - { - if (clip_x + clip_width > x + width) - clip_width = x+width-clip_x; - - if (clip_width > 0) - { - int clip_y = absarea.y; - int clip_height = absarea.height; - if (clip_y < y) - { - clip_height -= y-clip_y; - clip_y = y; - } - if (clip_height > 0) - { - if (clip_y + clip_height > y + height) - clip_height = y+height-clip_y; - - if (clip_height > 0) - m_obj->Render(cworld, clip_x, clip_y, clip_width, clip_height ); - } - } - } - - *cworld = backup; -} - -void wxCanvasObjectRef::WriteSVG( wxTextOutputStream &stream ) -{ -} - -wxCanvasObject* wxCanvasObjectRef::IsHitWorld( double x, double y, double margin ) -{ - //KKKfirst check if within bbox - //will only work if they are always uptodate - //if (!m_bbox.PointInBox(x,y,margin)) - // return (wxCanvasObject*) NULL; - - wxTransformMatrix inverse = lworld; - double xh,yh; - inverse.Invert(); - inverse.TransformPoint(x,y,xh,yh); - - if (m_obj->IsHitWorld(xh,yh,margin)) - return this; - - return (wxCanvasObject*) NULL; -} - - - -//---------------------------------------------------------------------------- -// wxCanvasRect -//---------------------------------------------------------------------------- - -IMPLEMENT_CLASS(wxCanvasRect, wxCanvasObject) - -wxCanvasRect::wxCanvasRect( double x, double y, double w, double h , double radius ) - : wxCanvasObject() -{ - m_x = x; - m_y = y; - m_width = w; - m_height = h; - m_radius = radius; - - m_brush = *wxBLACK_BRUSH; - m_pen = *wxTRANSPARENT_PEN; - CalcBoundingBox(); -} - -void wxCanvasRect::TransLate( double x, double y ) -{ - m_x += x; - m_y += y; - CalcBoundingBox(); -} - -void wxCanvasRect::CalcBoundingBox() -{ - m_bbox.SetMin( m_x , m_y); - m_bbox.SetMax( m_x + m_width ,m_y + m_height ); - - //include the pen width also -//KKK m_bbox.EnLarge(m_pen.GetWidth()+m_radius); - m_bbox.EnLarge(m_pen.GetWidth()/2); -} - -void wxCanvasRect::Render(wxTransformMatrix* cworld, int clip_x, int clip_y, int clip_width, int clip_height ) -{ - if (!m_visible) return; - - if (cworld->GetRotation()) - { - wxPoint *cpoints = new wxPoint[4]; - double x; - double y; - cworld->TransformPoint( m_x, m_y, x, y ); - cpoints[0].x = m_admin->LogicalToDeviceX(x); - cpoints[0].y = m_admin->LogicalToDeviceY(y); - cworld->TransformPoint( m_x , m_y + m_height, x, y ); - cpoints[1].x = m_admin->LogicalToDeviceX(x); - cpoints[1].y = m_admin->LogicalToDeviceY(y); - cworld->TransformPoint( m_x + m_width, m_y + m_height, x, y ); - cpoints[2].x = m_admin->LogicalToDeviceX(x); - cpoints[2].y = m_admin->LogicalToDeviceY(y); - cworld->TransformPoint( m_x + m_width, m_y , x, y ); - cpoints[3].x = m_admin->LogicalToDeviceX(x); - cpoints[3].y = m_admin->LogicalToDeviceY(y); - - wxDC *dc = m_admin->GetActive()->GetDC(); - dc->SetClippingRegion(clip_x, clip_y, clip_width, clip_height); - dc->SetBrush(m_brush); - int pw=m_pen.GetWidth(); - m_pen.SetWidth(m_admin->LogicalToDeviceXRel(pw)); - dc->SetPen(m_pen); - dc->DrawPolygon(4, cpoints, 0,0,wxWINDING_RULE); - delete [] cpoints; - dc->SetBrush(wxNullBrush); - dc->SetPen(wxNullPen); - dc->DestroyClippingRegion(); - m_pen.SetWidth(pw); - } - else - { - wxDC *dc = m_admin->GetActive()->GetDC(); - dc->SetClippingRegion(clip_x, clip_y, clip_width, clip_height); - dc->SetBrush(m_brush); - int pw=m_pen.GetWidth(); - m_pen.SetWidth(m_admin->LogicalToDeviceXRel(pw)); - dc->SetPen(m_pen); - //yes the whole not only the clipping region, because we have a pen also - int x = m_admin->LogicalToDeviceX(cworld->GetValue(2,0) + m_x ); - int y = m_admin->LogicalToDeviceY(cworld->GetValue(2,1) + m_y ); - int w = m_admin->LogicalToDeviceXRel( m_width ); - int h = m_admin->LogicalToDeviceYRel( m_height ); - int r = m_admin->LogicalToDeviceYRel( m_radius ); - if (w > 0 && w < 1) w=1; - if (w < 0 && w > -1) w=-1; - if (h > 0 && h < 1) h=1; - if (h < 0 && h > -1) h=-1; - if (m_radius) - dc->DrawRoundedRectangle( x,y,w,h,r); - else - dc->DrawRectangle( x,y,w,h); - dc->SetBrush(wxNullBrush); - dc->SetPen(wxNullPen); - dc->DestroyClippingRegion(); - m_pen.SetWidth(pw); - } -} - -void wxCanvasRect::WriteSVG( wxTextOutputStream &stream ) -{ -} - -//---------------------------------------------------------------------------- -// wxCanvasCircle -//---------------------------------------------------------------------------- - -wxCanvasCircle::wxCanvasCircle( double x, double y, double radius ) - : wxCanvasObject() -{ - m_x = x; - m_y = y; - m_radius = radius; - - m_brush = *wxBLACK_BRUSH; - m_pen = *wxTRANSPARENT_PEN; - CalcBoundingBox(); -} - -void wxCanvasCircle::TransLate( double x, double y ) -{ - m_x += x; - m_y += y; - CalcBoundingBox(); -} - -void wxCanvasCircle::CalcBoundingBox() -{ - m_bbox.SetMin( m_x-m_radius , m_y-m_radius ); - m_bbox.SetMax( m_x+m_radius , m_y+m_radius ); - - //include the pen width also - m_bbox.EnLarge(m_pen.GetWidth()/2); -} - -void wxCanvasCircle::Render(wxTransformMatrix* cworld, int clip_x, int clip_y, int clip_width, int clip_height ) -{ - if (!m_visible) return; - - wxDC *dc = m_admin->GetActive()->GetDC(); - dc->SetClippingRegion(clip_x, clip_y, clip_width, clip_height); - dc->SetBrush(m_brush); - int pw=m_pen.GetWidth(); - m_pen.SetWidth(m_admin->LogicalToDeviceXRel(pw)); - dc->SetPen(m_pen); - //yes the whole not only the clipping region, because we have a pen also - //and rotation on a circle is not important so only a shift with cworld - int x = m_admin->LogicalToDeviceX(cworld->GetValue(2,0) + m_x ); - int y = m_admin->LogicalToDeviceY(cworld->GetValue(2,1) + m_y ); - int radius = m_admin->LogicalToDeviceXRel( m_radius ); - if (radius < 1) radius=1; - dc->DrawCircle( x,y,radius); - dc->SetBrush(wxNullBrush); - dc->SetPen(wxNullPen); - dc->DestroyClippingRegion(); - m_pen.SetWidth(pw); -} - -void wxCanvasCircle::WriteSVG( wxTextOutputStream &stream ) -{ -} - -wxCanvasObject* wxCanvasCircle::IsHitWorld( double x, double y, double margin ) -{ - if ((x >= m_bbox.GetMinX()-margin) && - (x <= m_bbox.GetMaxX()+margin) && - (y >= m_bbox.GetMinY()-margin) && - (y <= m_bbox.GetMaxY()+margin) - ) - { - if (m_radius+m_pen.GetWidth()/2+margin > sqrt(pow(m_x-x,2)+pow(m_y-y,2))) - return this; - else - return (wxCanvasObject*) NULL; - } - return (wxCanvasObject*) NULL; -} - -//---------------------------------------------------------------------------- -// wxCanvasEllipse -//---------------------------------------------------------------------------- - -wxCanvasEllipse::wxCanvasEllipse( double x, double y, double width, double height ) - : wxCanvasObject() -{ - m_x = x; - m_y = y; - m_width = width; - m_height = height; - - m_brush = *wxBLACK_BRUSH; - m_pen = *wxTRANSPARENT_PEN; - CalcBoundingBox(); -} - -void wxCanvasEllipse::TransLate( double x, double y ) -{ - m_x += x; - m_y += y; - CalcBoundingBox(); -} - -void wxCanvasEllipse::CalcBoundingBox() -{ - m_bbox.SetMin( m_x, m_y ); - m_bbox.SetMax( m_x+m_width , m_y+m_height ); - - //include the pen width also - m_bbox.EnLarge(m_pen.GetWidth()/2); -} - -void wxCanvasEllipse::Render(wxTransformMatrix* cworld, int clip_x, int clip_y, int clip_width, int clip_height ) -{ - if (!m_visible) return; - - wxDC *dc = m_admin->GetActive()->GetDC(); - dc->SetClippingRegion(clip_x, clip_y, clip_width, clip_height); - dc->SetBrush(m_brush); - int pw=m_pen.GetWidth(); - m_pen.SetWidth(m_admin->LogicalToDeviceXRel(pw)); - dc->SetPen(m_pen); - int x = m_admin->LogicalToDeviceX(cworld->GetValue(2,0) + m_x ); - int y = m_admin->LogicalToDeviceY(cworld->GetValue(2,1) + m_y ); - int w = m_admin->LogicalToDeviceXRel( m_width ); - int h = m_admin->LogicalToDeviceYRel( m_height ); - if (w > 0 && w < 1) w=1; - if (w < 0 && w > -1) w=-1; - if (h > 0 && h < 1) h=1; - if (h < 0 && h > -1) h=-1; - dc->DrawEllipse( x,y,w,h); - dc->SetBrush(wxNullBrush); - dc->SetPen(wxNullPen); - dc->DestroyClippingRegion(); - m_pen.SetWidth(pw); -} - -void wxCanvasEllipse::WriteSVG( wxTextOutputStream &stream ) -{ -} - -wxCanvasObject* wxCanvasEllipse::IsHitWorld( double x, double y, double margin ) -{ - if ((x >= m_bbox.GetMinX()-margin) && - (x <= m_bbox.GetMaxX()+margin) && - (y >= m_bbox.GetMinY()-margin) && - (y <= m_bbox.GetMaxY()+margin) - ) - { - double a=(m_width+m_pen.GetWidth())/2+margin ; - double b=(m_height+m_pen.GetWidth())/2+margin; - double c=pow((m_x+m_width/2-x)/a,2)+pow((m_y+m_height/2-y)/b,2); - if ( 1 > c) - return this; - else - return (wxCanvasObject*) NULL; - } - return (wxCanvasObject*) NULL; -} - -//---------------------------------------------------------------------------- -// wxCanvasEllipticArc -//---------------------------------------------------------------------------- - -wxCanvasEllipticArc::wxCanvasEllipticArc( double x, double y, double width, double height, double start, double end ) - : wxCanvasObject() -{ - m_x = x; - m_y = y; - m_width = width; - m_height = height; - m_start = start; - m_end = end; - - m_brush = *wxBLACK_BRUSH; - m_pen = *wxTRANSPARENT_PEN; - CalcBoundingBox(); -} - -void wxCanvasEllipticArc::TransLate( double x, double y ) -{ - m_x += x; - m_y += y; - CalcBoundingBox(); -} - -void wxCanvasEllipticArc::CalcBoundingBox() -{ - m_bbox.SetMin( m_x, m_y ); - m_bbox.SetMax( m_x+m_width , m_y+m_height ); - - //include the pen width also - m_bbox.EnLarge(m_pen.GetWidth()/2); -} - -void wxCanvasEllipticArc::Render(wxTransformMatrix* cworld, int clip_x, int clip_y, int clip_width, int clip_height ) -{ - if (!m_visible) return; - - wxDC *dc = m_admin->GetActive()->GetDC(); - dc->SetClippingRegion(clip_x, clip_y, clip_width, clip_height); - dc->SetBrush(m_brush); - int pw=m_pen.GetWidth(); - m_pen.SetWidth(m_admin->LogicalToDeviceXRel(pw)); - dc->SetPen(m_pen); - int x = m_admin->LogicalToDeviceX(cworld->GetValue(2,0) + m_x ); - int y = m_admin->LogicalToDeviceY(cworld->GetValue(2,1) + m_y ); - int w = m_admin->LogicalToDeviceXRel( m_width ); - int h = m_admin->LogicalToDeviceYRel( m_height ); - if (w > 0 && w < 1) w=1; - if (w < 0 && w > -1) w=-1; - if (h > 0 && h < 1) h=1; - if (h < 0 && h > -1) h=-1; - if (m_admin->GetActive()->GetYaxis()) - dc->DrawEllipticArc( x,y,w,h,-m_end,-m_start); - else - dc->DrawEllipticArc( x,y,w,h,m_start,m_end); - dc->SetBrush(wxNullBrush); - dc->SetPen(wxNullPen); - dc->DestroyClippingRegion(); - m_pen.SetWidth(pw); -} - -void wxCanvasEllipticArc::WriteSVG( wxTextOutputStream &stream ) -{ -} - -wxCanvasObject* wxCanvasEllipticArc::IsHitWorld( double x, double y, double margin ) -{ - if ((x >= m_bbox.GetMinX()-margin) && - (x <= m_bbox.GetMaxX()+margin) && - (y >= m_bbox.GetMinY()-margin) && - (y <= m_bbox.GetMaxY()+margin) - ) - { - double a=(m_width+m_pen.GetWidth())/2+margin ; - double b=(m_height+m_pen.GetWidth())/2+margin; - double c=pow((m_x+m_width/2-x)/a,2)+pow((m_y+m_height/2-y)/b,2); - if ( 1 > c) - return this; - else - return (wxCanvasObject*) NULL; - } - return (wxCanvasObject*) NULL; -} - -//---------------------------------------------------------------------------- -// wxCanvasLine -//---------------------------------------------------------------------------- - -wxCanvasLine::wxCanvasLine( double x1, double y1, double x2, double y2 ) - : wxCanvasObject() -{ - m_x1 = x1; - m_y1 = y1; - m_x2 = x2; - m_y2 = y2; - - m_pen = *wxBLACK_PEN; - CalcBoundingBox(); -} - -void wxCanvasLine::TransLate( double x, double y ) -{ - m_x1 += x; - m_y1 += y; - m_x2 += x; - m_y2 += y; - CalcBoundingBox(); -} - -void wxCanvasLine::CalcBoundingBox() -{ - m_bbox.SetMin( m_x1 , m_y1); - m_bbox.SetMax( m_x2 , m_y2); - - //include the pen width also - m_bbox.EnLarge(m_pen.GetWidth()/2); -} - -void wxCanvasLine::Render(wxTransformMatrix* cworld, int clip_x, int clip_y, int clip_width, int clip_height ) -{ - if (!m_visible) return; - - double x1,y1,x2,y2; - cworld->TransformPoint( m_x1, m_y1, x1, y1 ); - cworld->TransformPoint( m_x2, m_y2, x2, y2 ); - x1 = m_admin->LogicalToDeviceX( x1 ); - y1 = m_admin->LogicalToDeviceY( y1 ); - x2 = m_admin->LogicalToDeviceX( x2 ); - y2 = m_admin->LogicalToDeviceY( y2 ); - - wxDC *dc = m_admin->GetActive()->GetDC(); - dc->SetClippingRegion( clip_x, clip_y, clip_width, clip_height ); - int pw=m_pen.GetWidth(); - m_pen.SetWidth(m_admin->LogicalToDeviceXRel(pw)); - dc->SetPen( m_pen ); - dc->DrawLine( x1, y1, x2, y2 ); - - dc->DestroyClippingRegion(); - m_pen.SetWidth(pw); -} - -void wxCanvasLine::WriteSVG( wxTextOutputStream &stream ) -{ - // no idea -} - -wxCanvasObject* wxCanvasLine::IsHitWorld( double x, double y, double margin ) -{ - if ((x >= m_bbox.GetMinX()-margin) && - (x <= m_bbox.GetMaxX()+margin) && - (y >= m_bbox.GetMinY()-margin) && - (y <= m_bbox.GetMaxY()+margin) - ) - { - wxLine line1(m_x1,m_y1,m_x2,m_y2); - wxPoint2DDouble P=wxPoint2DDouble(x,y); - double distance; - if (line1.PointInLine(P,distance,m_pen.GetWidth()/2+margin) == R_IN_AREA) - return this; - else - return (wxCanvasObject*) NULL; - } - return (wxCanvasObject*) NULL; -} - -//---------------------------------------------------------------------------- -// wxCanvasImage -//---------------------------------------------------------------------------- - -wxCanvasImage::wxCanvasImage( const wxImage &image, double x, double y, double w, double h ) - : wxCanvasObject() -{ - m_x = x; - m_y = y; - m_width = w; - m_height = h; - - m_image = image; - - m_orgw = m_image.GetWidth(); - m_orgh = m_image.GetHeight(); - - m_isImage = TRUE; - CalcBoundingBox(); -} - -void wxCanvasImage::SetPosXY( double x, double y) -{ - m_x = x; - m_y = y; - CalcBoundingBox(); -} - -void wxCanvasImage::TransLate( double x, double y ) -{ - m_x += x; - m_y += y; - CalcBoundingBox(); -} - -void wxCanvasImage::CalcBoundingBox() -{ - m_bbox.SetMin( m_x, m_y ); - m_bbox.SetMax( m_x + m_width, m_y + m_height ); -} - -void wxCanvasImage::Render(wxTransformMatrix* cworld, int clip_x, int clip_y, int clip_width, int clip_height ) -{ - if (!m_visible) return; - - wxRect tmparea; - - tmparea.x = m_admin->LogicalToDeviceXRel( m_bbox.GetMinX()); - tmparea.y = m_admin->LogicalToDeviceYRel( m_bbox.GetMinY()); - tmparea.width = m_admin->LogicalToDeviceXRel( m_bbox.GetWidth() ); - tmparea.height = m_admin->LogicalToDeviceYRel( m_bbox.GetHeight() ); - - double x; - double y; - cworld->TransformPoint( m_x, m_y, x, y ); - x = m_admin->LogicalToDeviceX(x); - y = m_admin->LogicalToDeviceY(y); - - - // What is this??? - if ( m_orgw*5 < m_admin->LogicalToDeviceXRel( m_bbox.GetWidth() ) || - m_orgw/5 > m_admin->LogicalToDeviceXRel( m_bbox.GetWidth() ) || - m_orgh*5 < m_admin->LogicalToDeviceYRel( m_bbox.GetHeight() ) || - m_orgh/5 > m_admin->LogicalToDeviceYRel( m_bbox.GetHeight() ) - ) - { - wxDC *dc = m_admin->GetActive()->GetDC(); - dc->SetClippingRegion(clip_x, clip_y, clip_width, clip_height); - dc->SetBrush(*wxTRANSPARENT_BRUSH); - dc->SetPen(*wxBLACK_PEN); - //yes the whole not only the clipping region, because we have a pen also - int x = m_admin->LogicalToDeviceX(cworld->GetValue(2,0) + m_x ); - int y = m_admin->LogicalToDeviceY(cworld->GetValue(2,1) + m_y ); - int w = m_admin->LogicalToDeviceXRel( m_width ); - int h = m_admin->LogicalToDeviceYRel( m_height ); - if (w < 1) w=1; - if (h < 1) h=1; - dc->DrawRectangle( x,y,w,h); - dc->SetBrush(wxNullBrush); - dc->SetPen(wxNullPen); - dc->DestroyClippingRegion(); - return; - } - - wxImage tmp; - bool is_cashed = FALSE; - - if (m_cImage.Ok() && (m_cW == m_bbox.GetWidth()) && (m_cH == m_bbox.GetHeight())) - { - // use cached image - tmp = m_cImage; - is_cashed = TRUE; - } - else - { - if ((m_admin->LogicalToDeviceXRel( m_bbox.GetWidth() ) == m_image.GetWidth()) && - (m_admin->LogicalToDeviceYRel( m_bbox.GetHeight() ) == m_image.GetHeight())) - { - tmp = m_image; - } - else - { - tmp = m_image.Scale( m_admin->LogicalToDeviceXRel( m_bbox.GetWidth()), - m_admin->LogicalToDeviceYRel( m_bbox.GetHeight()) ); - } - - // create cached image - m_cImage = tmp; - m_cW = tmp.GetWidth(); - m_cH = tmp.GetHeight(); - } - -// wxPoint centr(m_admin->LogicalToDeviceX(m_x),m_admin->LogicalToDeviceY(m_y)); - wxPoint centr(0,0); - - wxBitmap bmp; - - if (m_cBitmap.Ok() && is_cashed && (m_cR == cworld->GetRotation())) - { - bmp = m_cBitmap; - } - else - { - if (cworld->GetRotation()) - tmp = tmp.Rotate(-cworld->GetRotation()/180.0 * pi, centr, TRUE, NULL ); - - bmp = wxBitmap(tmp); - - // create cached bitmap - m_cBitmap = bmp; - m_cR = cworld->GetRotation(); - } - - wxDC *dc = m_admin->GetActive()->GetDC(); - - wxPoint centr2; - if (cworld->GetRotation()> 0) - { - centr2.x= (int) (x+m_height*sin(-cworld->GetRotation()/180.0 * pi)); - centr2.y= (int) y; - } - else - { - centr2.x= (int) x; - centr2.y= (int) (y-m_width*sin(-cworld->GetRotation()/180.0 * pi)); - } - - if (cworld->GetRotation() != 0) - { - //TODO clipping not right - dc->DrawBitmap(bmp,centr2,TRUE ); -// dc->DrawPoint(centr2); -// dc->DrawPoint(x,y); - } - else - { - dc->SetClippingRegion( clip_x, clip_y, clip_width, clip_height ); - dc->DrawBitmap( bmp, x, y, TRUE ); - dc->DestroyClippingRegion(); - } -} - -void wxCanvasImage::WriteSVG( wxTextOutputStream &stream ) -{ - // no idea -} - -//---------------------------------------------------------------------------- -// wxCanvasCtrl -//---------------------------------------------------------------------------- - -wxCanvasControl::wxCanvasControl( wxWindow *control ) - : wxCanvasObject() -{ - m_isControl = TRUE; - m_control = control; - CalcBoundingBox(); -} - -double wxCanvasControl::GetPosX() -{ - int x,y ; - m_control->GetPosition( &x, &y ); - return m_admin->DeviceToLogicalX(x); -} - -double wxCanvasControl::GetPosY() -{ - int x,y ; - m_control->GetPosition( &x, &y ); - return m_admin->DeviceToLogicalY(y); -} - -void wxCanvasControl::SetPosXY( double x, double y) -{ - int xd = m_admin->LogicalToDeviceX(x); - int yd = m_admin->LogicalToDeviceY(y); - m_control->Move(xd,yd); -} - - -void wxCanvasControl::TransLate( double x, double y ) -{ - int xdo,ydo; - m_control->GetPosition( &xdo, &ydo ); - int xd = m_admin->LogicalToDeviceX(x)-xdo; - int yd = m_admin->LogicalToDeviceY(y)-ydo; - m_control->Move(xd,yd); - CalcBoundingBox(); -} - -wxCanvasControl::~wxCanvasControl() -{ - m_control->Destroy(); -} - -void wxCanvasControl::CalcBoundingBox() -{ - wxRect tmparea; - - m_control->GetSize( &tmparea.width, &tmparea.height ); - m_control->GetPosition( &tmparea.x, &tmparea.y ); - - m_bbox.SetMin( tmparea.x , tmparea.y); - m_bbox.SetMax( tmparea.x + tmparea.width , tmparea.y + tmparea.height); - -} - -void wxCanvasControl::MoveRelative( double x, double y ) -{ - m_control->Move( m_admin->LogicalToDeviceX(x), m_admin->LogicalToDeviceX(y) ); -} - -//---------------------------------------------------------------------------- -// wxCanvasText -//---------------------------------------------------------------------------- - -class wxFaceData -{ -public: -#if wxUSE_FREETYPE - FT_Face m_face; -#else - void *m_dummy; -#endif -}; - -wxCanvasText::wxCanvasText( const wxString &text, double x, double y, const wxString &fontFile, int size ) - : wxCanvasObject() -{ - m_text = text; - m_fontFileName = fontFile; - m_size = size; - - m_red = 0; - m_green = 0; - m_blue = 0; - - m_alpha = NULL; - - m_x = x; - m_y = y; - -#if wxUSE_FREETYPE - wxFaceData *data = new wxFaceData; - m_faceData = data; - - int error = FT_New_Face( g_freetypeLibrary, - m_fontFileName, - 0, - &(data->m_face) ); - - error = FT_Set_Char_Size( data->m_face, - 0, - m_size*64, - 96, // screen dpi - 96 ); -#endif - CalcBoundingBox(); -} - -wxCanvasText::~wxCanvasText() -{ -#if wxUSE_FREETYPE - wxFaceData *data = (wxFaceData*) m_faceData; - delete data; -#endif - - if (m_alpha) delete [] m_alpha; -} - -void wxCanvasText::SetRGB( unsigned char red, unsigned char green, unsigned char blue ) -{ - m_red = red; - m_green = green; - m_blue = blue; -} - -void wxCanvasText::SetFlag( int flag ) -{ - m_flag = flag; -} - -void wxCanvasText::Render(wxTransformMatrix* cworld, int clip_x, int clip_y, int clip_width, int clip_height ) -{ - if (!m_visible) return; - - wxRect tmparea; - tmparea.x = m_admin->LogicalToDeviceX( m_bbox.GetMinX()); - tmparea.y = m_admin->LogicalToDeviceY( m_bbox.GetMinY()); - tmparea.width = m_admin->LogicalToDeviceXRel( m_bbox.GetWidth() ); - tmparea.height = m_admin->LogicalToDeviceYRel( m_bbox.GetHeight() ); - - m_alpha = new unsigned char[tmparea.width*tmparea.height]; - memset( m_alpha, 0, tmparea.width*tmparea.height ); - - if (!m_alpha) return; - -#if wxUSE_FREETYPE - FT_Face face = ((wxFaceData*)m_faceData)->m_face; - FT_GlyphSlot slot = face->glyph; - int pen_x = 0; - int pen_y = m_size; - - for (int n = 0; n < (int)m_text.Len(); n++) - { - FT_UInt index = FT_Get_Char_Index( face, m_text[(unsigned int)n] ); - - int error = FT_Load_Glyph( face, index, FT_LOAD_DEFAULT ); - if (error) continue; - - error = FT_Render_Glyph( face->glyph, ft_render_mode_normal ); - if (error) continue; - - FT_Bitmap *bitmap = &slot->bitmap; - unsigned char* buffer = bitmap->buffer; - for (int y = 0; y < bitmap->rows; y++) - for (int x = 0; x < bitmap->width; x++) - { - unsigned char alpha = buffer[ y*bitmap->pitch + x ]; - if (alpha == 0) continue; - - int xx = pen_x + slot->bitmap_left + x; - int yy = pen_y - slot->bitmap_top + y; - m_alpha[ yy * tmparea.width + xx ] = alpha; - } - - pen_x += slot->advance.x >> 6; - pen_y += slot->advance.y >> 6; - } -#endif - - wxBitmap *bitmap = m_admin->GetActive()->GetBuffer(); - wxRect sub_rect( clip_x, clip_y, clip_width, clip_height ); - wxBitmap sub_bitmap( bitmap->GetSubBitmap( sub_rect ) ); - - wxImage image( sub_bitmap.ConvertToImage() ); - - // local coordinates - int start_x = clip_x - tmparea.x; - int end_x = clip_width + start_x; - int start_y = clip_y - tmparea.y; - int end_y = clip_height + start_y; - - for (int y = start_y; y < end_y; y++) - for (int x = start_x; x < end_x; x++) - { - int alpha = m_alpha[y*tmparea.width + x]; - if (alpha) - { - int image_x = x - start_x; - int image_y = y - start_y; - if (alpha == 255) - { - image.SetRGB( image_x, image_y, m_red, m_green, m_blue ); - continue; - } - int red1 = (m_red * alpha) / 255; - int green1 = (m_green * alpha) / 255; - int blue1 = (m_blue * alpha) / 255; - - alpha = 255-alpha; - int red2 = image.GetRed( image_x, image_y ); - int green2 = image.GetGreen( image_x, image_y ); - int blue2 = image.GetBlue( image_x, image_y ); - red2 = (red2 * alpha) / 255; - green2 = (green2 * alpha) / 255; - blue2 = (blue2 * alpha) / 255; - - image.SetRGB( image_x, image_y, red1+red2, green1+green2, blue1+blue2 ); - } - } - - sub_bitmap = wxBitmap(image); - - wxDC *dc = m_admin->GetActive()->GetDC(); - dc->DrawBitmap( sub_bitmap, clip_x, clip_y ); -} - -void wxCanvasText::WriteSVG( wxTextOutputStream &stream ) -{ -} - -void wxCanvasText::TransLate( double x, double y ) -{ - m_x += x; - m_y += y; - CalcBoundingBox(); -} - -void wxCanvasText::CalcBoundingBox() -{ - if (m_alpha) delete [] m_alpha; - - m_bbox.SetMin( m_x , m_y); - m_bbox.SetMax( m_x + 100 , m_y + m_size + (m_size/2)); - - -} - -//---------------------------------------------------------------------------- -// wxCanvas -//---------------------------------------------------------------------------- - -IMPLEMENT_CLASS(wxCanvas,wxScrolledWindow) - -BEGIN_EVENT_TABLE(wxCanvas,wxScrolledWindow) - EVT_PAINT( wxCanvas::OnPaint ) - EVT_IDLE( wxCanvas::OnIdle ) - EVT_SIZE( wxCanvas::OnSize ) - EVT_MOUSE_EVENTS( wxCanvas::OnMouse ) - EVT_SET_FOCUS( wxCanvas::OnSetFocus ) - EVT_KILL_FOCUS( wxCanvas::OnKillFocus ) - EVT_ERASE_BACKGROUND( wxCanvas::OnEraseBackground ) -END_EVENT_TABLE() - -wxCanvas::wxCanvas( wxCanvasAdmin* admin, wxWindow *parent, wxWindowID id, - const wxPoint &position, const wxSize& size, long style ) : - wxScrolledWindow( parent, id, position, size, style ) -{ - // These are unused in wxVectorCanvas - m_bufferX = 0; - m_bufferY = 0; - - m_admin = admin; - m_admin->Append( this ); - - m_needUpdate = FALSE; - m_background = *wxWHITE; - m_lastMouse = (wxCanvasObject*)NULL; - m_captureMouse = (wxCanvasObject*)NULL; - m_frozen = FALSE; - m_oldDeviceX = 0; - m_oldDeviceY = 0; - m_root = (wxCanvasObjectGroup*)NULL; -} - -wxCanvas::~wxCanvas() -{ - wxNode *node = m_updateRects.First(); - while (node) - { - wxRect *rect = (wxRect*) node->Data(); - delete rect; - m_updateRects.DeleteNode( node ); - node = m_updateRects.First(); - } -} - -double wxCanvas::GetMinX() const -{ - return 0.0; -} - -double wxCanvas::GetMinY() const -{ - return 0.0; -} - -double wxCanvas::GetMaxX() const -{ - int width; - GetVirtualSize( &width, NULL ); - return width; -} - -double wxCanvas::GetMaxY() const -{ - int height; - GetVirtualSize( NULL, &height ); - return height; -} - -void wxCanvas::SetColour( const wxColour& background ) -{ - m_background = background; - SetBackgroundColour( m_background ); - - if (m_frozen) return; - - wxMemoryDC dc; - dc.SelectObject( m_buffer ); - dc.SetPen( *wxTRANSPARENT_PEN ); - wxBrush brush( m_background, wxSOLID ); - dc.SetBrush( brush ); - dc.DrawRectangle( 0, 0, m_buffer.GetWidth(), m_buffer.GetHeight() ); - dc.SelectObject( wxNullBitmap ); -} - -void wxCanvas::SetCaptureMouse( wxCanvasObject *obj ) -{ - if (obj) - { - wxWindow::CaptureMouse(); - m_captureMouse = obj; - } - else - { - wxWindow::ReleaseMouse(); - m_captureMouse = NULL; - } -} - -void wxCanvas::Freeze() -{ - m_frozen = TRUE; -} - -void wxCanvas::Thaw() -{ - wxNode *node = m_updateRects.First(); - while (node) - { - wxRect *rect = (wxRect*) node->Data(); - delete rect; - m_updateRects.DeleteNode( node ); - node = m_updateRects.First(); - } - - m_frozen = FALSE; - - if (m_buffer.Ok()) - Update( m_bufferX, m_bufferY, m_buffer.GetWidth(), m_buffer.GetHeight() ); -} - -void wxCanvas::Update( int x, int y, int width, int height, bool blit ) -{ - CalcScrolledPosition( 0, 0, &m_oldDeviceX, &m_oldDeviceY ); - - m_admin->SetActive(this); - - if (!m_root) return; - - if (m_frozen) return; - - // clip to buffer - if (x < m_bufferX) - { - width -= m_bufferX-x; - x = m_bufferX; - } - if (width <= 0) return; - - if (y < m_bufferY) - { - height -= m_bufferY-y; - y = m_bufferY; - } - if (height <= 0) return; - - if (x+width > m_bufferX+m_buffer.GetWidth()) - { - width = m_bufferX+m_buffer.GetWidth() - x; - } - if (width <= 0) return; - - if (y+height > m_bufferY+m_buffer.GetHeight()) - { - height = m_bufferY+m_buffer.GetHeight() - y; - } - if (height <= 0) return; - - // update is within the buffer - m_needUpdate = TRUE; - - // has to be blitted to screen later - if (blit) - { - m_updateRects.Append( - (wxObject*) new wxRect( x,y,width,height ) ); - } - - wxTransformMatrix cworld; - - wxMemoryDC dc; - dc.SelectObject( m_buffer ); - - dc.SetPen( *wxTRANSPARENT_PEN ); - wxBrush brush( m_background, wxSOLID ); - dc.SetBrush( brush ); - dc.SetLogicalFunction(wxCOPY); - -#if 0 - if (width != m_buffer.GetWidth() && height != m_buffer.GetHeight()) - { - dc.SetClippingRegion(x,y,width,height); - dc.DrawRectangle(x-2,y-2,width+4,height+4); - dc.DestroyClippingRegion(); - } - else - { - dc.Clear(); - dc.DrawRectangle(0,0,m_buffer.GetWidth(),m_buffer.GetHeight()); - } -#else - // No idea, what the code up there does. - dc.DrawRectangle( x-m_bufferX, y-m_bufferY, width, height ); -#endif - - dc.SetBrush(wxNullBrush); - dc.SetPen(wxNullPen); - - dc.SetDeviceOrigin( m_oldDeviceX, m_oldDeviceY ); - m_renderDC = &dc; - - m_root->Render( &cworld, x, y, width, height ); - - m_renderDC = NULL; - dc.SelectObject( wxNullBitmap ); -} - -void wxCanvas::BlitBuffer( wxDC &dc ) -{ - wxNode *node = m_updateRects.First(); - while (node) - { - wxRect *rect = (wxRect*) node->Data(); - - wxMemoryDC mdc; - mdc.SelectObject( m_buffer ); - dc.Blit( rect->x, - rect->y, - rect->width, - rect->height, - &mdc, - rect->x - m_bufferX, - rect->y - m_bufferY ); - mdc.SelectObject( wxNullBitmap ); - - delete rect; - m_updateRects.DeleteNode( node ); - node = m_updateRects.First(); - } - - m_needUpdate = FALSE; -} - -void wxCanvas::UpdateNow() -{ - if (m_frozen) return; - - if (!m_needUpdate) return; - - wxClientDC dc( this ); - PrepareDC( dc ); - - BlitBuffer( dc ); -} - -void wxCanvas::OnSize(wxSizeEvent &event) -{ - int w,h; - GetClientSize( &w, &h ); - m_buffer = wxBitmap( w, h ); - - CalcUnscrolledPosition( 0, 0, &m_bufferX, &m_bufferY ); - - wxNode *node = m_updateRects.First(); - while (node) - { - wxRect *rect = (wxRect*) node->Data(); - delete rect; - m_updateRects.DeleteNode( node ); - node = m_updateRects.First(); - } - - m_frozen = FALSE; - - Update( m_bufferX, m_bufferY, m_buffer.GetWidth(), m_buffer.GetHeight(), FALSE ); - - event.Skip(); -} - -void wxCanvas::OnPaint(wxPaintEvent &event) -{ - wxPaintDC dc(this); - PrepareDC( dc ); - - if (!m_buffer.Ok()) return; - - if (m_frozen) return; - - m_needUpdate = TRUE; - - wxRegionIterator it( GetUpdateRegion() ); - while (it) - { - int x = it.GetX(); - int y = it.GetY(); - - int w = it.GetWidth(); - int h = it.GetHeight(); - - if (x+w > m_buffer.GetWidth()) - w = m_buffer.GetWidth() - x; - if (y+h > m_buffer.GetHeight()) - h = m_buffer.GetHeight() - y; - - if ((w > 0) && (h > 0)) - { - x += m_bufferX; - y += m_bufferY; - m_updateRects.Append( (wxObject*) new wxRect( x, y, w, h ) ); - } - - it++; - } - - BlitBuffer( dc ); -} - -void wxCanvas::ScrollWindow( int dx, int dy, const wxRect* rect ) -{ - // If any updates are pending, do them now since they will - // expect the previous m_bufferX and m_bufferY as well as - // the previous device origin values. - wxClientDC dc( this ); - dc.SetDeviceOrigin( m_oldDeviceX, m_oldDeviceY ); - BlitBuffer( dc ); - - // The buffer always starts at the top left corner of the - // client area. Indeed, it is the client area. - CalcUnscrolledPosition( 0, 0, &m_bufferX, &m_bufferY ); - - // Update everything. - Update( m_bufferX, m_bufferY, m_buffer.GetWidth(), m_buffer.GetHeight(), FALSE ); - - // Scroll, actually. - wxWindow::ScrollWindow( dx, dy, rect ); -} - -void wxCanvas::OnMouse(wxMouseEvent &event) -{ - m_admin->SetActive(this); - if (!m_root) - { - event.Skip(); - return; - } - - int x = event.GetX(); - int y = event.GetY(); - - //to world coordinates to do hit test in world coordinates - double xw = DeviceToLogicalX( x ); - double yw = DeviceToLogicalY( y ); - - //make a select margin of 2 pixels, so also zero line thickness will be hit - double margin = DeviceToLogicalXRel( 2 ); - - if (event.GetEventType() == wxEVT_MOTION) - { - if (m_captureMouse) //no matter what go to this one - { - wxMouseEvent child_event( wxEVT_MOTION ); - child_event.SetEventObject(m_captureMouse); - child_event.m_x = x; - child_event.m_y = y; - child_event.m_leftDown = event.m_leftDown; - child_event.m_rightDown = event.m_rightDown; - child_event.m_middleDown = event.m_middleDown; - child_event.m_controlDown = event.m_controlDown; - child_event.m_shiftDown = event.m_shiftDown; - child_event.m_altDown = event.m_altDown; - child_event.m_metaDown = event.m_metaDown; - - m_captureMouse->ProcessCanvasObjectEvent( child_event ); - return; - } - else - { - wxCanvasObject *obj = m_root->IsHitWorld(xw,yw,margin); - - if (obj && !obj->IsControl()) - { - wxMouseEvent child_event( wxEVT_MOTION ); - child_event.SetEventObject( obj ); - child_event.m_x = x; - child_event.m_y = y; - child_event.m_leftDown = event.m_leftDown; - child_event.m_rightDown = event.m_rightDown; - child_event.m_middleDown = event.m_middleDown; - child_event.m_controlDown = event.m_controlDown; - child_event.m_shiftDown = event.m_shiftDown; - child_event.m_altDown = event.m_altDown; - child_event.m_metaDown = event.m_metaDown; - - if ((obj != m_lastMouse) && (m_lastMouse != NULL)) - { - child_event.SetEventType( wxEVT_LEAVE_WINDOW ); - child_event.SetEventObject( m_lastMouse ); - child_event.m_x = x; - child_event.m_y = y; - m_lastMouse->ProcessCanvasObjectEvent( child_event ); - - m_lastMouse = obj; - child_event.SetEventType( wxEVT_ENTER_WINDOW ); - child_event.SetEventObject( m_lastMouse ); - child_event.m_x = x; - child_event.m_y = y; - m_lastMouse->ProcessCanvasObjectEvent( child_event ); - - child_event.SetEventType( wxEVT_MOTION ); - child_event.SetEventObject( obj ); - } - - obj->ProcessCanvasObjectEvent( child_event ); - return; - } - } - if (m_lastMouse) - { - wxMouseEvent child_event( wxEVT_LEAVE_WINDOW ); - child_event.SetEventObject( m_lastMouse ); - child_event.m_x = x; - child_event.m_y = y; - child_event.m_leftDown = event.m_leftDown; - child_event.m_rightDown = event.m_rightDown; - child_event.m_middleDown = event.m_middleDown; - child_event.m_controlDown = event.m_controlDown; - child_event.m_shiftDown = event.m_shiftDown; - child_event.m_altDown = event.m_altDown; - child_event.m_metaDown = event.m_metaDown; - m_lastMouse->ProcessCanvasObjectEvent( child_event ); - - m_lastMouse = (wxCanvasObject*) NULL; - return; - } - } - else - { - if (m_captureMouse) //no matter what go to this one - { - wxMouseEvent child_event( event.GetEventType() ); - child_event.SetEventObject(m_captureMouse); - child_event.m_x = x; - child_event.m_y = y; - child_event.m_leftDown = event.m_leftDown; - child_event.m_rightDown = event.m_rightDown; - child_event.m_middleDown = event.m_middleDown; - child_event.m_controlDown = event.m_controlDown; - child_event.m_shiftDown = event.m_shiftDown; - child_event.m_altDown = event.m_altDown; - child_event.m_metaDown = event.m_metaDown; - m_captureMouse->ProcessCanvasObjectEvent( child_event ); - } - else - { - wxCanvasObject *obj = m_root->IsHitWorld(xw,yw,margin); - - if (obj && !obj->IsControl()) - { - wxMouseEvent child_event( event.GetEventType() ); - child_event.SetEventObject( obj ); - child_event.m_x = x; - child_event.m_y = y; - child_event.m_leftDown = event.m_leftDown; - child_event.m_rightDown = event.m_rightDown; - child_event.m_middleDown = event.m_middleDown; - child_event.m_controlDown = event.m_controlDown; - child_event.m_shiftDown = event.m_shiftDown; - child_event.m_altDown = event.m_altDown; - child_event.m_metaDown = event.m_metaDown; - - obj->ProcessCanvasObjectEvent( child_event ); - return; - } - } - } - - event.Skip(); -} - -void wxCanvas::OnIdle(wxIdleEvent &event) -{ - m_admin->SetActive(this); - UpdateNow(); - event.Skip(); -} - -void wxCanvas::OnSetFocus(wxFocusEvent &event) -{ - m_admin->SetActive(this); -} - -void wxCanvas::OnKillFocus(wxFocusEvent &event) -{ -} - - -void wxCanvas::OnEraseBackground(wxEraseEvent &event) -{ -} - -// coordinates conversions -// ----------------------- -double wxCanvas::DeviceToLogicalX(int x) const -{ - return (double)(x); -} - -double wxCanvas::DeviceToLogicalY(int y) const -{ - return (double)(y); -} - -double wxCanvas::DeviceToLogicalXRel(int x) const -{ - return (double)x; -} - -double wxCanvas::DeviceToLogicalYRel(int y) const -{ - return (double)y; -} - -int wxCanvas::LogicalToDeviceX(double x) const -{ - return (int)(x + 0.5); -} - -int wxCanvas::LogicalToDeviceY(double y) const -{ - return (int)(y + 0.5); -} - -int wxCanvas::LogicalToDeviceXRel(double x) const -{ - return (int)(x + 0.5); -} - -int wxCanvas::LogicalToDeviceYRel(double y) const -{ - return (int)(y + 0.5); -} - -//---------------------------------------------------------------------------- -// wxVectorCanvas -//---------------------------------------------------------------------------- - -IMPLEMENT_CLASS(wxVectorCanvas,wxCanvas) - -BEGIN_EVENT_TABLE(wxVectorCanvas,wxCanvas) - EVT_SCROLLWIN( wxVectorCanvas::OnScroll ) - EVT_CHAR( wxVectorCanvas::OnChar ) - EVT_SIZE( wxVectorCanvas::OnSize ) -END_EVENT_TABLE() - -wxVectorCanvas::wxVectorCanvas( wxCanvasAdmin* admin, wxWindow *parent, wxWindowID id, - const wxPoint &position, const wxSize& size, long style ) : - wxCanvas( admin, parent, id, position, size, style ) -{ - m_scrolled = FALSE; - m_yaxis = FALSE; -} - -double wxVectorCanvas::GetMinX() const -{ - return m_virt_minX; -} - -double wxVectorCanvas::GetMinY() const -{ - return m_virt_minY; -} - -double wxVectorCanvas::GetMaxX() const -{ - return m_virt_maxX; -} - -double wxVectorCanvas::GetMaxY() const -{ - return m_virt_maxY; -} - -void wxVectorCanvas::ScrollWindow( int dx, int dy, const wxRect* rect ) -{ - // If any updates are pending, do them now since they will - // expect the previous m_bufferX and m_bufferY as well as - // the previous device origin values. - wxClientDC dc( this ); - dc.SetDeviceOrigin( m_oldDeviceX, m_oldDeviceY ); - BlitBuffer( dc ); - - if (dy != 0) - { - double dyv=DeviceToLogicalYRel(dy); - m_virt_minY=m_virt_minY-dyv; - m_virt_maxY=m_virt_maxY-dyv; - } - if (dx != 0) - { - double dxv=DeviceToLogicalXRel(dx); - m_virt_minX=m_virt_minX-dxv; - m_virt_maxX=m_virt_maxX-dxv; - } - - m_admin->SetActive(this); - SetMappingScroll(m_virt_minX,m_virt_minY,m_virt_maxX,m_virt_maxY,FALSE); - - - if (dy != 0) - { - if (dy > 0 && dy < m_buffer.GetHeight()) - { - wxRect rect( 0, 0, m_buffer.GetWidth(), m_buffer.GetHeight()-dy); - wxBitmap sub_bitmap( m_buffer.GetSubBitmap( rect ) ); - wxMemoryDC dcm; - dcm.SelectObject( m_buffer ); - dcm.DrawBitmap( sub_bitmap, 0, dy, TRUE ); - dcm.SelectObject( wxNullBitmap ); - - Update( 0, 0, m_buffer.GetWidth(), dy, TRUE ); - } - else if (dy < 0 && dy > -m_buffer.GetHeight()) - { - wxRect rect( 0, -dy, m_buffer.GetWidth(), m_buffer.GetHeight()+dy); - wxBitmap sub_bitmap( m_buffer.GetSubBitmap( rect ) ); - wxMemoryDC dcm; - dcm.SelectObject( m_buffer ); - dcm.DrawBitmap( sub_bitmap, 0, 0, TRUE ); - dcm.SelectObject( wxNullBitmap ); - - Update( 0, m_buffer.GetHeight()+dy, m_buffer.GetWidth(), m_buffer.GetHeight(), TRUE ); - } - else - Update( 0, 0, m_buffer.GetWidth(), m_buffer.GetHeight(), TRUE ); - } - - if (dx != 0) - { - if (dx > 0 && dx < m_buffer.GetWidth()) - { - wxRect rect( 0, 0, m_buffer.GetWidth()-dx, m_buffer.GetHeight()); - wxBitmap sub_bitmap( m_buffer.GetSubBitmap( rect ) ); - wxMemoryDC dcm; - dcm.SelectObject( m_buffer ); - dcm.DrawBitmap( sub_bitmap, dx, 0, TRUE ); - dcm.SelectObject( wxNullBitmap ); - - Update( 0, 0, dx, m_buffer.GetHeight(), TRUE ); - } - else if (dx < 0 && dx > -m_buffer.GetWidth()) - { - wxRect rect( -dx, 0, m_buffer.GetWidth()+dx, m_buffer.GetHeight()); - wxBitmap sub_bitmap( m_buffer.GetSubBitmap( rect ) ); - wxMemoryDC dcm; - dcm.SelectObject( m_buffer ); - dcm.DrawBitmap( sub_bitmap, 0, 0, TRUE ); - dcm.SelectObject( wxNullBitmap ); - - Update( m_buffer.GetWidth()+dx, 0, m_buffer.GetWidth(), m_buffer.GetHeight(), TRUE ); - } - else - Update( 0,0, m_buffer.GetWidth(), m_buffer.GetHeight(), TRUE ); - } - - wxWindow::ScrollWindow( dx, dy, rect ); - - //must be done now because quick repeated scrolling will prevent wxPaint - //from doing it properly - UpdateNow(); -} - -void wxVectorCanvas::OnSize(wxSizeEvent &event) -{ - int w,h; - - GetClientSize( &w, &h ); - - wxMemoryDC dc; - m_buffer = wxBitmap( w, h ); - dc.SelectObject( m_buffer ); - dc.SetPen( *wxTRANSPARENT_PEN ); - wxBrush brush( m_background , wxSOLID ); - dc.SetBrush( brush ); - dc.DrawRectangle( 0, 0, m_buffer.GetWidth(), m_buffer.GetHeight() ); - dc.SelectObject( wxNullBitmap ); - - wxNode *node = m_updateRects.First(); - while (node) - { - wxRect *rect = (wxRect*) node->Data(); - delete rect; - m_updateRects.DeleteNode( node ); - node = m_updateRects.First(); - } - - m_frozen = FALSE; - - m_admin->SetActive(this); - SetMappingScroll(m_virt_minX,m_virt_minY,m_virt_maxX,m_virt_maxY,FALSE); - - Update( 0,0, m_buffer.GetWidth(), m_buffer.GetHeight(), FALSE ); - -// event.Skip(); -} - -// maps the virtual window (Real drawing to the window coordinates -// also used for zooming -void wxVectorCanvas::SetMappingScroll( double vx1, double vy1, double vx2, double vy2, bool border) -{ - int dwxi,dwyi; - GetClientSize(&dwxi,&dwyi); - - if (vx2==vx1) vx2=vx1+100000; - if (vy2==vy1) vy2=vy1+100000; - m_virt_minX=vx1; - m_virt_minY=vy1; - m_virt_maxX=vx2; - m_virt_maxY=vy2; - - double dwx=dwxi; - double dwy=dwyi; - if (dwx==0) dwx=1; - if (dwy==0) dwy=1; - - double dvx = m_virt_maxX - m_virt_minX; - double dvy = m_virt_maxY - m_virt_minY; - - // calculate the scaling factor for the virtual window - double temp_x=0; - double temp_y=0; - if ((dvy / dvx) < (dwy / dwx)) - { - dvy = dvx * (dwy / dwx); - // calculate the change in the coordinates - temp_y = (dvy - (m_virt_maxY - m_virt_minY) )/ 2.0; - } - else - { - dvx = dvy * (dwx / dwy); - // calculate the change in the coordinates - temp_x = (dvx - (m_virt_maxX - m_virt_minX) )/ 2.0; - } - - // add or substract the change from the original coordinates - m_virt_minX=m_virt_minX-temp_x; - m_virt_minY=m_virt_minY-temp_y; - - m_virt_maxX=m_virt_maxX+temp_x; - m_virt_maxY=m_virt_maxY+temp_y; - - // initialize the mapping_matrix used for mapping the - // virtual windows to the drawing window - - // make mappingmatrix - m_mapping_matrix.Identity(); - if (!border) - { - // translate the drawing to 0,0 - if (m_yaxis) - m_mapping_matrix.Translate(-m_virt_minX,-m_virt_maxY); - else - m_mapping_matrix.Translate(-m_virt_minX,-m_virt_minY); - } - else - { - // make a small white border around the drawing - m_virt_minX=m_virt_minX- 0.05 * dvx; - m_virt_minY=m_virt_minY- 0.05 * dvy; - - m_virt_maxX=m_virt_maxX+ 0.05 * dvx; - m_virt_maxY=m_virt_maxY+ 0.05 * dvy; - - // translate the drawing to 0,0 - if (m_yaxis) - m_mapping_matrix.Translate(-m_virt_minX,-m_virt_maxY); - else - m_mapping_matrix.Translate(-m_virt_minX,-m_virt_minY); - } - - double scalefactor_x = dwx; - scalefactor_x /= (m_virt_maxX - m_virt_minX); - - double scalefactor_y = dwy; - scalefactor_y /= (m_virt_maxY - m_virt_minY); - - // scale the drawing so it fit's in the window - m_mapping_matrix.Scale(scalefactor_x, scalefactor_y, 0, 0); - - // because of coordinate change mirror over X - // 0,0 in graphic computerscreens: upperleft corner - // 0,0 in cartesian: lowerleft corner - if (m_yaxis) - { - m_mapping_matrix.Mirror(); - } - // make inverse of mapping matrix - // this is to set coordinates in the statusbar - // and the calculate screencoordinates to world coordinates used - // in zooming - m_inverse_mapping=m_mapping_matrix; - m_inverse_mapping.Invert(); - - if (m_scrolled) - SetScroll(m_virtm_minX,m_virtm_minY,m_virtm_maxX,m_virtm_maxY); - - int dx2,dy2; - GetClientSize(&dx2,&dy2); - if ( dwxi != dx2 || dwyi != dy2) //scrollbar is/became empty - SetScroll(m_virtm_minX,m_virtm_minY,m_virtm_maxX,m_virtm_maxY); -} - - -void wxVectorCanvas::SetScroll(double vx1,double vy1,double vx2,double vy2) -{ - m_virtm_minX=vx1; - m_virtm_minY=vy1; - m_virtm_maxX=vx2; - m_virtm_maxY=vy2; - - double dvx = m_virt_maxX - m_virt_minX; - double dvy = m_virt_maxY - m_virt_minY; - double dmvx = m_virtm_maxX - m_virtm_minX; - double dmvy = m_virtm_maxY - m_virtm_minY; - - SetScrollbar(wxHORIZONTAL,(m_virt_minX-m_virtm_minX)/dmvx *1000,dvx/dmvx *1000,1000,FALSE); - if (m_yaxis) - { - SetScrollbar(wxVERTICAL,(m_virtm_maxY-m_virt_maxY)/dmvy *1000,dvy/dmvy *1000,1000,FALSE); - } - else - { - SetScrollbar(wxVERTICAL,(m_virt_minY-m_virtm_minY)/dmvy *1000,dvy/dmvy *1000,1000,FALSE); - } - - m_scrolled=TRUE; -} - -// coordinates conversions -// ----------------------- -double wxVectorCanvas::DeviceToLogicalX(int x) const -{ - return m_inverse_mapping.GetValue(0,0) * x + m_inverse_mapping.GetValue(2,0); -} - -double wxVectorCanvas::DeviceToLogicalY(int y) const -{ - return m_inverse_mapping.GetValue(1,1) * y + m_inverse_mapping.GetValue(2,1); -} - -double wxVectorCanvas::DeviceToLogicalXRel(int x) const -{ - return x*m_inverse_mapping.GetValue(0,0); -} - -double wxVectorCanvas::DeviceToLogicalYRel(int y) const -{ - return y*m_inverse_mapping.GetValue(1,1); -} - -int wxVectorCanvas::LogicalToDeviceX(double x) const -{ - return (int) (m_mapping_matrix.GetValue(0,0) * x + m_mapping_matrix.GetValue(2,0) + 0.5); -} - -int wxVectorCanvas::LogicalToDeviceY(double y) const -{ - return (int) (m_mapping_matrix.GetValue(1,1) * y + m_mapping_matrix.GetValue(2,1) + 0.5); -} - -int wxVectorCanvas::LogicalToDeviceXRel(double x) const -{ - return (int) (x*m_mapping_matrix.GetValue(0,0) + 0.5); -} - -int wxVectorCanvas::LogicalToDeviceYRel(double y) const -{ - return (int) (y*m_mapping_matrix.GetValue(1,1) + 0.5); -} - - -// return the inverse mapping matrix for zooming or coordinates -wxTransformMatrix wxVectorCanvas::GetInverseMappingMatrix() -{ - return m_inverse_mapping; -} - -wxTransformMatrix wxVectorCanvas::GetMappingMatrix() -{ - return m_mapping_matrix; -} - - -// ---------------------------------------------------------------------------- -// scrolling behaviour -// ---------------------------------------------------------------------------- - -void wxVectorCanvas::OnScroll(wxScrollWinEvent& event) -{ - if (event.GetEventType()==wxEVT_SCROLLWIN_THUMBRELEASE) - { - if (event.GetOrientation()==wxHORIZONTAL) - { - double x=m_virtm_minX+event.GetPosition()/1000.0*(m_virtm_maxX-m_virtm_minX); - x=LogicalToDeviceXRel(x-m_virt_minX); - ScrollWindow(-x, 0, (const wxRect *) NULL); - } - else - { - double y=m_virtm_minY+event.GetPosition()/1000.0*(m_virtm_maxY-m_virtm_minY); - y=LogicalToDeviceYRel(y-m_virt_minY); - ScrollWindow(0, -y, (const wxRect *) NULL); - } - } - else if (event.GetEventType()==wxEVT_SCROLLWIN_PAGEUP) - { - if (event.GetOrientation()==wxHORIZONTAL) - { - double x=GetBufferWidth(); - ScrollWindow(x, 0, (const wxRect *) NULL); - } - else - { - double y=GetBufferHeight(); - ScrollWindow(0, y, (const wxRect *) NULL); - } - } - else if (event.GetEventType()==wxEVT_SCROLLWIN_PAGEDOWN) - { - if (event.GetOrientation()==wxHORIZONTAL) - { - double x=-GetBufferWidth(); - ScrollWindow(x, 0, (const wxRect *) NULL); - } - else - { - double y=-GetBufferHeight(); - ScrollWindow(0, y, (const wxRect *) NULL); - } - } - else if (event.GetEventType()==wxEVT_SCROLLWIN_LINEUP) - { - if (event.GetOrientation()==wxHORIZONTAL) - { - int x=GetBufferWidth()/10; - ScrollWindow(x, 0, (const wxRect *) NULL); - } - else - { - int y=GetBufferHeight()/10; - ScrollWindow(0, y, (const wxRect *) NULL); - } - } - else if (event.GetEventType()==wxEVT_SCROLLWIN_LINEDOWN) - { - if (event.GetOrientation()==wxHORIZONTAL) - { - int x=-GetBufferWidth()/10; - ScrollWindow(x, 0, (const wxRect *) NULL); - } - else - { - int y=-GetBufferHeight()/10; - ScrollWindow(0, y, (const wxRect *) NULL); - } - } - -} - -void wxVectorCanvas::OnChar(wxKeyEvent& event) -{ - switch ( event.KeyCode() ) - { - case WXK_PAGEUP: - case WXK_PRIOR: - { - double y=GetBufferHeight(); - ScrollWindow(0, y, (const wxRect *) NULL); - } - break; - case WXK_PAGEDOWN: - case WXK_NEXT: - { - double y=-GetBufferHeight(); - ScrollWindow(0, y, (const wxRect *) NULL); - } - break; - case WXK_HOME: - { - double y=m_virtm_minY; - y=LogicalToDeviceYRel(y-m_virt_minY); - ScrollWindow(0, -y, (const wxRect *) NULL); - } - break; - case WXK_END: - { - double y=m_virtm_minY+(m_virtm_maxY-m_virtm_minY); - y=LogicalToDeviceYRel(y-m_virt_minY); - ScrollWindow(0, -y, (const wxRect *) NULL); - } - break; - case WXK_UP: - { - int y; - if (!event.ControlDown()) - y=GetBufferHeight()/10; - else - y=GetBufferHeight(); - ScrollWindow(0, y, (const wxRect *) NULL); - } - break; - - case WXK_DOWN: - { - int y; - if (!event.ControlDown()) - y=-GetBufferHeight()/10; - else - y=-GetBufferHeight(); - ScrollWindow(0, y, (const wxRect *) NULL); - } - break; - - case WXK_LEFT: - { - int x; - if (!event.ControlDown()) - x=GetBufferWidth()/10; - else - x=GetBufferWidth(); - ScrollWindow(x, 0, (const wxRect *) NULL); - } - break; - case WXK_RIGHT: - { - int x; - if (!event.ControlDown()) - x=-GetBufferWidth()/10; - else - x=-GetBufferWidth(); - ScrollWindow(x, 0, (const wxRect *) NULL); - } - break; - default: - // not for us - event.Skip(); - } -} - - -//---------------------------------------------------------------------------- -// wxCanvasAdmin -//---------------------------------------------------------------------------- - -wxCanvasAdmin::wxCanvasAdmin() -{ - -} - -wxCanvasAdmin::~wxCanvasAdmin() -{ -} - - -void wxCanvasAdmin::Append( wxCanvas* canvas ) -{ - m_canvaslist.Append( canvas ); -} - -void wxCanvasAdmin::Remove( wxCanvas* canvas ) -{ - m_canvaslist.DeleteObject( canvas ); -} - -void wxCanvasAdmin::Update(wxCanvasObject* obj, double x, double y, double width, double height) -{ - wxNode *node = m_canvaslist.First(); - while (node) - { - - wxCanvas *canvas = (wxCanvas*) node->Data(); - - if (m_active == canvas) - { - int xi = canvas->LogicalToDeviceX( x); - int yi = canvas->LogicalToDeviceY( y); - int wi = canvas->LogicalToDeviceXRel( width ); - int hi = canvas->LogicalToDeviceYRel( height); - //update a little more then is strictly needed, - //to get rid of the 1 bit bugs - if (canvas->GetYaxis()) - canvas->Update( xi-2, yi+hi-2, wi+4, -hi+4); - else - canvas->Update( xi-2, yi-2, wi+4, hi+4); - } - else - { wxCanvasObject* topobj=canvas->GetRoot()->Contains(obj); - if (topobj) - { - wxCanvas* tcanvas = m_active; - SetActive(canvas); - - /* - //KKK TODO somehow the next does not work for update i do not know why - canvas->GetRoot()->CalcBoundingBox(); - int xi = topobj->GetX(); - int yi = topobj->GetY(); - int wi = topobj->GetWidth(); - int hi = topobj->GetHeight(); - */ - canvas->Update( 0,0, canvas->GetBufferWidth(),canvas->GetBufferHeight()); - SetActive(tcanvas); - } - } - - node = node->Next(); - } -} - -void wxCanvasAdmin::UpdateNow() -{ - wxNode *node = m_canvaslist.First(); - while (node) - { - wxCanvas *canvas = (wxCanvas*) node->Data(); - - canvas->UpdateNow(); - node = node->Next(); - } -} - -// coordinates conversions -// ----------------------- -double wxCanvasAdmin::DeviceToLogicalX(int x) const -{ - return m_active->DeviceToLogicalX(x); -} - -double wxCanvasAdmin::DeviceToLogicalY(int y) const -{ - return m_active->DeviceToLogicalY(y); -} - -double wxCanvasAdmin::DeviceToLogicalXRel(int x) const -{ - return m_active->DeviceToLogicalXRel(x); -} - -double wxCanvasAdmin::DeviceToLogicalYRel(int y) const -{ - return m_active->DeviceToLogicalYRel(y); -} - -int wxCanvasAdmin::LogicalToDeviceX(double x) const -{ - return m_active->LogicalToDeviceX(x); -} - -int wxCanvasAdmin::LogicalToDeviceY(double y) const -{ - return m_active->LogicalToDeviceY(y); -} - -int wxCanvasAdmin::LogicalToDeviceXRel(double x) const -{ - return m_active->LogicalToDeviceXRel(x); -} - -int wxCanvasAdmin::LogicalToDeviceYRel(double y) const -{ - return m_active->LogicalToDeviceYRel(y); -} - -void wxCanvasAdmin::SetActive(wxCanvas* activate) -{ - wxNode *node = m_canvaslist.First(); - while (node) - { - wxCanvas *canvas = (wxCanvas*) node->Data(); - - if (activate == canvas) - { - m_active=canvas; - break; - } - node = node->Next(); - } -} -//-------------------------------------------------------------------- -// wxCanvasModule -//-------------------------------------------------------------------- - -class wxCanvasModule : public wxModule -{ -public: - virtual bool OnInit(); - virtual void OnExit(); - -private: - DECLARE_DYNAMIC_CLASS(wxCanvasModule) -}; - -IMPLEMENT_DYNAMIC_CLASS(wxCanvasModule, wxModule) - -bool wxCanvasModule::OnInit() -{ -#if wxUSE_FREETYPE - int error = FT_Init_FreeType( &g_freetypeLibrary ); - if (error) return FALSE; -#endif - - return TRUE; -} - -void wxCanvasModule::OnExit() -{ -#if wxUSE_FREETYPE - FT_Done_FreeType( g_freetypeLibrary ); -#endif -} - - - - diff --git a/contrib/src/canvas/liner.cpp b/contrib/src/canvas/liner.cpp deleted file mode 100644 index f52059971e..0000000000 --- a/contrib/src/canvas/liner.cpp +++ /dev/null @@ -1,660 +0,0 @@ -/* -Program wxLine.CPP -Purpose Mainly used for calculating crossings -Last Update 05-12-1995 -*/ - -#ifdef __GNUG__ -#pragma implementation "liner.cpp" -#endif - -// For compilers that support precompilation, includes "wx/wx.h". -#include "wx/wxprec.h" - -#ifdef __BORLANDC__ - #pragma hdrstop -#endif - -#include - -#include - -#include "wx/canvas/liner.h" - -wxLine::wxLine( double x1, double y1, double x2, double y2 ) -{ - m_AA = 0.0; - m_BB = 0.0; - m_CC = 0.0; - - m_a=wxPoint2DDouble(x1,y1); - m_b=wxPoint2DDouble(x2,y2); - if (m_a==m_b) - assert(0); - - m_valid_parameters = FALSE; -} - -wxLine::~wxLine() -{ -} - -wxLine::wxLine(const wxPoint2DDouble& a,const wxPoint2DDouble& b) -{ - if (a==b) - assert(0); - - m_a=a; - m_b=b; - m_valid_parameters = FALSE; -} - - - -// ActionOnTable1 -// This function decide which action must be taken, after PointInLine -// has given the results of two points in relation to a wxLine. See table 1 in the report -// -// input Result_beginPoint: -// Result_endPoint : -// The results can be R_R_LEFT_SIDE, R_R_RIGHT_SIDE, R_R_ON_AREA, R_R_IN_AREA -// -// return -1: Illegal combination -// 0: No action, no crosspoints -// 1: Investigate results points in relation to the other wxLine -// 2: endPoint is a crosspoint, no further investigation -// 3: beginPoint is a crosspoint, no further investigation -// 4: beginPoint and endPoint are crosspoints, no further investigation -// 5: beginPoint is a crosspoint, need further investigation -// 6: endPoint is a crosspoint, need further investigation -int wxLine::ActionOnTable1(R_PointStatus Result_beginPoint, R_PointStatus Result_endPoint) -{ - // beginPoint and endPoint are crosspoints - if ( - (Result_beginPoint == R_IN_AREA) - && - (Result_endPoint == R_IN_AREA) - ) - return 4; - // there are no crosspoints, no action - if ( - ( - (Result_beginPoint == R_LEFT_SIDE) - && - (Result_endPoint == R_LEFT_SIDE) - ) - || - ( - (Result_beginPoint == R_RIGHT_SIDE) - && - (Result_endPoint == R_RIGHT_SIDE) - ) - ) - return 0; - // maybe there is a crosspoint, further investigation needed - if ( - ( - (Result_beginPoint == R_LEFT_SIDE) - && - ( - (Result_endPoint == R_RIGHT_SIDE) - || - (Result_endPoint == R_ON_AREA) - ) - ) - || - ( - (Result_beginPoint == R_RIGHT_SIDE) - && - ( - (Result_endPoint == R_LEFT_SIDE) - || - (Result_endPoint == R_ON_AREA) - ) - ) - || - ( - (Result_beginPoint == R_ON_AREA) - && - ( - (Result_endPoint == R_LEFT_SIDE) - || - (Result_endPoint == R_RIGHT_SIDE) - || - (Result_endPoint == R_ON_AREA) - ) - ) - ) - return 1; - //there is a crosspoint - if ( - ( - (Result_beginPoint == R_LEFT_SIDE) - || - (Result_beginPoint == R_RIGHT_SIDE) - ) - && - (Result_endPoint == R_IN_AREA) - ) - return 2; - // there is a crosspoint - if ( - (Result_beginPoint == R_IN_AREA) - && - ( - (Result_endPoint == R_LEFT_SIDE) - || - (Result_endPoint == R_RIGHT_SIDE) - ) - ) - return 3; - // beginPoint is a crosspoint, further investigation needed - if ( - (Result_beginPoint == R_IN_AREA) - && - (Result_endPoint == R_ON_AREA) - ) - return 5; - // endPoint is a crosspoint, further investigation needed - if ( - (Result_beginPoint == R_ON_AREA) - && - (Result_endPoint == R_IN_AREA) - ) - return 6; - // All other combinations are illegal - return -1; -} - - -// ActionOnTable2 -// This function decide which action must be taken, after PointInLine -// has given the results of two points in relation to a wxLine. It can only give a -// correct decision if first the relation of the points from the wxLine -// are investigated in relation to the wxLine wich can be constucted from the points. -// -// input Result_beginPoint: -// Result_endPoint : -// The results can be R_LEFT_SIDE, R_RIGHT_SIDE, R_ON_AREA, R_IN_AREA -// -// return -1: Illegal combination -// 0: No action, no crosspoints -// 1: Calculate crosspoint -// 2: endPoint is a crosspoint -// 3: beginPoint is a crosspoint -// 4: beginPoint and endPoint are crosspoints -int wxLine::ActionOnTable2(R_PointStatus Result_beginPoint, R_PointStatus Result_endPoint) -{ - // beginPoint and eindpoint are crosspoints - if ( - (Result_beginPoint == R_IN_AREA) - && - (Result_endPoint == R_IN_AREA) - ) - return 4; - // there are no crosspoints - if ( - ( - (Result_beginPoint == R_LEFT_SIDE) - && - ( - (Result_endPoint == R_LEFT_SIDE) - || - (Result_endPoint == R_ON_AREA) - ) - ) - || - ( - (Result_beginPoint == R_RIGHT_SIDE) - && - ( - (Result_endPoint == R_RIGHT_SIDE) - || - (Result_endPoint == R_ON_AREA) - ) - ) - || - ( - (Result_beginPoint == R_ON_AREA) - && - ( - (Result_endPoint == R_LEFT_SIDE) - || - (Result_endPoint == R_RIGHT_SIDE) - || - (Result_endPoint == R_ON_AREA) - ) - ) - ) - return 0; - // there is a real intersection, which must be calculated - if ( - ( - (Result_beginPoint == R_LEFT_SIDE) - && - (Result_endPoint == R_RIGHT_SIDE) - ) - || - ( - (Result_beginPoint == R_RIGHT_SIDE) - && - (Result_endPoint == R_LEFT_SIDE) - ) - ) - return 1; - // endPoint is a crosspoint - if ( - ( - (Result_beginPoint == R_LEFT_SIDE) - || - (Result_beginPoint == R_RIGHT_SIDE) - || - (Result_beginPoint == R_ON_AREA) - ) - && - (Result_endPoint == R_IN_AREA) - ) - return 2; - // beginPoint is a crosspoint - if ( - (Result_beginPoint == R_IN_AREA) - && - ( - (Result_endPoint == R_LEFT_SIDE) - || - (Result_endPoint == R_RIGHT_SIDE) - || - (Result_endPoint == R_ON_AREA) - ) - ) - return 3; - // All other combinations are illegal - return -1; -} - -// Calculate the Y when the X is given -double wxLine::Calculate_Y(double X) -{ - CalculateLineParameters(); - if (m_AA != 0) - return -(m_AA * X + m_CC) / m_BB; - else - // horizontal wxLine - return m_a.m_y; -} - -void wxLine::Virtual_Point(wxPoint2DDouble& a_point,double distance) const -{ - assert(m_valid_parameters); - - //calculate the distance using the slope of the wxLine - //and rotate 90 degrees - - a_point.m_y=a_point.m_y + (distance * -m_BB); - a_point.m_x=a_point.m_x - (distance * m_AA ); -} - - - -// -// Calculate the lineparameters for the wxLine if nessecary -// -void wxLine::CalculateLineParameters() -{ - // if not valid_parameters calculate the parameters - if (!m_valid_parameters) - { - double length; - - // bp AND ep may not be the same - if (m_a == m_b) - assert (0); - - m_AA = (m_b.m_y - m_a.m_y); // A = (Y2-Y1) - m_BB = (m_a.m_x - m_b.m_x); // B = (X1-X2) - - // the parameters A end B can now be normalized - length = sqrt(m_AA*m_AA + m_BB*m_BB); - - assert(length !=0); - - m_AA = (m_AA / length); - m_BB = (m_BB / length); - - m_CC = -((m_AA * m_a.m_x) + (m_a.m_y * m_BB)); - - m_valid_parameters = TRUE; - } -} - - -// Checks if a wxLine intersect with another wxLine -// inout wxLine : another wxLine -// Marge: optional, standard on MARGE (declared in MISC.CPP) -// -// return true : wxLines are crossing -// false: wxLines are not crossing -// -bool wxLine::CheckIntersect (wxLine& lijn, double Marge) -{ - double distance=0; - - // bp AND ep may not be the same - if (m_a == m_b) - assert (0); - - int Take_Action1, Take_Action2; - bool Total_Result=FALSE; - R_PointStatus Result_beginPoint,Result_endPoint; - - Result_beginPoint = PointInLine(lijn.m_a,distance,Marge); - Result_endPoint = PointInLine(lijn.m_b,distance,Marge); - Take_Action1 = ActionOnTable1(Result_beginPoint,Result_endPoint); - switch (Take_Action1) - { - case 0: Total_Result = FALSE ; break; - case 1: { - Result_beginPoint = lijn.PointInLine(m_a,distance,Marge); - Result_endPoint = lijn.PointInLine(m_b,distance,Marge); - Take_Action2 = ActionOnTable2(Result_beginPoint,Result_endPoint); - switch (Take_Action2) - { - case 0: Total_Result = FALSE; break; - case 1: case 2: case 3: case 4: Total_Result = TRUE; break; - } - }; break; // This break belongs to the switch(Take_Action1) - case 2: case 3: case 4: case 5: case 6: Total_Result = TRUE; break; - } - return Total_Result; //This is the final decision -} - - -// -// Get the beginPoint from the wxLine -// usage: Point aPoint = a_line.GetBeginPoint() -// -wxPoint2DDouble wxLine::GetBeginPoint() -{ - return m_a; -} - - -// -// Get the endPoint from the wxLine -// usage: Point aPoint = a_line.GetEndPoint() -// -wxPoint2DDouble wxLine::GetEndPoint() -{ - return m_b; -} - -// Intersects two wxLines -// input wxLine : another wxLine -// Marge: optional, standard on MARGE -// -// return 0: If there are no crossings -// 1: If there is one crossing -// 2: If there are two crossings -int wxLine::Intersect(wxLine& lijn, wxPoint2DDouble& c1 ,wxPoint2DDouble& c2 , double Marge) -{ - double distance=0; - - // bp AND ep may not be the same - if (m_a == m_b) - assert (0); - - R_PointStatus Result_beginPoint,Result_endPoint; - int Take_Action1, Take_Action2, Number_of_Crossings = 0; - - Result_beginPoint = PointInLine(lijn.m_a,distance,Marge); - Result_endPoint = PointInLine(lijn.m_b,distance,Marge); - - Take_Action1 = ActionOnTable1(Result_beginPoint,Result_endPoint); -// 0: No action, no crosspoints -// 1: Investigate results points in relation to the other wxLine -// 2: endPoint is a crosspoint, no further investigation -// 3: beginPoint is a crosspoint, no further investigation -// 4: beginPoint and endPoint are crosspoints, no further investigation -// 5: beginPoint is a crosspoint, need further investigation -// 6: endPoint is a crosspoint, need further investigation - - // The first switch will insert a crosspoint immediatly - switch (Take_Action1) - { - case 2: case 6: c1=lijn.m_b; - Number_of_Crossings = 1; - break; - case 3: case 5: c1=lijn.m_a; - Number_of_Crossings = 1; - break; - case 4: c1=lijn.m_a; - c2=lijn.m_b; - Number_of_Crossings = 2; - break; - default: - break; - } - - // This switch wil investigate the points of this wxLine in relation to lijn - // 1: Investigate results points in relation to the other wxLine - // 5: beginPoint is a crosspoint, need further investigation - // 6: endPoint is a crosspoint, need further investigation - switch (Take_Action1) - { - case 1: case 5: case 6: - { - Result_beginPoint = lijn.PointInLine(m_a,distance,Marge); - Result_endPoint = lijn.PointInLine(m_b,distance,Marge); - Take_Action2 = ActionOnTable2(Result_beginPoint,Result_endPoint); - // return -1: Illegal combination - // 0: No action, no crosspoints - // 1: Calculate crosspoint - // 2: endPoint is a crosspoint - // 3: beginPoint is a crosspoint - // 4: beginPoint and endPoint are crosspoints - switch (Take_Action2) - { - // for the cases see the returnvalue of ActionTable2 - case 1: { // begin of scope to calculate the intersection - double X, Y, Denominator; - CalculateLineParameters(); - Denominator = (m_AA * lijn.m_BB) - (lijn.m_AA * m_BB); - // Denominator may not be 0 - assert(Denominator != 0.0); - // Calculate intersection of both linesegments - X = ((m_BB * lijn.m_CC) - (lijn.m_BB * m_CC)) / Denominator; - Y = ((lijn.m_AA * m_CC) - (m_AA * lijn.m_CC)) / Denominator; - - c1.m_x=X; - c1.m_y=Y; - } - Number_of_Crossings++; - break; - case 2: c2=m_a; - Number_of_Crossings++; - break; - case 3: c2=m_b; - Number_of_Crossings++; - break; - case 4: c1=m_a; - c2=m_b; - Number_of_Crossings = 2; - break; - } - }; - break; - default: - break; - } - return Number_of_Crossings; //This is de final number of crossings -} - -// -// test if a point lies in the linesegment. If the point isn't on the wxLine -// the function returns a value that indicates on which side of the -// wxLine the point is (in linedirection from first point to second point -// -// returns R_LEFT_SIDE, when point lies on the left side of the wxLine -// R_RIGHT_SIDE, when point lies on the right side of the wxLine -// R_ON_AREA, when point lies on the infinite wxLine within a range -// R_IN_AREA, when point lies in the area of the linesegment -// the returnvalues are declared in (wxLine.H) -R_PointStatus wxLine::PointInLine(const wxPoint2DDouble& a_Point, double& Distance,double Marge) -{ - Distance=0; - - // Point may not be the same - assert(m_a != m_b); - - int Result_ofm_BBox=FALSE; - R_PointStatus Result_of_Online; - - //quick test if point is begin or endpoint - if (a_Point == m_a || a_Point == m_b) - return R_IN_AREA; - - // Checking if point is in bounding-box with marge - double xmin=wxMin(m_a.m_x,m_b.m_x); - double xmax=wxMax(m_a.m_x,m_b.m_x); - double ymin=wxMin(m_a.m_y,m_b.m_y); - double ymax=wxMax(m_a.m_y,m_b.m_y); - - if ( a_Point.m_x >= (xmin - Marge) && a_Point.m_x <= (xmax + Marge) && - a_Point.m_y >= (ymin - Marge) && a_Point.m_y <= (ymax + Marge) ) - Result_ofm_BBox=TRUE; - - // Checking if point is on the infinite wxLine - Result_of_Online = PointOnLine(a_Point, Distance, Marge); - - // point in boundingbox of the wxLine and is on the wxLine then the point is R_IN_AREA - if ((Result_ofm_BBox) && (Result_of_Online == R_ON_AREA)) - return R_IN_AREA; - else - return Result_of_Online; -} - - -// -// test if a point lies on the wxLine. If the point isn't on the wxLine -// the function returns a value that indicates on which side of the -// wxLine the point is (in linedirection from first point to second point -// -// returns R_LEFT_SIDE, when point lies on the left side of the wxLine -// R_ON_AREA, when point lies on the infinite wxLine within a range -// R_RIGHT_SIDE, when point lies on the right side of the wxLine -// R_LEFT_SIDE , R_RIGHT_SIDE , R_ON_AREA -R_PointStatus wxLine::PointOnLine(const wxPoint2DDouble& a_Point, double& Distance, double Marge) -{ - Distance=0; - // Point may not be queal - assert(m_a!=m_b); - - //quick test if point is begin or endpoint - if (a_Point == m_a || a_Point == m_b) - return R_ON_AREA; - - CalculateLineParameters(); - // calculate the distance of a_Point in relation to the wxLine - Distance = (m_AA * a_Point.m_x)+(m_BB * a_Point.m_y) + m_CC; - - if (Distance < -Marge) - return R_LEFT_SIDE; - else - { - if (Distance > Marge) - return R_RIGHT_SIDE; - else - return R_ON_AREA; - } -} - -// makes a wxLine same as these -// usage : wxLine1 = wxLine2; -wxLine& wxLine::operator=(const wxLine& a_line) -{ - m_AA = a_line.m_AA; - m_BB = a_line.m_BB; - m_CC = a_line.m_CC; - - m_a= a_line.m_a; - m_b= a_line.m_b; - m_valid_parameters = a_line.m_valid_parameters; - return *this; -} - -void wxLine::OffsetContour(const wxLine& nextline,double factor,wxPoint2DDouble& offsetpoint) const -{ - wxPoint2DDouble offs_begin(m_a); - wxPoint2DDouble offs_end(m_b); - - wxPoint2DDouble offs_bgn_next(nextline.m_a); - wxPoint2DDouble offs_end_next(nextline.m_b); - // make a wxPoint2DDouble from this point - - Virtual_Point(offs_begin,factor); - Virtual_Point(offs_end,factor); - wxLine offs_currentline(offs_begin,offs_end); - - nextline.Virtual_Point(offs_bgn_next,factor); - nextline.Virtual_Point(offs_end_next,factor); - wxLine offs_nextline(offs_bgn_next, offs_end_next); - - offs_nextline.CalculateLineParameters(); - offs_currentline.CalculateLineParameters(); - offs_currentline.Intersect(offs_nextline,offsetpoint); -} - -// Return the position of the second wxLine compared to this wxLine -// Result = IS_ON | IS_LEFT | IS_RIGHT -// Here Left and Right is defined as being left or right from -// the this wxLine towards the center (common) node -// direction of vetors taken as begin to endpoint with end of this at -// begin of wxLine two -OUTPRODUCT wxLine::OutProduct(const wxLine& two,double accur) -{ - R_PointStatus uitp; - double distance; - if (two.m_a==two.m_b) - assert(0); - if (m_a==m_b) - assert(0); - - uitp=PointOnLine(two.m_b, distance, accur); - - - /*double uitp= (_x - first._x) * (third._y - _y) - - (_y - first._y) * (third._x - _x); - if (uitp>0) return IS_LEFT; - if (uitp<0) return IS_RIGHT; - return IS_ON;*/ - - //depending on direction of this link (going to or coming from centre) - if (uitp==R_LEFT_SIDE) - return R_IS_LEFT; - if (uitp==R_RIGHT_SIDE) - return R_IS_RIGHT; - return R_IS_ON; -} - -// Intersects two lines if a crossing return TRUE -// else FALSE -bool wxLine::Intersect(wxLine& lijn,wxPoint2DDouble& crossing) -{ - // lijn must exist - assert(m_valid_parameters); - assert(lijn.m_valid_parameters); - - double X, Y, Denominator; - Denominator = (m_AA * lijn.m_BB) - (lijn.m_AA * m_BB); - // Denominator may not be 0 - if (Denominator == 0.0) - return FALSE; - // Calculate intersection of both linesegments - X = ((m_BB * lijn.m_CC) - (lijn.m_BB * m_CC)) / Denominator; - Y = ((lijn.m_AA * m_CC) - (m_AA * lijn.m_CC)) / Denominator; - - crossing.m_x=X; - crossing.m_y=Y; - return TRUE; -} - diff --git a/contrib/src/canvas/makefile.b32 b/contrib/src/canvas/makefile.b32 deleted file mode 100644 index ba65ba3a67..0000000000 --- a/contrib/src/canvas/makefile.b32 +++ /dev/null @@ -1,17 +0,0 @@ -# -# File: makefile.b32 -# Author: Julian Smart -# Created: 1999 -# Updated: -# Copyright: -# -# Makefile : Builds Canvas library for 32-bit BC++ - -WXDIR = $(WXWIN) - -LIBTARGET=$(WXDIR)\lib\canvas.lib - -OBJECTS = bbox.obj canvas.obj liner.obj polygon.obj - -!include $(WXDIR)\src\makelib.b32 - diff --git a/contrib/src/canvas/makefile.g95 b/contrib/src/canvas/makefile.g95 deleted file mode 100644 index 8b85cb6b51..0000000000 --- a/contrib/src/canvas/makefile.g95 +++ /dev/null @@ -1,16 +0,0 @@ -# -# File: makefile.g95 -# Author: Julian Smart -# Created: 1999 -# Updated: -# Copyright: (c) Julian Smart, 1999 -# -# Makefile for wxWindows Plot library Cygwin/Mingw32). - -WXDIR = ../../.. - -LIBTARGET=$(WXDIR)/lib/libcanvas.a -OBJECTS = bbox.o canvas.o liner.o polygon.o - -include $(WXDIR)/src/makelib.g95 - diff --git a/contrib/src/canvas/makefile.vc b/contrib/src/canvas/makefile.vc deleted file mode 100644 index c80b5540b6..0000000000 --- a/contrib/src/canvas/makefile.vc +++ /dev/null @@ -1,159 +0,0 @@ - -# File: makefile.vc -# Author: Julian Smart -# Created: 2001 -# Updated: -# Copyright: (c) 2001, Julian Smart -# -# "%W% %G%" -# -# Makefile : Builds Plot class library (MS VC++). -# Use FINAL=1 argument to nmake to build final version with no debugging -# info - - -# Set WXDIR for your system -WXDIR = $(WXWIN) -GIZMOSDIR = $(WXDIR)\contrib\src\canvas -GIZMOSINC = $(WXDIR)\contrib\include\wx\canvas -THISDIR = $(WXDIR)\contrib\src\canvas -DOCDIR=$(WXDIR)\contrib\docs -LOCALDOCDIR=$(WXDIR)\contrib\docs\latex\canvas - -!include $(WXDIR)\src\makevc.env - -OBJECTS = $(D)\bbox.obj $(D)\canvas.obj $(D)\liner.obj $(D)\polygon.obj - -LIBTARGET=$(WXDIR)\lib\canvas$(LIBEXT).lib - -all: $(D) $(LIBTARGET) - -$(D) : - mkdir $(D) - -wx: - cd $(WXDIR)\src\msw - nmake -f makefile.vc FINAL=$(FINAL) - cd $(THISDIR) - -wxclean: - cd $(WXDIR)\src\msw - nmake -f makefile.vc clean - cd $(THISDIR) - -$(LIBTARGET): $(OBJECTS) - -erase $(LIBTARGET) - $(implib) @<< --out:$(LIBTARGET) --machine:$(CPU) -$(OBJECTS) -<< - -$(D)\bbox.obj: bbox.$(SRCSUFF) - cl @<< -$(CPPFLAGS) /c /Fo$@ /Tp $(*B).$(SRCSUFF) -<< - -$(D)\canvas.obj: canvas.$(SRCSUFF) - cl @<< -$(CPPFLAGS) /c /Fo$@ /Tp $(*B).$(SRCSUFF) -<< - -$(D)\liner.obj: liner.$(SRCSUFF) - cl @<< -$(CPPFLAGS) /c /Fo$@ /Tp $(*B).$(SRCSUFF) -<< - -$(D)\polygon.obj: polygon.$(SRCSUFF) - cl @<< -$(CPPFLAGS) /c /Fo$@ /Tp $(*B).$(SRCSUFF) -<< - -clean: - -erase $(D)\*.obj - -erase *.sbr - -erase *.exe - -erase *.res - -erase *.map - -erase *.pdb - -erase $(LIBTARGET) - -DOCSOURCES=$(LOCALDOCDIR)\canvas.tex \ - $(LOCALDOCDIR)\bugs.tex $(LOCALDOCDIR)\changes.tex\ - $(LOCALDOCDIR)\classes.tex $(LOCALDOCDIR)\intro.tex\ - $(LOCALDOCDIR)\topics.tex $(LOCALDOCDIR)\sample.tex - -html: $(DOCDIR)\html\canvas\canvas.htm -htmlhelp: $(DOCDIR)\htmlhelp\canvas.chm -htb: $(DOCDIR)\htb\canvas.htb -hlp: $(DOCDIR)\winhelp\canvas.hlp -pdfrtf: $(DOCDIR)\pdf\canvas.rtf -ps: $(DOCDIR)\ps\canvas.ps - -touchmanual: - touch $(LOCALDOCDIR)\canvas.tex - - -$(DOCDIR)\winhelp\canvas.hlp: $(LOCALDOCDIR)\canvas.rtf $(LOCALDOCDIR)\canvas.hpj - cd $(LOCALDOCDIR) - -erase canvas.ph - hc canvas - move canvas.hlp $(DOCDIR)\winhelp\canvas.hlp - move canvas.cnt $(DOCDIR)\winhelp\canvas.cnt - cd $(THISDIR) - -$(LOCALDOCDIR)\canvas.rtf: $(DOCSOURCES) - cd $(LOCALDOCDIR) - -start $(WAITFLAG) tex2rtf $(LOCALDOCDIR)\canvas.tex $(LOCALDOCDIR)\canvas.rtf -twice -winhelp - cd $(THISDIR) - -$(DOCDIR)\pdf\canvas.rtf: $(DOCSOURCES) - cd $(LOCALDOCDIR) - -copy *.bmp $(DOCDIR)\pdf - -start $(WAITFLAG) tex2rtf $(LOCALDOCDIR)\canvas.tex $(DOCDIR)\pdf\canvas.rtf -twice -rtf - cd $(THISDIR) - -$(DOCDIR)\html\canvas\canvas.htm: $(DOCSOURCES) - cd $(LOCALDOCDIR) - -mkdir $(DOCDIR)\html\canvas - copy *.gif $(DOCDIR)\html\canvas - -start $(WAITFLAG) tex2rtf $(LOCALDOCDIR)\canvas.tex $(DOCDIR)\html\canvas\canvas.htm -twice -html - -erase $(DOCDIR)\html\canvas\*.con - -erase *.con - -erase $(DOCDIR)\html\canvas\*.ref - cd $(THISDIR) - -$(DOCDIR)\htmlhelp\canvas.chm: $(DOCDIR)\html\canvas\canvas.htm $(DOCDIR)\html\canvas\canvas.hhp - cd $(DOCDIR)\html\canvas - -hhc canvas.hhp - move canvas.chm $(DOCDIR)\htmlhelp\canvas.chm - cd $(THISDIR) - -# An htb file is a zip file containing the .htm, .gif, .hhp, .hhc and .hhk -# files, renamed to htb. -# This can then be used with e.g. helpview. -# Optionally, a cached version of the .hhp file can be generated with hhp2cached. -$(DOCDIR)\htb\canvas.htb: $(DOCDIR)\html\canvas\canvas.htm - cd $(DOCDIR)\html\canvas - -erase canvas.zip canvas.htb - zip canvas.zip *.htm *.gif *.hhp *.hhc *.hhk - -mkdir $(DOCDIR)\htb - move canvas.zip $(DOCDIR)\htb\canvas.htb - cd $(THISDIR) - -$(LOCALDOCDIR)\canvas.dvi: $(DOCSOURCES) - cd $(LOCALDOCDIR) - -latex canvas - -latex canvas - -makeindx canvas - -bibtex canvas - -latex canvas - -latex canvas - cd $(THISDIR) - -$(WXDIR)\docs\ps\canvas.ps: $(LOCALDOCDIR)\canvas.dvi - cd $(LOCALDOCDIR) - -dvips32 -o canvas.ps canvas - move canvas.ps $(WXDIR)\docs\ps\canvas.ps - cd $(THISDIR) - diff --git a/contrib/src/canvas/polygon.cpp b/contrib/src/canvas/polygon.cpp deleted file mode 100644 index d7b159f683..0000000000 --- a/contrib/src/canvas/polygon.cpp +++ /dev/null @@ -1,1453 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: polygon.cpp -// Author: Klaas Holwerda -// Created: XX/XX/XX -// Copyright: 2000 (c) Klaas Holwerda -// Licence: wxWindows Licence -///////////////////////////////////////////////////////////////////////////// - -#ifdef __GNUG__ - #pragma implementation "polygon.cpp" -#endif - -// For compilers that support precompilation, includes "wx/wx.h". -#include "wx/wxprec.h" - -#ifdef __BORLANDC__ - #pragma hdrstop -#endif - -#include "wx/canvas/polygon.h" -#include "wx/canvas/liner.h" - -void ConvertSplinedPolygon(wxList* list, double Aber); -void ConvertSplinedPolyline(wxList* list,double Aber); -void ConvertSplinedPolygon(int& n, wxPoint2DDouble* points[], double Aber); -static void GetLRO(const wxPoint2DDouble& P, const wxPoint2DDouble& p1, const wxPoint2DDouble& p2, int &LRO1, int &LRO2,const double marge); - -//---------------------------------------------------------------------------- -// wxCanvasPolyline -//---------------------------------------------------------------------------- - -wxCanvasPolyline::wxCanvasPolyline( int n, wxPoint2DDouble points[]) - : wxCanvasObject() -{ - m_n = n; - m_points = points; - m_pen = *wxBLACK_PEN; - - CalcBoundingBox(); -} - -wxCanvasPolyline::~wxCanvasPolyline() -{ - delete m_points; -} - -void wxCanvasPolyline::SetPosXY( double x, double y) -{ - double xo=m_points[0].m_x; - double yo=m_points[0].m_y; - int i; - for (i=0; i < m_n;i++) - { - m_points[i].m_x += (x-xo); - m_points[i].m_y += (y-yo); - } - CalcBoundingBox(); -} - -void wxCanvasPolyline::TransLate( double x, double y ) -{ - int i; - for (i=0; i < m_n;i++) - { - m_points[i].m_x += x; - m_points[i].m_y += y; - } - CalcBoundingBox(); -} - -void wxCanvasPolyline::CalcBoundingBox() -{ - m_bbox.SetValid(FALSE); - - int i; - for (i=0; i < m_n;i++) - { - m_bbox.Expand( m_points[i].m_x,m_points[i].m_y); - } - - //include the pen width also - m_bbox.EnLarge(m_pen.GetWidth()); -} - -void wxCanvasPolyline::Render(wxTransformMatrix* cworld, int clip_x, int clip_y, int clip_width, int clip_height ) -{ - if (!m_visible) return; - - int start_y = clip_y; - int end_y = clip_y+clip_height; - - int start_x = clip_x; - int end_x = clip_x+clip_width; - -#if IMAGE_CANVAS -#else - wxPoint *cpoints = new wxPoint[m_n]; - int i; - for (i = 0; i < m_n; i++) - { - double x1; - double y1; - //transform to absolute - cworld->TransformPoint( m_points[i].m_x, m_points[i].m_y, x1, y1 ); - //transform to device - cpoints[i].x = m_admin->LogicalToDeviceX(x1); - cpoints[i].y = m_admin->LogicalToDeviceY(y1); - } - wxDC *dc = m_admin->GetActive()->GetDC(); - dc->SetClippingRegion(start_x,start_y,end_x-start_x,end_y-start_y); - int pw=m_pen.GetWidth(); - m_pen.SetWidth(m_admin->LogicalToDeviceXRel(pw)); - dc->SetPen(m_pen); - dc->DrawLines(m_n, cpoints, 0,0); - delete [] cpoints; - dc->SetPen(wxNullPen); - dc->DestroyClippingRegion(); - m_pen.SetWidth(pw); -#endif -} - -void wxCanvasPolyline::WriteSVG( wxTextOutputStream &stream ) -{ -} - -wxCanvasObject* wxCanvasPolyline::IsHitWorld( double x, double y, double margin ) -{ - if ((x >= m_bbox.GetMinX()-margin) && - (x <= m_bbox.GetMaxX()+margin) && - (y >= m_bbox.GetMinY()-margin) && - (y <= m_bbox.GetMaxY()+margin) - ) - { - wxPoint2DDouble P=wxPoint2DDouble(x,y); - if (PointOnPolyline(P,m_pen.GetWidth()/2+margin)) - return this; - else - return (wxCanvasObject*) NULL; - } - return (wxCanvasObject*) NULL; -} - -bool wxCanvasPolyline::PointOnPolyline(const wxPoint2DDouble& P, double margin) -{ - bool result = FALSE; - double distance; - wxPoint2DDouble p1,p2; - - p2=m_points[0]; - int i; - for (i = 0; i < m_n-1; i++) - { - p1=p2; - p2=m_points[i+1]; - if (margin > sqrt(pow(p1.m_x-P.m_x,2)+pow(p1.m_y-P.m_y,2))) - { - result=TRUE; - break; - } - else if (!((p1.m_x == p2.m_x) && (p1.m_y == p2.m_y))) - { - wxLine line1(p1,p2); - if (line1.PointInLine(P,distance,margin) == R_IN_AREA) - { - result=TRUE; - break; - } - } - } - - return result; -} - -//---------------------------------------------------------------------------- -// wxCanvasPolygon -//---------------------------------------------------------------------------- - -wxCanvasPolygon::wxCanvasPolygon( int n, wxPoint2DDouble points[],bool splined) - : wxCanvasObject() -{ - m_n = n; - m_points = points; - m_brush = *wxBLACK_BRUSH; - m_pen = *wxTRANSPARENT_PEN; - m_textfg=*wxBLACK; - m_textbg=*wxWHITE; - m_transp=FALSE; - m_gpen=*wxBLACK_PEN; - m_gdistance=0; - m_gradient=FALSE; - m_spline = splined; - - if (m_spline) - { - ConvertSplinedPolygon(m_n, &m_points, 10 ); - } - - CalcBoundingBox(); -} - -wxCanvasPolygon::~wxCanvasPolygon() -{ - delete m_points; -} - -void wxCanvasPolygon::SetPosXY( double x, double y) -{ - double xo=m_points[0].m_x; - double yo=m_points[0].m_y; - int i; - for (i=0; i < m_n;i++) - { - m_points[i].m_x += (x-xo); - m_points[i].m_y += (y-yo); - } - CalcBoundingBox(); -} - -void wxCanvasPolygon::TransLate( double x, double y ) -{ - int i; - for (i=0; i < m_n;i++) - { - m_points[i].m_x += x; - m_points[i].m_y += y; - } - CalcBoundingBox(); -} - -void wxCanvasPolygon::CalcBoundingBox() -{ - - m_bbox.SetValid(FALSE); - - int i; - for (i=0; i < m_n;i++) - { - m_bbox.Expand( m_points[i].m_x,m_points[i].m_y); - } - - //include the pen width also - m_bbox.EnLarge(m_pen.GetWidth()); -} - -void wxCanvasPolygon::Render(wxTransformMatrix* cworld, int clip_x, int clip_y, int clip_width, int clip_height ) -{ - if (!m_visible) return; - - int start_y = clip_y; - int end_y = clip_y+clip_height; - - int start_x = clip_x; - int end_x = clip_x+clip_width; - -#if IMAGE_CANVAS -#else - //one extra for drawlines in some cases - wxPoint *cpoints = new wxPoint[m_n+1]; - int i; - for (i = 0; i < m_n; i++) - { - double x1; - double y1; - cworld->TransformPoint( m_points[i].m_x, m_points[i].m_y, x1, y1 ); - cpoints[i].x = m_admin->LogicalToDeviceX(x1); - cpoints[i].y = m_admin->LogicalToDeviceY(y1); - } - double x1; - double y1; - cworld->TransformPoint( m_points[0].m_x, m_points[0].m_y, x1, y1 ); - cpoints[m_n].x = m_admin->LogicalToDeviceX(x1); - cpoints[m_n].y = m_admin->LogicalToDeviceY(y1); - - wxDC *dc = m_admin->GetActive()->GetDC(); - dc->SetClippingRegion(start_x,start_y,end_x-start_x,end_y-start_y); - dc->SetBrush(m_brush); - int pw=m_pen.GetWidth(); - m_pen.SetWidth(m_admin->LogicalToDeviceXRel(pw)); - if ( m_brush.GetStyle() == wxSTIPPLE_MASK_OPAQUE && m_transp) - { - //draw a transparent polygon - //leaf the pen not transparent, which i prefer - dc->SetPen( wxPen( *wxWHITE,m_admin->LogicalToDeviceXRel(pw), wxSOLID) ); - dc->SetTextForeground(*wxBLACK); - dc->SetTextBackground(*wxWHITE); - dc->SetLogicalFunction(wxAND_INVERT); - // BLACK OUT the opaque pixels and leave the rest as is - dc->DrawPolygon(m_n, cpoints, 0,0,wxWINDING_RULE); - // Set background and foreground colors for fill pattern - //the previous blacked out pixels are now merged with the layer color - //while the non blacked out pixels stay as they are. - dc->SetTextForeground(*wxBLACK); - //now define what will be the color of the fillpattern parts that are not transparent - dc->SetTextBackground(m_textfg); - dc->SetLogicalFunction(wxOR); - //don't understand how but the outline is also depending on logicalfunction - dc->SetPen(m_pen); - dc->DrawPolygon(m_n, cpoints, 0,0,wxWINDING_RULE); - } - else if (m_gradient) - { - int pw2=m_gpen.GetWidth(); - m_gpen.SetWidth(m_admin->LogicalToDeviceYRel(pw2)); - FillPolygon(cworld,clip_x,clip_y,clip_width,clip_height ); - if (m_pen.GetStyle() != wxTRANSPARENT) - { - dc->SetPen(m_pen); - dc->DrawLines(m_n+1, cpoints, 0,0); - } - m_gpen.SetWidth(pw2); - } - else - { - dc->SetPen(m_pen); - dc->DrawPolygon(m_n, cpoints, 0,0,wxWINDING_RULE); - } - delete [] cpoints; - dc->SetBrush(wxNullBrush); - dc->SetPen(wxNullPen); - dc->DestroyClippingRegion(); - m_pen.SetWidth(pw); -#endif -} - -void wxCanvasPolygon::WriteSVG( wxTextOutputStream &stream ) -{ -} - -wxCanvasObject* wxCanvasPolygon::IsHitWorld( double x, double y, double margin ) -{ - if ((x >= m_bbox.GetMinX()-margin) && - (x <= m_bbox.GetMaxX()+margin) && - (y >= m_bbox.GetMinY()-margin) && - (y <= m_bbox.GetMaxY()+margin) - ) - { - wxPoint2DDouble P=wxPoint2DDouble(x,y); - INOUTPOLY io=PointInPolygon(P, m_pen.GetWidth()/2+margin); - if (io == OUTSIDE_POLY) - return (wxCanvasObject*) NULL; - else - return this; - } - return (wxCanvasObject*) NULL; -} - -INOUTPOLY wxCanvasPolygon::PointInPolygon(const wxPoint2DDouble& P, double marge) -{ - int R_tot = 0, L_tot = 0; - int p1_LRO, p2_LRO; - double px = P.m_x, py = P.m_y; - double Y_intersect; - wxPoint2DDouble p1,p2; - - //iterate across points until we are sure that the given point is in or out - int i; - for (i = 0; i < m_n; i++) - { - p1 = m_points[i]; - if (i == m_n-1) - p2 = m_points[0]; - else - p2 = m_points[i+1]; - - //more accurate - GetLRO(P,p1,p2,p1_LRO,p2_LRO,marge/10); - if (p1_LRO != p2_LRO) - { - int L = 0, R = 0; - if (p2_LRO == -1) { R = -p1_LRO; L = 1; } - if (p2_LRO == 0) if (p1_LRO == 1) R = -1; else L = -1; - if (p2_LRO == 1) { R = 1; L = p1_LRO; } - - // calculate intersection point with line for px - if (p1_LRO == 0) - { - if ((p1.m_y < (py + marge)) && (p1.m_y > (py - marge))) - return ON_POLY; - else - Y_intersect = p1.m_y; - } - else if (p2_LRO == 0) - { - if ((p2.m_y < (py + marge)) && (p2.m_y > (py - marge))) - return ON_POLY; - else - Y_intersect = p2.m_y; - } - else //both p2_LRO and p1_LRO not 0 - { - if ((p1.m_y > (py + marge)) && (p2.m_y > (py + marge))) - Y_intersect = p1.m_y; //a save value to check later - else if ((p1.m_y < (py- marge)) && (p2.m_y < (py - marge))) - Y_intersect = p1.m_y; //a save value to check later - else //need to calculate intersection - { - if (!((p1.m_x == p2.m_x) && (p1.m_y == p2.m_y))) - { - wxLine line1(p1,p2); - line1.CalculateLineParameters(); - Y_intersect = line1.Calculate_Y(px); - } - else - continue; - } - } - if (Y_intersect > (py + marge)) - { - R_tot += R; - L_tot += L; - } - else if ((Y_intersect <= (py + marge)) && (Y_intersect >= (py - marge))) - { - return ON_POLY; - } - } - } - - // geef het juiste resultaat terug - if (R_tot == 0) - if (L_tot == 0) return OUTSIDE_POLY; - else return ON_POLY; - else - if (L_tot == 0) return ON_POLY; - else return INSIDE_POLY; -} - -//---------------------------------------------------------------------------- -// wxCanvasPolylineL -//---------------------------------------------------------------------------- - -wxCanvasPolylineL::wxCanvasPolylineL( wxList* points, bool spline ) - : wxCanvasObject() -{ - m_lpoints = points; - m_pen = *wxBLACK_PEN; - m_spline=spline; - if (m_spline) - ConvertSplinedPolyline(m_lpoints, 10); - CalcBoundingBox(); -} - -wxCanvasPolylineL::~wxCanvasPolylineL() -{ - m_lpoints->DeleteContents(TRUE); - delete m_lpoints; -} - -double wxCanvasPolylineL::GetPosX() -{ - wxNode *node = m_lpoints->GetFirst(); - wxPoint2DDouble* point = (wxPoint2DDouble*)node->Data(); - return point->m_x; -} - -double wxCanvasPolylineL::GetPosY() -{ - wxNode *node = m_lpoints->GetFirst(); - wxPoint2DDouble* point = (wxPoint2DDouble*)node->Data(); - return point->m_y; -} - -void wxCanvasPolylineL::SetPosXY( double x, double y ) -{ - wxNode *node = m_lpoints->GetFirst(); - wxPoint2DDouble* point = (wxPoint2DDouble*)node->Data(); - double xo=point->m_x; - double yo=point->m_y; - while (node) - { - point = (wxPoint2DDouble*)node->Data(); - point->m_x = point->m_x + x-xo; - point->m_y = point->m_y + y-yo; - node = node->GetNext(); - } - CalcBoundingBox(); -} - -void wxCanvasPolylineL::TransLate( double x, double y ) -{ - wxNode *node = m_lpoints->GetFirst(); - while (node) - { - wxPoint2DDouble* point = (wxPoint2DDouble*)node->Data(); - point->m_x += x; - point->m_y += y; - node = node->GetNext(); - } - CalcBoundingBox(); -} - -void wxCanvasPolylineL::CalcBoundingBox() -{ - m_bbox.SetValid(FALSE); - - wxNode *node = m_lpoints->GetFirst(); - while (node) - { - wxPoint2DDouble* point = (wxPoint2DDouble*)node->Data(); - m_bbox.Expand( point->m_x,point->m_y); - node = node->GetNext(); - } - - //include the pen width also - m_bbox.EnLarge(m_pen.GetWidth()); -} - -void wxCanvasPolylineL::Render(wxTransformMatrix* cworld, int clip_x, int clip_y, int clip_width, int clip_height ) -{ - if (!m_visible) return; - - int start_y = clip_y; - int end_y = clip_y+clip_height; - - int start_x = clip_x; - int end_x = clip_x+clip_width; - -#if IMAGE_CANVAS -#else - int n=m_lpoints->GetCount(); - wxPoint *cpoints = new wxPoint[n]; - - wxNode *node = m_lpoints->GetFirst(); - int i=0; - while (node) - { - wxPoint2DDouble* point = (wxPoint2DDouble*)node->Data(); - double x1; - double y1; - //transform to absolute - cworld->TransformPoint( point->m_x, point->m_y, x1, y1 ); - //transform to device - cpoints[i].x = m_admin->LogicalToDeviceX(x1); - cpoints[i].y = m_admin->LogicalToDeviceY(y1); - - node = node->GetNext(); - i++; - } - - wxDC *dc = m_admin->GetActive()->GetDC(); - dc->SetClippingRegion(start_x,start_y,end_x-start_x,end_y-start_y); - int pw=m_pen.GetWidth(); - m_pen.SetWidth(m_admin->LogicalToDeviceXRel(pw)); - dc->SetPen(m_pen); - dc->DrawLines(n, cpoints, 0,0); - delete [] cpoints; - dc->SetPen(wxNullPen); - dc->DestroyClippingRegion(); - m_pen.SetWidth(pw); -#endif -} - -void wxCanvasPolylineL::WriteSVG( wxTextOutputStream &stream ) -{ -} - -wxCanvasObject* wxCanvasPolylineL::IsHitWorld( double x, double y, double margin ) -{ - if ((x >= m_bbox.GetMinX()-margin) && - (x <= m_bbox.GetMaxX()+margin) && - (y >= m_bbox.GetMinY()-margin) && - (y <= m_bbox.GetMaxY()+margin) - ) - { - wxPoint2DDouble P=wxPoint2DDouble(x,y); - if (PointOnPolyline(P,m_pen.GetWidth()/2+margin)) - return this; - else - return (wxCanvasObject*) NULL; - } - return (wxCanvasObject*) NULL; -} - -bool wxCanvasPolylineL::PointOnPolyline(const wxPoint2DDouble& P, double margin) -{ - bool result = FALSE; - double distance; - wxPoint2DDouble p1,p2; - - wxNode *node = m_lpoints->GetFirst(); - p2 = *(wxPoint2DDouble*)node->Data(); - while (node && !result) - { - p1=p2; - node=node->GetNext(); - if (!node) break; - p2 = *(wxPoint2DDouble*)node->Data(); - - if (margin > sqrt(pow(p1.m_x-P.m_x,2)+pow(p1.m_y-P.m_y,2))) - result=TRUE; - else if (!((p1.m_x == p2.m_x) && (p1.m_y == p2.m_y))) - { - wxLine line1(p1,p2); - if (line1.PointInLine(P,distance,margin) == R_IN_AREA) - result=TRUE; - } - } - - return result; -} - -//---------------------------------------------------------------------------- -// wxCanvasPolygon -//---------------------------------------------------------------------------- - -wxCanvasPolygonL::wxCanvasPolygonL( wxList* points, bool spline ) - : wxCanvasObject() -{ - m_lpoints = points; - m_brush = *wxBLACK_BRUSH; - m_pen = *wxTRANSPARENT_PEN; - m_spline=spline; - m_textfg=*wxBLACK; - m_textbg=*wxWHITE; - m_transp=FALSE; - - if (m_spline) - ConvertSplinedPolyline(m_lpoints, 10); - CalcBoundingBox(); -} - -wxCanvasPolygonL::~wxCanvasPolygonL() -{ - m_lpoints->DeleteContents(TRUE); - delete m_lpoints; -} - -double wxCanvasPolygonL::GetPosX() -{ - wxNode *node = m_lpoints->GetFirst(); - wxPoint2DDouble* point = (wxPoint2DDouble*)node->Data(); - return point->m_x; -} - -double wxCanvasPolygonL::GetPosY() -{ - wxNode *node = m_lpoints->GetFirst(); - wxPoint2DDouble* point = (wxPoint2DDouble*)node->Data(); - return point->m_y; -} - -void wxCanvasPolygonL::SetPosXY( double x, double y ) -{ - wxNode *node = m_lpoints->GetFirst(); - wxPoint2DDouble* point = (wxPoint2DDouble*)node->Data(); - double xo=point->m_x; - double yo=point->m_y; - while (node) - { - point = (wxPoint2DDouble*)node->Data(); - point->m_x = point->m_x + x-xo; - point->m_y = point->m_y + y-yo; - node = node->GetNext(); - } - CalcBoundingBox(); -} - -void wxCanvasPolygonL::TransLate( double x, double y ) -{ - wxNode *node = m_lpoints->GetFirst(); - while (node) - { - wxPoint2DDouble* point = (wxPoint2DDouble*)node->Data(); - point->m_x += x; - point->m_y += y; - node = node->GetNext(); - } - CalcBoundingBox(); -} - -void wxCanvasPolygonL::CalcBoundingBox() -{ - - m_bbox.SetValid(FALSE); - - wxNode *node = m_lpoints->GetFirst(); - while (node) - { - wxPoint2DDouble* point = (wxPoint2DDouble*)node->Data(); - m_bbox.Expand( point->m_x,point->m_y); - node = node->GetNext(); - } - - //include the pen width also - m_bbox.EnLarge(m_pen.GetWidth()); -} - -void wxCanvasPolygonL::Render(wxTransformMatrix* cworld, int clip_x, int clip_y, int clip_width, int clip_height ) -{ - if (!m_visible) return; - - int start_y = clip_y; - int end_y = clip_y+clip_height; - - int start_x = clip_x; - int end_x = clip_x+clip_width; - -#if IMAGE_CANVAS -#else - int n=m_lpoints->GetCount(); - wxPoint *cpoints = new wxPoint[n]; - - wxNode *node = m_lpoints->GetFirst(); - int i=0; - while (node) - { - wxPoint2DDouble* point = (wxPoint2DDouble*)node->Data(); - double x1; - double y1; - //transform to absolute - cworld->TransformPoint( point->m_x, point->m_y, x1, y1 ); - //transform to device - cpoints[i].x = m_admin->LogicalToDeviceX(x1); - cpoints[i].y = m_admin->LogicalToDeviceY(y1); - - node = node->GetNext(); - i++; - } - wxDC *dc = m_admin->GetActive()->GetDC(); - dc->SetClippingRegion(start_x,start_y,end_x-start_x,end_y-start_y); - dc->SetBrush(m_brush); - int pw=m_pen.GetWidth(); - m_pen.SetWidth(m_admin->LogicalToDeviceXRel(pw)); - if ( m_brush.GetStyle() == wxSTIPPLE_MASK_OPAQUE && m_transp) - { - //draw a transparent polygon - //leaf the pen not transparent, which i prefer - dc->SetPen( wxPen( *wxWHITE,m_admin->LogicalToDeviceXRel(pw), wxSOLID) ); - dc->SetTextForeground(*wxBLACK); - dc->SetTextBackground(*wxWHITE); - dc->SetLogicalFunction(wxAND_INVERT); - // BLACK OUT the opaque pixels and leave the rest as is - dc->DrawPolygon(n, cpoints, 0,0,wxWINDING_RULE); - // Set background and foreground colors for fill pattern - //the previous blacked out pixels are now merged with the layer color - //while the non blacked out pixels stay as they are. - dc->SetTextForeground(*wxBLACK); - //now define what will be the color of the fillpattern parts that are not transparent - dc->SetTextBackground(m_textfg); - dc->SetLogicalFunction(wxOR); - //don't understand how but the outline is also depending on logicalfunction - dc->SetPen(m_pen); - dc->DrawPolygon(n, cpoints, 0,0,wxWINDING_RULE); - dc->SetLogicalFunction(wxCOPY); - } - else - { - dc->SetPen(m_pen); - dc->SetTextForeground(m_textfg); - dc->SetTextBackground(m_textbg); - dc->DrawPolygon(n, cpoints, 0,0,wxWINDING_RULE); - } - delete [] cpoints; - dc->SetBrush(wxNullBrush); - dc->SetPen(wxNullPen); - dc->DestroyClippingRegion(); - m_pen.SetWidth(pw); -#endif -} - -void wxCanvasPolygonL::WriteSVG( wxTextOutputStream &stream ) -{ -} - -static void GetLRO(const wxPoint2DDouble& P, const wxPoint2DDouble& p1, const wxPoint2DDouble& p2, int &LRO1, int &LRO2,const double marge) -{ - if (p1.m_x > (P.m_x + marge)) LRO1 = -1; // beginnode is right of P - else - if (p1.m_x < (P.m_x - marge)) LRO1 = 1; // beginnode is left of P - else LRO1 = 0; // beginnode is on vertical line through P - - if (p2.m_x > (P.m_x + marge)) LRO2 = -1; // endnode is right of P - else - if (p2.m_x < (P.m_x - marge)) LRO2 = 1; // endnode is left of P - else LRO2 = 0; // endnode is on vertical line through P -} - -wxCanvasObject* wxCanvasPolygonL::IsHitWorld( double x, double y, double margin ) -{ - if ((x >= m_bbox.GetMinX()-margin) && - (x <= m_bbox.GetMaxX()+margin) && - (y >= m_bbox.GetMinY()-margin) && - (y <= m_bbox.GetMaxY()+margin) - ) - { - wxPoint2DDouble P=wxPoint2DDouble(x,y); - INOUTPOLY io=PointInPolygon(P,m_pen.GetWidth()/2 + margin); - if (io == OUTSIDE_POLY) - return (wxCanvasObject*) NULL; - else - return this; - } - return (wxCanvasObject*) NULL; -} - -INOUTPOLY wxCanvasPolygonL::PointInPolygon(const wxPoint2DDouble& P, double marge) -{ - int R_tot = 0, L_tot = 0; - int p1_LRO, p2_LRO; - double px = P.m_x, py = P.m_y; - double Y_intersect; - wxPoint2DDouble p1,p2; - - //iterate across points until we are sure that the given point is in or out - wxNode *node = m_lpoints->GetFirst(); - - while (node) - { - p1 = *(wxPoint2DDouble*)node->Data(); - if (m_lpoints->GetLast() == node) - { - p2 = *(wxPoint2DDouble*)m_lpoints->GetFirst(); - } - else - { - p2 = *(wxPoint2DDouble*)node->GetNext()->Data(); - } - - //more accurate - GetLRO(P,p1,p2,p1_LRO,p2_LRO,marge/10); - if (p1_LRO != p2_LRO) - { - int L = 0, R = 0; - if (p2_LRO == -1) { R = -p1_LRO; L = 1; } - if (p2_LRO == 0) if (p1_LRO == 1) R = -1; else L = -1; - if (p2_LRO == 1) { R = 1; L = p1_LRO; } - - // calculate intersection point with line for px - if (p1_LRO == 0) - { - if ((p1.m_y < (py + marge)) && (p1.m_y > (py - marge))) - return ON_POLY; - else - Y_intersect = p1.m_y; - } - else if (p2_LRO == 0) - { - if ((p2.m_y < (py + marge)) && (p2.m_y > (py - marge))) - return ON_POLY; - else - Y_intersect = p2.m_y; - } - else //both p2_LRO and p1_LRO not 0 - { - if ((p1.m_y > (py + marge)) && (p2.m_y > (py + marge))) - Y_intersect = p1.m_y; //a save value to check later - else if ((p1.m_y < (py- marge)) && (p2.m_y < (py - marge))) - Y_intersect = p1.m_y; //a save value to check later - else //need to calculate intersection - { - if (!((p1.m_x == p2.m_x) && (p1.m_y == p2.m_y))) - { - wxLine line1(p1,p2); - line1.CalculateLineParameters(); - Y_intersect = line1.Calculate_Y(px); - } - else - continue; - } - } - if (Y_intersect > (py + marge)) - { - R_tot += R; - L_tot += L; - } - else if ((Y_intersect <= (py + marge)) && (Y_intersect >= (py - marge))) - { - return ON_POLY; - } - } - node=node->Next(); - } - - // geef het juiste resultaat terug - if (R_tot == 0) - if (L_tot == 0) return OUTSIDE_POLY; - else return ON_POLY; - else - if (L_tot == 0) return ON_POLY; - else return INSIDE_POLY; -} - -// --------------------------------------------------------------------------- -// spline drawing code -// --------------------------------------------------------------------------- - -static void gds_quadratic_spline(wxList *org,double a1, double b1, double a2, double b2, - double a3, double b3, double a4, double b4,double aber); -static void gds_clear_stack(); -static int gds_spline_pop(double *x1, double *y1, double *x2, double *y2, double *x3, - double *y3, double *x4, double *y4); -static void gds_spline_push(double x1, double y1, double x2, double y2, double x3, double y3, - double x4, double y4); - -void ConvertSplinedPolygon(int& n, wxPoint2DDouble* points[], double Aber) -{ - wxList h; - int i; - for (i = 0; i < n; i++) - { - h.Append((wxObject*) new wxPoint2DDouble((*points)[i].m_x, (*points)[i].m_y)); - } - delete *points; - - ConvertSplinedPolygon(&h, Aber); - - n=h.GetCount(); - *points = new wxPoint2DDouble[n]; - wxNode* node=h.GetFirst(); - for (i = 0; i < n; i++) - { - wxNode* hh= node; - node = node->GetNext(); - (*points)[i].m_x=((wxPoint2DDouble*) hh->GetData())->m_x; - (*points)[i].m_y=((wxPoint2DDouble*) hh->GetData())->m_y; - delete (wxPoint2DDouble*) hh->GetData(); - h.DeleteNode(hh); - } -} - -void ConvertSplinedPolygon(wxList* list, double Aber) -{ - wxPoint2DDouble* point; - double cx1, cy1, cx2, cy2, cx3, cy3, cx4, cy4; - double x1, y1, x2, y2; - - if (list->GetCount() <2) - return; - - wxNode* iter=list->GetLast(); - x1 = ((wxPoint2DDouble*)iter->Data())->m_x; - y1 = ((wxPoint2DDouble*)iter->Data())->m_y; - - iter=list->GetFirst(); - x2 = ((wxPoint2DDouble*)iter->Data())->m_x; - y2 = ((wxPoint2DDouble*)iter->Data())->m_y; - - point = new wxPoint2DDouble(x2,y2); - list->Append((wxObject*)point); - - cx1 = (x1 + x2) / 2.0; - cy1 = (y1 + y2) / 2.0; - cx2 = (cx1 + x2) / 2.0; - cy2 = (cy1 + y2) / 2.0; - - delete (wxPoint2DDouble*) iter->Data(); - delete iter; - iter=list->GetFirst(); - x1 = ((wxPoint2DDouble*)iter->Data())->m_x; - y1 = ((wxPoint2DDouble*)iter->Data())->m_y; - point = new wxPoint2DDouble(x1,y1); - list->Append((wxObject*)point); - - int i=1; - int count=list->GetCount(); - while (i < count) - { - x1 = x2; - y1 = y2; - x2 = ((wxPoint2DDouble*)iter->Data())->m_x; - y2 = ((wxPoint2DDouble*)iter->Data())->m_y; - cx4 = (x1 + x2) / 2.0; - cy4 = (y1 + y2) / 2.0; - cx3 = (x1 + cx4) / 2.0; - cy3 = (y1 + cy4) / 2.0; - - gds_quadratic_spline(list,cx1, cy1, cx2, cy2, cx3, cy3, cx4, cy4,Aber); - - cx1 = cx4; - cy1 = cy4; - cx2 = (cx1 + x2) / 2.0; - cy2 = (cy1 + y2) / 2.0; - delete (wxPoint2DDouble*)iter->Data(); - delete iter; - iter=list->GetFirst(); - i++; - } - - iter=list->GetFirst(); - delete (wxPoint2DDouble*)iter->Data(); - delete iter; -} - -void ConvertSplinedPolyline(wxList* list,double Aber) -{ - double cx1, cy1, cx2, cy2, cx3, cy3, cx4, cy4; - double x1, y1, x2, y2; - - - if (list->GetCount() <2) - return; - - - - wxNode* iter=list->GetFirst(); - - x1 = ((wxPoint2DDouble*)iter->Data())->m_x; - y1 = ((wxPoint2DDouble*)iter->Data())->m_y; - - delete (wxPoint2DDouble*)iter->Data(); - delete iter; - iter=list->GetFirst(); - x2 = ((wxPoint2DDouble*)iter->Data())->m_x; - y2 = ((wxPoint2DDouble*)iter->Data())->m_y; - cx1 = (x1 + x2) / 2.0; - cy1 = (y1 + y2) / 2.0; - cx2 = (cx1 + x2) / 2.0; - cy2 = (cy1 + y2) / 2.0; - - wxPoint2DDouble* point = new wxPoint2DDouble(x1,y1); - list->Append((wxObject*)point); - - delete (wxPoint2DDouble*)iter->Data(); - delete iter; - iter=list->GetFirst(); - - int i=1; - int count=list->GetCount(); - while (i < count) - { - x1 = x2; - y1 = y2; - x2 = ((wxPoint2DDouble*)iter->Data())->m_x; - y2 = ((wxPoint2DDouble*)iter->Data())->m_y; - cx4 = (x1 + x2) / 2.0; - cy4 = (y1 + y2) / 2.0; - cx3 = (x1 + cx4) / 2.0; - cy3 = (y1 + cy4) / 2.0; - - gds_quadratic_spline(list,cx1, cy1, cx2, cy2, cx3, cy3, cx4, cy4,Aber); - - cx1 = cx4; - cy1 = cy4; - cx2 = (cx1 + x2) / 2.0; - cy2 = (cy1 + y2) / 2.0; - delete (wxPoint2DDouble*)iter->Data(); - delete iter; - iter=list->GetFirst(); - i++; - } - - point = new wxPoint2DDouble(cx1,cy1); - list->Append((wxObject*)point); - - point = new wxPoint2DDouble(x2,y2); - list->Append((wxObject*)point); -} - -/********************* CURVES FOR SPLINES ***************************** - - The following spline drawing routine is from - - "An Algorithm for High-Speed Curve Generation" - by George Merrill Chaikin, - Computer Graphics and Image Processing, 3, Academic Press, - 1974, 346-349. - - and - - "On Chaikin's Algorithm" by R. F. Riesenfeld, - Computer Graphics and Image Processing, 4, Academic Press, - 1975, 304-310. - -***********************************************************************/ - -#define half(z1, z2) ((z1+z2)/2.0) -#define THRESHOLD 5 - -/* iterative version */ - -void gds_quadratic_spline(wxList *org,double a1, double b1, double a2, double b2, double a3, double b3, double a4, - double b4,double Aber) -{ - register double xmid, ymid; - double x1, y1, x2, y2, x3, y3, x4, y4; - wxPoint2DDouble* point; - - gds_clear_stack(); - gds_spline_push(a1, b1, a2, b2, a3, b3, a4, b4); - - while (gds_spline_pop(&x1, &y1, &x2, &y2, &x3, &y3, &x4, &y4)) - { - xmid = half(x2, x3); - ymid = half(y2, y3); - if (fabs(x1 - xmid) < Aber && fabs(y1 - ymid) < Aber && - fabs(xmid - x4) < Aber && fabs(ymid - y4) < Aber) - { - point = new wxPoint2DDouble(x1,y1); - org->Append((wxObject*)point); - point = new wxPoint2DDouble(xmid,ymid); - org->Append((wxObject*)point); - } else { - gds_spline_push(xmid, ymid, half(xmid, x3), half(ymid, y3), - half(x3, x4), half(y3, y4), x4, y4); - gds_spline_push(x1, y1, half(x1, x2), half(y1, y2), - half(x2, xmid), half(y2, ymid), xmid, ymid); - } - } -} - - -/* utilities used by spline drawing routines */ - - -typedef struct gds_spline_stack_struct { - double x1, y1, x2, y2, x3, y3, x4, y4; -} -Stack; - -#define SPLINE_STACK_DEPTH 20 -static Stack gds_spline_stack[SPLINE_STACK_DEPTH]; -static Stack *gds_stack_top; -static int gds_stack_count; - -static void gds_clear_stack() -{ - gds_stack_top = gds_spline_stack; - gds_stack_count = 0; -} - -static void gds_spline_push(double x1, double y1, double x2, double y2, double x3, double y3, double x4, double y4) -{ - gds_stack_top->x1 = x1; - gds_stack_top->y1 = y1; - gds_stack_top->x2 = x2; - gds_stack_top->y2 = y2; - gds_stack_top->x3 = x3; - gds_stack_top->y3 = y3; - gds_stack_top->x4 = x4; - gds_stack_top->y4 = y4; - gds_stack_top++; - gds_stack_count++; -} - -int gds_spline_pop(double *x1, double *y1, double *x2, double *y2, - double *x3, double *y3, double *x4, double *y4) -{ - if (gds_stack_count == 0) - return (0); - gds_stack_top--; - gds_stack_count--; - *x1 = gds_stack_top->x1; - *y1 = gds_stack_top->y1; - *x2 = gds_stack_top->x2; - *y2 = gds_stack_top->y2; - *x3 = gds_stack_top->x3; - *y3 = gds_stack_top->y3; - *x4 = gds_stack_top->x4; - *y4 = gds_stack_top->y4; - return (1); -} - -void wxAET::CalculateLineParameters( const wxPoint2DDouble& p1 , const wxPoint2DDouble& p2 ) -{ - double A = p2.m_y - p1.m_y; //A (y2-y1) - if (A == 0) - { - m_horizontal=TRUE; - m_BdivA=0; - m_CdivA=0; - } - else - { - m_horizontal=FALSE; - m_BdivA= (p1.m_x - p2.m_x)/A; //B (x1-x2) - //normalize - m_CdivA= ((p2.m_x*p1.m_y) - (p1.m_x*p2.m_y)) /A ; - } -} - -void wxAET::CalculateXs( double y ) -{ - m_xs= -m_BdivA * y - m_CdivA; -} - -//use by polygon filling -//moves the scanline up -//index is the index of the point where the search begins -//direction is +1 or -1 and indicates if the segment ascends or decends -bool wxCanvasPolygon::MoveUp( double horline, int& index, int direction) -{ - int walk = (index + direction + m_n) % m_n; - while ( m_points[walk].m_y < horline ) - { - if (m_points[walk].m_y < m_points[index].m_y ) - return FALSE; - else - { - //modify index - index=walk; - walk = (index + direction + m_n) % m_n; - } - } - return TRUE; -} - -//a crictical point is a point between a decending and a ascending segment -//collect those points for filling later -void wxCanvasPolygon::DetectCriticalPoints() -{ - //candidate for critical point - //true if Y is getting lower, unchanged i Y is unchanged - //and if Y becomes higher and candidate was true: it is a critical point - bool candidate = FALSE; - int i,j; - - for ( i=0; i < m_n; i++) - { - //j next point - j= (i+1) % m_n; - - //check if Y is smaller - if (m_points[i].m_y > m_points[j].m_y) - //we have a candidate - candidate=TRUE; - else if ( (m_points[i].m_y < m_points[j].m_y) && candidate) - { //this is a critical point put in list - bool inserted=FALSE; - wxNode *node = m_CRlist.GetFirst(); - while (node) - { - //sorted on smallest Y value - int* ind=(int*) node->GetData(); - if (m_points[*ind].m_y > m_points[i].m_y) - { - m_CRlist.Insert(node,(wxObject*) new int(i)); - inserted = TRUE; - break; - } - node = node->GetNext(); - } - if (!inserted) - m_CRlist.Append((wxObject*) new int(i)); - candidate = FALSE; - } - } - if (candidate) - { - for ( i=0; i < m_n; i++) - { - //j next point - j= (i+1) % m_n; - - //check if Y is smaller - if (m_points[i].m_y > m_points[j].m_y) - //we have a candidate - candidate=TRUE; - else if ( (m_points[i].m_y < m_points[j].m_y) && candidate) - { //this is a critical point put in list - bool inserted=FALSE; - wxNode *node = m_CRlist.GetFirst(); - while (node) - { - //sorted on smallest Y value - int* ind=(int*) node->GetData(); - if (m_points[*ind].m_y > m_points[i].m_y) - { - m_CRlist.Insert(node,(wxObject*) new int(i)); - inserted = TRUE; - break; - } - node = node->GetNext(); - } - if (!inserted) - m_CRlist.Append((wxObject*) new int(i)); - candidate = FALSE; - } - } - } -} - - -void wxCanvasPolygon::FillPolygon(wxTransformMatrix* cworld, int clip_x, int clip_y, int clip_width, int clip_height ) -{ -#if IMAGE_CANVAS -#else - int index; - //how much is on pixel in world coordinates - - double scalefactor; - if (m_gdistance) - scalefactor=m_gdistance; - else - //abs here needed if yaxis is going up (always scan in world coordinates UP) - scalefactor=fabs(m_admin->DeviceToLogicalYRel(1)); //1 pixel height - - wxDC *dc = m_admin->GetActive()->GetDC(); - dc->SetClippingRegion( clip_x, clip_y, clip_width, clip_height ); - wxPen gradientpen=m_gpen; - - int dred = m_textbg.Red()-m_textfg.Red(); - int dgreen = m_textbg.Green()-m_textfg.Green(); - int dblue = m_textbg.Blue()-m_textfg.Blue(); - - //total number of lines to go from m_textbg to m_textfg - //gives the following number of steps for the gradient color - int stepcol = (int) (m_bbox.GetHeight()/scalefactor); - - DetectCriticalPoints(); - - double min; - double max; - if (cworld->IsIdentity()) - { - //TODO do something with clipping region (inverse transform?) - //the next does not work, i don't know why - //min = wxMin (m_admin->DeviceToLogicalY(clip_y),m_admin->DeviceToLogicalY(clip_y+clip_height)); - //max = wxMax (m_admin->DeviceToLogicalY(clip_y),m_admin->DeviceToLogicalY(clip_y+clip_height)); - min= m_bbox.GetMinY(); - max= m_bbox.GetMaxY(); - } - else - { - min= m_bbox.GetMinY(); - max= m_bbox.GetMaxY(); - } - - int curcol = (int)( (min - m_bbox.GetMinY())/scalefactor ); - - double i; - for ( i = min; i < max; i+=scalefactor) - { - wxNode *node = m_AETlist.GetFirst(); - int count= m_AETlist.GetCount(); - while (count > 0) - { - wxAET* ele = ((wxAET*)node->GetData()); - index= ele->m_index; - int direction = ele->m_direction; - if (!MoveUp(i,index,direction)) - { - wxNode* h = node; - //remove this node - node = node->GetNext(); - m_AETlist.DeleteNode(h); - } - else - { - if (ele->m_index != index) - { - ele->m_index=index; - int h = (index + direction + m_n) % m_n; - ele->CalculateLineParameters(m_points[h],m_points[index]); - } - if (ele->m_horizontal) - ele->m_xs=m_points[index].m_x; - else - ele->CalculateXs(i); - node = node->GetNext(); - } - count--; - } - - node = m_CRlist.GetFirst(); - while (m_CRlist.GetCount() && m_points[*((int*)node->GetData())].m_y <=i ) - { - int DI; - for ( DI = -1; DI <=1 ; DI+=2) - { - index=*((int*)node->GetData()); - if (MoveUp(i,index,DI)) - { - wxAET* ele = new wxAET(); - ele->m_index=index; - ele->m_direction=DI; - int h = (index + DI + m_n) % m_n; - ele->CalculateLineParameters(m_points[h],m_points[index]); - if (ele->m_horizontal) - ele->m_xs=m_points[index].m_x; - else - ele->CalculateXs(i); - - //insert in sorted order od m_xs - bool inserted=FALSE; - wxNode *node2 = m_AETlist.GetFirst(); - while (node2) - { - //sorted on smallest xs value - if (ele->m_xs < ((wxAET*)node2->GetData())->m_xs) - { - m_AETlist.Insert(node2,(wxObject*) ele); - inserted = TRUE; - break; - } - node2 = node2->GetNext(); - } - if (!inserted) - m_AETlist.Append((wxObject*)ele); - } - } - - wxNode* h= node; - node = node->GetNext(); - m_CRlist.DeleteNode(h); - } - - curcol++; - wxColour gradcol(m_textbg.Red()+dred*curcol/stepcol, - m_textbg.Green()+dgreen*curcol/stepcol, - m_textbg.Blue()+dblue*curcol/stepcol); - gradientpen.SetColour(gradcol); - - //m_AETlist must be sorted in m_xs at this moment - //now draw all the line parts on one horizontal scanline (Winding Rule) - int out= 0; - node = m_AETlist.GetFirst(); - while (node) - { - wxAET* ele = ((wxAET*)node->GetData()); - out+=ele->m_direction; - if (out != 0) - { - double x1=ele->m_xs; - node = node->GetNext(); - ele = ((wxAET*)node->GetData()); - double x2=ele->m_xs; - dc->SetPen( gradientpen ); - double wx1,wy1,wx2,wy2; - cworld->TransformPoint( x1, i, wx1, wy1 ); - cworld->TransformPoint( x2, i, wx2, wy2 ); - int dx1,dy1,dx2,dy2; - dx1 = m_admin->LogicalToDeviceX( wx1 ); - dy1 = m_admin->LogicalToDeviceY( wy1 ); - dx2 = m_admin->LogicalToDeviceX( wx2 ); - dy2 = m_admin->LogicalToDeviceY( wy2 ); - - //TODO KKK need real line clipping here since line can be rotated. - if (0 && cworld->IsIdentity()) - { - if (dx1 < clip_x) dx1=clip_x; - if (dx2 > clip_x + clip_width) dx2=clip_x + clip_width; - if ((dy1 > clip_y) && dy1 < clip_y + clip_height) - dc->DrawLine( dx1, dy1, dx2, dy2 ); - } - else - { - dc->DrawLine( dx1, dy1, dx2, dy2 ); - } - - } - else - node = node->GetNext(); - } - } - - dc->DestroyClippingRegion(); -#endif -} - - - - - -- 2.47.2