- // updatergn is always already clipped to our boundaries
- WindowRef window = GetMacRootWindow() ;
- // ownUpdateRgn is the area that this window has to invalidate i.e. its own area without its children
- RgnHandle ownUpdateRgn = NewRgn() ;
- CopyRgn( updatergn , ownUpdateRgn ) ;
- wxWindow* win = wxFindWinFromMacWindow( window ) ;
- {
- wxMacDrawingHelper focus( this ) ; // was client
- if ( focus.Ok() )
- {
- WindowRef window = GetMacRootWindow() ;
- bool eraseBackground = false ;
- if ( m_macWindowData )
- eraseBackground = true ;
- if ( m_backgroundColour == wxSystemSettings::GetSystemColour(wxSYS_COLOUR_APPWORKSPACE) )
- {
- UMASetThemeWindowBackground( 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
-
-
- wxWindow* parent = GetParent() ;
- while( parent )
- {
- if ( parent->GetMacRootWindow() != 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 ) )
- {
- // 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) ;
- UMAApplyThemeBackground(kThemeBackgroundTabPane, &box , kThemeStateActive,8,true);
- break ;
- }
- }
- else
- {
- parent = NULL ;
- break ;
- }
- parent = parent->GetParent() ;
- }
- if ( !parent )
- {
- // if there is nothing special -> use default
- UMASetThemeWindowBackground( window , kThemeBrushDialogBackgroundActive , false ) ;
- }
- }
- else
- {
- RGBBackColor( &m_backgroundColour.GetPixel()) ;
- }
- // subtract all non transparent children from updatergn
-
- RgnHandle childarea = NewRgn() ;
- for (wxNode *node = GetChildren().First(); node; node = node->Next())
- {
- wxWindow *child = (wxWindow*)node->Data();
- // eventually test for transparent windows
- if ( child->GetMacRootWindow() == window && child->IsShown() )
- {
- if ( !child->IsKindOf( CLASSINFO( wxNotebook ) ) && !child->IsKindOf( CLASSINFO( wxTabCtrl ) ) )
- {
- SetRectRgn( childarea , child->m_x , child->m_y , child->m_x + child->m_width , child->m_y + child->m_height ) ;
- DiffRgn( ownUpdateRgn , childarea , ownUpdateRgn ) ;
- }
- }
- }
- DisposeRgn( childarea ) ;
-
- if ( GetParent() && m_backgroundColour != GetParent()->GetBackgroundColour() )
- eraseBackground = true ;
- SetClip( ownUpdateRgn ) ;
- if ( m_macEraseOnRedraw ) {
- if ( eraseBackground )
- {
- EraseRgn( ownUpdateRgn ) ;
- }
- }
- else {
- m_macEraseOnRedraw = true ;
- }
- }
-
- {
- 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 ) ;
- }
-
- MacPaintBorders() ;
- wxPaintEvent event;
- event.m_timeStamp = time ;
- event.SetEventObject(this);
- GetEventHandler()->ProcessEvent(event);
- }
-
-
- RgnHandle childupdate = NewRgn() ;
-
- for (wxNode *node = GetChildren().First(); node; node = node->Next())
- {
- wxWindow *child = (wxWindow*)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 ) ;
- OffsetRgn( childupdate , -child->m_x , -child->m_y ) ;
- if ( child->GetMacRootWindow() == window && child->IsShown() && !EmptyRgn( childupdate ) )
- {
- // because dialogs may also be children
- child->MacRedraw( childupdate , time ) ;
- }
- }
- DisposeRgn( childupdate ) ;
- // eventually a draw grow box here
+ if ( m_tooltip )
+ {
+ return m_tooltip->GetTip() ;
+ }
+ return wxEmptyString ;
+}
+
+void wxWindowMac::Update()
+{
+ wxRegion visRgn = MacGetVisibleRegion( false ) ;
+ int top = 0 , left = 0 ;
+ MacWindowToRootWindow( &left , &top ) ;
+ WindowRef rootWindow = (WindowRef) MacGetRootWindow() ;
+ RgnHandle updateRgn = NewRgn() ;
+ // getting the update region in macos local coordinates
+ GetWindowUpdateRgn( rootWindow , updateRgn ) ;
+ GrafPtr port ;
+ ::GetPort( &port ) ;
+ ::SetPort( UMAGetWindowPort( rootWindow ) ) ;
+ Point pt = {0,0} ;
+ LocalToGlobal( &pt ) ;
+ ::SetPort( port ) ;
+ OffsetRgn( updateRgn , -pt.h , -pt.v ) ;
+ // translate to window local coordinates
+ OffsetRgn( updateRgn , -left , -top ) ;
+ SectRgn( updateRgn , (RgnHandle) visRgn.GetWXHRGN() , updateRgn ) ;
+ MacRedraw( updateRgn , 0 , true ) ;
+ // for flushing and validating we need macos-local coordinates again
+ OffsetRgn( updateRgn , left , top ) ;
+#if TARGET_API_MAC_CARBON
+ if ( QDIsPortBuffered( GetWindowPort( rootWindow ) ) )
+ {
+ QDFlushPortBuffer( GetWindowPort( rootWindow ) , updateRgn ) ;
+ }
+#endif
+ ValidWindowRgn( rootWindow , updateRgn ) ;
+ DisposeRgn( updateRgn ) ;