-extern int wxBusyCursorCount ;
-
-bool wxWindow::MacDispatchMouseEvent(wxMouseEvent& event)
-{
- if ((event.m_x < m_x) || (event.m_y < m_y) ||
- (event.m_x > (m_x + m_width)) || (event.m_y > (m_y + m_height)))
- return FALSE;
-
- if ( IsKindOf( CLASSINFO ( wxStaticBox ) ) )
- return FALSE ;
-
- WindowRef window = GetMacRootWindow() ;
-
- event.m_x -= m_x;
- event.m_y -= m_y;
-
- int x = event.m_x ;
- int y = event.m_y ;
-
- if ( m_children )
- {
- for (wxNode *node = m_children->First(); node; node = node->Next())
- {
- wxWindow *child = (wxWindow*)node->Data();
- if ( child->GetMacRootWindow() == window && child->IsReallyShown() && child->IsReallyEnabled() )
- {
- if (child->MacDispatchMouseEvent(event))
- return TRUE;
- }
- }
- }
-
- event.m_x = x ;
- event.m_y = y ;
-
- if ( wxBusyCursorCount == 0 )
- {
- m_windowCursor.MacInstall() ;
- }
- GetEventHandler()->ProcessEvent( event ) ;
- return TRUE;
-}
-
-void wxWindow::MacFireMouseEvent( EventRecord *ev )
-{
- wxMouseEvent event(wxEVT_LEFT_DOWN);
- bool isDown = !(ev->modifiers & btnState) ; // 1 is for up
- bool controlDown = ev->modifiers & controlKey ; // for simulating right mouse
-
- event.m_leftDown = isDown && !controlDown;
- event.m_middleDown = FALSE;
- event.m_rightDown = isDown && controlDown;
-
- if ( ev->what == mouseDown )
- {
- if ( controlDown )
- event.SetEventType(wxEVT_RIGHT_DOWN ) ;
- else
- event.SetEventType(wxEVT_LEFT_DOWN ) ;
- }
- else if ( ev->what == mouseUp )
- {
- if ( controlDown )
- event.SetEventType(wxEVT_RIGHT_UP ) ;
- else
- event.SetEventType(wxEVT_LEFT_UP ) ;
- }
- else
- {
- event.SetEventType(wxEVT_MOTION ) ;
- }
-
- event.m_shiftDown = ev->modifiers & shiftKey;
- event.m_controlDown = ev->modifiers & controlKey;
- event.m_altDown = ev->modifiers & optionKey;
- event.m_metaDown = ev->modifiers & cmdKey;
-
- Point localwhere = ev->where ;
-
- GrafPtr port ;
- ::GetPort( &port ) ;
- ::SetPort( UMAGetWindowPort( m_macWindowData->m_macWindow ) ) ;
- ::GlobalToLocal( &localwhere ) ;
- ::SetPort( port ) ;
-
- event.m_x = localwhere.h;
- event.m_y = localwhere.v;
- event.m_x += m_x;
- event.m_y += m_y;
-
-/*
- wxPoint origin = GetClientAreaOrigin() ;
-
- event.m_x += origin.x ;
- event.m_y += origin.y ;
-*/
-
- event.m_timeStamp = ev->when;
- event.SetEventObject(this);
- if ( wxTheApp->s_captureWindow )
- {
- int x = event.m_x ;
- int y = event.m_y ;
- wxTheApp->s_captureWindow->ScreenToClient( &x , &y ) ;
- event.m_x = x ;
- event.m_y = y ;
- wxTheApp->s_captureWindow->GetEventHandler()->ProcessEvent( event ) ;
- if ( ev->what == mouseUp )
- {
- wxTheApp->s_captureWindow = NULL ;
- if ( wxBusyCursorCount == 0 )
- {
- m_windowCursor.MacInstall() ;
- }
- }
- }
- else
- {
- MacDispatchMouseEvent( event ) ;
- }
-}
-
-void wxWindow::MacMouseDown( EventRecord *ev , short part)
-{
- MacFireMouseEvent( ev ) ;
-}
-
-void wxWindow::MacMouseUp( EventRecord *ev , short part)
-{
- WindowPtr frontWindow ;
- switch (part)
- {
- case inContent:
- {
- MacFireMouseEvent( ev ) ;
- }
- break ;
- }
-}
-
-void wxWindow::MacMouseMoved( EventRecord *ev , short part)
-{
- WindowPtr frontWindow ;
- switch (part)
- {
- case inContent:
- {
- MacFireMouseEvent( ev ) ;
- }
- break ;
- }
-}
-void wxWindow::MacActivate( EventRecord *ev , bool inIsActivating )
-{
- wxActivateEvent event(wxEVT_ACTIVATE, inIsActivating);
- event.m_timeStamp = ev->when ;
- event.SetEventObject(this);
-
- GetEventHandler()->ProcessEvent(event);
-
- UMAHighlightAndActivateWindow( m_macWindowData->m_macWindow , inIsActivating ) ;
-}
-
-void wxWindow::MacRedraw( RgnHandle updatergn , long time)
-{
- // updatergn is always already clipped to our boundaries
- WindowRef window = GetMacRootWindow() ;
- wxWindow* win = wxFindWinFromMacWindow( window ) ;
- {
- wxMacDrawingClientHelper focus( this ) ;
- if ( focus.Ok() )
- {
- WindowRef window = GetMacRootWindow() ;
- 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 ) ))
- {
- ApplyThemeBackground (kThemeBackgroundTabPane, &(**updatergn).rgnBBox , 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()) ;
- }
- SetClip( updatergn ) ;
- EraseRgn( updatergn ) ;
- }
- }
-
-
- m_updateRegion = updatergn ;
- wxPaintEvent event;
- event.m_timeStamp = time ;
- event.SetEventObject(this);
-
- GetEventHandler()->ProcessEvent(event);
-
- RgnHandle childupdate = NewRgn() ;
-
- for (wxNode *node = m_children->First(); node; node = node->Next())
- {
- wxWindow *child = (wxWindow*)node->Data();
- int width ;
- int height ;
-
- child->GetClientSize( &width , &height ) ;
-
- SetRectRgn( childupdate , child->m_x , child->m_y , child->m_x +width , child->m_y + height ) ;
- SectRgn( childupdate , m_updateRegion.GetWXHRGN() , childupdate ) ;
- OffsetRgn( childupdate , -child->m_x , -child->m_y ) ;
- if ( child->GetMacRootWindow() == window && child->IsReallyShown() )
- {
- // because dialogs may also be children
- child->MacRedraw( childupdate , time ) ;
- }
- }
- DisposeRgn( childupdate ) ;
- // eventually a draw grow box here
-}
-
-void wxWindow::MacUpdateImmediately()
-{
- WindowRef window = GetMacRootWindow() ;
- if ( window )
- {
- wxWindow* win = wxFindWinFromMacWindow( window ) ;
- BeginUpdate( window ) ;
- if ( win )
- {
- #if ! TARGET_CARBON
- if ( !EmptyRgn( window->visRgn ) )
- #endif
- {
- win->MacRedraw( window->visRgn , wxTheApp->sm_lastMessageTime ) ;
-/*
- {
- wxMacDrawingHelper help( win ) ;
- SetOrigin( 0 , 0 ) ;
- UMASetThemeWindowBackground( win->m_macWindowData->m_macWindow , kThemeBrushDialogBackgroundActive , false ) ;
- UMAUpdateControls( window , window->visRgn ) ;
- UMASetThemeWindowBackground( win->m_macWindowData->m_macWindow , win->m_macWindowData->m_macWindowBackgroundTheme , false ) ;
- }
-*/
- }
- }
- EndUpdate( window ) ;
- }
-}
-
-void wxWindow::MacUpdate( EventRecord *ev )
-{
- WindowRef window = (WindowRef) ev->message ;
- wxWindow * win = wxFindWinFromMacWindow( window ) ;
-
- BeginUpdate( window ) ;
- if ( win )
- {
- // if windowshade gives incompatibility , take the follwing out
- #if ! TARGET_CARBON
- if ( !EmptyRgn( window->visRgn ) )
- #endif
- {
- MacRedraw( window->visRgn , ev->when ) ;
- /*
- {
- wxMacDrawingHelper help( this ) ;
- SetOrigin( 0 , 0 ) ;
- UMASetThemeWindowBackground( m_macWindowData->m_macWindow , kThemeBrushDialogBackgroundActive , false ) ;
- UMAUpdateControls( window , window->visRgn ) ;
- UMASetThemeWindowBackground( m_macWindowData->m_macWindow , m_macWindowData->m_macWindowBackgroundTheme , false ) ;
- }
- */
- }
- }
- EndUpdate( window ) ;
-}
-
-WindowRef wxWindow::GetMacRootWindow() const