X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/9c641c057ce32ffcb7120eae76d582376d19eede..c9fdc1071b06ebe6f2e075f3059d092756d9211b:/src/mac/control.cpp diff --git a/src/mac/control.cpp b/src/mac/control.cpp index f3973a3190..9ee03b8a4e 100644 --- a/src/mac/control.cpp +++ b/src/mac/control.cpp @@ -19,6 +19,7 @@ #include "wx/panel.h" #include "wx/app.h" #include "wx/dc.h" +#include "wx/dcclient.h" #include "wx/notebook.h" #include "wx/tabctrl.h" #include "wx/radiobox.h" @@ -332,6 +333,7 @@ void wxControl::MacPostControlCreate() SetSize(pos.x, pos.y, new_size.x, new_size.y); UMAShowControl( m_macControl ) ; + Refresh() ; } void wxControl::MacAdjustControlRect() @@ -386,11 +388,7 @@ void wxControl::MacAdjustControlRect() m_height += 2 * m_macVerticalBorder; } - wxMacDrawingHelper helper ( wxFindWinFromMacWindow( GetMacRootWindow() ) ) ; - if ( helper.Ok() ) - { - UMASizeControl( m_macControl , m_width - 2 * m_macHorizontalBorder, m_height - 2 * m_macVerticalBorder ) ; - } + UMASizeControl( m_macControl , m_width - 2 * m_macHorizontalBorder, m_height - 2 * m_macVerticalBorder ) ; } } ControlHandle wxControl::MacGetContainerForEmbedding() @@ -411,14 +409,12 @@ void wxControl::MacSuperChangedPosition() int former_mac_y = contrlRect.top ; int mac_x = m_x ; int mac_y = m_y ; - GetParent()->MacClientToRootWindow( & mac_x , & mac_y ) ; + GetParent()->MacWindowToRootWindow( & mac_x , & mac_y ) ; - WindowRef rootwindow = GetMacRootWindow() ; - wxWindow* wxrootwindow = wxFindWinFromMacWindow( rootwindow ) ; - ::SetThemeWindowBackground( rootwindow , kThemeBrushDialogBackgroundActive , false ) ; - wxMacDrawingHelper focus( wxrootwindow ) ; - - if ( mac_x != former_mac_x || mac_y != former_mac_y ) + WindowRef rootwindow = MacGetRootWindow() ; + + if ( mac_x + m_macHorizontalBorder != former_mac_x || + mac_y + m_macVerticalBorder != former_mac_y ) { { Rect inval = { former_mac_y , former_mac_x , former_mac_y + m_height , former_mac_x + m_width } ; @@ -430,13 +426,6 @@ void wxControl::MacSuperChangedPosition() InvalWindowRect( rootwindow , &inval ) ; } } - if ( wxrootwindow->IsKindOf( CLASSINFO( wxDialog ) ) ) - { - } - else - { - ::SetThemeWindowBackground( rootwindow , kThemeBrushDocumentWindowBackground , false ) ; - } } wxWindow::MacSuperChangedPosition() ; @@ -444,36 +433,8 @@ void wxControl::MacSuperChangedPosition() void wxControl::MacSuperEnabled( bool enabled ) { -/* - if ( m_macControl ) - { - if ( UMAHasAppearance() ) - { - if ( !enabled ) - { - ::DeactivateControl( m_macControl ) ; - } - else - { - if ( m_macEnabled ) - ::ActivateControl( m_macControl ) ; - } - } - else - { - if ( !enabled ) - { - ::HiliteControl( m_macControl , 255 ) ; - } - else - { - if ( m_macEnabled ) - ::HiliteControl( m_macControl , 0 ) ; - } - } - } + Refresh(FALSE) ; wxWindow::MacSuperEnabled( enabled ) ; -*/ } void wxControl::MacSuperShown( bool show ) @@ -484,7 +445,7 @@ void wxControl::MacSuperShown( bool show ) { if ( m_macControlIsShown ) { - ::HideControl( m_macControl ) ; + ::UMAHideControl( m_macControl ) ; m_macControlIsShown = false ; } } @@ -547,12 +508,12 @@ void wxControl::DoSetSize(int x, int y, if (height == -1) new_height = size.y; } } - // AdjustForParentClientOrigin(new_x, new_y, sizeFlags); + AdjustForParentClientOrigin(new_x, new_y, sizeFlags); mac_x = new_x; mac_y = new_y; if(GetParent()) { - GetParent()->MacClientToRootWindow(&mac_x, &mac_y); + GetParent()->MacWindowToRootWindow(&mac_x, &mac_y); } GetControlBounds(m_macControl, &oldbounds); oldbounds.right = oldbounds.left + m_width; @@ -574,6 +535,8 @@ void wxControl::DoSetSize(int x, int y, if ( doMove || doResize ) { + Refresh() ; + // Ensure resize is within constraints if ((m_minWidth != -1) && (new_width < m_minWidth)) { new_width = m_minWidth; @@ -595,7 +558,7 @@ void wxControl::DoSetSize(int x, int y, UMAMoveControl(m_macControl, mac_x + m_macHorizontalBorder, mac_y + m_macVerticalBorder); - + wxMoveEvent event(wxPoint(m_x, m_y), m_windowId); event.SetEventObject(this); GetEventHandler()->ProcessEvent(event) ; @@ -615,23 +578,7 @@ void wxControl::DoSetSize(int x, int y, GetEventHandler()->ProcessEvent(event); } - // Set up port - WindowRef rootwindow = GetMacRootWindow() ; - wxWindow* wxrootwindow = wxFindWinFromMacWindow( rootwindow ) ; - wxMacDrawingHelper focus( wxrootwindow ); - - ::SetThemeWindowBackground( rootwindow , kThemeBrushDialogBackgroundActive , false ) ; - // Update window at old and new positions - SetRect(&newbounds, m_x, m_y, m_x + m_width, m_y + m_height); - InvalWindowRect( rootwindow , &oldbounds ); - InvalWindowRect( rootwindow , &newbounds ); - - MacRepositionScrollBars() ; - - if ( !wxrootwindow->IsKindOf( CLASSINFO( wxDialog ) ) ) - { - ::SetThemeWindowBackground( rootwindow, kThemeBrushDocumentWindowBackground, false ); - } + Refresh() ; } } @@ -646,7 +593,7 @@ bool wxControl::Show(bool show) { if ( m_macControlIsShown ) { - ::HideControl( m_macControl ) ; + ::UMAHideControl( m_macControl ) ; m_macControlIsShown = false ; } } @@ -679,53 +626,24 @@ bool wxControl::Enable(bool enable) void wxControl::Refresh(bool eraseBack, const wxRect *rect) { - if ( m_macControl ) - { - wxWindow::Refresh( eraseBack , rect ) ; - } - else - { wxWindow::Refresh( eraseBack , rect ) ; - } } void wxControl::MacRedrawControl() { - if ( m_macControl ) + if ( m_macControl && MacGetRootWindow() ) { - WindowRef window = GetMacRootWindow() ; - if ( window ) - { - wxWindow* win = wxFindWinFromMacWindow( window ) ; - if ( win ) - { - wxMacDrawingHelper help( win ) ; - // the mac control manager always assumes to have the origin at 0,0 - SetOrigin( 0 , 0 ) ; - - wxWindow* parent = GetParent() ; - while ( parent ) - { - if( parent->MacGetWindowData() ) - { - ::SetThemeWindowBackground( win->MacGetWindowData()->m_macWindow , kThemeBrushDialogBackgroundActive , false ) ; - break ; - } - - if( parent->IsKindOf( CLASSINFO( wxNotebook ) ) || parent->IsKindOf( CLASSINFO( wxTabCtrl ) )) - { - if ( ((wxControl*)parent)->m_macControl ) - SetUpControlBackground( ((wxControl*)parent)->m_macControl , -1 , true ) ; - break ; - } - - parent = parent->GetParent() ; - } - - UMADrawControl( m_macControl ) ; - ::SetThemeWindowBackground( win->MacGetWindowData()->m_macWindow , win->MacGetWindowData()->m_macWindowBackgroundTheme , false ) ; - } - } + wxClientDC dc(this) ; + wxMacPortSetter helper(&dc) ; + + // the controls sometimes draw outside their boundaries, this + // should be resolved differently but is not trivial (e.g. drop shadows) + // since adding them to the border would yield in enormous gaps between + // the controls + Rect r = { 0 , 0 , 32000 , 32000 } ; + ClipRect( &r ) ; + wxDC::MacSetupBackgroundForCurrentPort( MacGetBackgroundBrush() ) ; + UMADrawControl( m_macControl ) ; } } @@ -733,51 +651,26 @@ void wxControl::OnPaint(wxPaintEvent& event) { if ( m_macControl ) { - WindowRef window = GetMacRootWindow() ; - if ( window ) - { - wxWindow* win = wxFindWinFromMacWindow( window ) ; - if ( win ) - { - wxMacDrawingHelper help( win ) ; - // the mac control manager always assumes to have the origin at 0,0 - SetOrigin( 0 , 0 ) ; - - wxWindow* parent = GetParent() ; - while ( parent ) - { - if( parent->MacGetWindowData() ) - { - ::SetThemeWindowBackground( win->MacGetWindowData()->m_macWindow , kThemeBrushDialogBackgroundActive , false ) ; - break ; - } - - if( parent->IsKindOf( CLASSINFO( wxNotebook ) ) || parent->IsKindOf( CLASSINFO( wxTabCtrl ) )) - { - if ( ((wxControl*)parent)->m_macControl ) - SetUpControlBackground( ((wxControl*)parent)->m_macControl , -1 , true ) ; - break ; - } - - parent = parent->GetParent() ; - } - - UMADrawControl( m_macControl ) ; - ::SetThemeWindowBackground( win->MacGetWindowData()->m_macWindow , win->MacGetWindowData()->m_macWindowBackgroundTheme , false ) ; - } - } + wxPaintDC dc(this) ; + wxMacPortSetter helper(&dc) ; + // the controls sometimes draw outside their boundaries, this + // should be resolved differently but is not trivial (e.g. drop shadows) + // since adding them to the border would yield in enormous gaps between + // the controls + Rect r = { 0 , 0 , 32000 , 32000 } ; + ClipRect( &r ) ; + + wxDC::MacSetupBackgroundForCurrentPort( MacGetBackgroundBrush() ) ; + UMADrawControl( m_macControl ) ; } else { - // wxWindow::OnPaint( event ) ; + event.Skip() ; } } void wxControl::OnEraseBackground(wxEraseEvent& event) { - // In general, you don't want to erase the background of a control, - // or you'll get a flicker. - // TODO: move this 'null' function into each control that - // might flicker. + wxWindow::OnEraseBackground( event ) ; } @@ -814,7 +707,7 @@ void wxControl::OnMouseEvent( wxMouseEvent &event ) ControlHandle control ; Point localwhere ; SInt16 controlpart ; - WindowRef window = GetMacRootWindow() ; + WindowRef window = MacGetRootWindow() ; localwhere.h = x ; localwhere.v = y ;