From 8e181eae04877c1369a3ad01160f889ddc48971b Mon Sep 17 00:00:00 2001 From: Stefan Csomor Date: Mon, 26 Nov 2007 07:46:54 +0000 Subject: [PATCH] cleanup / adding effects git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@50251 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- src/mac/carbon/textctrl.cpp | 4 - src/mac/carbon/toplevel.cpp | 142 +++++++++++++++++- src/mac/carbon/utils.cpp | 16 -- src/mac/carbon/window.cpp | 289 ++---------------------------------- 4 files changed, 155 insertions(+), 296 deletions(-) diff --git a/src/mac/carbon/textctrl.cpp b/src/mac/carbon/textctrl.cpp index 7a3e1acb96..84caa012ba 100644 --- a/src/mac/carbon/textctrl.cpp +++ b/src/mac/carbon/textctrl.cpp @@ -416,10 +416,6 @@ void wxTextCtrl::MacVisibilityChanged() GetPeer()->VisibilityChanged( MacIsReallyShown() ) ; } -void wxTextCtrl::MacEnabledStateChanged() -{ -} - void wxTextCtrl::MacCheckSpelling(bool check) { GetPeer()->CheckSpelling(check); diff --git a/src/mac/carbon/toplevel.cpp b/src/mac/carbon/toplevel.cpp index 57847ae885..6f7d252499 100644 --- a/src/mac/carbon/toplevel.cpp +++ b/src/mac/carbon/toplevel.cpp @@ -1369,7 +1369,6 @@ void wxTopLevelWindowMac::MacActivate( long timestamp , bool WXUNUSED(inIsActiva s_macDeactivateWindow = NULL; MacDelayedDeactivation(timestamp); - MacPropagateHiliteChanged() ; } void wxTopLevelWindowMac::SetTitle(const wxString& title) @@ -1417,11 +1416,148 @@ bool wxTopLevelWindowMac::Show(bool show) ::TransitionWindow( (WindowRef)m_macWindow, kWindowZoomTransitionEffect, kWindowHideTransitionAction, NULL ); } - MacPropagateVisibilityChanged() ; - return true ; } +bool wxTopLevelWindowMac::ShowWithEffect(wxShowEffect effect, + unsigned timeout, + wxDirection dir) +{ + // TODO factor common code + if ( !wxTopLevelWindowBase::Show(true) ) + return false; + + WindowTransitionEffect transition = 0 ; + switch( effect ) + { + case wxSHOW_EFFECT_ROLL : + case wxSHOW_EFFECT_SLIDE : + transition = kWindowGenieTransitionEffect; + break; + case wxSHOW_EFFECT_BLEND : + transition = kWindowFadeTransitionEffect; + break; + case wxSHOW_EFFECT_EXPAND : + default : + // having sheets would be fine, but this might lead to a repositioning +#if 0 + if ( GetParent() ) + transition = kWindowSheetTransitionEffect; + else +#endif + transition = kWindowZoomTransitionEffect; + break; + } + + TransitionWindowOptions options; + options.version = 0; + options.duration = timeout / 1000.0; + options.window = transition == kWindowSheetTransitionEffect ? (WindowRef) GetParent()->MacGetTopLevelWindowRef() :0; + options.userData = 0; + + wxSize size = wxGetDisplaySize(); + Rect bounds; + GetWindowBounds( (WindowRef)m_macWindow, kWindowStructureRgn, &bounds ); + CGRect hiBounds = CGRectMake( bounds.left, bounds.top, bounds.right - bounds.left, bounds.bottom - bounds.top ); + + if ( dir & wxRIGHT ) + { + hiBounds.origin.x = size.x; + hiBounds.size.width = 0; + } + if ( dir & wxUP ) + { + hiBounds.origin.y = 0; + hiBounds.size.height = 0; + } + if ( dir & wxDOWN ) + { + hiBounds.origin.y = size.y; + hiBounds.size.height = 0; + } + if ( dir & wxLEFT ) + { + hiBounds.origin.x = 0; + hiBounds.size.width = 0; + } + + ::TransitionWindowWithOptions( (WindowRef)m_macWindow, transition, kWindowShowTransitionAction, transition == kWindowGenieTransitionEffect ? &hiBounds : NULL , + false, &options ); + + ::SelectWindow( (WindowRef)m_macWindow ) ; + + // because apps expect a size event to occur at this moment + wxSizeEvent event(GetSize() , m_windowId); + event.SetEventObject(this); + GetEventHandler()->ProcessEvent(event); + + return true; +} + +bool wxTopLevelWindowMac::HideWithEffect(wxShowEffect effect, + unsigned timeout , + wxDirection dir ) +{ + if ( !wxTopLevelWindowBase::Show(false) ) + return false; + + WindowTransitionEffect transition = 0 ; + switch( effect ) + { + case wxSHOW_EFFECT_ROLL : + case wxSHOW_EFFECT_SLIDE : + transition = kWindowGenieTransitionEffect; + break; + case wxSHOW_EFFECT_BLEND : + transition = kWindowFadeTransitionEffect; + break; + case wxSHOW_EFFECT_EXPAND : + default: +#if 0 + if ( GetParent() ) + transition = kWindowSheetTransitionEffect; + else +#endif + transition = kWindowZoomTransitionEffect; + break; + } + TransitionWindowOptions options; + options.version = 0; + options.duration = timeout / 1000.0; + options.window = transition == kWindowSheetTransitionEffect ? (WindowRef) GetParent()->MacGetTopLevelWindowRef() :0; + options.userData = 0; + + wxSize size = wxGetDisplaySize(); + Rect bounds; + GetWindowBounds( (WindowRef)m_macWindow, kWindowStructureRgn, &bounds ); + CGRect hiBounds = CGRectMake( bounds.left, bounds.top, bounds.right - bounds.left, bounds.bottom - bounds.top ); + + if ( dir & wxRIGHT ) + { + hiBounds.origin.x = size.x; + hiBounds.size.width = 0; + } + if ( dir & wxUP ) + { + hiBounds.origin.y = 0; + hiBounds.size.height = 0; + } + if ( dir & wxDOWN ) + { + hiBounds.origin.y = size.y; + hiBounds.size.height = 0; + } + if ( dir & wxLEFT ) + { + hiBounds.origin.x = 0; + hiBounds.size.width = 0; + } + ::TransitionWindowWithOptions( (WindowRef)m_macWindow, transition, kWindowHideTransitionAction, transition == kWindowGenieTransitionEffect ? &hiBounds : NULL , + false, &options ); + + return true; +} + bool wxTopLevelWindowMac::ShowFullScreen(bool show, long style) { if ( show ) diff --git a/src/mac/carbon/utils.cpp b/src/mac/carbon/utils.cpp index 757920cd03..4204e40b33 100644 --- a/src/mac/carbon/utils.cpp +++ b/src/mac/carbon/utils.cpp @@ -735,11 +735,7 @@ void wxMacControl::SetVisibility( bool visible , bool redraw ) bool wxMacControl::IsEnabled() const { -#if TARGET_API_MAC_OSX return IsControlEnabled( m_controlRef ); -#else - return IsControlActive( m_controlRef ); -#endif } bool wxMacControl::IsActive() const @@ -852,15 +848,10 @@ OSStatus wxMacControl::GetRegion( ControlPartCode partCode , RgnHandle region ) OSStatus wxMacControl::SetZOrder( bool above , wxMacControl* other ) { -#if TARGET_API_MAC_OSX return HIViewSetZOrder( m_controlRef,above ? kHIViewZOrderAbove : kHIViewZOrderBelow, (other != NULL) ? other->m_controlRef : NULL); -#else - return 0; -#endif } -#if TARGET_API_MAC_OSX // SetNeedsDisplay would not invalidate the children static void InvalidateControlAndChildren( HIViewRef control ) { @@ -883,13 +874,10 @@ static void InvalidateControlAndChildren( HIViewRef control ) InvalidateControlAndChildren( child ); } } -#endif void wxMacControl::InvalidateWithChildren() { -#if TARGET_API_MAC_OSX InvalidateControlAndChildren( m_controlRef ); -#endif } void wxMacControl::ScrollRect( wxRect *r , int dx , int dy ) @@ -997,11 +985,7 @@ wxMacDataBrowserControl::wxMacDataBrowserControl( wxWindow* peer, if ( gDataBrowserItemNotificationUPP == NULL ) { gDataBrowserItemNotificationUPP = -#if TARGET_API_MAC_OSX (DataBrowserItemNotificationUPP) NewDataBrowserItemNotificationWithItemUPP(DataBrowserItemNotificationProc); -#else - NewDataBrowserItemNotificationUPP(DataBrowserItemNotificationProc); -#endif } DataBrowserCallbacks callbacks; diff --git a/src/mac/carbon/window.cpp b/src/mac/carbon/window.cpp index e4d51d52a0..0b6532ed84 100644 --- a/src/mac/carbon/window.cpp +++ b/src/mac/carbon/window.cpp @@ -66,18 +66,6 @@ #define MAC_SCROLLBAR_SIZE 15 #define MAC_SMALL_SCROLLBAR_SIZE 11 -#ifndef __DARWIN__ -#include -#include -#include -#endif - -#if TARGET_API_MAC_OSX -#ifndef __HIVIEW__ - #include -#endif -#endif - #include #ifdef __WXUNIVERSAL__ @@ -89,9 +77,7 @@ BEGIN_EVENT_TABLE(wxWindowMac, wxWindowBase) EVT_NC_PAINT(wxWindowMac::OnNcPaint) EVT_ERASE_BACKGROUND(wxWindowMac::OnEraseBackground) -#if TARGET_API_MAC_OSX EVT_PAINT(wxWindowMac::OnPaint) -#endif EVT_SET_FOCUS(wxWindowMac::OnSetFocus) EVT_KILL_FOCUS(wxWindowMac::OnSetFocus) EVT_MOUSE_EVENTS(wxWindowMac::OnMouseEvent) @@ -165,14 +151,14 @@ static const EventTypeSpec eventList[] = { kEventClassTextInput, kEventTextInputUpdateActiveInputArea } , { kEventClassControl , kEventControlDraw } , -#if TARGET_API_MAC_OSX + { kEventClassControl , kEventControlVisibilityChanged } , { kEventClassControl , kEventControlEnabledStateChanged } , { kEventClassControl , kEventControlHiliteChanged } , { kEventClassControl , kEventControlActivate } , { kEventClassControl , kEventControlDeactivate } , -#endif + { kEventClassControl , kEventControlSetFocusPart } , { kEventClassService , kEventServiceGetTypes }, @@ -196,7 +182,6 @@ static pascal OSStatus wxMacWindowControlEventHandler( EventHandlerCallRef handl switch ( GetEventKind( event ) ) { -#if TARGET_API_MAC_OSX case kEventControlDraw : { RgnHandle updateRgn = NULL ; @@ -221,9 +206,6 @@ static pascal OSStatus wxMacWindowControlEventHandler( EventHandlerCallRef handl } } - Rect rgnBounds ; - GetRegionBounds( updateRgn , &rgnBounds ) ; - #if wxMAC_DEBUG_REDRAW if ( thisWindow->MacIsUserPane() ) { @@ -277,6 +259,8 @@ static pascal OSStatus wxMacWindowControlEventHandler( EventHandlerCallRef handl CGContextClearRect( cgContext, bounds ); } + + if ( thisWindow->MacDoRedraw( updateRgn , cEvent.GetTicks() ) ) result = noErr ; @@ -297,7 +281,7 @@ static pascal OSStatus wxMacWindowControlEventHandler( EventHandlerCallRef handl break ; case kEventControlEnabledStateChanged : - thisWindow->MacEnabledStateChanged() ; + thisWindow->MacEnabledStateChanged(); break ; case kEventControlHiliteChanged : @@ -316,7 +300,6 @@ static pascal OSStatus wxMacWindowControlEventHandler( EventHandlerCallRef handl thisWindow->Refresh(); #endif break ; -#endif // TARGET_API_MAC_OSX // we emulate this event under Carbon CFM case kEventControlSetFocusPart : @@ -698,134 +681,6 @@ pascal OSStatus wxMacWindowEventHandler( EventHandlerCallRef handler , EventRef DEFINE_ONE_SHOT_HANDLER_GETTER( wxMacWindowEventHandler ) -#if !TARGET_API_MAC_OSX - -// --------------------------------------------------------------------------- -// UserPane events for non OSX builds -// --------------------------------------------------------------------------- - -static pascal void wxMacControlUserPaneDrawProc(ControlRef control, SInt16 part) -{ - wxWindow * win = wxFindControlFromMacControl(control) ; - if ( win ) - win->MacControlUserPaneDrawProc(part) ; -} -wxMAC_DEFINE_PROC_GETTER( ControlUserPaneDrawUPP , wxMacControlUserPaneDrawProc ) ; - -static pascal ControlPartCode wxMacControlUserPaneHitTestProc(ControlRef control, Point where) -{ - wxWindow * win = wxFindControlFromMacControl(control) ; - if ( win ) - return win->MacControlUserPaneHitTestProc(where.h , where.v) ; - else - return kControlNoPart ; -} -wxMAC_DEFINE_PROC_GETTER( ControlUserPaneHitTestUPP , wxMacControlUserPaneHitTestProc ) ; - -static pascal ControlPartCode wxMacControlUserPaneTrackingProc(ControlRef control, Point startPt, ControlActionUPP actionProc) -{ - wxWindow * win = wxFindControlFromMacControl(control) ; - if ( win ) - return win->MacControlUserPaneTrackingProc( startPt.h , startPt.v , (void*) actionProc) ; - else - return kControlNoPart ; -} -wxMAC_DEFINE_PROC_GETTER( ControlUserPaneTrackingUPP , wxMacControlUserPaneTrackingProc ) ; - -static pascal void wxMacControlUserPaneIdleProc(ControlRef control) -{ - wxWindow * win = wxFindControlFromMacControl(control) ; - if ( win ) - win->MacControlUserPaneIdleProc() ; -} -wxMAC_DEFINE_PROC_GETTER( ControlUserPaneIdleUPP , wxMacControlUserPaneIdleProc ) ; - -static pascal ControlPartCode wxMacControlUserPaneKeyDownProc(ControlRef control, SInt16 keyCode, SInt16 charCode, SInt16 modifiers) -{ - wxWindow * win = wxFindControlFromMacControl(control) ; - if ( win ) - return win->MacControlUserPaneKeyDownProc(keyCode,charCode,modifiers) ; - else - return kControlNoPart ; -} -wxMAC_DEFINE_PROC_GETTER( ControlUserPaneKeyDownUPP , wxMacControlUserPaneKeyDownProc ) ; - -static pascal void wxMacControlUserPaneActivateProc(ControlRef control, Boolean activating) -{ - wxWindow * win = wxFindControlFromMacControl(control) ; - if ( win ) - win->MacControlUserPaneActivateProc(activating) ; -} -wxMAC_DEFINE_PROC_GETTER( ControlUserPaneActivateUPP , wxMacControlUserPaneActivateProc ) ; - -static pascal ControlPartCode wxMacControlUserPaneFocusProc(ControlRef control, ControlFocusPart action) -{ - wxWindow * win = wxFindControlFromMacControl(control) ; - if ( win ) - return win->MacControlUserPaneFocusProc(action) ; - else - return kControlNoPart ; -} -wxMAC_DEFINE_PROC_GETTER( ControlUserPaneFocusUPP , wxMacControlUserPaneFocusProc ) ; - -static pascal void wxMacControlUserPaneBackgroundProc(ControlRef control, ControlBackgroundPtr info) -{ - wxWindow * win = wxFindControlFromMacControl(control) ; - if ( win ) - win->MacControlUserPaneBackgroundProc(info) ; -} -wxMAC_DEFINE_PROC_GETTER( ControlUserPaneBackgroundUPP , wxMacControlUserPaneBackgroundProc ) ; - -void wxWindowMac::MacControlUserPaneDrawProc(wxInt16 part) -{ - int x = 0 , y = 0; - RgnHandle rgn = NewRgn() ; - GetClip( rgn ) ; - MacWindowToRootWindow( &x, &y ) ; - OffsetRgn( rgn , -x , -y ) ; - wxMacWindowStateSaver sv( this ) ; - SectRgn( rgn , (RgnHandle) MacGetVisibleRegion().GetWXHRGN() , rgn ) ; - MacDoRedraw( rgn , 0 ) ; - DisposeRgn( rgn ) ; -} - -wxInt16 wxWindowMac::MacControlUserPaneHitTestProc(wxInt16 x, wxInt16 y) -{ - return kControlNoPart ; -} - -wxInt16 wxWindowMac::MacControlUserPaneTrackingProc(wxInt16 x, wxInt16 y, void* actionProc) -{ - return kControlNoPart ; -} - -void wxWindowMac::MacControlUserPaneIdleProc() -{ -} - -wxInt16 wxWindowMac::MacControlUserPaneKeyDownProc(wxInt16 keyCode, wxInt16 charCode, wxInt16 modifiers) -{ - return kControlNoPart ; -} - -void wxWindowMac::MacControlUserPaneActivateProc(bool activating) -{ -} - -wxInt16 wxWindowMac::MacControlUserPaneFocusProc(wxInt16 action) -{ - if ( AcceptsFocus() ) - return 1 ; - else - return kControlNoPart ; -} - -void wxWindowMac::MacControlUserPaneBackgroundProc(void* info) -{ -} - -#endif - // --------------------------------------------------------------------------- // Scrollbar Tracking for all // --------------------------------------------------------------------------- @@ -1012,20 +867,6 @@ void wxWindowMac::MacInstallEventHandler( WXWidget control ) InstallControlEventHandler( (ControlRef)control , GetwxMacWindowEventHandlerUPP(), GetEventTypeCount(eventList), eventList, this, (EventHandlerRef *)&m_macControlEventHandler); - -#if !TARGET_API_MAC_OSX - if ( (ControlRef) control == m_peer->GetControlRef() ) - { - m_peer->SetData(kControlEntireControl, kControlUserPaneDrawProcTag, GetwxMacControlUserPaneDrawProc()) ; - m_peer->SetData(kControlEntireControl, kControlUserPaneHitTestProcTag, GetwxMacControlUserPaneHitTestProc()) ; - m_peer->SetData(kControlEntireControl, kControlUserPaneTrackingProcTag, GetwxMacControlUserPaneTrackingProc()) ; - m_peer->SetData(kControlEntireControl, kControlUserPaneIdleProcTag, GetwxMacControlUserPaneIdleProc()) ; - m_peer->SetData(kControlEntireControl, kControlUserPaneKeyDownProcTag, GetwxMacControlUserPaneKeyDownProc()) ; - m_peer->SetData(kControlEntireControl, kControlUserPaneActivateProcTag, GetwxMacControlUserPaneActivateProc()) ; - m_peer->SetData(kControlEntireControl, kControlUserPaneFocusProcTag, GetwxMacControlUserPaneFocusProc()) ; - m_peer->SetData(kControlEntireControl, kControlUserPaneBackgroundProcTag, GetwxMacControlUserPaneBackgroundProc()) ; - } -#endif } // Constructor @@ -1241,43 +1082,6 @@ void wxWindowMac::SetFocus() return ; SetUserFocusWindow( (WindowRef)MacGetTopLevelWindowRef() ); - -#if !TARGET_API_MAC_OSX - // emulate carbon events when running under CarbonLib where they are not natively available - if ( former ) - { - EventRef evRef = NULL ; - - err = MacCreateEvent( - NULL , kEventClassControl , kEventControlSetFocusPart , TicksToEventTime( TickCount() ) , - kEventAttributeUserEvent , &evRef ); - verify_noerr( err ); - - wxMacCarbonEvent cEvent( evRef ) ; - cEvent.SetParameter( kEventParamDirectObject , (ControlRef) former->GetHandle() ) ; - cEvent.SetParameter(kEventParamControlPart , typeControlPartCode , kControlFocusNoPart ) ; - - wxMacWindowEventHandler( NULL , evRef , former ) ; - ReleaseEvent( evRef ) ; - } - - // send new focus event - { - EventRef evRef = NULL ; - - err = MacCreateEvent( - NULL , kEventClassControl , kEventControlSetFocusPart , TicksToEventTime( TickCount() ) , - kEventAttributeUserEvent , &evRef ); - verify_noerr( err ); - - wxMacCarbonEvent cEvent( evRef ) ; - cEvent.SetParameter( kEventParamDirectObject , (ControlRef) GetHandle() ) ; - cEvent.SetParameter(kEventParamControlPart , typeControlPartCode , kControlFocusNextPart ) ; - - wxMacWindowEventHandler( NULL , evRef , this ) ; - ReleaseEvent( evRef ) ; - } -#endif } void wxWindowMac::DoCaptureMouse() @@ -1684,23 +1488,17 @@ bool wxWindowMac::SetCursor(const wxCursor& cursor) pt.h = hiPoint.x; pt.v = hiPoint.y; #else - CGrafPtr savePort ; - Boolean swapped = QDSwapPort( GetWindowPort( window ) , &savePort ) ; - - // TODO: If we ever get a GetCurrentEvent... replacement - // for the mouse position, use it... - - - GetMouse( &pt ) ; + GetGlobalMouse( &pt ); + int x = pt.h; + int y = pt.v; + ScreenToClient(&x, &y); + pt.h = x; + pt.v = y; #endif control = FindControlUnderMouse( pt , window , &part ) ; if ( control ) mouseWin = wxFindControlFromMacControl( control ) ; -#if MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5 - if ( swapped ) - QDSwapPort( savePort , NULL ) ; -#endif } if ( mouseWin == this && !wxIsBusy() ) @@ -2058,17 +1856,12 @@ wxString wxWindowMac::GetLabel() const bool wxWindowMac::Show(bool show) { - bool former = MacIsReallyShown() ; if ( !wxWindowBase::Show(show) ) return false; - // TODO: use visibilityChanged Carbon Event for OSX if ( m_peer ) m_peer->SetVisibility( show , true ) ; - if ( former != MacIsReallyShown() ) - MacPropagateVisibilityChanged() ; - return true; } @@ -2077,53 +1870,6 @@ void wxWindowMac::DoEnable(bool enable) m_peer->Enable( enable ) ; } -// -// status change propagations (will be not necessary for OSX later ) -// - -void wxWindowMac::MacPropagateVisibilityChanged() -{ -#if !TARGET_API_MAC_OSX - MacVisibilityChanged() ; - - wxWindowMac *child; - wxWindowList::compatibility_iterator node = GetChildren().GetFirst(); - while ( node ) - { - child = node->GetData(); - if ( child->IsShown() ) - child->MacPropagateVisibilityChanged() ; - - node = node->GetNext(); - } -#endif -} - -void wxWindowMac::OnEnabled(bool WXUNUSED(enabled)) -{ -#if !TARGET_API_MAC_OSX - MacEnabledStateChanged() ; -#endif -} - -void wxWindowMac::MacPropagateHiliteChanged() -{ -#if !TARGET_API_MAC_OSX - MacHiliteChanged() ; - - wxWindowMac *child; - wxWindowList::compatibility_iterator node = GetChildren().GetFirst(); - while ( node ) - { - child = node->GetData(); - if (child /* && child->IsEnabled() */) - child->MacPropagateHiliteChanged() ; - - node = node->GetNext(); - } -#endif -} - // // status change notifications // @@ -2138,6 +1884,7 @@ void wxWindowMac::MacHiliteChanged() void wxWindowMac::MacEnabledStateChanged() { + OnEnabled( m_peer->IsEnabled() ); } // @@ -2786,13 +2533,9 @@ void wxWindowMac::ClearBackground() void wxWindowMac::Update() { -#if TARGET_API_MAC_OSX wxTopLevelWindowMac* top = MacGetTopLevelWindow(); if (top) top->MacPerformUpdates() ; -#else - ::Draw1Control( m_peer->GetControlRef() ) ; -#endif } wxTopLevelWindowMac* wxWindowMac::MacGetTopLevelWindow() const @@ -2934,7 +2677,7 @@ void wxWindowMac::MacUpdateClippedRects() const /* This function must not change the updatergn ! */ -bool wxWindowMac::MacDoRedraw( WXHRGN updatergnr , long time ) +bool wxWindowMac::MacDoRedraw( void* updatergnr , long time ) { bool handled = false ; Rect updatebounds ; @@ -2959,9 +2702,9 @@ bool wxWindowMac::MacDoRedraw( WXHRGN updatergnr , long time ) // the grow-box area of a scrolled window (scroll sample) wxDC* dc = new wxWindowDC(this); if ( IsTopLevel() ) - dc->SetClippingRegion(wxRegion(updatergn)); + dc->SetClippingRegion(wxRegion(HIShapeCreateWithQDRgn(updatergn))); else - dc->SetClippingRegion(wxRegion(newupdate)); + dc->SetClippingRegion(wxRegion(HIShapeCreateWithQDRgn(newupdate))); wxEraseEvent eevent( GetId(), dc ); eevent.SetEventObject( this ); @@ -2973,7 +2716,7 @@ bool wxWindowMac::MacDoRedraw( WXHRGN updatergnr , long time ) // calculate a client-origin version of the update rgn and set m_updateRegion to that OffsetRgn( newupdate , -origin.x , -origin.y ) ; - m_updateRegion = newupdate ; + m_updateRegion = wxRegion(HIShapeCreateWithQDRgn(newupdate)) ; DisposeRgn( newupdate ) ; if ( !m_updateRegion.Empty() )