]> 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 364c45fcf105dd6edc3f61dd797a38dfdb77d370..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