]> git.saurik.com Git - wxWidgets.git/blobdiff - src/mac/dc.cpp
added creation of dialog - perhaps needed for all platforms
[wxWidgets.git] / src / mac / dc.cpp
index d5f9cbac2bb5b327d02624916eb1836de8b3d46b..206e960450aa83b62388c7ec6fd3936979920398 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
@@ -1464,6 +1500,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 +1562,7 @@ void  wxDC::DoDrawText(const wxString& strtext, wxCoord x, wxCoord y)
                        ::DrawThemeTextBox( mString,
                                                                kThemeCurrentPortFont,
                                                                kThemeStateActive,
-                                                               true,
+                                                               false,
                                                                &frame,
                                                                teJustLeft,
                                                                nil );
@@ -1551,7 +1588,7 @@ void  wxDC::DoDrawText(const wxString& strtext, wxCoord x, wxCoord y)
                ::DrawThemeTextBox( mString,
                                                        kThemeCurrentPortFont,
                                                        kThemeStateActive,
-                                                       true,
+                                                       false,
                                                        &frame,
                                                        teJustLeft,
                                                        nil );
@@ -1594,6 +1631,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 +1673,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 +1700,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 ;
         }