From de0439842539961ed4a41781a7729227cfb6953e Mon Sep 17 00:00:00 2001 From: Stefan Csomor Date: Sun, 30 Dec 2001 12:24:16 +0000 Subject: [PATCH] drawing methods cleanup git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@13239 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- src/mac/carbon/control.cpp | 57 +++++------ src/mac/carbon/dcclient.cpp | 60 ++++++------ src/mac/carbon/listbox.cpp | 11 +-- src/mac/carbon/textctrl.cpp | 135 +------------------------- src/mac/carbon/toolbar.cpp | 87 ++++++----------- src/mac/carbon/window.cpp | 185 +++++++++--------------------------- src/mac/control.cpp | 57 +++++------ src/mac/dcclient.cpp | 60 ++++++------ src/mac/listbox.cpp | 11 +-- src/mac/textctrl.cpp | 135 +------------------------- src/mac/toolbar.cpp | 87 ++++++----------- src/mac/window.cpp | 185 +++++++++--------------------------- 12 files changed, 272 insertions(+), 798 deletions(-) diff --git a/src/mac/carbon/control.cpp b/src/mac/carbon/control.cpp index 1f62d46592..51504bfc21 100644 --- a/src/mac/carbon/control.cpp +++ b/src/mac/carbon/control.cpp @@ -387,11 +387,7 @@ void wxControl::MacAdjustControlRect() m_height += 2 * m_macVerticalBorder; } - wxMacDrawingHelper helper ( wxFindWinFromMacWindow( MacGetRootWindow() ) ) ; - 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() @@ -415,10 +411,7 @@ void wxControl::MacSuperChangedPosition() GetParent()->MacWindowToRootWindow( & mac_x , & mac_y ) ; WindowRef rootwindow = MacGetRootWindow() ; - wxWindow* wxrootwindow = wxFindWinFromMacWindow( rootwindow ) ; - wxMacDrawingHelper focus( wxrootwindow ) ; - if ( mac_x + m_macHorizontalBorder != former_mac_x || mac_y + m_macVerticalBorder != former_mac_y ) { @@ -637,20 +630,19 @@ void wxControl::Refresh(bool eraseBack, const wxRect *rect) void wxControl::MacRedrawControl() { - if ( m_macControl ) + if ( m_macControl && MacGetRootWindow() ) { - WindowRef window = MacGetRootWindow() ; - if ( window ) - { - wxWindow* win = wxFindWinFromMacWindow( window ) ; - if ( win ) - { - wxMacDrawingHelper help( win ) ; - // the mac control manager always assumes to have the origin at 0,0 - wxDC::MacSetupBackgroundForCurrentPort( MacGetBackgroundBrush() ) ; - UMADrawControl( m_macControl ) ; - } - } + 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 ) ; } } @@ -658,18 +650,17 @@ void wxControl::OnPaint(wxPaintEvent& event) { if ( m_macControl ) { - WindowRef window = MacGetRootWindow() ; - if ( window ) - { - wxWindow* win = wxFindWinFromMacWindow( window ) ; - if ( win ) - { - wxMacDrawingHelper help( win ) ; - // the mac control manager always assumes to have the origin at 0,0 - wxDC::MacSetupBackgroundForCurrentPort( MacGetBackgroundBrush() ) ; - UMADrawControl( m_macControl ) ; - } - } + 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 { diff --git a/src/mac/carbon/dcclient.cpp b/src/mac/carbon/dcclient.cpp index 6312bc3c82..fa2590f1bf 100644 --- a/src/mac/carbon/dcclient.cpp +++ b/src/mac/carbon/dcclient.cpp @@ -47,14 +47,15 @@ wxWindowDC::wxWindowDC() wxWindowDC::wxWindowDC(wxWindow *the_canvas) { - WindowRef windowref ; - wxWindowMac* rootwindow ; + wxTopLevelWindowMac* rootwindow = the_canvas->MacGetTopLevelWindow() ; + WindowRef windowref = rootwindow->MacGetWindowRef() ; - // this time it is really the full window - Rect clipRect ; - the_canvas->MacGetPortParams(&m_macLocalOrigin, &clipRect , &windowref , &rootwindow ); - SetRectRgn( m_macBoundaryClipRgn , clipRect.left , clipRect.top , clipRect.right , clipRect.bottom ) ; - SectRgn( m_macBoundaryClipRgn , the_canvas->MacGetVisibleRegion().GetWXHRGN() , m_macBoundaryClipRgn ) ; + int x , y ; + x = y = 0 ; + the_canvas->MacWindowToRootWindow( &x , &y ) ; + m_macLocalOrigin.h = x ; + m_macLocalOrigin.v = y ; + CopyRgn( the_canvas->MacGetVisibleRegion().GetWXHRGN() , m_macBoundaryClipRgn ) ; OffsetRgn( m_macBoundaryClipRgn , m_macLocalOrigin.h , m_macLocalOrigin.v ) ; CopyRgn( m_macBoundaryClipRgn , m_macCurrentClipRgn ) ; m_macPort = UMAGetWindowPort( windowref ) ; @@ -81,21 +82,23 @@ wxClientDC::wxClientDC() wxClientDC::wxClientDC(wxWindow *window) { - WindowRef windowref ; - wxWindowMac* rootwindow ; - - Rect clipRect ; + wxTopLevelWindowMac* rootwindow = window->MacGetTopLevelWindow() ; + WindowRef windowref = rootwindow->MacGetWindowRef() ; wxPoint origin = window->GetClientAreaOrigin() ; - - window->MacGetPortClientParams(&m_macLocalOrigin, &clipRect , &windowref , &rootwindow ); - SetRectRgn( m_macBoundaryClipRgn , clipRect.left + origin.x , clipRect.top + origin.y , clipRect.right + origin.x , clipRect.bottom + origin.y ) ; + wxSize size = window->GetClientSize() ; + int x , y ; + x = origin.x ; + y = origin.y ; + window->MacWindowToRootWindow( &x , &y ) ; + m_macLocalOrigin.h = x ; + m_macLocalOrigin.v = y ; + SetRectRgn( m_macBoundaryClipRgn , origin.x , origin.y , origin.x + size.x , origin.y + size.y ) ; SectRgn( m_macBoundaryClipRgn , window->MacGetVisibleRegion().GetWXHRGN() , m_macBoundaryClipRgn ) ; OffsetRgn( m_macBoundaryClipRgn , -origin.x , -origin.y ) ; OffsetRgn( m_macBoundaryClipRgn , m_macLocalOrigin.h , m_macLocalOrigin.v ) ; CopyRgn( m_macBoundaryClipRgn , m_macCurrentClipRgn ) ; m_macPort = UMAGetWindowPort( windowref ) ; m_minY = m_minX = 0; - wxSize size = window->GetSize() ; m_maxX = size.x ; m_maxY = size.y ; m_ok = TRUE ; @@ -117,32 +120,29 @@ wxPaintDC::wxPaintDC() wxPaintDC::wxPaintDC(wxWindow *window) { - WindowRef windowref ; - wxWindowMac* rootwindow ; - - Rect clipRect ; + wxTopLevelWindowMac* rootwindow = window->MacGetTopLevelWindow() ; + WindowRef windowref = rootwindow->MacGetWindowRef() ; wxPoint origin = window->GetClientAreaOrigin() ; - - window->MacGetPortClientParams(&m_macLocalOrigin, &clipRect , &windowref , &rootwindow ); - SetRectRgn( m_macBoundaryClipRgn , clipRect.left + origin.x , clipRect.top + origin.y , clipRect.right + origin.x , clipRect.bottom + origin.y ) ; + wxSize size = window->GetClientSize() ; + int x , y ; + x = origin.x ; + y = origin.y ; + window->MacWindowToRootWindow( &x , &y ) ; + m_macLocalOrigin.h = x ; + m_macLocalOrigin.v = y ; + SetRectRgn( m_macBoundaryClipRgn , origin.x , origin.y , origin.x + size.x , origin.y + size.y ) ; SectRgn( m_macBoundaryClipRgn , window->MacGetVisibleRegion().GetWXHRGN() , m_macBoundaryClipRgn ) ; OffsetRgn( m_macBoundaryClipRgn , -origin.x , -origin.y ) ; SectRgn( m_macBoundaryClipRgn , window->GetUpdateRegion().GetWXHRGN() , m_macBoundaryClipRgn ) ; OffsetRgn( m_macBoundaryClipRgn , m_macLocalOrigin.h , m_macLocalOrigin.v ) ; CopyRgn( m_macBoundaryClipRgn , m_macCurrentClipRgn ) ; m_macPort = UMAGetWindowPort( windowref ) ; - m_ok = TRUE ; - /* - wxCoord x , y ,w , h ; - window->GetUpdateRegion().GetBox( x , y , w , h ) ; m_minY = m_minX = 0; - wxSize size = window->GetSize() ; m_maxX = size.x ; m_maxY = size.y ; - SetClippingRegion( x , y , w , h ) ; - */ + m_ok = TRUE ; SetBackground(window->MacGetBackgroundBrush()); - SetFont(window->GetFont() ) ; + SetFont( window->GetFont() ) ; } wxPaintDC::~wxPaintDC() diff --git a/src/mac/carbon/listbox.cpp b/src/mac/carbon/listbox.cpp index 4358e40e2e..363d2245a9 100644 --- a/src/mac/carbon/listbox.cpp +++ b/src/mac/carbon/listbox.cpp @@ -162,6 +162,7 @@ bool wxListBox::Create(wxWindow *parent, wxWindowID id, macListDefUPP = NewListDefUPP( wxMacListDefinition ); } listDef.u.userProc = macListDefUPP ; + #if TARGET_CARBON Size asize; @@ -176,6 +177,7 @@ bool wxListBox::Create(wxWindow *parent, wxWindowID id, SetControlVisibility(m_macControl, false, false); #else + long result ; m_macControl = ::NewControl( parent->MacGetRootWindow() , &bounds , title , false , @@ -197,7 +199,6 @@ bool wxListBox::Create(wxWindow *parent, wxWindowID id, Point pt = (**m_macList).cellSize ; pt.v = 14 ; LCellSize( pt , m_macList ) ; - LAddColumn( 1 , 0 , m_macList ) ; #endif OptionBits options = 0; @@ -585,12 +586,8 @@ void wxListBox::SetupColours() void wxListBox::Refresh(bool eraseBack, const wxRect *rect) { - // Set up port - WindowRef rootwindow = MacGetRootWindow() ; - wxWindow* wxrootwindow = wxFindWinFromMacWindow( rootwindow ) ; - wxMacDrawingHelper focus( wxrootwindow ); - - UMADrawControl(m_macControl); + wxControl::Refresh( eraseBack , rect ) ; +// MacRedrawControl() ; } #if wxUSE_OWNER_DRAWN diff --git a/src/mac/carbon/textctrl.cpp b/src/mac/carbon/textctrl.cpp index 5ac79c5735..64d585d233 100644 --- a/src/mac/carbon/textctrl.cpp +++ b/src/mac/carbon/textctrl.cpp @@ -179,39 +179,7 @@ void wxTextCtrl::SetValue(const wxString& st) else value = st ; ::SetControlData( m_macControl, 0, ( m_windowStyle & wxTE_PASSWORD ) ? kControlEditTextPasswordTag : kControlEditTextTextTag , value.Length() , (char*) ((const char*)value) ) ; - WindowRef window = MacGetRootWindow() ; - if ( window ) - { - wxWindow* win = wxFindWinFromMacWindow( window ) ; - if ( win ) - { - wxMacDrawingHelper help( win ) ; - // the mac control manager always assumes to have the origin at 0,0 - - bool hasTabBehind = false ; - wxWindow* parent = GetParent() ; - while ( parent ) - { - if( parent->IsTopLevel() ) - { -// ::SetThemeWindowBackground( win->MacGetRootWindow() , kThemeBrushDialogBackgroundActive , false ) ; - break ; - } - - if( parent->IsKindOf( CLASSINFO( wxNotebook ) ) || parent->IsKindOf( CLASSINFO( wxTabCtrl ) )) - { - if ( ((wxControl*)parent)->GetMacControl() ) - SetUpControlBackground( ((wxControl*)parent)->GetMacControl() , -1 , true ) ; - break ; - } - - parent = parent->GetParent() ; - } - - UMADrawControl( m_macControl ) ; -// ::SetThemeWindowBackground( win->MacGetWindowData()->m_macWindow , win->MacGetWindowData()->m_macWindowBackgroundTheme , false ) ; - } - } + MacRedrawControl() ; } // Clipboard operations @@ -254,39 +222,7 @@ void wxTextCtrl::Paste() ::GetControlData( m_macControl , 0, kControlEditTextTEHandleTag , sizeof( TEHandle ) , (char*) &teH , &size ) ; TEFromScrap() ; TEPaste( teH ) ; - WindowRef window = MacGetRootWindow() ; - if ( window ) - { - wxWindow* win = wxFindWinFromMacWindow( window ) ; - if ( win ) - { - wxMacDrawingHelper help( win ) ; - // the mac control manager always assumes to have the origin at 0,0 - - bool hasTabBehind = false ; - wxWindow* parent = GetParent() ; - while ( parent ) - { - if( parent->IsTopLevel() ) - { -// ::SetThemeWindowBackground( win->MacGetWindowData()->m_macWindow , kThemeBrushDialogBackgroundActive , false ) ; - break ; - } - - if( parent->IsKindOf( CLASSINFO( wxNotebook ) ) || parent->IsKindOf( CLASSINFO( wxTabCtrl ) )) - { - if ( ((wxControl*)parent)->GetMacControl() ) - SetUpControlBackground( ((wxControl*)parent)->GetMacControl() , -1 , true ) ; - break ; - } - - parent = parent->GetParent() ; - } - - UMADrawControl( m_macControl ) ; -// ::SetThemeWindowBackground( win->MacGetWindowData()->m_macWindow , win->MacGetWindowData()->m_macWindowBackgroundTheme , false ) ; - } - } + MacRedrawControl() ; } } @@ -1885,39 +1821,7 @@ void wxTextCtrl::SetValue(const wxString& st) TXNSetData( (**tpvars).fTXNRec, kTXNTextData, (const char*)value, value.Length(), kTXNStartOffset, kTXNEndOffset); } - WindowRef window = MacGetRootWindow() ; - if ( window ) - { - wxWindow* win = wxFindWinFromMacWindow( window ) ; - if ( win ) - { - wxMacDrawingHelper help( win ) ; - // the mac control manager always assumes to have the origin at 0,0 - - bool hasTabBehind = false ; - wxWindow* parent = GetParent() ; - while ( parent ) - { - if( parent->MacGetWindowData() ) - { - UMASetThemeWindowBackground( win->MacGetWindowData()->m_macWindow , kThemeBrushDialogBackgroundActive , false ) ; - break ; - } - - if( parent->IsKindOf( CLASSINFO( wxNotebook ) ) || parent->IsKindOf( CLASSINFO( wxTabCtrl ) )) - { - if ( ((wxControl*)parent)->GetMacControl() ) - SetUpControlBackground( ((wxControl*)parent)->GetMacControl() , -1 , true ) ; - break ; - } - - parent = parent->GetParent() ; - } - - UMADrawControl( m_macControl ) ; - UMASetThemeWindowBackground( win->MacGetWindowData()->m_macWindow , win->MacGetWindowData()->m_macWindowBackgroundTheme , false ) ; - } - } + MacRedrawControl() ; } // Clipboard operations @@ -1976,38 +1880,7 @@ void wxTextCtrl::Paste() ::GetControlData( m_macControl , 0, kControlEditTextTEHandleTag , sizeof( TEHandle ) , (char*) &teH , &size ) ; TEFromScrap() ; TEPaste( teH ) ; - WindowRef window = MacGetRootWindow() ; - if ( window ) - { - wxWindow* win = wxFindWinFromMacWindow( window ) ; - if ( win ) - { - wxMacDrawingHelper help( win ) ; - // the mac control manager always assumes to have the origin at 0,0 - bool hasTabBehind = false ; - 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)->GetMacControl() ) - SetUpControlBackground( ((wxControl*)parent)->GetMacControl() , -1 , true ) ; - break ; - } - - parent = parent->GetParent() ; - } - - UMADrawControl( m_macControl ) ; - ::SetThemeWindowBackground( win->MacGetWindowData()->m_macWindow , win->MacGetWindowData()->m_macWindowBackgroundTheme , false ) ; - } - } + MacRedrawControl() ; } else { diff --git a/src/mac/carbon/toolbar.cpp b/src/mac/carbon/toolbar.cpp index 86020f988b..9604fbc2c1 100644 --- a/src/mac/carbon/toolbar.cpp +++ b/src/mac/carbon/toolbar.cpp @@ -168,13 +168,19 @@ bool wxToolBar::Realize() Point localOrigin ; Rect clipRect ; - WindowRef window ; + WindowRef window = MacGetRootWindow() ; wxWindow *win ; - GetParent()->MacGetPortParams( &localOrigin , &clipRect , &window , &win ) ; + int lx , ly ; + lx = ly = 0 ; + MacWindowToRootWindow( &lx , &ly ) ; + localOrigin.v = ly ; + localOrigin.h = lx ; + +// GetParent()->MacGetPortParams( &localOrigin , &clipRect , &window , &win ) ; - Rect toolbarrect = { m_y + localOrigin.v , m_x + localOrigin.h , - m_y + m_height + localOrigin.v , m_x + m_width + localOrigin.h} ; + Rect toolbarrect = { localOrigin.v ,localOrigin.h , + m_height + localOrigin.v , m_width + localOrigin.h} ; ControlFontStyleRec controlstyle ; controlstyle.flags = kControlUseFontMask ; @@ -378,11 +384,16 @@ void wxToolBar::MacSuperChangedPosition() Rect clipRect ; WindowRef window ; wxWindow *win ; + int lx , ly ; + lx = ly = 0 ; + MacWindowToRootWindow( &lx , &ly ) ; + localOrigin.v = ly ; + localOrigin.h = lx ; - GetParent()->MacGetPortParams( &localOrigin , &clipRect , &window , &win ) ; +// GetParent()->MacGetPortParams( &localOrigin , &clipRect , &window , &win ) ; - Rect toolbarrect = { m_y + localOrigin.v , m_x + localOrigin.h , - m_y + m_height + localOrigin.v , m_x + m_width + localOrigin.h} ; + Rect toolbarrect = { localOrigin.v ,localOrigin.h , + m_height + localOrigin.v , m_width + localOrigin.h} ; ControlFontStyleRec controlstyle ; controlstyle.flags = kControlUseFontMask ; @@ -399,10 +410,7 @@ void wxToolBar::MacSuperChangedPosition() int maxHeight = 0 ; int toolcount = 0 ; { - WindowRef rootwindow = MacGetRootWindow() ; - wxWindow* wxrootwindow = wxFindWinFromMacWindow( rootwindow ) ; - ::SetThemeWindowBackground( rootwindow , kThemeBrushDialogBackgroundActive , false ) ; - wxMacDrawingHelper focus( wxrootwindow ) ; + WindowRef rootwindow = MacGetRootWindow() ; while (node) { wxToolBarTool *tool = (wxToolBarTool *)node->Data(); @@ -453,13 +461,6 @@ void wxToolBar::MacSuperChangedPosition() node = node->Next(); } - if ( wxrootwindow->IsKindOf( CLASSINFO( wxDialog ) ) ) - { - } - else - { - ::SetThemeWindowBackground( rootwindow , kThemeBrushDocumentWindowBackground , false ) ; - } } if ( GetWindowStyleFlag() & wxTB_HORIZONTAL ) @@ -578,51 +579,21 @@ bool wxToolBar::DoDeleteTool(size_t pos, wxToolBarToolBase *tool) void wxToolBar::OnPaint(wxPaintEvent& event) { - Point localOrigin ; - Rect clipRect ; - WindowRef window ; - wxWindow *win ; - - GetParent()->MacGetPortParams( &localOrigin , &clipRect , &window , &win ) ; - if ( window && win ) + wxPaintDC dc(this) ; + wxMacPortSetter helper(&dc) ; + + Rect toolbarrect = { dc.YLOG2DEVMAC(0) , dc.XLOG2DEVMAC(0) , + dc.YLOG2DEVMAC(m_height) , dc.XLOG2DEVMAC(m_width) } ; + UMADrawThemePlacard( &toolbarrect , IsEnabled() ? kThemeStateActive : kThemeStateInactive) ; { - wxMacDrawingHelper help( win ) ; - // the mac control manager always assumes to have the origin at 0,0 - bool hasTabBehind = false ; - wxWindow* parent = GetParent() ; - while ( parent ) - { - if( parent->IsTopLevel() ) - { -// ::SetThemeWindowBackground( win->MacGetWindowData()->m_macWindow , kThemeBrushDialogBackgroundActive , false ) ; - break ; - } - - if( parent->IsKindOf( CLASSINFO( wxNotebook ) ) || parent->IsKindOf( CLASSINFO( wxTabCtrl ) )) - { - if ( ((wxControl*)parent)->GetMacControl() ) - SetUpControlBackground( ((wxControl*)parent)->GetMacControl() , -1 , true ) ; - break ; - } - - parent = parent->GetParent() ; - } - - Rect toolbarrect = { m_y + localOrigin.v , m_x + localOrigin.h , - m_y + localOrigin.v + m_height , m_x + localOrigin.h + m_width } ; - - UMADrawThemePlacard( &toolbarrect , IsEnabled() ? kThemeStateActive : kThemeStateInactive) ; + int index = 0 ; + for ( index = 0 ; index < m_macToolHandles.Count() ; ++index ) { - int index = 0 ; - for ( index = 0 ; index < m_macToolHandles.Count() ; ++index ) + if ( m_macToolHandles[index] ) { - if ( m_macToolHandles[index] ) - { - UMADrawControl( (ControlHandle) m_macToolHandles[index] ) ; - } + UMADrawControl( (ControlHandle) m_macToolHandles[index] ) ; } } -// ::SetThemeWindowBackground( win->MacGetWindowData()->m_macWindow , win->MacGetWindowData()->m_macWindowBackgroundTheme , false ) ; } } diff --git a/src/mac/carbon/window.cpp b/src/mac/carbon/window.cpp index 06788f0b9d..0917200b8a 100644 --- a/src/mac/carbon/window.cpp +++ b/src/mac/carbon/window.cpp @@ -556,32 +556,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 } ; - focus.LocalToWindow( &clientrect ) ; - // 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 } ; - focus.LocalToWindow( &clientrect ) ; - // ClipRect( &clientrect ) ; - InvalWindowRect( MacGetRootWindow() , &clientrect ) ; - } - } - + + Refresh() ; if ( doMove ) wxWindowMac::MacSuperChangedPosition() ; // like this only children will be notified @@ -948,11 +933,10 @@ void wxWindowMac::OnEraseBackground(wxEraseEvent& event) void wxWindowMac::OnNcPaint( wxNcPaintEvent& event ) { - wxMacDrawingHelper focus( this ) ; - if ( focus.Ok() ) - { - MacPaintBorders( focus.GetOrigin().h , focus.GetOrigin().v) ; - } + wxWindowDC dc(this) ; + wxMacPortSetter helper(&dc) ; + + MacPaintBorders( dc.m_macLocalOrigin.h , dc.m_macLocalOrigin.v) ; } int wxWindowMac::GetScrollPos(int orient) const @@ -1123,20 +1107,20 @@ void wxWindowMac::SetScrollbar(int orient, int pos, int thumbVisible, // Does a physical scroll void wxWindowMac::ScrollWindow(int dx, int dy, const wxRect *rect) { - wxMacDrawingHelper focus( this , true ) ; - if ( focus.Ok() ) + wxClientDC dc(this) ; + wxMacPortSetter helper(&dc) ; + { int width , height ; GetClientSize( &width , &height ) ; - Rect scrollrect = { 0 , 0 , height , width } ; - focus.LocalToWindow( &scrollrect ) ; + 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 } ; - focus.LocalToWindow( &r ) ; + 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 ) ; @@ -1444,30 +1428,50 @@ 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() ; + 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()) { @@ -1484,14 +1488,14 @@ 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 ; } @@ -1726,65 +1730,6 @@ void wxWindowMac::MacTopLevelWindowChangedPosition() node = node->Next(); } } - -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); - Rect cr = clipRect ; - OffsetRect( &cr , localOrigin.h , localOrigin.v ) ; - ::ClipRect(&cr); - - ::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::MacGetPortClientParams(Point* localOrigin, Rect* clipRect, WindowRef *window , wxWindowMac** rootwin ) -{ - MacGetPortParams( 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 = { 0 , 0 , height , width } ; - SectRect(clipRect, &myClip, clipRect); -} - long wxWindowMac::MacGetLeftBorderSize( ) const { if( IsTopLevel() ) @@ -1840,46 +1785,6 @@ long wxWindowMac::MacRemoveBordersFromStyle( long style ) return style & ~( wxDOUBLE_BORDER | wxSUNKEN_BORDER | wxRAISED_BORDER | wxBORDER | wxSTATIC_BORDER ) ; } - -wxMacDrawingHelper::wxMacDrawingHelper( wxWindowMac * theWindow , bool clientArea ) -{ - m_ok = false ; - Rect clipRect ; - WindowRef window ; - wxWindowMac *rootwin ; - m_currentPort = NULL ; - - GetPort( &m_formerPort ) ; - if ( theWindow ) - { - if ( clientArea ) - theWindow->MacGetPortClientParams( &m_origin , &clipRect , &window , &rootwin) ; - else - theWindow->MacGetPortParams( &m_origin , &clipRect , &window , &rootwin) ; - m_currentPort = UMAGetWindowPort( window ) ; - if ( m_formerPort != m_currentPort ) - SetPort( m_currentPort ) ; - GetPenState( &m_savedPenState ) ; - theWindow->MacSetPortDrawingParams( m_origin, clipRect, window , rootwin ) ; - m_ok = true ; - } -} - -wxMacDrawingHelper::~wxMacDrawingHelper() -{ - if ( m_ok ) - { - SetPort( m_currentPort ) ; - SetPenState( &m_savedPenState ) ; - 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) diff --git a/src/mac/control.cpp b/src/mac/control.cpp index 1f62d46592..51504bfc21 100644 --- a/src/mac/control.cpp +++ b/src/mac/control.cpp @@ -387,11 +387,7 @@ void wxControl::MacAdjustControlRect() m_height += 2 * m_macVerticalBorder; } - wxMacDrawingHelper helper ( wxFindWinFromMacWindow( MacGetRootWindow() ) ) ; - 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() @@ -415,10 +411,7 @@ void wxControl::MacSuperChangedPosition() GetParent()->MacWindowToRootWindow( & mac_x , & mac_y ) ; WindowRef rootwindow = MacGetRootWindow() ; - wxWindow* wxrootwindow = wxFindWinFromMacWindow( rootwindow ) ; - wxMacDrawingHelper focus( wxrootwindow ) ; - if ( mac_x + m_macHorizontalBorder != former_mac_x || mac_y + m_macVerticalBorder != former_mac_y ) { @@ -637,20 +630,19 @@ void wxControl::Refresh(bool eraseBack, const wxRect *rect) void wxControl::MacRedrawControl() { - if ( m_macControl ) + if ( m_macControl && MacGetRootWindow() ) { - WindowRef window = MacGetRootWindow() ; - if ( window ) - { - wxWindow* win = wxFindWinFromMacWindow( window ) ; - if ( win ) - { - wxMacDrawingHelper help( win ) ; - // the mac control manager always assumes to have the origin at 0,0 - wxDC::MacSetupBackgroundForCurrentPort( MacGetBackgroundBrush() ) ; - UMADrawControl( m_macControl ) ; - } - } + 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 ) ; } } @@ -658,18 +650,17 @@ void wxControl::OnPaint(wxPaintEvent& event) { if ( m_macControl ) { - WindowRef window = MacGetRootWindow() ; - if ( window ) - { - wxWindow* win = wxFindWinFromMacWindow( window ) ; - if ( win ) - { - wxMacDrawingHelper help( win ) ; - // the mac control manager always assumes to have the origin at 0,0 - wxDC::MacSetupBackgroundForCurrentPort( MacGetBackgroundBrush() ) ; - UMADrawControl( m_macControl ) ; - } - } + 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 { diff --git a/src/mac/dcclient.cpp b/src/mac/dcclient.cpp index 6312bc3c82..fa2590f1bf 100644 --- a/src/mac/dcclient.cpp +++ b/src/mac/dcclient.cpp @@ -47,14 +47,15 @@ wxWindowDC::wxWindowDC() wxWindowDC::wxWindowDC(wxWindow *the_canvas) { - WindowRef windowref ; - wxWindowMac* rootwindow ; + wxTopLevelWindowMac* rootwindow = the_canvas->MacGetTopLevelWindow() ; + WindowRef windowref = rootwindow->MacGetWindowRef() ; - // this time it is really the full window - Rect clipRect ; - the_canvas->MacGetPortParams(&m_macLocalOrigin, &clipRect , &windowref , &rootwindow ); - SetRectRgn( m_macBoundaryClipRgn , clipRect.left , clipRect.top , clipRect.right , clipRect.bottom ) ; - SectRgn( m_macBoundaryClipRgn , the_canvas->MacGetVisibleRegion().GetWXHRGN() , m_macBoundaryClipRgn ) ; + int x , y ; + x = y = 0 ; + the_canvas->MacWindowToRootWindow( &x , &y ) ; + m_macLocalOrigin.h = x ; + m_macLocalOrigin.v = y ; + CopyRgn( the_canvas->MacGetVisibleRegion().GetWXHRGN() , m_macBoundaryClipRgn ) ; OffsetRgn( m_macBoundaryClipRgn , m_macLocalOrigin.h , m_macLocalOrigin.v ) ; CopyRgn( m_macBoundaryClipRgn , m_macCurrentClipRgn ) ; m_macPort = UMAGetWindowPort( windowref ) ; @@ -81,21 +82,23 @@ wxClientDC::wxClientDC() wxClientDC::wxClientDC(wxWindow *window) { - WindowRef windowref ; - wxWindowMac* rootwindow ; - - Rect clipRect ; + wxTopLevelWindowMac* rootwindow = window->MacGetTopLevelWindow() ; + WindowRef windowref = rootwindow->MacGetWindowRef() ; wxPoint origin = window->GetClientAreaOrigin() ; - - window->MacGetPortClientParams(&m_macLocalOrigin, &clipRect , &windowref , &rootwindow ); - SetRectRgn( m_macBoundaryClipRgn , clipRect.left + origin.x , clipRect.top + origin.y , clipRect.right + origin.x , clipRect.bottom + origin.y ) ; + wxSize size = window->GetClientSize() ; + int x , y ; + x = origin.x ; + y = origin.y ; + window->MacWindowToRootWindow( &x , &y ) ; + m_macLocalOrigin.h = x ; + m_macLocalOrigin.v = y ; + SetRectRgn( m_macBoundaryClipRgn , origin.x , origin.y , origin.x + size.x , origin.y + size.y ) ; SectRgn( m_macBoundaryClipRgn , window->MacGetVisibleRegion().GetWXHRGN() , m_macBoundaryClipRgn ) ; OffsetRgn( m_macBoundaryClipRgn , -origin.x , -origin.y ) ; OffsetRgn( m_macBoundaryClipRgn , m_macLocalOrigin.h , m_macLocalOrigin.v ) ; CopyRgn( m_macBoundaryClipRgn , m_macCurrentClipRgn ) ; m_macPort = UMAGetWindowPort( windowref ) ; m_minY = m_minX = 0; - wxSize size = window->GetSize() ; m_maxX = size.x ; m_maxY = size.y ; m_ok = TRUE ; @@ -117,32 +120,29 @@ wxPaintDC::wxPaintDC() wxPaintDC::wxPaintDC(wxWindow *window) { - WindowRef windowref ; - wxWindowMac* rootwindow ; - - Rect clipRect ; + wxTopLevelWindowMac* rootwindow = window->MacGetTopLevelWindow() ; + WindowRef windowref = rootwindow->MacGetWindowRef() ; wxPoint origin = window->GetClientAreaOrigin() ; - - window->MacGetPortClientParams(&m_macLocalOrigin, &clipRect , &windowref , &rootwindow ); - SetRectRgn( m_macBoundaryClipRgn , clipRect.left + origin.x , clipRect.top + origin.y , clipRect.right + origin.x , clipRect.bottom + origin.y ) ; + wxSize size = window->GetClientSize() ; + int x , y ; + x = origin.x ; + y = origin.y ; + window->MacWindowToRootWindow( &x , &y ) ; + m_macLocalOrigin.h = x ; + m_macLocalOrigin.v = y ; + SetRectRgn( m_macBoundaryClipRgn , origin.x , origin.y , origin.x + size.x , origin.y + size.y ) ; SectRgn( m_macBoundaryClipRgn , window->MacGetVisibleRegion().GetWXHRGN() , m_macBoundaryClipRgn ) ; OffsetRgn( m_macBoundaryClipRgn , -origin.x , -origin.y ) ; SectRgn( m_macBoundaryClipRgn , window->GetUpdateRegion().GetWXHRGN() , m_macBoundaryClipRgn ) ; OffsetRgn( m_macBoundaryClipRgn , m_macLocalOrigin.h , m_macLocalOrigin.v ) ; CopyRgn( m_macBoundaryClipRgn , m_macCurrentClipRgn ) ; m_macPort = UMAGetWindowPort( windowref ) ; - m_ok = TRUE ; - /* - wxCoord x , y ,w , h ; - window->GetUpdateRegion().GetBox( x , y , w , h ) ; m_minY = m_minX = 0; - wxSize size = window->GetSize() ; m_maxX = size.x ; m_maxY = size.y ; - SetClippingRegion( x , y , w , h ) ; - */ + m_ok = TRUE ; SetBackground(window->MacGetBackgroundBrush()); - SetFont(window->GetFont() ) ; + SetFont( window->GetFont() ) ; } wxPaintDC::~wxPaintDC() diff --git a/src/mac/listbox.cpp b/src/mac/listbox.cpp index 4358e40e2e..363d2245a9 100644 --- a/src/mac/listbox.cpp +++ b/src/mac/listbox.cpp @@ -162,6 +162,7 @@ bool wxListBox::Create(wxWindow *parent, wxWindowID id, macListDefUPP = NewListDefUPP( wxMacListDefinition ); } listDef.u.userProc = macListDefUPP ; + #if TARGET_CARBON Size asize; @@ -176,6 +177,7 @@ bool wxListBox::Create(wxWindow *parent, wxWindowID id, SetControlVisibility(m_macControl, false, false); #else + long result ; m_macControl = ::NewControl( parent->MacGetRootWindow() , &bounds , title , false , @@ -197,7 +199,6 @@ bool wxListBox::Create(wxWindow *parent, wxWindowID id, Point pt = (**m_macList).cellSize ; pt.v = 14 ; LCellSize( pt , m_macList ) ; - LAddColumn( 1 , 0 , m_macList ) ; #endif OptionBits options = 0; @@ -585,12 +586,8 @@ void wxListBox::SetupColours() void wxListBox::Refresh(bool eraseBack, const wxRect *rect) { - // Set up port - WindowRef rootwindow = MacGetRootWindow() ; - wxWindow* wxrootwindow = wxFindWinFromMacWindow( rootwindow ) ; - wxMacDrawingHelper focus( wxrootwindow ); - - UMADrawControl(m_macControl); + wxControl::Refresh( eraseBack , rect ) ; +// MacRedrawControl() ; } #if wxUSE_OWNER_DRAWN diff --git a/src/mac/textctrl.cpp b/src/mac/textctrl.cpp index 5ac79c5735..64d585d233 100644 --- a/src/mac/textctrl.cpp +++ b/src/mac/textctrl.cpp @@ -179,39 +179,7 @@ void wxTextCtrl::SetValue(const wxString& st) else value = st ; ::SetControlData( m_macControl, 0, ( m_windowStyle & wxTE_PASSWORD ) ? kControlEditTextPasswordTag : kControlEditTextTextTag , value.Length() , (char*) ((const char*)value) ) ; - WindowRef window = MacGetRootWindow() ; - if ( window ) - { - wxWindow* win = wxFindWinFromMacWindow( window ) ; - if ( win ) - { - wxMacDrawingHelper help( win ) ; - // the mac control manager always assumes to have the origin at 0,0 - - bool hasTabBehind = false ; - wxWindow* parent = GetParent() ; - while ( parent ) - { - if( parent->IsTopLevel() ) - { -// ::SetThemeWindowBackground( win->MacGetRootWindow() , kThemeBrushDialogBackgroundActive , false ) ; - break ; - } - - if( parent->IsKindOf( CLASSINFO( wxNotebook ) ) || parent->IsKindOf( CLASSINFO( wxTabCtrl ) )) - { - if ( ((wxControl*)parent)->GetMacControl() ) - SetUpControlBackground( ((wxControl*)parent)->GetMacControl() , -1 , true ) ; - break ; - } - - parent = parent->GetParent() ; - } - - UMADrawControl( m_macControl ) ; -// ::SetThemeWindowBackground( win->MacGetWindowData()->m_macWindow , win->MacGetWindowData()->m_macWindowBackgroundTheme , false ) ; - } - } + MacRedrawControl() ; } // Clipboard operations @@ -254,39 +222,7 @@ void wxTextCtrl::Paste() ::GetControlData( m_macControl , 0, kControlEditTextTEHandleTag , sizeof( TEHandle ) , (char*) &teH , &size ) ; TEFromScrap() ; TEPaste( teH ) ; - WindowRef window = MacGetRootWindow() ; - if ( window ) - { - wxWindow* win = wxFindWinFromMacWindow( window ) ; - if ( win ) - { - wxMacDrawingHelper help( win ) ; - // the mac control manager always assumes to have the origin at 0,0 - - bool hasTabBehind = false ; - wxWindow* parent = GetParent() ; - while ( parent ) - { - if( parent->IsTopLevel() ) - { -// ::SetThemeWindowBackground( win->MacGetWindowData()->m_macWindow , kThemeBrushDialogBackgroundActive , false ) ; - break ; - } - - if( parent->IsKindOf( CLASSINFO( wxNotebook ) ) || parent->IsKindOf( CLASSINFO( wxTabCtrl ) )) - { - if ( ((wxControl*)parent)->GetMacControl() ) - SetUpControlBackground( ((wxControl*)parent)->GetMacControl() , -1 , true ) ; - break ; - } - - parent = parent->GetParent() ; - } - - UMADrawControl( m_macControl ) ; -// ::SetThemeWindowBackground( win->MacGetWindowData()->m_macWindow , win->MacGetWindowData()->m_macWindowBackgroundTheme , false ) ; - } - } + MacRedrawControl() ; } } @@ -1885,39 +1821,7 @@ void wxTextCtrl::SetValue(const wxString& st) TXNSetData( (**tpvars).fTXNRec, kTXNTextData, (const char*)value, value.Length(), kTXNStartOffset, kTXNEndOffset); } - WindowRef window = MacGetRootWindow() ; - if ( window ) - { - wxWindow* win = wxFindWinFromMacWindow( window ) ; - if ( win ) - { - wxMacDrawingHelper help( win ) ; - // the mac control manager always assumes to have the origin at 0,0 - - bool hasTabBehind = false ; - wxWindow* parent = GetParent() ; - while ( parent ) - { - if( parent->MacGetWindowData() ) - { - UMASetThemeWindowBackground( win->MacGetWindowData()->m_macWindow , kThemeBrushDialogBackgroundActive , false ) ; - break ; - } - - if( parent->IsKindOf( CLASSINFO( wxNotebook ) ) || parent->IsKindOf( CLASSINFO( wxTabCtrl ) )) - { - if ( ((wxControl*)parent)->GetMacControl() ) - SetUpControlBackground( ((wxControl*)parent)->GetMacControl() , -1 , true ) ; - break ; - } - - parent = parent->GetParent() ; - } - - UMADrawControl( m_macControl ) ; - UMASetThemeWindowBackground( win->MacGetWindowData()->m_macWindow , win->MacGetWindowData()->m_macWindowBackgroundTheme , false ) ; - } - } + MacRedrawControl() ; } // Clipboard operations @@ -1976,38 +1880,7 @@ void wxTextCtrl::Paste() ::GetControlData( m_macControl , 0, kControlEditTextTEHandleTag , sizeof( TEHandle ) , (char*) &teH , &size ) ; TEFromScrap() ; TEPaste( teH ) ; - WindowRef window = MacGetRootWindow() ; - if ( window ) - { - wxWindow* win = wxFindWinFromMacWindow( window ) ; - if ( win ) - { - wxMacDrawingHelper help( win ) ; - // the mac control manager always assumes to have the origin at 0,0 - bool hasTabBehind = false ; - 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)->GetMacControl() ) - SetUpControlBackground( ((wxControl*)parent)->GetMacControl() , -1 , true ) ; - break ; - } - - parent = parent->GetParent() ; - } - - UMADrawControl( m_macControl ) ; - ::SetThemeWindowBackground( win->MacGetWindowData()->m_macWindow , win->MacGetWindowData()->m_macWindowBackgroundTheme , false ) ; - } - } + MacRedrawControl() ; } else { diff --git a/src/mac/toolbar.cpp b/src/mac/toolbar.cpp index 86020f988b..9604fbc2c1 100644 --- a/src/mac/toolbar.cpp +++ b/src/mac/toolbar.cpp @@ -168,13 +168,19 @@ bool wxToolBar::Realize() Point localOrigin ; Rect clipRect ; - WindowRef window ; + WindowRef window = MacGetRootWindow() ; wxWindow *win ; - GetParent()->MacGetPortParams( &localOrigin , &clipRect , &window , &win ) ; + int lx , ly ; + lx = ly = 0 ; + MacWindowToRootWindow( &lx , &ly ) ; + localOrigin.v = ly ; + localOrigin.h = lx ; + +// GetParent()->MacGetPortParams( &localOrigin , &clipRect , &window , &win ) ; - Rect toolbarrect = { m_y + localOrigin.v , m_x + localOrigin.h , - m_y + m_height + localOrigin.v , m_x + m_width + localOrigin.h} ; + Rect toolbarrect = { localOrigin.v ,localOrigin.h , + m_height + localOrigin.v , m_width + localOrigin.h} ; ControlFontStyleRec controlstyle ; controlstyle.flags = kControlUseFontMask ; @@ -378,11 +384,16 @@ void wxToolBar::MacSuperChangedPosition() Rect clipRect ; WindowRef window ; wxWindow *win ; + int lx , ly ; + lx = ly = 0 ; + MacWindowToRootWindow( &lx , &ly ) ; + localOrigin.v = ly ; + localOrigin.h = lx ; - GetParent()->MacGetPortParams( &localOrigin , &clipRect , &window , &win ) ; +// GetParent()->MacGetPortParams( &localOrigin , &clipRect , &window , &win ) ; - Rect toolbarrect = { m_y + localOrigin.v , m_x + localOrigin.h , - m_y + m_height + localOrigin.v , m_x + m_width + localOrigin.h} ; + Rect toolbarrect = { localOrigin.v ,localOrigin.h , + m_height + localOrigin.v , m_width + localOrigin.h} ; ControlFontStyleRec controlstyle ; controlstyle.flags = kControlUseFontMask ; @@ -399,10 +410,7 @@ void wxToolBar::MacSuperChangedPosition() int maxHeight = 0 ; int toolcount = 0 ; { - WindowRef rootwindow = MacGetRootWindow() ; - wxWindow* wxrootwindow = wxFindWinFromMacWindow( rootwindow ) ; - ::SetThemeWindowBackground( rootwindow , kThemeBrushDialogBackgroundActive , false ) ; - wxMacDrawingHelper focus( wxrootwindow ) ; + WindowRef rootwindow = MacGetRootWindow() ; while (node) { wxToolBarTool *tool = (wxToolBarTool *)node->Data(); @@ -453,13 +461,6 @@ void wxToolBar::MacSuperChangedPosition() node = node->Next(); } - if ( wxrootwindow->IsKindOf( CLASSINFO( wxDialog ) ) ) - { - } - else - { - ::SetThemeWindowBackground( rootwindow , kThemeBrushDocumentWindowBackground , false ) ; - } } if ( GetWindowStyleFlag() & wxTB_HORIZONTAL ) @@ -578,51 +579,21 @@ bool wxToolBar::DoDeleteTool(size_t pos, wxToolBarToolBase *tool) void wxToolBar::OnPaint(wxPaintEvent& event) { - Point localOrigin ; - Rect clipRect ; - WindowRef window ; - wxWindow *win ; - - GetParent()->MacGetPortParams( &localOrigin , &clipRect , &window , &win ) ; - if ( window && win ) + wxPaintDC dc(this) ; + wxMacPortSetter helper(&dc) ; + + Rect toolbarrect = { dc.YLOG2DEVMAC(0) , dc.XLOG2DEVMAC(0) , + dc.YLOG2DEVMAC(m_height) , dc.XLOG2DEVMAC(m_width) } ; + UMADrawThemePlacard( &toolbarrect , IsEnabled() ? kThemeStateActive : kThemeStateInactive) ; { - wxMacDrawingHelper help( win ) ; - // the mac control manager always assumes to have the origin at 0,0 - bool hasTabBehind = false ; - wxWindow* parent = GetParent() ; - while ( parent ) - { - if( parent->IsTopLevel() ) - { -// ::SetThemeWindowBackground( win->MacGetWindowData()->m_macWindow , kThemeBrushDialogBackgroundActive , false ) ; - break ; - } - - if( parent->IsKindOf( CLASSINFO( wxNotebook ) ) || parent->IsKindOf( CLASSINFO( wxTabCtrl ) )) - { - if ( ((wxControl*)parent)->GetMacControl() ) - SetUpControlBackground( ((wxControl*)parent)->GetMacControl() , -1 , true ) ; - break ; - } - - parent = parent->GetParent() ; - } - - Rect toolbarrect = { m_y + localOrigin.v , m_x + localOrigin.h , - m_y + localOrigin.v + m_height , m_x + localOrigin.h + m_width } ; - - UMADrawThemePlacard( &toolbarrect , IsEnabled() ? kThemeStateActive : kThemeStateInactive) ; + int index = 0 ; + for ( index = 0 ; index < m_macToolHandles.Count() ; ++index ) { - int index = 0 ; - for ( index = 0 ; index < m_macToolHandles.Count() ; ++index ) + if ( m_macToolHandles[index] ) { - if ( m_macToolHandles[index] ) - { - UMADrawControl( (ControlHandle) m_macToolHandles[index] ) ; - } + UMADrawControl( (ControlHandle) m_macToolHandles[index] ) ; } } -// ::SetThemeWindowBackground( win->MacGetWindowData()->m_macWindow , win->MacGetWindowData()->m_macWindowBackgroundTheme , false ) ; } } diff --git a/src/mac/window.cpp b/src/mac/window.cpp index 06788f0b9d..0917200b8a 100644 --- a/src/mac/window.cpp +++ b/src/mac/window.cpp @@ -556,32 +556,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 } ; - focus.LocalToWindow( &clientrect ) ; - // 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 } ; - focus.LocalToWindow( &clientrect ) ; - // ClipRect( &clientrect ) ; - InvalWindowRect( MacGetRootWindow() , &clientrect ) ; - } - } - + + Refresh() ; if ( doMove ) wxWindowMac::MacSuperChangedPosition() ; // like this only children will be notified @@ -948,11 +933,10 @@ void wxWindowMac::OnEraseBackground(wxEraseEvent& event) void wxWindowMac::OnNcPaint( wxNcPaintEvent& event ) { - wxMacDrawingHelper focus( this ) ; - if ( focus.Ok() ) - { - MacPaintBorders( focus.GetOrigin().h , focus.GetOrigin().v) ; - } + wxWindowDC dc(this) ; + wxMacPortSetter helper(&dc) ; + + MacPaintBorders( dc.m_macLocalOrigin.h , dc.m_macLocalOrigin.v) ; } int wxWindowMac::GetScrollPos(int orient) const @@ -1123,20 +1107,20 @@ void wxWindowMac::SetScrollbar(int orient, int pos, int thumbVisible, // Does a physical scroll void wxWindowMac::ScrollWindow(int dx, int dy, const wxRect *rect) { - wxMacDrawingHelper focus( this , true ) ; - if ( focus.Ok() ) + wxClientDC dc(this) ; + wxMacPortSetter helper(&dc) ; + { int width , height ; GetClientSize( &width , &height ) ; - Rect scrollrect = { 0 , 0 , height , width } ; - focus.LocalToWindow( &scrollrect ) ; + 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 } ; - focus.LocalToWindow( &r ) ; + 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 ) ; @@ -1444,30 +1428,50 @@ 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() ; + 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()) { @@ -1484,14 +1488,14 @@ 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 ; } @@ -1726,65 +1730,6 @@ void wxWindowMac::MacTopLevelWindowChangedPosition() node = node->Next(); } } - -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); - Rect cr = clipRect ; - OffsetRect( &cr , localOrigin.h , localOrigin.v ) ; - ::ClipRect(&cr); - - ::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::MacGetPortClientParams(Point* localOrigin, Rect* clipRect, WindowRef *window , wxWindowMac** rootwin ) -{ - MacGetPortParams( 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 = { 0 , 0 , height , width } ; - SectRect(clipRect, &myClip, clipRect); -} - long wxWindowMac::MacGetLeftBorderSize( ) const { if( IsTopLevel() ) @@ -1840,46 +1785,6 @@ long wxWindowMac::MacRemoveBordersFromStyle( long style ) return style & ~( wxDOUBLE_BORDER | wxSUNKEN_BORDER | wxRAISED_BORDER | wxBORDER | wxSTATIC_BORDER ) ; } - -wxMacDrawingHelper::wxMacDrawingHelper( wxWindowMac * theWindow , bool clientArea ) -{ - m_ok = false ; - Rect clipRect ; - WindowRef window ; - wxWindowMac *rootwin ; - m_currentPort = NULL ; - - GetPort( &m_formerPort ) ; - if ( theWindow ) - { - if ( clientArea ) - theWindow->MacGetPortClientParams( &m_origin , &clipRect , &window , &rootwin) ; - else - theWindow->MacGetPortParams( &m_origin , &clipRect , &window , &rootwin) ; - m_currentPort = UMAGetWindowPort( window ) ; - if ( m_formerPort != m_currentPort ) - SetPort( m_currentPort ) ; - GetPenState( &m_savedPenState ) ; - theWindow->MacSetPortDrawingParams( m_origin, clipRect, window , rootwin ) ; - m_ok = true ; - } -} - -wxMacDrawingHelper::~wxMacDrawingHelper() -{ - if ( m_ok ) - { - SetPort( m_currentPort ) ; - SetPenState( &m_savedPenState ) ; - 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) -- 2.47.2