Cocoa_drawRect: Set m_updateRegion using the NSRect or if possible (Panther)
using the array from [NSView -getRectsBeingDrawn:count:] git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@26764 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -22,6 +22,9 @@
|
|||||||
#import <AppKit/NSScrollView.h>
|
#import <AppKit/NSScrollView.h>
|
||||||
#import <AppKit/NSColor.h>
|
#import <AppKit/NSColor.h>
|
||||||
#import <AppKit/NSClipView.h>
|
#import <AppKit/NSClipView.h>
|
||||||
|
#import <Foundation/NSException.h>
|
||||||
|
|
||||||
|
#include <objc/objc-runtime.h>
|
||||||
|
|
||||||
// Turn this on to paint green over the dummy views for debugging
|
// Turn this on to paint green over the dummy views for debugging
|
||||||
#undef WXCOCOA_FILL_DUMMY_VIEW
|
#undef WXCOCOA_FILL_DUMMY_VIEW
|
||||||
@@ -346,8 +349,21 @@ bool wxWindowCocoa::Cocoa_drawRect(const NSRect &rect)
|
|||||||
wxLogDebug(wxT("Paint event recursion!"));
|
wxLogDebug(wxT("Paint event recursion!"));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
//FIXME: should probably turn that rect into the update region
|
|
||||||
m_isInPaint = TRUE;
|
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);
|
wxPaintEvent event(m_windowId);
|
||||||
event.SetEventObject(this);
|
event.SetEventObject(this);
|
||||||
bool ret = GetEventHandler()->ProcessEvent(event);
|
bool ret = GetEventHandler()->ProcessEvent(event);
|
||||||
|
Reference in New Issue
Block a user