organizing code, adding offset correction for update region when non native control borders are used, fixes #12229
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@65002 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
parent
f960e9e7e5
commit
396f0e3dd4
@ -1077,9 +1077,42 @@ bool wxWidgetCocoaImpl::isFlipped(WXWidget WXUNUSED(slf), void *WXUNUSED(_cmd))
|
||||
|
||||
void wxWidgetCocoaImpl::drawRect(void* rect, WXWidget slf, void *WXUNUSED(_cmd))
|
||||
{
|
||||
// preparing the update region
|
||||
|
||||
wxRegion updateRgn;
|
||||
const NSRect *rects;
|
||||
NSInteger count;
|
||||
|
||||
[slf getRectsBeingDrawn:&rects count:&count];
|
||||
for ( int i = 0 ; i < count ; ++i )
|
||||
{
|
||||
updateRgn.Union(wxFromNSRect(slf, rects[i]));
|
||||
}
|
||||
|
||||
wxWindow* wxpeer = GetWXPeer();
|
||||
|
||||
if ( wxpeer->MacGetLeftBorderSize() != 0 || wxpeer->MacGetTopBorderSize() != 0 )
|
||||
{
|
||||
// as this update region is in native window locals we must adapt it to wx window local
|
||||
updateRgn.Offset( wxpeer->MacGetLeftBorderSize() , wxpeer->MacGetTopBorderSize() );
|
||||
}
|
||||
|
||||
if ( wxpeer->MacGetTopLevelWindow()->GetWindowStyle() & wxFRAME_SHAPED )
|
||||
{
|
||||
int xoffset = 0, yoffset = 0;
|
||||
wxRegion rgn = wxpeer->MacGetTopLevelWindow()->GetShape();
|
||||
wxpeer->MacRootWindowToWindow( &xoffset, &yoffset );
|
||||
rgn.Offset( xoffset, yoffset );
|
||||
updateRgn.Intersect(rgn);
|
||||
}
|
||||
|
||||
wxpeer->GetUpdateRegion() = updateRgn;
|
||||
|
||||
// setting up the drawing context
|
||||
|
||||
CGContextRef context = (CGContextRef) [[NSGraphicsContext currentContext] graphicsPort];
|
||||
CGContextSaveGState( context );
|
||||
|
||||
|
||||
#if OSX_DEBUG_DRAWING
|
||||
CGContextBeginPath( context );
|
||||
CGContextMoveToPoint(context, 0, 0);
|
||||
@ -1094,34 +1127,13 @@ void wxWidgetCocoaImpl::drawRect(void* rect, WXWidget slf, void *WXUNUSED(_cmd))
|
||||
CGContextClosePath( context );
|
||||
CGContextStrokePath(context);
|
||||
#endif
|
||||
|
||||
|
||||
if ( !m_isFlipped )
|
||||
{
|
||||
CGContextTranslateCTM( context, 0, [m_osxView bounds].size.height );
|
||||
CGContextScaleCTM( context, 1, -1 );
|
||||
}
|
||||
|
||||
wxRegion updateRgn;
|
||||
const NSRect *rects;
|
||||
NSInteger count;
|
||||
|
||||
[slf getRectsBeingDrawn:&rects count:&count];
|
||||
for ( int i = 0 ; i < count ; ++i )
|
||||
{
|
||||
updateRgn.Union(wxFromNSRect(slf, rects[i]));
|
||||
}
|
||||
|
||||
wxWindow* wxpeer = GetWXPeer();
|
||||
if ( wxpeer->MacGetTopLevelWindow()->GetWindowStyle() & wxFRAME_SHAPED )
|
||||
{
|
||||
int xoffset = 0, yoffset = 0;
|
||||
wxRegion rgn = wxpeer->MacGetTopLevelWindow()->GetShape();
|
||||
wxpeer->MacRootWindowToWindow( &xoffset, &yoffset );
|
||||
rgn.Offset( xoffset, yoffset );
|
||||
updateRgn.Intersect(rgn);
|
||||
}
|
||||
|
||||
wxpeer->GetUpdateRegion() = updateRgn;
|
||||
wxpeer->MacSetCGContextRef( context );
|
||||
|
||||
bool handled = wxpeer->MacDoRedraw( 0 );
|
||||
|
Loading…
Reference in New Issue
Block a user