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 proprtites.
 
 117 In most places in wxPython where a wx.Size is expected a
 
 118 (width,height) tuple can be used instead.", "");
 
 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             bool 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             bool 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             bool 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.", "",
 
 439     int GetWidth() const;
 
 440     void SetWidth(int w);
 
 442     int GetHeight() const;
 
 443     void SetHeight(int h);
 
 445     wxPoint GetPosition() const;
 
 446     void SetPosition( const wxPoint &p );
 
 448     wxSize GetSize() const;
 
 449     void SetSize( const wxSize &s );
 
 451     wxPoint GetTopLeft() const;
 
 452     void SetTopLeft(const wxPoint &p);
 
 453     wxPoint GetBottomRight() const;
 
 454     void SetBottomRight(const wxPoint &p);
 
 456 //    wxPoint GetLeftTop() const;
 
 457 //    void SetLeftTop(const wxPoint &p);
 
 458 //    wxPoint GetRightBottom() const;
 
 459 //    void SetRightBottom(const wxPoint &p);
 
 463     int GetBottom() const;
 
 464     int GetRight()  const;
 
 466     void SetLeft(int left);
 
 467     void SetRight(int right);
 
 468     void SetTop(int top);
 
 469     void SetBottom(int bottom);
 
 472         position = property(GetPosition, SetPosition)
 
 473         size = property(GetSize, SetSize)
 
 474         left = property(GetLeft, SetLeft)
 
 475         right = property(GetRight, SetRight)
 
 476         top = property(GetTop, SetTop)
 
 477         bottom = property(GetBottom, SetBottom)
 
 481         wxRect&, Inflate(wxCoord dx, wxCoord dy),
 
 482         "Increase the rectangle size by dx in x direction and dy in y
 
 483 direction. Both or one of) parameters may be negative to decrease the
 
 484 rectangle size.", "");
 
 487         wxRect&, Deflate(wxCoord dx, wxCoord dy),
 
 488         "Decrease the rectangle size by dx in x direction and dy in y
 
 489 direction. Both or one of) parameters may be negative to increase the
 
 490 rectngle size. This method is the opposite of Inflate.", "");
 
 493         void, Offset(wxCoord dx, wxCoord dy),
 
 494         "Moves the rectangle by the specified offset. If dx is positive, the
 
 495 rectangle is moved to the right, if dy is positive, it is moved to the
 
 496 bottom, otherwise it is moved to the left or top respectively.", "",
 
 500         void, Offset(const wxPoint& pt),
 
 501         "Same as OffsetXY but uses dx,dy from Point", "");
 
 504         wxRect&, Intersect(const wxRect& rect),
 
 505         "Return the intersectsion of this rectangle and rect.", "");
 
 508         wxRect, operator+(const wxRect& rect) const,
 
 509         "Add the properties of rect to this rectangle and return the result.", "");
 
 512         wxRect&, operator+=(const wxRect& rect),
 
 513         "Add the properties of rect to this rectangle, updating this rectangle.", "");
 
 516         bool, operator==(const wxRect& rect) const,
 
 517         "Test for equality.", "");
 
 520         bool, operator!=(const wxRect& rect) const,
 
 521         "Test for inequality.", "");
 
 524     DocStr( Inside, "Return True if the point is (not strcitly) inside the rect.", "");
 
 525     %name(InsideXY)bool Inside(int x, int y) const;
 
 526     bool Inside(const wxPoint& pt) const;
 
 529         bool, Intersects(const wxRect& rect) const,
 
 530         "Returns True if the rectangles have a non empty intersection.", "");
 
 533     int x, y, width, height;
 
 537        DocStr(Set, "Set all rectangle properties.", "");
 
 538         void Set(int x=0, int y=0, int width=0, int height=0) {
 
 542             self->height = height;
 
 546                "Get() -> (x,y,width,height)",
 
 547                "Return the rectangle properties as a tuple.", "");
 
 549             bool blocked = wxPyBeginBlockThreads();
 
 550             PyObject* tup = PyTuple_New(4);
 
 551             PyTuple_SET_ITEM(tup, 0, PyInt_FromLong(self->x));
 
 552             PyTuple_SET_ITEM(tup, 1, PyInt_FromLong(self->y));
 
 553             PyTuple_SET_ITEM(tup, 2, PyInt_FromLong(self->width));
 
 554             PyTuple_SET_ITEM(tup, 3, PyInt_FromLong(self->height));
 
 555             wxPyEndBlockThreads(blocked);
 
 561     asTuple = wx._deprecated(Get, "asTuple is deprecated, use `Get` instead")
 
 562     def __str__(self):                   return str(self.Get())
 
 563     def __repr__(self):                  return 'wx.Rect'+str(self.Get())
 
 564     def __len__(self):                   return len(self.Get())
 
 565     def __getitem__(self, index):        return self.Get()[index]
 
 566     def __setitem__(self, index, val):
 
 567         if index == 0: self.x = val
 
 568         elif index == 1: self.y = val
 
 569         elif index == 2: self.width = val
 
 570         elif index == 3: self.height = val
 
 571         else: raise IndexError
 
 572     def __nonzero__(self):               return self.Get() != (0,0,0,0)
 
 573     __safe_for_unpickling__ = True
 
 574     def __reduce__(self):                return (wx.Rect, self.Get())
 
 579 MustHaveApp(wxIntersectRect);
 
 581 DocAStr(wxIntersectRect,
 
 582        "IntersectRect(Rect r1, Rect r2) -> Rect",
 
 583        "Calculate and return the intersection of r1 and r2.", "");
 
 585     PyObject* wxIntersectRect(wxRect* r1, wxRect* r2) {
 
 588         wxRect    dest(0,0,0,0);
 
 591         reg1.Intersect(reg2);
 
 592         dest = reg1.GetBox();
 
 594         if (dest != wxRect(0,0,0,0)) {
 
 595             bool blocked = wxPyBeginBlockThreads();
 
 596             wxRect* newRect = new wxRect(dest);
 
 597             obj = wxPyConstructObject((void*)newRect, wxT("wxRect"), true);
 
 598             wxPyEndBlockThreads(blocked);
 
 606 //---------------------------------------------------------------------------
 
 611       "wx.Point2Ds represent a point or a vector in a 2d coordinate system
 
 612 with floating point values.", "");
 
 617     DocStr(wxPoint2D, "Create a w.Point2D object.", "");
 
 618     wxPoint2D( double x=0.0 , double y=0.0 );
 
 619     %name(Point2DCopy) wxPoint2D( const wxPoint2D &pt );
 
 620     %name(Point2DFromPoint) wxPoint2D( const wxPoint &pt );
 
 623         void, GetFloor( int *OUTPUT , int *OUTPUT ) const,
 
 624         "GetFloor() -> (x,y)",
 
 625         "Convert to integer", "");
 
 628         void, GetRounded( int *OUTPUT , int *OUTPUT ) const,
 
 629         "GetRounded() -> (x,y)",
 
 630         "Convert to integer", "");
 
 632     double GetVectorLength() const;
 
 633     double GetVectorAngle() const ;
 
 634     void SetVectorLength( double length );
 
 635     void SetVectorAngle( double degrees );
 
 637     // LinkError: void SetPolarCoordinates( double angle , double length );
 
 638     // LinkError: void Normalize();
 
 640     def SetPolarCoordinates(self, angle, length):
 
 641         self.SetVectorLength(length)
 
 642         self.SetVectorAngle(angle)
 
 644         self.SetVectorLength(1.0)
 
 647     double GetDistance( const wxPoint2D &pt ) const;
 
 648     double GetDistanceSquare( const wxPoint2D &pt ) const;
 
 649     double GetDotProduct( const wxPoint2D &vec ) const;
 
 650     double GetCrossProduct( const wxPoint2D &vec ) const;
 
 653         wxPoint2D, operator-(),
 
 654         "the reflection of this point", "");
 
 656     wxPoint2D& operator+=(const wxPoint2D& pt);
 
 657     wxPoint2D& operator-=(const wxPoint2D& pt);
 
 659     wxPoint2D& operator*=(const wxPoint2D& pt);
 
 660     wxPoint2D& operator/=(const wxPoint2D& pt);
 
 663         bool, operator==(const wxPoint2D& pt) const,
 
 664         "Test for equality", "");
 
 667         bool, operator!=(const wxPoint2D& pt) const,
 
 668         "Test for inequality", "");
 
 674         void Set( double x=0 , double y=0 ) {
 
 681                "Return x and y properties as a tuple.", "");               
 
 683             bool blocked = wxPyBeginBlockThreads();
 
 684             PyObject* tup = PyTuple_New(2);
 
 685             PyTuple_SET_ITEM(tup, 0, PyFloat_FromDouble(self->m_x));
 
 686             PyTuple_SET_ITEM(tup, 1, PyFloat_FromDouble(self->m_y));
 
 687             wxPyEndBlockThreads(blocked);
 
 693     asTuple = wx._deprecated(Get, "asTuple is deprecated, use `Get` instead")
 
 694     def __str__(self):                   return str(self.Get())
 
 695     def __repr__(self):                  return 'wx.Point2D'+str(self.Get())
 
 696     def __len__(self):                   return len(self.Get())
 
 697     def __getitem__(self, index):        return self.Get()[index]
 
 698     def __setitem__(self, index, val):
 
 699         if index == 0: self.x = val
 
 700         elif index == 1: self.y = val
 
 701         else: raise IndexError
 
 702     def __nonzero__(self):               return self.Get() != (0.0, 0.0)
 
 703     __safe_for_unpickling__ = True
 
 704     def __reduce__(self):                return (wx.Point2D, self.Get())
 
 709 //---------------------------------------------------------------------------
 
 712 const wxPoint     wxDefaultPosition;
 
 713 const wxSize      wxDefaultSize;
 
 716 //---------------------------------------------------------------------------