From 015a0a652f89c05ccef2b23af3d81604b990ba33 Mon Sep 17 00:00:00 2001 From: tsahi glik Date: Fri, 30 Aug 2013 13:18:23 -0700 Subject: in iOS avoid copying covered windows to screen Change-Id: Iebf53e5c2e3909e068739351ccce497ca91b67a5 Reviewed-on: https://gerrit.libreoffice.org/5710 Reviewed-by: Tor Lillqvist Tested-by: Tor Lillqvist --- vcl/ios/iosinst.cxx | 14 +++++++++++--- 1 file 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(*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(); } } -- cgit