]> git.saurik.com Git - wxWidgets.git/blobdiff - src/mac/dc.cpp
toplevel code transferred to wxTopLevelWindow
[wxWidgets.git] / src / mac / dc.cpp
index 27d92a4efc875e3e7f72f825930969a6af10bc32..f4bf8ea95c72269bdc1947e08f90faed117f3efd 100644 (file)
@@ -38,7 +38,7 @@ IMPLEMENT_ABSTRACT_CLASS(wxDC, wxObject)
 #define twips2mm               0.0176388888889
 #define mm2pt                  2.83464566929
 #define pt2mm                  0.352777777778
-#ifndef __UNIX__
+#ifndef __DARWIN__
 const double M_PI = 3.14159265358979 ;
 #endif
 const double RAD2DEG  = 180.0 / M_PI;
@@ -749,35 +749,59 @@ void  wxDC::DoDrawPolygon(int n, wxPoint points[],
                                wxCoord xoffset, wxCoord yoffset,
                                int fillStyle )
 {
-  wxCHECK_RET(Ok(), wxT("Invalid DC"));
-  wxMacPortSetter helper(this) ;
+       wxCHECK_RET(Ok(), wxT("Invalid DC"));
+       wxMacPortSetter helper(this) ;
+       
+       wxCoord x1, x2 , y1 , y2 ;
   
-  PolyHandle polygon = OpenPoly() ;
-  wxCoord x1, x2 , y1 , y2 ;
-  x1 = XLOG2DEV(points[0].x + xoffset);
-  y1 = YLOG2DEV(points[0].y + yoffset);   
-  ::MoveTo(x1,y1);
+       if (m_brush.GetStyle() != wxTRANSPARENT)
+       {
+               PolyHandle polygon = OpenPoly();
+               
+               x1 = XLOG2DEV(points[0].x + xoffset);
+               y1 = YLOG2DEV(points[0].y + yoffset);   
+               ::MoveTo(x1,y1);
   
-  for (int i = 0; i < n-1; i++)
-  {
-    x2 = XLOG2DEV(points[i+1].x + xoffset);
-    y2 = YLOG2DEV(points[i+1].y + yoffset);
-    ::LineTo(x2, y2);
-  }
+               for (int i = 0; i < n-1; i++)
+               {
+               x2 = XLOG2DEV(points[i+1].x + xoffset);
+               y2 = YLOG2DEV(points[i+1].y + yoffset);
+               ::LineTo(x2, y2);
+               }
 
-  ClosePoly() ;
-       if (m_brush.GetStyle() != wxTRANSPARENT) 
-       {
-               MacInstallBrush() ;
-               ::PaintPoly( polygon ) ;
+               ClosePoly();
+
+               MacInstallBrush();
+               ::PaintPoly( polygon );
+               
+               KillPoly( polygon );
        }
        
        if (m_pen.GetStyle() != wxTRANSPARENT) 
        {
+               PolyHandle polygon = OpenPoly();
+               
+               x1 = XLOG2DEV(points[0].x + xoffset);
+               y1 = YLOG2DEV(points[0].y + yoffset);   
+               ::MoveTo(x1,y1);
+  
+               for (int i = 0; i < n-1; i++)
+               {
+               x2 = XLOG2DEV(points[i+1].x + xoffset);
+               y2 = YLOG2DEV(points[i+1].y + yoffset);
+               ::LineTo(x2, y2);
+               }
+               
+               // return to origin to close path
+               ::LineTo(x1,y1);
+
+               ClosePoly();
+       
                MacInstallPen() ;
                ::FramePoly( polygon ) ;
+               
+               KillPoly( polygon );
        }
-  KillPoly( polygon ) ;
 }
 
 void wxDC::DoDrawRectangle(wxCoord x, wxCoord y, wxCoord width, wxCoord height)
@@ -920,12 +944,19 @@ bool  wxDC::CanDrawBitmap(void) const
 
 
 bool  wxDC::DoBlit(wxCoord xdest, wxCoord ydest, wxCoord width, wxCoord height,
-                        wxDC *source, wxCoord xsrc, wxCoord ysrc, int logical_func , bool useMask )
+                        wxDC *source, wxCoord xsrc, wxCoord ysrc, int logical_func , bool useMask,
+                        wxCoord xsrcMask,  wxCoord ysrcMask )
 {
     wxCHECK_MSG(Ok(), false, wxT("wxDC::DoBlit Illegal dc"));
     wxCHECK_MSG(source->Ok(), false, wxT("wxDC::DoBlit  Illegal source DC"));
     wxMacPortSetter helper(this) ;
 
+    /* TODO: use the mask origin when drawing transparently */
+    if (xsrcMask == -1 && ysrcMask == -1)
+    {
+        xsrcMask = xsrc; ysrcMask = ysrc;
+    }
+
        CGrafPtr                        sourcePort = (CGrafPtr) source->m_macPort ;
        PixMapHandle    bmappixels =  GetGWorldPixMap( sourcePort ) ; 
        RGBColor        white = { 0xFFFF, 0xFFFF,0xFFFF} ;
@@ -1252,10 +1283,9 @@ wxCoord   wxDC::GetCharWidth(void) const
 
        MacInstallFont() ;
 
-       FontInfo fi ;
-       ::GetFontInfo( &fi ) ;
+    int width = ::TextWidth( "n" , 0 , 1 ) ;
 
-       return YDEV2LOGREL((fi.descent + fi.ascent) / 2) ;
+       return YDEV2LOGREL(width) ;
 }
 
 wxCoord   wxDC::GetCharHeight(void) const