]> git.saurik.com Git - wxWidgets.git/blobdiff - src/mac/carbon/dc.cpp
wxRadioBox fixed on mac
[wxWidgets.git] / src / mac / carbon / dc.cpp
index 119818f6c6b631efb09998ea6ec72878af26ff95..8285afd1c686e983ab0d3e0269956ff0ea9665fa 100644 (file)
@@ -36,8 +36,6 @@ IMPLEMENT_ABSTRACT_CLASS(wxDC, wxObject)
 #define mm2pt                  2.83464566929
 #define pt2mm                  0.352777777778
 
 #define mm2pt                  2.83464566929
 #define pt2mm                  0.352777777778
 
-long wxDC::m_macCurrentPortId = 1 ;
-
 //-----------------------------------------------------------------------------
 // wxDC
 //-----------------------------------------------------------------------------
 //-----------------------------------------------------------------------------
 // wxDC
 //-----------------------------------------------------------------------------
@@ -76,43 +74,36 @@ wxDC::wxDC()
        m_macBrushInstalled = false ;
        m_macPenInstalled = false ;
        
        m_macBrushInstalled = false ;
        m_macPenInstalled = false ;
        
-       m_macPortId = 0 ;
        m_macLocalOrigin.h = m_macLocalOrigin.v = 0 ;
        m_macClipRect.left = -32000 ;
        m_macClipRect.top = -32000 ;
        m_macClipRect.right = 32000 ;
        m_macClipRect.bottom = 32000 ;
        m_macLocalOrigin.h = m_macLocalOrigin.v = 0 ;
        m_macClipRect.left = -32000 ;
        m_macClipRect.top = -32000 ;
        m_macClipRect.right = 32000 ;
        m_macClipRect.bottom = 32000 ;
-       ::GetPort( &m_macOrigPort ) ;
+
+    m_pen = *wxBLACK_PEN;
+    m_font = *wxNORMAL_FONT;
+    m_brush = *wxWHITE_BRUSH;
 };
 
 };
 
+wxMacPortSetter::wxMacPortSetter( const wxDC* dc ) :
+       m_ph( dc->m_macPort ) 
+{
+       wxASSERT( dc->Ok() ) ;
+       
+       dc->MacSetupPort(&m_ph) ;
+}
+
+wxMacPortSetter::~wxMacPortSetter() 
+{
+}
+
 wxDC::~wxDC(void)
 {
 wxDC::~wxDC(void)
 {
-       if ( !m_macPortHelper.IsCleared() )
-       {
-       GrafPtr port ;
-       GetPort( &port ) ;
-       SetPort( m_macPortHelper.GetCurrentPort() ) ;
-       SetOrigin( 0 , 0 ) ;
-       SetPort( port ) ;
-       }
-       /*
-       if ( m_macPort )
-       {
-               ::SetPort( m_macPort ) ;
-               ::SetOrigin( 0 , 0 ) ;
-               ::ClipRect( &m_macPort->portRect ) ;
-               ::PenNormal() ;
-               ::SetPort( m_macOrigPort ) ;
-       }
-       */
-       ++m_macCurrentPortId ;
 };
 
 };
 
