[Libreoffice-commits] core.git: vcl/ios

tsahi glik tsahi.glik at cloudon.com
Thu Sep 12 05:25:24 PDT 2013


 vcl/ios/iosinst.cxx |   14 +++++++++++---
 1 file changed, 11 insertions(+), 3 deletions(-)

New commits:
commit 015a0a652f89c05ccef2b23af3d81604b990ba33
Author: tsahi glik <tsahi.glik at cloudon.com>
Date:   Fri Aug 30 13:18:23 2013 -0700

    in iOS avoid copying covered windows to screen
    
    Change-Id: Iebf53e5c2e3909e068739351ccce497ca91b67a5
    Reviewed-on: https://gerrit.libreoffice.org/5710
    Reviewed-by: Tor Lillqvist <tml at collabora.com>
    Tested-by: Tor Lillqvist <tml at collabora.com>

diff --git a/vcl/ios/iosinst.cxx b/vcl/ios/iosinst.cxx
index 8b654a5..dd92c6e 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();
         }
     }


More information about the Libreoffice-commits mailing list