]> git.saurik.com Git - wxWidgets.git/blobdiff - src/mac/carbon/dc.cpp
Documented wxListCtrl::GetColumnCount
[wxWidgets.git] / src / mac / carbon / dc.cpp
index d5f9cbac2bb5b327d02624916eb1836de8b3d46b..ef065b7ac1172db31e9f62771522222d252d7811 100644 (file)
@@ -66,6 +66,39 @@ wxMacPortSetter::~wxMacPortSetter()
        m_dc->MacCleanupPort(&m_ph) ;
 }
 
+wxMacWindowClipper::wxMacWindowClipper( const wxWindow* win ) 
+{
+    m_formerClip = NewRgn() ;
+    m_newClip = NewRgn() ;
+    GetClip( m_formerClip ) ;
+    
+    if ( win )
+    {
+        RgnHandle insidergn = NewRgn() ;
+        int x = 0 , y = 0;
+        wxWindow *parent = win->GetParent() ;
+        parent->MacWindowToRootWindow( &x,&y ) ;
+
+        wxSize size = parent->GetSize() ;
+        SetRectRgn( insidergn , parent->MacGetLeftBorderSize() , parent->MacGetTopBorderSize() , 
+         size.x - parent->MacGetLeftBorderSize() - parent->MacGetRightBorderSize(), 
+         size.y - parent->MacGetTopBorderSize() - parent->MacGetBottomBorderSize()) ;
+
+        CopyRgn( (RgnHandle) parent->MacGetVisibleRegion(false).GetWXHRGN() , m_newClip ) ;
+       SectRgn( m_newClip , insidergn , m_newClip ) ;
+        OffsetRgn( m_newClip , x , y ) ;
+        SetClip( m_newClip ) ;
+       DisposeRgn( insidergn ) ;
+       }
+}
+
+wxMacWindowClipper::~wxMacWindowClipper() 
+{
+    SetClip( m_formerClip ) ;
+       DisposeRgn( m_newClip ) ;
+       DisposeRgn( m_formerClip ) ;
+}
+
 //-----------------------------------------------------------------------------
 // Local functions
 //-----------------------------------------------------------------------------
