X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/1c310985399bf2919b16e5043d6e424c623c62c9..481fcc780da6b3ddbee3bd9f1eca5aafeef0a58b:/src/mac/window.cpp diff --git a/src/mac/window.cpp b/src/mac/window.cpp index 9bf4d5c69f..0917200b8a 100644 --- a/src/mac/window.cpp +++ b/src/mac/window.cpp @@ -75,6 +75,11 @@ END_EVENT_TABLE() #endif +#define wxMAC_DEBUG_REDRAW 0 +#ifndef wxMAC_DEBUG_REDRAW +#define wxMAC_DEBUG_REDRAW 0 +#endif + #define wxMAC_USE_THEME_BORDER 0 @@ -361,7 +366,7 @@ void wxWindowMac::DoClientToScreen(int *x, int *y) const GrafPtr port ; ::GetPort( &port ) ; ::SetPort( UMAGetWindowPort( window ) ) ; - ::SetOrigin( 0 , 0 ) ; + ::LocalToGlobal( &localwhere ) ; ::SetPort( port ) ; if(x) *x = localwhere.h ; @@ -551,30 +556,17 @@ void wxWindowMac::DoMoveWindow(int x, int y, int width, int height) if ( doMove || doResize ) { // erase former position - wxMacDrawingHelper focus( this ) ; - if ( focus.Ok() ) - { - Rect clientrect = { 0 , 0 , m_height , m_width } ; - // ClipRect( &clientrect ) ; - InvalWindowRect( MacGetRootWindow() , &clientrect ) ; - } + + Refresh() ; m_x = actualX ; m_y = actualY ; m_width = actualWidth ; m_height = actualHeight ; + // erase new position - - { - wxMacDrawingHelper focus( this ) ; - if ( focus.Ok() ) - { - Rect clientrect = { 0 , 0 , m_height , m_width } ; - // ClipRect( &clientrect ) ; - InvalWindowRect( MacGetRootWindow() , &clientrect ) ; - } - } - + + Refresh() ; if ( doMove ) wxWindowMac::MacSuperChangedPosition() ; // like this only children will be notified @@ -720,6 +712,12 @@ void wxWindowMac::MacSuperShown( bool show ) void wxWindowMac::MacSuperEnabled( bool enabled ) { + if ( !IsTopLevel() ) + { + // to be absolutely correct we'd have to invalidate (with eraseBkground + // because unter MacOSX the frames are drawn with an addXXX mode) + // the borders area + } wxNode *node = GetChildren().First(); while ( node ) { @@ -787,6 +785,9 @@ void wxWindowMac::GetTextExtent(const wxString& string, int *x, int *y, void wxWindowMac::Refresh(bool eraseBack, const wxRect *rect) { + if ( MacGetTopLevelWindow() == NULL ) + return ; + wxPoint client ; client = GetClientAreaOrigin( ) ; Rect clientrect = { -client.y , -client.x , m_height - client.y , m_width - client.x} ; @@ -860,86 +861,82 @@ void wxWindowMac::WarpPointer (int x_pos, int y_pos) // We really dont move the mouse programmatically under mac } -void wxWindowMac::OnEraseBackground(wxEraseEvent& event) +const wxBrush& wxWindowMac::MacGetBackgroundBrush() { - wxMacDrawingHelper focus( this ) ; - if ( focus.Ok() ) - { - WindowRef window = MacGetRootWindow() ; - Rect rect = {0, 0 , m_height , m_width } ; - RgnHandle updateRgn = GetUpdateRegion().GetWXHRGN() ; - SetClip( event.GetDC()->MacGetCurrentClipRgn() ) ; - - if ( m_backgroundColour == wxSystemSettings::GetSystemColour(wxSYS_COLOUR_APPWORKSPACE) ) - { - SetThemeWindowBackground( window , kThemeBrushDocumentWindowBackground , false ) ; - } - else if ( m_backgroundColour == wxSystemSettings::GetSystemColour(wxSYS_COLOUR_3DFACE ) ) - { - // on mac we have the difficult situation, that 3dface gray can be different colours, depending whether - // it is on a notebook panel or not, in order to take care of that we walk up the hierarchy until we have - // either a non gray background color or a non control window - - wxWindowMac* parent = GetParent() ; - while( parent ) - { - if ( parent->MacGetRootWindow() != window ) - { - // we are in a different window on the mac system - parent = NULL ; - break ; - } - //if( parent->IsKindOf( CLASSINFO( wxControl ) ) && ((wxControl*)parent)->GetMacControl() ) - { - if ( parent->m_backgroundColour != wxSystemSettings::GetSystemColour(wxSYS_COLOUR_3DFACE ) - && parent->m_backgroundColour != wxSystemSettings::GetSystemColour(wxSYS_COLOUR_APPWORKSPACE) ) - { - // if we have any other colours in the hierarchy - RGBBackColor( &parent->m_backgroundColour.GetPixel()) ; - break ; - } - // if we have the normal colours in the hierarchy but another control etc. -> use it's background - if ( parent->IsKindOf( CLASSINFO( wxNotebook ) ) || parent->IsKindOf( CLASSINFO( wxTabCtrl ) )) - { - Rect box ; - GetRegionBounds( updateRgn , &box) ; - ::ApplyThemeBackground(kThemeBackgroundTabPane, &box , kThemeStateActive,8,true); - break ; - } - } - /* - else - { - // we have arrived at a non control item - parent = NULL ; - break ; - } - */ - parent = parent->GetParent() ; - } - if ( !parent ) - { - // if there is nothing special -> use default - SetThemeWindowBackground( window , kThemeBrushDialogBackgroundActive , false ) ; - } - } - else - { - RGBBackColor( &m_backgroundColour.GetPixel()) ; - } - EraseRect( &rect ) ; + if ( m_backgroundColour == wxSystemSettings::GetSystemColour(wxSYS_COLOUR_APPWORKSPACE) ) + { + m_macBackgroundBrush.SetMacTheme( kThemeBrushDocumentWindowBackground ) ; + } + else if ( m_backgroundColour == wxSystemSettings::GetSystemColour(wxSYS_COLOUR_3DFACE ) ) + { + // on mac we have the difficult situation, that 3dface gray can be different colours, depending whether + // it is on a notebook panel or not, in order to take care of that we walk up the hierarchy until we have + // either a non gray background color or a non control window + + WindowRef window = MacGetRootWindow() ; + + wxWindowMac* parent = GetParent() ; + while( parent ) + { + if ( parent->MacGetRootWindow() != window ) + { + // we are in a different window on the mac system + parent = NULL ; + break ; + } + + { + if ( parent->m_backgroundColour != wxSystemSettings::GetSystemColour(wxSYS_COLOUR_3DFACE ) + && parent->m_backgroundColour != wxSystemSettings::GetSystemColour(wxSYS_COLOUR_APPWORKSPACE) ) + { + // if we have any other colours in the hierarchy + m_macBackgroundBrush.SetColour( parent->m_backgroundColour ) ; + break ; + } + // if we have the normal colours in the hierarchy but another control etc. -> use it's background + if ( parent->IsKindOf( CLASSINFO( wxNotebook ) ) || parent->IsKindOf( CLASSINFO( wxTabCtrl ) )) + { + Rect extent = { 0 , 0 , 0 , 0 } ; + int x , y ; + x = y = 0 ; + wxSize size = GetSize() ; + parent->MacClientToRootWindow( &x , &y ) ; + extent.left = x ; + extent.top = y ; + extent.top-- ; + extent.right = x + size.x ; + extent.bottom = y + size.y ; + m_macBackgroundBrush.SetMacThemeBackground( kThemeBackgroundTabPane , extent ) ; // todo eventually change for inactive + break ; + } + } + parent = parent->GetParent() ; + } + if ( !parent ) + { + m_macBackgroundBrush.SetMacTheme( kThemeBrushDialogBackgroundActive ) ; // todo eventually change for inactive + } } + else + { + m_macBackgroundBrush.SetColour( m_backgroundColour ) ; + } + + return m_macBackgroundBrush ; -// event.GetDC()->Clear() ; +} + +void wxWindowMac::OnEraseBackground(wxEraseEvent& event) +{ + event.GetDC()->Clear() ; } void wxWindowMac::OnNcPaint( wxNcPaintEvent& event ) { - wxMacDrawingHelper focus( this ) ; - if ( focus.Ok() ) - { - MacPaintBorders() ; - } + wxWindowDC dc(this) ; + wxMacPortSetter helper(&dc) ; + + MacPaintBorders( dc.m_macLocalOrigin.h , dc.m_macLocalOrigin.v) ; } int wxWindowMac::GetScrollPos(int orient) const @@ -1003,7 +1000,7 @@ void wxWindowMac::SetScrollPos(int orient, int pos, bool refresh) } } -void wxWindowMac::MacPaintBorders( ) +void wxWindowMac::MacPaintBorders( int left , int top ) { if( IsTopLevel() ) return ; @@ -1017,7 +1014,7 @@ void wxWindowMac::MacPaintBorders( ) if (HasFlag(wxRAISED_BORDER) || HasFlag( wxSUNKEN_BORDER) || HasFlag(wxDOUBLE_BORDER) ) { #if wxMAC_USE_THEME_BORDER - Rect rect = { 0 , 0 , m_height , m_width } ; + Rect rect = { top , left , m_height + top , m_width + left } ; SInt32 border = 0 ; /* GetThemeMetric( kThemeMetricListBoxFrameOutset , &border ) ; @@ -1029,38 +1026,38 @@ void wxWindowMac::MacPaintBorders( ) #else bool sunken = HasFlag( wxSUNKEN_BORDER ) ; RGBForeColor( &face ); - MoveTo( 0 , m_height - 2 ); - LineTo( 0 , 0 ); - LineTo( m_width - 2 , 0 ); + MoveTo( left + 0 , top + m_height - 2 ); + LineTo( left + 0 , top + 0 ); + LineTo( left + m_width - 2 , top + 0 ); - MoveTo( 2 , m_height - 3 ); - LineTo( m_width - 3 , m_height - 3 ); - LineTo( m_width - 3 , 2 ); + MoveTo( left + 2 , top + m_height - 3 ); + LineTo( left + m_width - 3 , top + m_height - 3 ); + LineTo( left + m_width - 3 , top + 2 ); RGBForeColor( sunken ? &face : &black ); - MoveTo( 0 , m_height - 1 ); - LineTo( m_width - 1 , m_height - 1 ); - LineTo( m_width - 1 , 0 ); + MoveTo( left + 0 , top + m_height - 1 ); + LineTo( left + m_width - 1 , top + m_height - 1 ); + LineTo( left + m_width - 1 , top + 0 ); RGBForeColor( sunken ? &shadow : &white ); - MoveTo( 1 , m_height - 3 ); - LineTo( 1, 1 ); - LineTo( m_width - 3 , 1 ); + MoveTo( left + 1 , top + m_height - 3 ); + LineTo( left + 1, top + 1 ); + LineTo( left + m_width - 3 , top + 1 ); RGBForeColor( sunken ? &white : &shadow ); - MoveTo( 1 , m_height - 2 ); - LineTo( m_width - 2 , m_height - 2 ); - LineTo( m_width - 2 , 1 ); + MoveTo( left + 1 , top + m_height - 2 ); + LineTo( left + m_width - 2 , top + m_height - 2 ); + LineTo( left + m_width - 2 , top + 1 ); RGBForeColor( sunken ? &black : &face ); - MoveTo( 2 , m_height - 4 ); - LineTo( 2 , 2 ); - LineTo( m_width - 4 , 2 ); + MoveTo( left + 2 , top + m_height - 4 ); + LineTo( left + 2 , top + 2 ); + LineTo( left + m_width - 4 , top + 2 ); #endif } else if (HasFlag(wxSIMPLE_BORDER)) { - Rect rect = { 0 , 0 , m_height , m_width } ; + Rect rect = { top , left , m_height + top , m_width + left } ; RGBForeColor( &black ) ; FrameRect( &rect ) ; } @@ -1110,19 +1107,20 @@ void wxWindowMac::SetScrollbar(int orient, int pos, int thumbVisible, // Does a physical scroll void wxWindowMac::ScrollWindow(int dx, int dy, const wxRect *rect) { - wxMacDrawingClientHelper focus( this ) ; - if ( focus.Ok() ) + wxClientDC dc(this) ; + wxMacPortSetter helper(&dc) ; + { int width , height ; GetClientSize( &width , &height ) ; - Rect scrollrect = { 0 , 0 , height , width } ; - + Rect scrollrect = { dc.YLOG2DEVMAC(0) , dc.XLOG2DEVMAC(0) , dc.YLOG2DEVMAC(height) , dc.XLOG2DEVMAC(width) } ; RgnHandle updateRgn = NewRgn() ; ClipRect( &scrollrect ) ; if ( rect ) { - Rect r = { rect->y , rect->x , rect->y + rect->height , rect->x + rect->width } ; + Rect r = { dc.YLOG2DEVMAC(rect->y) , dc.XLOG2DEVMAC(rect->x) , dc.YLOG2DEVMAC(rect->y + rect->height) , + dc.XLOG2DEVMAC(rect->x + rect->width) } ; SectRect( &scrollrect , &r , &scrollrect ) ; } ScrollRect( &scrollrect , dx , dy , updateRgn ) ; @@ -1427,51 +1425,108 @@ wxTopLevelWindowMac* wxWindowMac::MacGetTopLevelWindow() const return win ; } +const wxRegion& wxWindowMac::MacGetVisibleRegion() +{ + RgnHandle visRgn = NewRgn() ; + RgnHandle tempRgn = NewRgn() ; + + SetRectRgn( visRgn , 0 , 0 , m_width , m_height ) ; + + //TODO : as soon as the new scheme has proven to work correctly, move this to wxStaticBox + if ( IsKindOf( CLASSINFO( wxStaticBox ) ) ) + { + int borderTop = 14 ; + int borderOther = 4 ; + + SetRectRgn( tempRgn , borderOther , borderTop , m_width - borderOther , m_height - borderOther ) ; + DiffRgn( visRgn , tempRgn , visRgn ) ; + } + + wxWindow* parent = GetParent() ; + while( parent ) + { + wxSize size = parent->GetSize() ; + int x , y ; + x = y = 0 ; + parent->MacWindowToRootWindow( &x, &y ) ; + MacRootWindowToWindow( &x , &y ) ; + SetRectRgn( tempRgn , x , y , x + size.x , y + size.y ) ; + SectRgn( visRgn , tempRgn , visRgn ) ; + if ( parent->IsTopLevel() ) + break ; + parent = parent->GetParent() ; + } + if ( GetWindowStyle() & wxCLIP_CHILDREN ) + { + for (wxNode *node = GetChildren().First(); node; node = node->Next()) + { + wxWindowMac *child = (wxWindowMac*)node->Data(); + + if ( !child->IsTopLevel() && child->IsShown() ) + { + SetRectRgn( tempRgn , child->m_x , child->m_y , child->m_x + child->m_width , child->m_y + child->m_height ) ; + DiffRgn( visRgn , tempRgn , visRgn ) ; + } + } + } + + if ( (GetWindowStyle() & wxCLIP_SIBLINGS) && GetParent() ) + { + bool thisWindowThrough = false ; + for (wxNode *node = GetParent()->GetChildren().First(); node; node = node->Next()) + { + wxWindowMac *sibling = (wxWindowMac*)node->Data(); + if ( sibling == this ) + { + thisWindowThrough = true ; + continue ; + } + if( !thisWindowThrough ) + { + continue ; + } + + if ( !sibling->IsTopLevel() && sibling->IsShown() ) + { + SetRectRgn( tempRgn , sibling->m_x - m_x , sibling->m_y - m_y , sibling->m_x + sibling->m_width - m_x , sibling->m_y + sibling->m_height - m_y ) ; + DiffRgn( visRgn , tempRgn , visRgn ) ; + } + } + } + m_macVisibleRegion = visRgn ; + DisposeRgn( visRgn ) ; + DisposeRgn( tempRgn ) ; + return m_macVisibleRegion ; +} + void wxWindowMac::MacRedraw( RgnHandle updatergn , long time, bool erase) { // updatergn is always already clipped to our boundaries - // it is in nc-coordinates + // it is in window coordinates, not in client coordinates WindowRef window = MacGetRootWindow() ; { - // ownUpdateRgn is the area that this window has to invalidate i.e. its own area without its children + // ownUpdateRgn is the area that this window has to repaint, it is in window coordinates RgnHandle ownUpdateRgn = NewRgn() ; CopyRgn( updatergn , ownUpdateRgn ) ; - // subtract all children from updatergn, as soon as we start with transparent windows, these should - // not be subtracted - RgnHandle eraseRgn = NewRgn() ; - CopyRgn( ownUpdateRgn , eraseRgn ) ; - - RgnHandle childarea = NewRgn() ; - for (wxNode *node = GetChildren().First(); node; node = node->Next()) - { - wxWindowMac *child = (wxWindowMac*)node->Data(); - - if ( child->MacGetRootWindow() == window && child->IsShown() ) - { - SetRectRgn( childarea , child->m_x , child->m_y , child->m_x + child->m_width , child->m_y + child->m_height ) ; - DiffRgn( eraseRgn , childarea , eraseRgn ) ; - } - } - DisposeRgn( childarea ) ; - - // now intersect this with the client area - // and shift it to client coordinates + + SectRgn( ownUpdateRgn , MacGetVisibleRegion().GetWXHRGN() , ownUpdateRgn ) ; + // newupdate is the update region in client coordinates RgnHandle newupdate = NewRgn() ; wxSize point = GetClientSize() ; wxPoint origin = GetClientAreaOrigin() ; - SetRectRgn( newupdate , origin.x , origin.y , origin.x + point.x , origin.y+point.y ) ; SectRgn( newupdate , ownUpdateRgn , newupdate ) ; OffsetRgn( newupdate , -origin.x , -origin.y ) ; m_updateRegion = newupdate ; DisposeRgn( newupdate ) ; // it's been cloned to m_updateRegion - if ( erase && !EmptyRgn(eraseRgn) ) + + if ( erase && !EmptyRgn(ownUpdateRgn) ) { wxWindowDC dc(this); - dc.SetClippingRegion(wxRegion(eraseRgn)); + dc.SetClippingRegion(wxRegion(ownUpdateRgn)); wxEraseEvent eevent( GetId(), &dc ); eevent.SetEventObject( this ); GetEventHandler()->ProcessEvent( eevent ); @@ -1481,7 +1536,6 @@ void wxWindowMac::MacRedraw( RgnHandle updatergn , long time, bool erase) GetEventHandler()->ProcessEvent( eventNc ); } DisposeRgn( ownUpdateRgn ) ; - DisposeRgn( eraseRgn ) ; if ( !m_updateRegion.Empty() ) { wxPaintEvent event; @@ -1496,6 +1550,8 @@ void wxWindowMac::MacRedraw( RgnHandle updatergn , long time, bool erase) RgnHandle childupdate = NewRgn() ; for (wxNode *node = GetChildren().First(); node; node = node->Next()) { + // calculate the update region for the child windows by intersecting the window rectangle with our own + // passed in update region and then offset it to be client-wise window coordinates again wxWindowMac *child = (wxWindowMac*)node->Data(); SetRectRgn( childupdate , child->m_x , child->m_y , child->m_x + child->m_width , child->m_y + child->m_height ) ; SectRgn( childupdate , updatergn , childupdate ) ; @@ -1674,105 +1730,6 @@ void wxWindowMac::MacTopLevelWindowChangedPosition() node = node->Next(); } } - -bool wxWindowMac::MacSetPortFocusParams( const Point & localOrigin, const Rect & clipRect, WindowRef window , wxWindowMac* win ) -{ - if ( window == NULL ) - return false ; - - GrafPtr currPort; - GrafPtr port ; - - ::GetPort(&currPort); - port = UMAGetWindowPort( window) ; - if (currPort != port ) - ::SetPort(port); - -// wxASSERT( port->portRect.left == 0 && port->portRect.top == 0 ) ; - ::SetOrigin(-localOrigin.h, -localOrigin.v); - return true; -} - -bool wxWindowMac::MacSetPortDrawingParams( const Point & localOrigin, const Rect & clipRect, WindowRef window , wxWindowMac* win ) -{ - if ( window == NULL ) - return false ; - - GrafPtr currPort; - GrafPtr port ; - ::GetPort(&currPort); - port = UMAGetWindowPort( window) ; - if (currPort != port ) - ::SetPort(port); -// wxASSERT( port->portRect.left == 0 && port->portRect.top == 0 ) ; - ::SetOrigin(-localOrigin.h, -localOrigin.v); - ::ClipRect(&clipRect); - - ::PenNormal() ; - ::RGBBackColor(& win->GetBackgroundColour().GetPixel() ) ; - ::RGBForeColor(& win->GetForegroundColour().GetPixel() ) ; - Pattern whiteColor ; - - ::BackPat( GetQDGlobalsWhite( &whiteColor) ) ; -// ::SetThemeWindowBackground( win->m_macWindowData->m_macWindow , win->m_macWindowData->m_macWindowBackgroundTheme , false ) ; - return true; -} - -void wxWindowMac::MacGetPortParams(Point* localOrigin, Rect* clipRect, WindowRef *window , wxWindowMac** rootwin) -{ - wxASSERT( GetParent() != NULL ) ; - GetParent()->MacGetPortParams( localOrigin , clipRect , window, rootwin) ; - localOrigin->h += m_x; - localOrigin->v += m_y; - OffsetRect(clipRect, -m_x, -m_y); - - Rect myClip; - myClip.left = 0; - myClip.top = 0; - myClip.right = m_width; - myClip.bottom = m_height; - SectRect(clipRect, &myClip, clipRect); -} - -void wxWindowMac::MacDoGetPortClientParams(Point* localOrigin, Rect* clipRect, WindowRef *window , wxWindowMac** rootwin ) -{ - wxASSERT( GetParent() != NULL ) ; - - GetParent()->MacDoGetPortClientParams( localOrigin , clipRect , window, rootwin) ; - - localOrigin->h += m_x; - localOrigin->v += m_y; - OffsetRect(clipRect, -m_x, -m_y); - - Rect myClip; - myClip.left = 0; - myClip.top = 0; - myClip.right = m_width ;//width; - myClip.bottom = m_height ;// height; - SectRect(clipRect, &myClip, clipRect); -} - -void wxWindowMac::MacGetPortClientParams(Point* localOrigin, Rect* clipRect, WindowRef *window , wxWindowMac** rootwin ) -{ - MacDoGetPortClientParams( localOrigin , clipRect , window , rootwin ) ; - - int width , height ; - GetClientSize( &width , &height ) ; - wxPoint client ; - client = GetClientAreaOrigin( ) ; - - localOrigin->h += client.x; - localOrigin->v += client.y; - OffsetRect(clipRect, -client.x, -client.y); - - Rect myClip; - myClip.left = 0; - myClip.top = 0; - myClip.right = width; - myClip.bottom = height; - SectRect(clipRect, &myClip, clipRect); -} - long wxWindowMac::MacGetLeftBorderSize( ) const { if( IsTopLevel() ) @@ -1828,84 +1785,6 @@ long wxWindowMac::MacRemoveBordersFromStyle( long style ) return style & ~( wxDOUBLE_BORDER | wxSUNKEN_BORDER | wxRAISED_BORDER | wxBORDER | wxSTATIC_BORDER ) ; } - -wxMacDrawingHelper::wxMacDrawingHelper( wxWindowMac * theWindow ) -{ - m_ok = false ; - Point localOrigin ; - Rect clipRect ; - WindowRef window ; - wxWindowMac *rootwin ; - m_currentPort = NULL ; - - GetPort( &m_formerPort ) ; - if ( theWindow ) - { - theWindow->MacGetPortParams( &localOrigin , &clipRect , &window , &rootwin) ; - m_currentPort = UMAGetWindowPort( window ) ; - if ( m_formerPort != m_currentPort ) - SetPort( m_currentPort ) ; - GetPenState( &m_savedPenState ) ; - theWindow->MacSetPortDrawingParams( localOrigin, clipRect, window , rootwin ) ; - m_ok = true ; - } -} - -wxMacDrawingHelper::~wxMacDrawingHelper() -{ - if ( m_ok ) - { - SetPort( m_currentPort ) ; - SetPenState( &m_savedPenState ) ; - SetOrigin( 0 , 0 ) ; - Rect portRect ; - GetPortBounds( m_currentPort , &portRect ) ; - ClipRect( &portRect ) ; - } - - if ( m_formerPort != m_currentPort ) - SetPort( m_formerPort ) ; -} - -wxMacDrawingClientHelper::wxMacDrawingClientHelper( wxWindowMac * theWindow ) -{ - m_ok = false ; - Point localOrigin ; - Rect clipRect ; - WindowRef window ; - wxWindowMac *rootwin ; - m_currentPort = NULL ; - - GetPort( &m_formerPort ) ; - - if ( theWindow ) - { - theWindow->MacGetPortClientParams( &localOrigin , &clipRect , &window , &rootwin) ; - m_currentPort = UMAGetWindowPort( window ) ; - if ( m_formerPort != m_currentPort ) - SetPort( m_currentPort ) ; - GetPenState( &m_savedPenState ) ; - theWindow->MacSetPortDrawingParams( localOrigin, clipRect, window , rootwin ) ; - m_ok = true ; - } -} - -wxMacDrawingClientHelper::~wxMacDrawingClientHelper() -{ - if ( m_ok ) - { - SetPort( m_currentPort ) ; - SetPenState( &m_savedPenState ) ; - SetOrigin( 0 , 0 ) ; - Rect portRect ; - GetPortBounds( m_currentPort , &portRect ) ; - ClipRect( &portRect ) ; - } - - if ( m_formerPort != m_currentPort ) - SetPort( m_formerPort ) ; -} - // Find the wxWindowMac at the current mouse position, returning the mouse // position. wxWindowMac* wxFindWindowAtPointer(wxPoint& pt)