X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/2301e28195e94899e3cccf9d1cfcb2a544f6358b..c48926e149739055b0ed978d9e893f7898a51a73:/src/mac/carbon/dc.cpp

diff --git a/src/mac/carbon/dc.cpp b/src/mac/carbon/dc.cpp
index 27d92a4efc..f4bf8ea95c 100644
--- a/src/mac/carbon/dc.cpp
+++ b/src/mac/carbon/dc.cpp
@@ -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