X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/66a09d4776b8ae390d5aa51dbd678b694f2c81d6..4b04699b670b4ab4632229fa0264d154acd3bec1:/src/mac/carbon/window.cpp diff --git a/src/mac/carbon/window.cpp b/src/mac/carbon/window.cpp index 61286ac4ec..fd36642550 100644 --- a/src/mac/carbon/window.cpp +++ b/src/mac/carbon/window.cpp @@ -254,7 +254,7 @@ bool wxWindowMac::Enable(bool enable) return TRUE; } -void wxWindowMac::CaptureMouse() +void wxWindowMac::DoCaptureMouse() { wxTheApp->s_captureWindow = this ; } @@ -264,7 +264,7 @@ wxWindow* wxWindowBase::GetCapture() return wxTheApp->s_captureWindow ; } -void wxWindowMac::ReleaseMouse() +void wxWindowMac::DoReleaseMouse() { wxTheApp->s_captureWindow = NULL ; } @@ -350,14 +350,23 @@ void wxWindowMac::DoScreenToClient(int *x, int *y) const if(x) *x = localwhere.h ; if(y) *y = localwhere.v ; - MacRootWindowToClient( x , y ) ; + MacRootWindowToWindow( x , y ) ; + if ( x ) + x -= MacGetLeftBorderSize() ; + if ( y ) + y -= MacGetTopBorderSize() ; } void wxWindowMac::DoClientToScreen(int *x, int *y) const { WindowRef window = (WindowRef) MacGetRootWindow() ; - MacClientToRootWindow( x , y ) ; + if ( x ) + x += MacGetLeftBorderSize() ; + if ( y ) + y += MacGetTopBorderSize() ; + + MacWindowToRootWindow( x , y ) ; Point localwhere = { 0,0 }; if(x) localwhere.h = * x ; @@ -669,12 +678,12 @@ wxPoint wxWindowMac::GetClientAreaOrigin() const void wxWindow::SetTitle(const wxString& title) { - m_label = title ; + m_label = title ; } wxString wxWindow::GetTitle() const { - return m_label ; + return m_label ; } bool wxWindowMac::Show(bool show) @@ -1014,17 +1023,17 @@ void wxWindowMac::MacPaintBorders( int left , int top ) if (HasFlag(wxRAISED_BORDER) || HasFlag( wxSUNKEN_BORDER) || HasFlag(wxDOUBLE_BORDER) ) { #if wxMAC_USE_THEME_BORDER - Rect rect = { top , left , m_height + top , m_width + left } ; - SInt32 border = 0 ; - /* - GetThemeMetric( kThemeMetricListBoxFrameOutset , &border ) ; - InsetRect( &rect , border , border ); + Rect rect = { top , left , m_height + top , m_width + left } ; + SInt32 border = 0 ; + /* + GetThemeMetric( kThemeMetricListBoxFrameOutset , &border ) ; + InsetRect( &rect , border , border ); DrawThemeListBoxFrame(&rect,IsEnabled() ? kThemeStateActive : kThemeStateInactive) ; */ DrawThemePrimaryGroup(&rect ,IsEnabled() ? kThemeStateActive : kThemeStateInactive) ; #else - bool sunken = HasFlag( wxSUNKEN_BORDER ) ; + bool sunken = HasFlag( wxSUNKEN_BORDER ) ; RGBForeColor( &face ); MoveTo( left + 0 , top + m_height - 2 ); LineTo( left + 0 , top + 0 ); @@ -1057,12 +1066,22 @@ void wxWindowMac::MacPaintBorders( int left , int top ) } else if (HasFlag(wxSIMPLE_BORDER)) { - Rect rect = { top , left , m_height + top , m_width + left } ; + Rect rect = { top , left , m_height + top , m_width + left } ; RGBForeColor( &black ) ; FrameRect( &rect ) ; } } +void wxWindowMac::RemoveChild( wxWindowBase *child ) +{ + if ( child == m_hScrollBar ) + m_hScrollBar = NULL ; + if ( child == m_vScrollBar ) + m_vScrollBar = NULL ; + + wxWindowBase::RemoveChild( child ) ; +} + // New function that will replace some of the above. void wxWindowMac::SetScrollbar(int orient, int pos, int thumbVisible, int range, bool refresh) @@ -1341,14 +1360,25 @@ bool wxWindowMac::MacGetWindowFromPointSub( const wxPoint &point , wxWindowMac** bool wxWindowMac::MacGetWindowFromPoint( const wxPoint &screenpoint , wxWindowMac** outWin ) { WindowRef window ; + Point pt = { screenpoint.y , screenpoint.x } ; if ( ::FindWindow( pt , &window ) == 3 ) { - wxPoint point( screenpoint ) ; + wxWindowMac* win = wxFindWinFromMacWindow( window ) ; if ( win ) { - point = win->ScreenToClient( point ) ; + // No, this yields the CLIENT are, we need the whole frame. RR. + // point = win->ScreenToClient( point ) ; + + GrafPtr port; + ::GetPort( &port ) ; + ::SetPort( UMAGetWindowPort( window ) ) ; + ::GlobalToLocal( &pt ) ; + ::SetPort( port ) ; + + wxPoint point( pt.h, pt.v ) ; + return win->MacGetWindowFromPointSub( point , outWin ) ; } } @@ -1406,7 +1436,9 @@ bool wxWindowMac::MacDispatchMouseEvent(wxMouseEvent& event) || event.GetEventType() == wxEVT_LEAVE_WINDOW ) wxToolTip::RelayEvent( this , event); #endif // wxUSE_TOOLTIPS + GetEventHandler()->ProcessEvent( event ) ; + return TRUE; } @@ -1423,7 +1455,15 @@ void wxWindowMac::Update() { wxTopLevelWindowMac* win = MacGetTopLevelWindow( ) ; if ( win ) + { win->MacUpdate( 0 ) ; +#if TARGET_API_MAC_CARBON + if ( QDIsPortBuffered( GetWindowPort( (WindowRef) win->MacGetWindowRef() ) ) ) + { + QDFlushPortBuffer( GetWindowPort( (WindowRef) win->MacGetWindowRef() ) , NULL ) ; + } +#endif + } } wxTopLevelWindowMac* wxWindowMac::MacGetTopLevelWindow() const @@ -1753,23 +1793,23 @@ long wxWindowMac::MacGetLeftBorderSize( ) const if (m_windowStyle & wxRAISED_BORDER || m_windowStyle & wxSUNKEN_BORDER ) { - SInt32 border = 3 ; + SInt32 border = 3 ; #if wxMAC_USE_THEME_BORDER -#if TARGET_CARBON - GetThemeMetric( kThemeMetricListBoxFrameOutset , &border ) ; +#if TARGET_CARBON + GetThemeMetric( kThemeMetricListBoxFrameOutset , &border ) ; #endif #endif - return border ; + return border ; } else if ( m_windowStyle &wxDOUBLE_BORDER) { - SInt32 border = 3 ; + SInt32 border = 3 ; #if wxMAC_USE_THEME_BORDER -#if TARGET_CARBON - GetThemeMetric( kThemeMetricListBoxFrameOutset , &border ) ; +#if TARGET_CARBON + GetThemeMetric( kThemeMetricListBoxFrameOutset , &border ) ; #endif #endif - return border ; + return border ; } else if (m_windowStyle &wxSIMPLE_BORDER) {