-void wxDC::MacSetupPort() const
+void wxDC::MacSetupPort(AGAPortHelper* help) const
 {
 {
-       AGAPortHelper* help = (AGAPortHelper*) &m_macPortHelper ;
        help->Setup( m_macPort ) ;
        help->Setup( m_macPort ) ;
-       m_macPortId = ++m_macCurrentPortId ;
        ::SetOrigin(-m_macLocalOrigin.h, -m_macLocalOrigin.v);
        ::ClipRect(&m_macClipRect);
 
        ::SetOrigin(-m_macLocalOrigin.h, -m_macLocalOrigin.v);
        ::ClipRect(&m_macClipRect);
 
@@ -127,7 +118,7 @@ void wxDC::DoDrawBitmap( const wxBitmap &bmp, wxCoord x, wxCoord y, bool useMask
        
   if (!Ok()) 
        return;
        
   if (!Ok()) 
        return;
-  MacVerifySetup() ;
+  wxMacPortSetter helper(this) ;
   
   long xx1 = XLOG2DEV(x); 
   long yy1 = YLOG2DEV(y);
   
   long xx1 = XLOG2DEV(x); 
   long yy1 = YLOG2DEV(y);
@@ -196,7 +187,7 @@ void wxDC::DoDrawIcon( const wxIcon &icon, wxCoord x, wxCoord y )
 {
   if (!Ok()) 
        return;
 {
   if (!Ok()) 
        return;
-  MacVerifySetup() ;
+  wxMacPortSetter helper(this) ;
   
   long xx1 = XLOG2DEV(x); 
   long yy1 = YLOG2DEV(y);
   
   long xx1 = XLOG2DEV(x); 
   long yy1 = YLOG2DEV(y);
@@ -215,7 +206,7 @@ void wxDC::DoDrawIcon( const wxIcon &icon, wxCoord x, wxCoord y )
 
 void wxDC::DoSetClippingRegion( wxCoord x, wxCoord y, wxCoord width, wxCoord height )
 {
 
 void wxDC::DoSetClippingRegion( wxCoord x, wxCoord y, wxCoord width, wxCoord height )
 {
-       MacVerifySetup() ;
+       wxMacPortSetter helper(this) ;
        if( m_clipping )
        {
                m_clipX1 = wxMax( m_clipX1 , x ) ;
        if( m_clipping )
        {
                m_clipX1 = wxMax( m_clipX1 , x ) ;
@@ -248,7 +239,7 @@ void wxDC::DoSetClippingRegionAsRegion( const wxRegion &region  )
 {
     wxCHECK_RET( Ok(), wxT("invalid window dc") );
 
 {
     wxCHECK_RET( Ok(), wxT("invalid window dc") );
 
-       MacVerifySetup() ;
+       wxMacPortSetter helper(this) ;
     if (region.Empty())
     {
         DestroyClippingRegion();
     if (region.Empty())
     {
         DestroyClippingRegion();
@@ -262,7 +253,7 @@ void wxDC::DoSetClippingRegionAsRegion( const wxRegion &region  )
 
 void wxDC::DestroyClippingRegion(void)
 {
 
 void wxDC::DestroyClippingRegion(void)
 {
-  MacVerifySetup() ;
+  wxMacPortSetter helper(this) ;
   m_clipping = FALSE;
 //     Rect clip = { -32000 , -32000 , 32000 , 32000 } ;
        ::ClipRect(&m_macClipRect);
   m_clipping = FALSE;
 //     Rect clip = { -32000 , -32000 , 32000 , 32000 } ;
        ::ClipRect(&m_macClipRect);
@@ -432,7 +423,7 @@ void  wxDC::SetFont( const wxFont &font )
   if (!Ok()) 
        return;
        
   if (!Ok()) 
        return;
        
-  MacVerifySetup() ;
+//  wxMacPortSetter helper(this) ;
   
   m_font = font;
   m_macFontInstalled = false ;
   
   m_font = font;
   m_macFontInstalled = false ;
@@ -443,7 +434,7 @@ void  wxDC::SetPen( const wxPen &pen )
   if (!Ok()  ) 
        return;
 
   if (!Ok()  ) 
        return;
 
-  MacVerifySetup() ;
+//  wxMacPortSetter helper(this) ;
 
        if ( m_pen == pen )
                return ;
 
        if ( m_pen == pen )
                return ;
@@ -460,7 +451,7 @@ void  wxDC::SetBrush( const wxBrush &brush )
 {
   if (!Ok() ) 
        return;
 {
   if (!Ok() ) 
        return;
-  MacVerifySetup() ;
+//  wxMacPortSetter helper(this) ;
   
   if (m_brush == brush) 
        return;
   
   if (m_brush == brush) 
        return;
@@ -473,7 +464,7 @@ void  wxDC::SetBackground( const wxBrush &brush )
 {
   if (!Ok()) 
        return;
 {
   if (!Ok()) 
        return;
-  MacVerifySetup() ;
+//  wxMacPortSetter helper(this) ;
   
   if (m_backgroundBrush == brush) 
        return;
   
   if (m_backgroundBrush == brush) 
        return;
@@ -511,7 +502,7 @@ void  wxDC::DoDrawLine( wxCoord x1, wxCoord y1, wxCoord x2, wxCoord y2 )
   if (!Ok()) 
        return;
        
   if (!Ok()) 
        return;
        
-  MacVerifySetup() ;
+  wxMacPortSetter helper(this) ;
   
   if (m_pen.GetStyle() != wxTRANSPARENT)
   {
   
   if (m_pen.GetStyle() != wxTRANSPARENT)
   {
@@ -547,7 +538,7 @@ void  wxDC::DoDrawPoint( wxCoord x, wxCoord y )
   if (!Ok()) 
        return;
        
   if (!Ok()) 
        return;
        
-  MacVerifySetup() ;
+  wxMacPortSetter helper(this) ;
   
   if (m_pen.GetStyle() != wxTRANSPARENT) 
   {
   
   if (m_pen.GetStyle() != wxTRANSPARENT) 
   {
@@ -565,7 +556,7 @@ void  wxDC::DoDrawLines(int n, wxPoint points[],
 {
   if (!Ok()) 
        return;
 {
   if (!Ok()) 
        return;
-  MacVerifySetup() ;
+  wxMacPortSetter helper(this) ;
   
   if (m_pen.GetStyle() == wxTRANSPARENT) 
        return;
   
   if (m_pen.GetStyle() == wxTRANSPARENT) 
        return;
@@ -592,7 +583,7 @@ void  wxDC::DoDrawPolygon(int n, wxPoint points[],
 {
   if (!Ok()) 
        return;
 {
   if (!Ok()) 
        return;
-  MacVerifySetup() ;
+  wxMacPortSetter helper(this) ;
   
   PolyHandle polygon = OpenPoly() ;
   long x1, x2 , y1 , y2 ;
   
   PolyHandle polygon = OpenPoly() ;
   long x1, x2 , y1 , y2 ;
@@ -626,7 +617,7 @@ void  wxDC::DoDrawRectangle(wxCoord x, wxCoord y, wxCoord width, wxCoord height)
 {
   if (!Ok()) 
        return;
 {
   if (!Ok()) 
        return;
-  MacVerifySetup() ;
+  wxMacPortSetter helper(this) ;
        
        long xx = XLOG2DEV(x);
        long yy = YLOG2DEV(y);
        
        long xx = XLOG2DEV(x);
        long yy = YLOG2DEV(y);
@@ -671,7 +662,7 @@ void  wxDC::DoDrawRoundedRectangle(wxCoord x, wxCoord y,
 {
   if (!Ok()) 
        return;
 {
   if (!Ok()) 
        return;
-  MacVerifySetup() ;
+  wxMacPortSetter helper(this) ;
        
   if (radius < 0.0) 
        radius = - radius * ((width < height) ? width : height);
        
   if (radius < 0.0) 
        radius = - radius * ((width < height) ? width : height);
@@ -717,7 +708,7 @@ void  wxDC::DoDrawEllipse(wxCoord x, wxCoord y, wxCoord width, wxCoord height)
 {
   if (!Ok()) 
        return;
 {
   if (!Ok()) 
        return;
-  MacVerifySetup() ;
+  wxMacPortSetter helper(this) ;
 
        long xx = XLOG2DEV(x);
        long yy = YLOG2DEV(y);
 
        long xx = XLOG2DEV(x);
        long yy = YLOG2DEV(y);
@@ -768,7 +759,7 @@ bool  wxDC::DoBlit(wxCoord xdest, wxCoord ydest, wxCoord width, wxCoord height,
                         wxDC *source, wxCoord xsrc, wxCoord ysrc, int logical_func , bool useMask )
 {
   if (!Ok()) return FALSE;
                         wxDC *source, wxCoord xsrc, wxCoord ysrc, int logical_func , bool useMask )
 {
   if (!Ok()) return FALSE;
-  MacVerifySetup() ;
+  wxMacPortSetter helper(this) ;
 
        CGrafPtr                        sourcePort = (CGrafPtr) source->m_macPort ;
        PixMapHandle    bmappixels =  GetGWorldPixMap( sourcePort ) ; 
 
        CGrafPtr                        sourcePort = (CGrafPtr) source->m_macPort ;
        PixMapHandle    bmappixels =  GetGWorldPixMap( sourcePort ) ; 
@@ -839,7 +830,7 @@ void  wxDC::DoDrawText(const wxString& strtext, wxCoord x, wxCoord y)
 {
   if (!Ok()) 
        return;
 {
   if (!Ok()) 
        return;
-  MacVerifySetup() ;
+  wxMacPortSetter helper(this) ;
 
        long xx = XLOG2DEV(x);
        long yy = YLOG2DEV(y);
 
        long xx = XLOG2DEV(x);
        long yy = YLOG2DEV(y);
@@ -919,7 +910,7 @@ void  wxDC::DoGetTextExtent( const wxString &string, wxCoord *width, wxCoord *he
   if (!Ok()) 
        return;
  
   if (!Ok()) 
        return;
  
-   MacVerifySetup() ;
+   wxMacPortSetter helper(this) ;
 
        wxFont formerFont = m_font ; 
        
 
        wxFont formerFont = m_font ; 
        
@@ -1001,7 +992,7 @@ wxCoord   wxDC::GetCharWidth(void) const
   if (!Ok()) 
        return 1;
  
   if (!Ok()) 
        return 1;
  
-   MacVerifySetup() ;
+   wxMacPortSetter helper(this) ;
 
        MacInstallFont() ;
 
 
        MacInstallFont() ;
 
@@ -1016,7 +1007,7 @@ wxCoord   wxDC::GetCharHeight(void) const
   if (!Ok()) 
        return 1;
  
   if (!Ok()) 
        return 1;
  
-   MacVerifySetup() ;
+   wxMacPortSetter helper(this) ;
 
        MacInstallFont() ;
 
 
        MacInstallFont() ;
 
@@ -1030,7 +1021,7 @@ void  wxDC::Clear(void)
 {
   if (!Ok()) 
        return;
 {
   if (!Ok()) 
        return;
-  MacVerifySetup() ;
+  wxMacPortSetter helper(this) ;
        Rect rect = { -32767 , -32767 , 32767 , 32767 } ;
        
        if (m_backgroundBrush.GetStyle() != wxTRANSPARENT) 
        Rect rect = { -32767 , -32767 , 32767 , 32767 } ;
        
        if (m_backgroundBrush.GetStyle() != wxTRANSPARENT) 
@@ -1044,10 +1035,9 @@ void wxDC::MacInstallFont() const
 {
   if (!Ok()) 
        return;
 {
   if (!Ok()) 
        return;
-  MacVerifySetup() ;
 
 
-       if ( m_macFontInstalled )
-               return ;
+//     if ( m_macFontInstalled )
+//             return ;
        Pattern blackColor ;
        
        wxFontRefData * font = (wxFontRefData*) m_font.GetRefData() ;
        Pattern blackColor ;
        
        wxFontRefData * font = (wxFontRefData*) m_font.GetRefData() ;
@@ -1166,12 +1156,11 @@ void wxDC::MacInstallPen() const
 {
   if (!Ok()) 
        return;
 {
   if (!Ok()) 
        return;
-  MacVerifySetup() ;
 
        Pattern  blackColor;
 
 
        Pattern  blackColor;
 
-       if ( m_macPenInstalled )
-               return ;
+//     if ( m_macPenInstalled )
+//             return ;
 
        RGBColor forecolor = m_pen.GetColour().GetPixel();
        RGBColor backcolor = m_backgroundBrush.GetColour().GetPixel();
 
        RGBColor forecolor = m_pen.GetColour().GetPixel();
        RGBColor backcolor = m_backgroundBrush.GetColour().GetPixel();
@@ -1253,10 +1242,10 @@ void wxDC::MacInstallBrush() const
 {
   if (!Ok()) 
        return;
 {
   if (!Ok()) 
        return;
-  MacVerifySetup() ;
+
        Pattern  blackColor, whiteColor ;
        Pattern  blackColor, whiteColor ;
-       if ( m_macBrushInstalled )
-               return ;
+//     if ( m_macBrushInstalled )
+//             return ;
 
        // foreground
 
 
        // foreground