@@ -721,6 +754,7 @@ void  wxDC::DoDrawLine( wxCoord x1, wxCoord y1, wxCoord x2, wxCoord y2 )
 void  wxDC::DoCrossHair( wxCoord x, wxCoord y )
 {
     wxCHECK_RET( Ok(), wxT("wxDC::DoCrossHair  Invalid window dc") );
+    wxMacPortSetter helper(this) ;
 
     if (m_pen.GetStyle() != wxTRANSPARENT)
     {
@@ -782,6 +816,7 @@ void  wxDC::DoDrawArc( wxCoord x1, wxCoord y1,
                            wxCoord xc, wxCoord yc )
 {
     wxCHECK_RET(Ok(), wxT("wxDC::DoDrawArc  Invalid DC"));
+    wxMacPortSetter helper(this) ;
 
     wxCoord xx1 = XLOG2DEVMAC(x1);
     wxCoord yy1 = YLOG2DEVMAC(y1);
@@ -835,6 +870,7 @@ void  wxDC::DoDrawEllipticArc( wxCoord x, wxCoord y, wxCoord w, wxCoord h,
                                    double sa, double ea )
 {
     wxCHECK_RET(Ok(), wxT("wxDC::DoDrawEllepticArc  Invalid DC"));
+    wxMacPortSetter helper(this) ;
 
     Rect r;
     double angle = sa - ea;  // Order important Mac in opposite direction to wx
@@ -922,8 +958,8 @@ void  wxDC::DoDrawPolygon(int n, wxPoint points[],
 
        PolyHandle polygon = OpenPoly();
 
-       x1 = XLOG2DEVMAC(points[0].x + xoffset);
-       y1 = YLOG2DEVMAC(points[0].y + yoffset);
+       x2 = x1 = XLOG2DEVMAC(points[0].x + xoffset);
+       y2 = y1 = YLOG2DEVMAC(points[0].y + yoffset);
        ::MoveTo(x1,y1);
 
        for (int i = 1; i < n; i++)
@@ -1403,7 +1439,7 @@ void  wxDC::DoDrawRotatedText(const wxString& str, wxCoord x, wxCoord y,
     if ( 0 )
     {
         m_macFormerAliasState = IsAntiAliasedTextEnabled(&m_macFormerAliasSize);
-        SetAntiAliasedTextEnabled(true, m_scaleY * font->m_macFontSize);
+        SetAntiAliasedTextEnabled(true, SInt16(m_scaleY * font->m_macFontSize));
         m_macAliasWasEnabled = true ;
     }
 
@@ -1431,9 +1467,10 @@ void  wxDC::DoDrawRotatedText(const wxString& str, wxCoord x, wxCoord y,
         &chars , (ATSUStyle*) &m_macATSUIStyle , &atsuLayout ) ;
        wxASSERT_MSG( status == noErr , "couldn't create the layout of the rotated text" );
 
-    if ( abs(angle) > 0 )
+    int iAngle = int( angle );
+    if ( abs(iAngle) > 0 )
     {
-        Fixed atsuAngle = IntToFixed( angle ) ;
+        Fixed atsuAngle = IntToFixed( iAngle ) ;
        ByteCount angleSize = sizeof(Fixed) ;
        ATSUAttributeTag rotationTag = kATSULineRotationTag ;
        ATSUAttributeValuePtr   angleValue = &atsuAngle ;
@@ -1464,6 +1501,7 @@ void  wxDC::DoDrawText(const wxString& strtext, wxCoord x, wxCoord y)
        long yy = YLOG2DEVMAC(y);
 #if TARGET_CARBON
        bool useDrawThemeText = ( DrawThemeTextBox != (void*) kUnresolvedCFragSymbolAddress ) ;
+       useDrawThemeText = false ;
 #endif
        MacInstallFont() ;
     if ( 0 )
@@ -1525,7 +1563,7 @@ void  wxDC::DoDrawText(const wxString& strtext, wxCoord x, wxCoord y)
                        ::DrawThemeTextBox( mString,
                                                                kThemeCurrentPortFont,
                                                                kThemeStateActive,
-                                                               true,
+                                                               false,
                                                                &frame,
                                                                teJustLeft,
                                                                nil );
@@ -1551,7 +1589,7 @@ void  wxDC::DoDrawText(const wxString& strtext, wxCoord x, wxCoord y)
                ::DrawThemeTextBox( mString,
                                                        kThemeCurrentPortFont,
                                                        kThemeStateActive,
-                                                       true,
+                                                       false,
                                                        &frame,
                                                        teJustLeft,
                                                        nil );
@@ -1594,6 +1632,7 @@ void  wxDC::DoGetTextExtent( const wxString &string, wxCoord *width, wxCoord *he
        ::GetFontInfo( &fi ) ;
 #if TARGET_CARBON      
        bool useGetThemeText = ( GetThemeTextDimensions != (void*) kUnresolvedCFragSymbolAddress ) ;
+       useGetThemeText = false ;
 #endif
 
        if ( height )
@@ -1635,13 +1674,14 @@ void  wxDC::DoGetTextExtent( const wxString &string, wxCoord *width, wxCoord *he
                 if ( useGetThemeText )
                 {
                     Point bounds={0,0} ;
+                    SInt16 baseline ;
                     CFStringRef mString = CFStringCreateWithBytes( NULL , (UInt8*) text + laststop , i - laststop , CFStringGetSystemEncoding(), false ) ;
                        ::GetThemeTextDimensions( mString,
                                                                kThemeCurrentPortFont,
                                                                kThemeStateActive,
-                                                               true,
+                                                               false,
                                                                &bounds,
-                                                               nil );
+                                                               &baseline );
                    CFRelease( mString ) ;
                    curwidth = bounds.h ;
                 }
@@ -1661,13 +1701,14 @@ void  wxDC::DoGetTextExtent( const wxString &string, wxCoord *width, wxCoord *he
         if ( useGetThemeText )
         {
             Point bounds={0,0} ;
+            SInt16 baseline ;
             CFStringRef mString = CFStringCreateWithBytes( NULL , (UInt8*) text + laststop , i - laststop , CFStringGetSystemEncoding(), false ) ;
                ::GetThemeTextDimensions( mString,
                                                        kThemeCurrentPortFont,
                                                        kThemeStateActive,
-                                                       true,
+                                                       false,
                                                        &bounds,
-                                                       nil );
+                                                       &baseline );
            CFRelease( mString ) ;
            curwidth = bounds.h ;
         }
@@ -1825,7 +1866,7 @@ void wxDC::MacInstallFont() const
 
     OSStatus status = noErr ;
 
-    Fixed atsuSize = IntToFixed(m_scaleY * font->m_macFontSize) ;
+    Fixed atsuSize = IntToFixed( int(m_scaleY * font->m_macFontSize) ) ;
 
     Style qdStyle = font->m_macFontStyle ;
        ATSUFontID      atsuFont = font->m_macATSUFontID ;
@@ -1894,13 +1935,13 @@ void wxDC::MacInstallFont() const
 
 Pattern gHatchPatterns[] =
 {
-    { 0xFF , 0xFF , 0xFF , 0xFF , 0xFF , 0xFF , 0xFF , 0xFF } ,
-    { 0x01 , 0x02 , 0x04 , 0x08 , 0x10 , 0x20 , 0x40 , 0x80 } ,
-    { 0x80 , 0x40 , 0x20 , 0x10 , 0x08 , 0x04 , 0x02 , 0x01 } ,
-    { 0x10 , 0x10 , 0x10 , 0xFF , 0x10 , 0x10 , 0x10 , 0x10 } ,
-    { 0x00 , 0x00 , 0x00 , 0xFF , 0x00 , 0x00 , 0x00 , 0x00 } ,
-    { 0x10 , 0x10 , 0x10 , 0x10 , 0x10 , 0x10 , 0x10 , 0x10 } ,
-    { 0x81 , 0x42 , 0x24 , 0x18 , 0x18 , 0x24 , 0x42 , 0x81 } ,
+     { { 0xFF , 0xFF , 0xFF , 0xFF , 0xFF , 0xFF , 0xFF , 0xFF } },
+     { { 0x01 , 0x02 , 0x04 , 0x08 , 0x10 , 0x20 , 0x40 , 0x80 } },
+     { { 0x80 , 0x40 , 0x20 , 0x10 , 0x08 , 0x04 , 0x02 , 0x01 } },
+     { { 0x10 , 0x10 , 0x10 , 0xFF , 0x10 , 0x10 , 0x10 , 0x10 } },
+     { { 0x00 , 0x00 , 0x00 , 0xFF , 0x00 , 0x00 , 0x00 , 0x00 } },
+     { { 0x10 , 0x10 , 0x10 , 0x10 , 0x10 , 0x10 , 0x10 , 0x10 } },
+     { { 0x81 , 0x42 , 0x24 , 0x18 , 0x18 , 0x24 , 0x42 , 0x81 } } 
 } ;
 
 static void wxMacGetHatchPattern(int hatchStyle, Pattern *pattern)
@@ -2000,7 +2041,6 @@ void wxDC::MacInstallPen() const
                case wxUSER_DASH :
                    {
                        wxDash* dash ;
-                       int number = m_pen.GetDashes(&dash) ;
                        // right now we don't allocate larger pixmaps
                        for ( int i = 0 ; i < 8 ; ++i )
                        {