diff options
Diffstat (limited to 'vcl/ios/iosinst.cxx')
-rw-r--r-- | vcl/ios/iosinst.cxx | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/vcl/ios/iosinst.cxx b/vcl/ios/iosinst.cxx index 8b654a58003a..dd92c6e5af2c 100644 --- a/vcl/ios/iosinst.cxx +++ b/vcl/ios/iosinst.cxx @@ -332,14 +332,16 @@ IMPL_LINK( IosSalInstance, RenderWindows, RenderWindowsArg*, arg ) rc = pthread_mutex_lock( &m_aRenderMutex ); SAL_WARN_IF( rc != 0, "vcl.ios", "pthread_mutex_lock failed: " << strerror( rc ) ); - for( std::list< SalFrame* >::const_iterator it = getFrames().begin(); - it != getFrames().end(); + CGRect invalidRect = arg->rect; + + for( std::list< SalFrame* >::const_reverse_iterator it = getFrames().rbegin(); + it != getFrames().rend(); it++ ) { IosSalFrame *pFrame = static_cast<IosSalFrame *>(*it); SalFrameGeometry aGeom = pFrame->GetGeometry(); CGRect bbox = CGRectMake( aGeom.nX, aGeom.nY, aGeom.nWidth, aGeom.nHeight ); if ( pFrame->IsVisible() && - CGRectIntersectsRect( arg->rect, bbox ) ) { + CGRectIntersectsRect( invalidRect, bbox ) ) { const basebmp::BitmapDeviceSharedPtr aDevice = pFrame->getDevice(); CGDataProviderRef provider = @@ -358,6 +360,12 @@ IMPL_LINK( IosSalInstance, RenderWindows, RenderWindowsArg*, arg ) kCGRenderingIntentDefault ); CGContextDrawImage( arg->context, bbox, image ); + // if current frame covers the whole invalidRect then break + if (CGRectEqualToRect(CGRectIntersection(invalidRect, bbox), invalidRect)) + { + break; + } + pFrame->resetDamaged(); } } |