X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/94abc21fded690b2c29b85f6f6b8e6902fc6c77a..818503a1826c8d32340234318afe6de35f756c2f:/src/mac/window.cpp diff --git a/src/mac/window.cpp b/src/mac/window.cpp index dfd0938dd9..ce34604fa1 100644 --- a/src/mac/window.cpp +++ b/src/mac/window.cpp @@ -46,6 +46,10 @@ #define MAC_SCROLLBAR_SIZE 16 #include "wx/mac/uma.h" +#ifndef __DARWIN__ +#include +#include +#endif #if wxUSE_DRAG_AND_DROP #include "wx/dnd.h" @@ -120,10 +124,6 @@ void wxWindowMac::Init() m_hScrollBar = NULL ; m_vScrollBar = NULL ; - -#if wxUSE_DRAG_AND_DROP - m_pDropTarget = NULL; -#endif } // Destructor @@ -209,7 +209,7 @@ void wxWindowMac::SetFocus() wxControl* control = wxDynamicCast( gFocusWindow , wxControl ) ; if ( control && control->GetMacControl() ) { - UMASetKeyboardFocus( gFocusWindow->MacGetRootWindow() , control->GetMacControl() , kControlFocusNoPart ) ; + UMASetKeyboardFocus( (WindowRef) gFocusWindow->MacGetRootWindow() , (ControlHandle) control->GetMacControl() , kControlFocusNoPart ) ; control->MacRedrawControl() ; } #endif @@ -234,7 +234,7 @@ void wxWindowMac::SetFocus() wxControl* control = wxDynamicCast( gFocusWindow , wxControl ) ; if ( control && control->GetMacControl() ) { - UMASetKeyboardFocus( gFocusWindow->MacGetRootWindow() , control->GetMacControl() , kControlEditTextPart ) ; + UMASetKeyboardFocus( (WindowRef) gFocusWindow->MacGetRootWindow() , (ControlHandle) control->GetMacControl() , kControlEditTextPart ) ; } #endif wxFocusEvent event(wxEVT_SET_FOCUS, m_windowId); @@ -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 ; } @@ -273,12 +273,12 @@ void wxWindowMac::ReleaseMouse() void wxWindowMac::SetDropTarget(wxDropTarget *pDropTarget) { - if ( m_pDropTarget != 0 ) { - delete m_pDropTarget; + if ( m_dropTarget != 0 ) { + delete m_dropTarget; } - m_pDropTarget = pDropTarget; - if ( m_pDropTarget != 0 ) + m_dropTarget = pDropTarget; + if ( m_dropTarget != 0 ) { // TODO } @@ -322,8 +322,8 @@ bool wxWindowMac::DoPopupMenu(wxMenu *menu, int x, int y) menu->UpdateUI(); ClientToScreen( &x , &y ) ; - ::InsertMenu( menu->GetHMenu() , -1 ) ; - long menuResult = ::PopUpMenuSelect(menu->GetHMenu() ,y,x, 0) ; + ::InsertMenu( (MenuHandle) menu->GetHMenu() , -1 ) ; + long menuResult = ::PopUpMenuSelect((MenuHandle) menu->GetHMenu() ,y,x, 0) ; menu->MacMenuSelect( this , TickCount() , HiWord(menuResult) , LoWord(menuResult) ) ; ::DeleteMenu( menu->MacGetMenuId() ) ; menu->SetInvokingWindow(NULL); @@ -334,7 +334,7 @@ bool wxWindowMac::DoPopupMenu(wxMenu *menu, int x, int y) void wxWindowMac::DoScreenToClient(int *x, int *y) const { - WindowRef window = MacGetRootWindow() ; + WindowRef window = (WindowRef) MacGetRootWindow() ; Point localwhere = {0,0} ; @@ -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 = MacGetRootWindow() ; + 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 ; @@ -366,7 +375,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 ; @@ -556,30 +565,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 @@ -682,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) @@ -698,7 +694,7 @@ bool wxWindowMac::Show(bool show) MacSuperShown( show ) ; if ( !show ) { - WindowRef window = MacGetRootWindow() ; + WindowRef window = (WindowRef) MacGetRootWindow() ; wxWindowMac* win = wxFindWinFromMacWindow( window ) ; if ( win && !win->m_isBeingDeleted ) Refresh() ; @@ -876,17 +872,17 @@ void wxWindowMac::WarpPointer (int x_pos, int y_pos) const wxBrush& wxWindowMac::MacGetBackgroundBrush() { - if ( m_backgroundColour == wxSystemSettings::GetSystemColour(wxSYS_COLOUR_APPWORKSPACE) ) + if ( m_backgroundColour == wxSystemSettings::GetColour(wxSYS_COLOUR_APPWORKSPACE) ) { m_macBackgroundBrush.SetMacTheme( kThemeBrushDocumentWindowBackground ) ; } - else if ( m_backgroundColour == wxSystemSettings::GetSystemColour(wxSYS_COLOUR_3DFACE ) ) + else if ( m_backgroundColour == wxSystemSettings::GetColour(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() ; + WindowRef window = (WindowRef) MacGetRootWindow() ; wxWindowMac* parent = GetParent() ; while( parent ) @@ -899,8 +895,8 @@ const wxBrush& wxWindowMac::MacGetBackgroundBrush() } { - if ( parent->m_backgroundColour != wxSystemSettings::GetSystemColour(wxSYS_COLOUR_3DFACE ) - && parent->m_backgroundColour != wxSystemSettings::GetSystemColour(wxSYS_COLOUR_APPWORKSPACE) ) + if ( parent->m_backgroundColour != wxSystemSettings::GetColour(wxSYS_COLOUR_3DFACE ) + && parent->m_backgroundColour != wxSystemSettings::GetColour(wxSYS_COLOUR_APPWORKSPACE) ) { // if we have any other colours in the hierarchy m_macBackgroundBrush.SetColour( parent->m_backgroundColour ) ; @@ -909,7 +905,17 @@ const wxBrush& wxWindowMac::MacGetBackgroundBrush() // 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 ) )) { - m_macBackgroundBrush.SetMacThemeBackground( kThemeBackgroundTabPane ) ; // todo eventually change for inactive + 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 , (WXRECTPTR) &extent ) ; // todo eventually change for inactive break ; } } @@ -936,11 +942,10 @@ void wxWindowMac::OnEraseBackground(wxEraseEvent& event) void wxWindowMac::OnNcPaint( wxNcPaintEvent& event ) { - wxMacDrawingHelper focus( this ) ; - if ( focus.Ok() ) - { - MacPaintBorders() ; - } + wxWindowDC dc(this) ; + wxMacPortSetter helper(&dc) ; + + MacPaintBorders( dc.m_macLocalOrigin.x , dc.m_macLocalOrigin.y) ; } int wxWindowMac::GetScrollPos(int orient) const @@ -1004,7 +1009,7 @@ void wxWindowMac::SetScrollPos(int orient, int pos, bool refresh) } } -void wxWindowMac::MacPaintBorders( ) +void wxWindowMac::MacPaintBorders( int left , int top ) { if( IsTopLevel() ) return ; @@ -1018,50 +1023,50 @@ 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 } ; - 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( 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 ) ; } @@ -1111,23 +1116,24 @@ 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 ) ; - InvalWindowRgn( MacGetRootWindow() , updateRgn ) ; + InvalWindowRgn( (WindowRef) MacGetRootWindow() , updateRgn ) ; DisposeRgn( updateRgn ) ; } @@ -1303,16 +1309,28 @@ wxWindowMac* wxWindowMac::s_lastMouseWindow = NULL ; bool wxWindowMac::MacGetWindowFromPointSub( const wxPoint &point , wxWindowMac** outWin ) { - if ((point.x < m_x) || (point.y < m_y) || - (point.x > (m_x + m_width)) || (point.y > (m_y + m_height))) - return FALSE; + if ( IsTopLevel() ) + { + if ((point.x < 0) || (point.y < 0) || + (point.x > (m_width)) || (point.y > (m_height))) + return FALSE; + } + else + { + if ((point.x < m_x) || (point.y < m_y) || + (point.x > (m_x + m_width)) || (point.y > (m_y + m_height))) + return FALSE; + } - WindowRef window = MacGetRootWindow() ; + WindowRef window = (WindowRef) MacGetRootWindow() ; wxPoint newPoint( point ) ; - newPoint.x -= m_x; - newPoint.y -= m_y; + if ( !IsTopLevel() ) + { + newPoint.x -= m_x; + newPoint.y -= m_y; + } for (wxNode *node = GetChildren().First(); node; node = node->Next()) { @@ -1332,16 +1350,27 @@ 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 ) - { - win->ScreenToClient( point ) ; + + wxWindowMac* win = wxFindWinFromMacWindow( window ) ; + if ( win ) + { + // 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 ) ; - } + } } return FALSE ; } @@ -1358,7 +1387,7 @@ bool wxWindowMac::MacDispatchMouseEvent(wxMouseEvent& event) if ( IsKindOf( CLASSINFO ( wxStaticBox ) ) ) return FALSE ; - WindowRef window = MacGetRootWindow() ; + WindowRef window = (WindowRef) MacGetRootWindow() ; event.m_x -= m_x; event.m_y -= m_y; @@ -1397,7 +1426,9 @@ bool wxWindowMac::MacDispatchMouseEvent(wxMouseEvent& event) || event.GetEventType() == wxEVT_LEAVE_WINDOW ) wxToolTip::RelayEvent( this , event); #endif // wxUSE_TOOLTIPS + GetEventHandler()->ProcessEvent( event ) ; + return TRUE; } @@ -1414,13 +1445,21 @@ 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 { wxTopLevelWindowMac* win = NULL ; - WindowRef window = MacGetRootWindow() ; + WindowRef window = (WindowRef) MacGetRootWindow() ; if ( window ) { win = wxFindWinFromMacWindow( window ) ; @@ -1431,30 +1470,53 @@ wxTopLevelWindowMac* wxWindowMac::MacGetTopLevelWindow() const const wxRegion& wxWindowMac::MacGetVisibleRegion() { RgnHandle visRgn = NewRgn() ; + RgnHandle tempRgn = NewRgn() ; SetRectRgn( visRgn , 0 , 0 , m_width , m_height ) ; - if ( GetWindowStyle() & wxCLIP_CHILDREN ) + //TODO : as soon as the new scheme has proven to work correctly, move this to wxStaticBox + if ( IsKindOf( CLASSINFO( wxStaticBox ) ) ) { - // subtract all children from updatergn + int borderTop = 14 ; + int borderOther = 4 ; + + SetRectRgn( tempRgn , borderOther , borderTop , m_width - borderOther , m_height - borderOther ) ; + DiffRgn( visRgn , tempRgn , visRgn ) ; + } - RgnHandle childarea = NewRgn() ; + if ( !IsTopLevel() ) + { + 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( childarea , child->m_x , child->m_y , child->m_x + child->m_width , child->m_y + child->m_height ) ; - DiffRgn( visRgn , childarea , visRgn ) ; + SetRectRgn( tempRgn , child->m_x , child->m_y , child->m_x + child->m_width , child->m_y + child->m_height ) ; + DiffRgn( visRgn , tempRgn , visRgn ) ; } } - DisposeRgn( childarea ) ; } if ( (GetWindowStyle() & wxCLIP_SIBLINGS) && GetParent() ) { - RgnHandle siblingarea = NewRgn() ; bool thisWindowThrough = false ; for (wxNode *node = GetParent()->GetChildren().First(); node; node = node->Next()) { @@ -1471,30 +1533,31 @@ const wxRegion& wxWindowMac::MacGetVisibleRegion() if ( !sibling->IsTopLevel() && sibling->IsShown() ) { - SetRectRgn( siblingarea , 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 , siblingarea , visRgn ) ; + 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 ) ; } } - DisposeRgn( siblingarea ) ; } m_macVisibleRegion = visRgn ; DisposeRgn( visRgn ) ; + DisposeRgn( tempRgn ) ; return m_macVisibleRegion ; } -void wxWindowMac::MacRedraw( RgnHandle updatergn , long time, bool erase) +void wxWindowMac::MacRedraw( WXHRGN updatergnr , long time, bool erase) { + RgnHandle updatergn = (RgnHandle) updatergnr ; // updatergn is always already clipped to our boundaries // it is in window coordinates, not in client coordinates - WindowRef window = MacGetRootWindow() ; + WindowRef window = (WindowRef) MacGetRootWindow() ; { // ownUpdateRgn is the area that this window has to repaint, it is in window coordinates RgnHandle ownUpdateRgn = NewRgn() ; CopyRgn( updatergn , ownUpdateRgn ) ; - SectRgn( ownUpdateRgn , MacGetVisibleRegion().GetWXHRGN() , ownUpdateRgn ) ; + SectRgn( ownUpdateRgn , (RgnHandle) MacGetVisibleRegion().GetWXHRGN() , ownUpdateRgn ) ; // newupdate is the update region in client coordinates RgnHandle newupdate = NewRgn() ; @@ -1550,7 +1613,7 @@ void wxWindowMac::MacRedraw( RgnHandle updatergn , long time, bool erase) } -WindowRef wxWindowMac::MacGetRootWindow() const +WXHWND wxWindowMac::MacGetRootWindow() const { wxWindowMac *iter = (wxWindowMac*)this ; @@ -1683,7 +1746,7 @@ bool wxWindowMac::AcceptsFocus() const return MacCanFocus() && wxWindowBase::AcceptsFocus(); } -ControlHandle wxWindowMac::MacGetContainerForEmbedding() +WXWidget wxWindowMac::MacGetContainerForEmbedding() { return GetParent()->MacGetContainerForEmbedding() ; } @@ -1713,105 +1776,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() ) @@ -1819,23 +1783,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) { @@ -1867,84 +1831,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)