From: Kevin Ollivier Date: Mon, 9 Feb 2009 02:20:03 +0000 (+0000) Subject: Initial support for EVT_ERASE_BACKGROUND for OS X Cocoa. X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/f487501a2c84aa5053b5c3ea57fa2627bac25041 Initial support for EVT_ERASE_BACKGROUND for OS X Cocoa. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@58796 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/src/osx/cocoa/window.mm b/src/osx/cocoa/window.mm index 49cde7ade9..3f9f4e7154 100644 --- a/src/osx/cocoa/window.mm +++ b/src/osx/cocoa/window.mm @@ -12,6 +12,7 @@ #include "wx/wxprec.h" #ifndef WX_PRECOMP + #include "wx/dcclient.h" #include "wx/nonownedwnd.h" #include "wx/log.h" #endif @@ -754,6 +755,20 @@ void wxWidgetCocoaImpl::drawRect(void* rect, WXWidget slf, void *_cmd) wxpeer->GetUpdateRegion() = updateRgn; wxpeer->MacSetCGContextRef( context ); + // first send an erase event to the entire update area + // for the toplevel window this really is the entire area + // for all the others only their client area, otherwise they + // might be drawing with full alpha and eg put blue into + // the grow-box area of a scrolled window (scroll sample) + + wxDC* dc = new wxWindowDC(wxpeer); + dc->SetDeviceClippingRegion(updateRgn); + + wxEraseEvent eevent( wxpeer->GetId(), dc ); + eevent.SetEventObject( wxpeer ); + wxpeer->HandleWindowEvent( eevent ); + delete dc ; + wxPaintEvent event; event.SetTimestamp(0); // todo event.SetEventObject(wxpeer);