1 /////////////////////////////////////////////////////////////////////////////
 
   3 // Purpose:     SWIG interface for common GDI stuff and misc classes
 
   7 // Created:     13-Sept-2003
 
   9 // Copyright:   (c) 2003 by Total Control Software
 
  10 // Licence:     wxWindows license
 
  11 /////////////////////////////////////////////////////////////////////////////
 
  16 //---------------------------------------------------------------------------
 
  22     wxBITMAP_TYPE_INVALID,          // should be == 0 for compatibility!
 
  27     wxBITMAP_TYPE_XBM_DATA,
 
  29     wxBITMAP_TYPE_XPM_DATA,
 
  40     wxBITMAP_TYPE_MACCURSOR,
 
  42 //    wxBITMAP_TYPE_BMP_RESOURCE,
 
  43 //    wxBITMAP_TYPE_RESOURCE = wxBITMAP_TYPE_BMP_RESOURCE,
 
  44 //    wxBITMAP_TYPE_ICO_RESOURCE,
 
  45 //    wxBITMAP_TYPE_CUR_RESOURCE,
 
  46 //    wxBITMAP_TYPE_TIF_RESOURCE,
 
  47 //    wxBITMAP_TYPE_GIF_RESOURCE,
 
  48 //    wxBITMAP_TYPE_PNG_RESOURCE,
 
  49 //    wxBITMAP_TYPE_JPEG_RESOURCE,
 
  50 //    wxBITMAP_TYPE_PNM_RESOURCE,
 
  51 //    wxBITMAP_TYPE_PCX_RESOURCE,
 
  52 //    wxBITMAP_TYPE_PICT_RESOURCE,
 
  53 //    wxBITMAP_TYPE_ICON_RESOURCE,
 
  54 //    wxBITMAP_TYPE_MACCURSOR_RESOURCE,
 
  56     wxBITMAP_TYPE_ANY = 50
 
  62     wxCURSOR_NONE,          // should be 0
 
  72     wxCURSOR_MIDDLE_BUTTON,
 
  78     wxCURSOR_QUESTION_ARROW,
 
  79     wxCURSOR_RIGHT_BUTTON,
 
  89     wxCURSOR_DEFAULT, // standard X11 cursor
 
  90     wxCURSOR_COPY_ARROW , // MacOS Theme Plus arrow
 
  93 //     // Not yet implemented for Windows
 
  94 //     wxCURSOR_CROSS_REVERSE,
 
  95 //     wxCURSOR_DOUBLE_ARROW,
 
  96 //     wxCURSOR_BASED_ARROW_UP,
 
  97 //     wxCURSOR_BASED_ARROW_DOWN,
 
 107 #define wxCURSOR_COPY_ARROW wxCURSOR_ARROW
 
 111 //---------------------------------------------------------------------------
 
 115 "wx.Size is a useful data structure used to represent the size of
 
 116 something.  It simply contians integer width and height
 
 117 proprtites.  In most places in wxPython where a wx.Size is
 
 118 expected a (width, height) tuple can be used instead.", "");
 
 123     %Rename(width, int,  x);
 
 124     %Rename(height,int,  y);
 
 125     %pythoncode { x = width; y = height }
 
 128         wxSize(int w=0, int h=0),
 
 129         "Creates a size object.", "");
 
 133 // None/NULL is now handled properly by the typemap, so these are not needed.
 
 135 //         bool __eq__(const wxSize* other) { return other ? (*self == *other) : false; }
 
 136 //         bool __ne__(const wxSize* other) { return other ? (*self != *other) : true;  }
 
 140         bool, operator==(const wxSize& sz),
 
 141         "Test for equality of wx.Size objects.", "");
 
 144         bool, operator!=(const wxSize& sz),
 
 145         "Test for inequality.", "");
 
 148         wxSize, operator+(const wxSize& sz),
 
 149         "Add sz's proprties to this and return the result.", "");
 
 152         wxSize, operator-(const wxSize& sz),
 
 153         "Subtract sz's properties from this and return the result.", "");
 
 156         void, IncTo(const wxSize& sz),
 
 157         "Increments this object so that both of its dimensions are not less
 
 158 than the corresponding dimensions of the size.", "");
 
 161         void, DecTo(const wxSize& sz),
 
 162         "Decrements this object so that both of its dimensions are not greater
 
 163 than the corresponding dimensions of the size.", "");
 
 166         void, Set(int w, int h),
 
 167         "Set both width and height.", "");
 
 169     void SetWidth(int w);
 
 170     void SetHeight(int h);
 
 171     int GetWidth() const;
 
 172     int GetHeight() const;
 
 176         bool , IsFullySpecified() const,
 
 177         "Returns True if both components of the size are non-default values.", "");
 
 181         void , SetDefaults(const wxSize& size),
 
 182         "Combine this size with the other one replacing the default components
 
 183 of this object (i.e. equal to -1) with those of the other.", "");
 
 191                "Get() -> (width,height)",
 
 192                "Returns the width and height properties as a tuple.", "");
 
 194             wxPyBlock_t blocked = wxPyBeginBlockThreads();
 
 195             PyObject* tup = PyTuple_New(2);
 
 196             PyTuple_SET_ITEM(tup, 0, PyInt_FromLong(self->x));
 
 197             PyTuple_SET_ITEM(tup, 1, PyInt_FromLong(self->y));
 
 198             wxPyEndBlockThreads(blocked);
 
 203     asTuple = wx._deprecated(Get, "asTuple is deprecated, use `Get` instead")
 
 204     def __str__(self):                   return str(self.Get())
 
 205     def __repr__(self):                  return 'wx.Size'+str(self.Get())
 
 206     def __len__(self):                   return len(self.Get())
 
 207     def __getitem__(self, index):        return self.Get()[index]
 
 208     def __setitem__(self, index, val):
 
 209         if index == 0: self.width = val
 
 210         elif index == 1: self.height = val
 
 211         else: raise IndexError
 
 212     def __nonzero__(self):               return self.Get() != (0,0)
 
 213     __safe_for_unpickling__ = True
 
 214     def __reduce__(self):                return (wx.Size, self.Get())
 
 219 //---------------------------------------------------------------------------
 
 223 "A data structure for representing a point or position with floating
 
 224 point x and y properties.  In wxPython most places that expect a
 
 225 wx.RealPoint can also accept a (x,y) tuple.", "");
 
 233         wxRealPoint(double x=0.0, double y=0.0),
 
 234         "Create a wx.RealPoint object", "");
 
 239         bool, operator==(const wxRealPoint& pt),
 
 240         "Test for equality of wx.RealPoint objects.", "");
 
 243         bool, operator!=(const wxRealPoint& pt),
 
 244         "Test for inequality of wx.RealPoint objects.", "");
 
 248         wxRealPoint, operator+(const wxRealPoint& pt),
 
 249         "Add pt's proprties to this and return the result.", "");
 
 252         wxRealPoint, operator-(const wxRealPoint& pt),
 
 253         "Subtract pt's proprties from this and return the result", "");
 
 257         DocStr(Set, "Set both the x and y properties", "");
 
 258         void Set(double x, double y) {
 
 265                "Return the x and y properties as a tuple. ", "");
 
 267             wxPyBlock_t blocked = wxPyBeginBlockThreads();
 
 268             PyObject* tup = PyTuple_New(2);
 
 269             PyTuple_SET_ITEM(tup, 0, PyFloat_FromDouble(self->x));
 
 270             PyTuple_SET_ITEM(tup, 1, PyFloat_FromDouble(self->y));
 
 271             wxPyEndBlockThreads(blocked);
 
 277     asTuple = wx._deprecated(Get, "asTuple is deprecated, use `Get` instead")
 
 278     def __str__(self):                   return str(self.Get())
 
 279     def __repr__(self):                  return 'wx.RealPoint'+str(self.Get())
 
 280     def __len__(self):                   return len(self.Get())
 
 281     def __getitem__(self, index):        return self.Get()[index]
 
 282     def __setitem__(self, index, val):
 
 283         if index == 0: self.x = val
 
 284         elif index == 1: self.y = val
 
 285         else: raise IndexError
 
 286     def __nonzero__(self):               return self.Get() != (0.0, 0.0)
 
 287     __safe_for_unpickling__ = True
 
 288     def __reduce__(self):                return (wx.RealPoint, self.Get())
 
 293 //---------------------------------------------------------------------------
 
 298 "A data structure for representing a point or position with integer x
 
 299 and y properties.  Most places in wxPython that expect a wx.Point can
 
 300 also accept a (x,y) tuple.", "");
 
 308         wxPoint(int x=0, int y=0),
 
 309         "Create a wx.Point object", "");
 
 315         bool, operator==(const wxPoint& pt),
 
 316         "Test for equality of wx.Point objects.", "");
 
 319         bool, operator!=(const wxPoint& pt),
 
 320         "Test for inequality of wx.Point objects.", "");
 
 324 //     %nokwargs operator+;
 
 325 //     %nokwargs operator-;
 
 326 //     %nokwargs operator+=;
 
 327 //     %nokwargs operator-=;
 
 330         wxPoint, operator+(const wxPoint& pt),
 
 331         "Add pt's proprties to this and return the result.", "");
 
 335         wxPoint, operator-(const wxPoint& pt),
 
 336         "Subtract pt's proprties from this and return the result", "");
 
 340         wxPoint&, operator+=(const wxPoint& pt),
 
 341         "Add pt to this object.", "");
 
 344         wxPoint&, operator-=(const wxPoint& pt),
 
 345         "Subtract pt from this object.", "");
 
 350 //         wxPoint, operator+(const wxSize& sz),
 
 351 //         "Add sz to this Point and return the result.", "");
 
 354 //         wxPoint, operator-(const wxSize& sz),
 
 355 //         "Subtract sz from this Point and return the result", "");
 
 359 //         wxPoint&, operator+=(const wxSize& sz),
 
 360 //         "Add sz to this object.", "");
 
 363 //         wxPoint&, operator-=(const wxSize& sz),
 
 364 //         "Subtract sz from this object.", "");
 
 370         DocStr(Set, "Set both the x and y properties", "");
 
 371         void Set(long x, long y) {
 
 378                "Return the x and y properties as a tuple. ", "");
 
 380             wxPyBlock_t blocked = wxPyBeginBlockThreads();
 
 381             PyObject* tup = PyTuple_New(2);
 
 382             PyTuple_SET_ITEM(tup, 0, PyInt_FromLong(self->x));
 
 383             PyTuple_SET_ITEM(tup, 1, PyInt_FromLong(self->y));
 
 384             wxPyEndBlockThreads(blocked);
 
 390     asTuple = wx._deprecated(Get, "asTuple is deprecated, use `Get` instead")
 
 391     def __str__(self):                   return str(self.Get())
 
 392     def __repr__(self):                  return 'wx.Point'+str(self.Get())
 
 393     def __len__(self):                   return len(self.Get())
 
 394     def __getitem__(self, index):        return self.Get()[index]
 
 395     def __setitem__(self, index, val):
 
 396         if index == 0: self.x = val
 
 397         elif index == 1: self.y = val
 
 398         else: raise IndexError
 
 399     def __nonzero__(self):               return self.Get() != (0,0)
 
 400     __safe_for_unpickling__ = True
 
 401     def __reduce__(self):                return (wx.Point, self.Get())
 
 405 //---------------------------------------------------------------------------
 
 410 "A class for representing and manipulating rectangles.  It has x, y,
 
 411 width and height properties.  In wxPython most palces that expect a
 
 412 wx.Rect can also accept a (x,y,width,height) tuple.", "");
 
 418         wxRect(int x=0, int y=0, int width=0, int height=0),
 
 419         "Create a new Rect object.", "");          
 
 422         wxRect(const wxPoint& topLeft, const wxPoint& bottomRight),
 
 423         "Create a new Rect object from Points representing two corners.", "",
 
 427         wxRect(const wxPoint& pos, const wxSize& size),
 
 428         "Create a new Rect from a position and size.", "",
 
 432         wxRect(const wxSize& size),
 
 433         "Create a new Rect from a size only.", "",
 
 444     int GetWidth() const;
 
 445     void SetWidth(int w);
 
 447     int GetHeight() const;
 
 448     void SetHeight(int h);
 
 450     wxPoint GetPosition() const;
 
 451     void SetPosition( const wxPoint &p );
 
 453     wxSize GetSize() const;
 
 454     void SetSize( const wxSize &s );
 
 456     bool IsEmpty() const;
 
 458     wxPoint GetTopLeft() const;
 
 459     void SetTopLeft(const wxPoint &p);
 
 460     wxPoint GetBottomRight() const;
 
 461     void SetBottomRight(const wxPoint &p);
 
 463 //    wxPoint GetLeftTop() const;
 
 464 //    void SetLeftTop(const wxPoint &p);
 
 465 //    wxPoint GetRightBottom() const;
 
 466 //    void SetRightBottom(const wxPoint &p);
 
 470     int GetBottom() const;
 
 471     int GetRight()  const;
 
 473     void SetLeft(int left);
 
 474     void SetRight(int right);
 
 475     void SetTop(int top);
 
 476     void SetBottom(int bottom);
 
 479         position = property(GetPosition, SetPosition)
 
 480         size = property(GetSize, SetSize)
 
 481         left = property(GetLeft, SetLeft)
 
 482         right = property(GetRight, SetRight)
 
 483         top = property(GetTop, SetTop)
 
 484         bottom = property(GetBottom, SetBottom)
 
 488         wxRect&, Inflate(wxCoord dx, wxCoord dy),
 
 489         "Increases the size of the rectangle.
 
 491 The left border is moved farther left and the right border is moved
 
 492 farther right by ``dx``. The upper border is moved farther up and the
 
 493 bottom border is moved farther down by ``dy``. (Note the the width and
 
 494 height of the rectangle thus change by ``2*dx`` and ``2*dy``,
 
 495 respectively.) If one or both of ``dx`` and ``dy`` are negative, the
 
 496 opposite happens: the rectangle size decreases in the respective
 
 499 The change is made to the rectangle inplace, if instead you need a
 
 500 copy that is inflated, preserving the original then make the copy
 
 503     copy = wx.Rect(*original)
 
 507 Inflating and deflating behaves *naturally*. Defined more precisely,
 
 510     * Real inflates (that is, ``dx`` and/or ``dy`` >= 0) are not
 
 511       constrained. Thus inflating a rectangle can cause its upper left
 
 512       corner to move into the negative numbers. (The versions prior to
 
 513       2.5.4 forced the top left coordinate to not fall below (0, 0),
 
 514       which implied a forced move of the rectangle.)
 
 516     * Deflates are clamped to not reduce the width or height of the
 
 517       rectangle below zero. In such cases, the top-left corner is
 
 518       nonetheless handled properly. For example, a rectangle at (10,
 
 519       10) with size (20, 40) that is inflated by (-15, -15) will
 
 520       become located at (20, 25) at size (0, 10). Finally, observe
 
 521       that the width and height are treated independently. In the
 
 522       above example, the width is reduced by 20, whereas the height is
 
 523       reduced by the full 30 (rather than also stopping at 20, when
 
 524       the width reached zero).
 
 530         wxRect&, Deflate(wxCoord dx, wxCoord dy),
 
 531         "Decrease the rectangle size. This method is the opposite of `Inflate`
 
 532 in that Deflate(a,b) is equivalent to Inflate(-a,-b).  Please refer to
 
 533 `Inflate` for a full description.", "");
 
 536         void, Offset(wxCoord dx, wxCoord dy),
 
 537         "Moves the rectangle by the specified offset. If dx is positive, the
 
 538 rectangle is moved to the right, if dy is positive, it is moved to the
 
 539 bottom, otherwise it is moved to the left or top respectively.", "",
 
 543         void, Offset(const wxPoint& pt),
 
 544         "Same as OffsetXY but uses dx,dy from Point", "");
 
 547         wxRect, Intersect(const wxRect& rect),
 
 548         "Returns the intersectsion of this rectangle and rect.", "");
 
 551         wxRect , Union(const wxRect& rect),
 
 552         "Returns the union of this rectangle and rect.", "");
 
 556         wxRect, operator+(const wxRect& rect) const,
 
 557         "Add the properties of rect to this rectangle and return the result.", "");
 
 560         wxRect&, operator+=(const wxRect& rect),
 
 561         "Add the properties of rect to this rectangle, updating this rectangle.", "");
 
 564         bool, operator==(const wxRect& rect) const,
 
 565         "Test for equality.", "");
 
 568         bool, operator!=(const wxRect& rect) const,
 
 569         "Test for inequality.", "");
 
 572     DocStr( Inside, "Return True if the point is (not strcitly) inside the rect.", "");
 
 573     %Rename(InsideXY, bool, Inside(int x, int y) const);
 
 574     bool Inside(const wxPoint& pt) const;
 
 577         bool, Intersects(const wxRect& rect) const,
 
 578         "Returns True if the rectangles have a non empty intersection.", "");
 
 581     int x, y, width, height;
 
 585        DocStr(Set, "Set all rectangle properties.", "");
 
 586         void Set(int x=0, int y=0, int width=0, int height=0) {
 
 590             self->height = height;
 
 594                "Get() -> (x,y,width,height)",
 
 595                "Return the rectangle properties as a tuple.", "");
 
 597             wxPyBlock_t blocked = wxPyBeginBlockThreads();
 
 598             PyObject* tup = PyTuple_New(4);
 
 599             PyTuple_SET_ITEM(tup, 0, PyInt_FromLong(self->x));
 
 600             PyTuple_SET_ITEM(tup, 1, PyInt_FromLong(self->y));
 
 601             PyTuple_SET_ITEM(tup, 2, PyInt_FromLong(self->width));
 
 602             PyTuple_SET_ITEM(tup, 3, PyInt_FromLong(self->height));
 
 603             wxPyEndBlockThreads(blocked);
 
 609     asTuple = wx._deprecated(Get, "asTuple is deprecated, use `Get` instead")
 
 610     def __str__(self):                   return str(self.Get())
 
 611     def __repr__(self):                  return 'wx.Rect'+str(self.Get())
 
 612     def __len__(self):                   return len(self.Get())
 
 613     def __getitem__(self, index):        return self.Get()[index]
 
 614     def __setitem__(self, index, val):
 
 615         if index == 0: self.x = val
 
 616         elif index == 1: self.y = val
 
 617         elif index == 2: self.width = val
 
 618         elif index == 3: self.height = val
 
 619         else: raise IndexError
 
 620     def __nonzero__(self):               return self.Get() != (0,0,0,0)
 
 621     __safe_for_unpickling__ = True
 
 622     def __reduce__(self):                return (wx.Rect, self.Get())
 
 627 MustHaveApp(wxIntersectRect);
 
 629 DocAStr(wxIntersectRect,
 
 630        "IntersectRect(Rect r1, Rect r2) -> Rect",
 
 631        "Calculate and return the intersection of r1 and r2.", "");
 
 633     PyObject* wxIntersectRect(wxRect* r1, wxRect* r2) {
 
 636         wxRect    dest(0,0,0,0);
 
 639         reg1.Intersect(reg2);
 
 640         dest = reg1.GetBox();
 
 642         if (dest != wxRect(0,0,0,0)) {
 
 643             wxPyBlock_t blocked = wxPyBeginBlockThreads();
 
 644             wxRect* newRect = new wxRect(dest);
 
 645             obj = wxPyConstructObject((void*)newRect, wxT("wxRect"), true);
 
 646             wxPyEndBlockThreads(blocked);
 
 654 //---------------------------------------------------------------------------
 
 659       "wx.Point2Ds represent a point or a vector in a 2d coordinate system
 
 660 with floating point values.", "");
 
 665     DocStr(wxPoint2D, "Create a w.Point2D object.", "");
 
 666     wxPoint2D( double x=0.0 , double y=0.0 );
 
 667     %RenameCtor(Point2DCopy, wxPoint2D( const wxPoint2D &pt ));
 
 668     %RenameCtor(Point2DFromPoint, wxPoint2D( const wxPoint &pt ));
 
 671         void, GetFloor( int *OUTPUT , int *OUTPUT ) const,
 
 672         "GetFloor() -> (x,y)",
 
 673         "Convert to integer", "");
 
 676         void, GetRounded( int *OUTPUT , int *OUTPUT ) const,
 
 677         "GetRounded() -> (x,y)",
 
 678         "Convert to integer", "");
 
 680     double GetVectorLength() const;
 
 681     double GetVectorAngle() const ;
 
 682     void SetVectorLength( double length );
 
 683     void SetVectorAngle( double degrees );
 
 685     // LinkError: void SetPolarCoordinates( double angle , double length );
 
 686     // LinkError: void Normalize();
 
 688     def SetPolarCoordinates(self, angle, length):
 
 689         self.SetVectorLength(length)
 
 690         self.SetVectorAngle(angle)
 
 692         self.SetVectorLength(1.0)
 
 695     double GetDistance( const wxPoint2D &pt ) const;
 
 696     double GetDistanceSquare( const wxPoint2D &pt ) const;
 
 697     double GetDotProduct( const wxPoint2D &vec ) const;
 
 698     double GetCrossProduct( const wxPoint2D &vec ) const;
 
 701         wxPoint2D, operator-(),
 
 702         "the reflection of this point", "");
 
 704     wxPoint2D& operator+=(const wxPoint2D& pt);
 
 705     wxPoint2D& operator-=(const wxPoint2D& pt);
 
 707     wxPoint2D& operator*=(const wxPoint2D& pt);
 
 708     wxPoint2D& operator/=(const wxPoint2D& pt);
 
 711         bool, operator==(const wxPoint2D& pt) const,
 
 712         "Test for equality", "");
 
 715         bool, operator!=(const wxPoint2D& pt) const,
 
 716         "Test for inequality", "");
 
 718     %Rename(x, double,  m_x);
 
 719     %Rename(y, double,  m_y);
 
 722         void Set( double x=0 , double y=0 ) {
 
 729                "Return x and y properties as a tuple.", "");               
 
 731             wxPyBlock_t blocked = wxPyBeginBlockThreads();
 
 732             PyObject* tup = PyTuple_New(2);
 
 733             PyTuple_SET_ITEM(tup, 0, PyFloat_FromDouble(self->m_x));
 
 734             PyTuple_SET_ITEM(tup, 1, PyFloat_FromDouble(self->m_y));
 
 735             wxPyEndBlockThreads(blocked);
 
 741     asTuple = wx._deprecated(Get, "asTuple is deprecated, use `Get` instead")
 
 742     def __str__(self):                   return str(self.Get())
 
 743     def __repr__(self):                  return 'wx.Point2D'+str(self.Get())
 
 744     def __len__(self):                   return len(self.Get())
 
 745     def __getitem__(self, index):        return self.Get()[index]
 
 746     def __setitem__(self, index, val):
 
 747         if index == 0: self.x = val
 
 748         elif index == 1: self.y = val
 
 749         else: raise IndexError
 
 750     def __nonzero__(self):               return self.Get() != (0.0, 0.0)
 
 751     __safe_for_unpickling__ = True
 
 752     def __reduce__(self):                return (wx.Point2D, self.Get())
 
 757 //---------------------------------------------------------------------------
 
 760 const wxPoint     wxDefaultPosition;
 
 761 const wxSize      wxDefaultSize;
 
 764 //---------------------------------------------------------------------------