diff --git a/src/cocoa/window.mm b/src/cocoa/window.mm index b74cc3ca5e..7778c84c39 100644 --- a/src/cocoa/window.mm +++ b/src/cocoa/window.mm @@ -22,6 +22,9 @@ #import #import #import +#import + +#include // Turn this on to paint green over the dummy views for debugging #undef WXCOCOA_FILL_DUMMY_VIEW @@ -346,8 +349,21 @@ bool wxWindowCocoa::Cocoa_drawRect(const NSRect &rect) wxLogDebug(wxT("Paint event recursion!")); return false; } - //FIXME: should probably turn that rect into the update region m_isInPaint = TRUE; + + // Set m_updateRegion + const NSRect *rects = ▭ // The bounding box of the region + int countRects = 1; + // Try replacing the larger rectangle with a list of smaller ones: +NS_DURING + // This only works on Panther +// [GetNSView() getRectsBeingDrawn:&rects count:&countRects]; + // This compiles everywhere (and still only works on Panther) + objc_msgSend(GetNSView(),@selector(getRectsBeingDrawn:count:),&rects,&countRects); +NS_HANDLER +NS_ENDHANDLER + m_updateRegion = wxRegion(rects,countRects); + wxPaintEvent event(m_windowId); event.SetEventObject(this); bool ret = GetEventHandler()->ProcessEvent(event);