Blob Blame History Raw
From 8e257245396ec0f9edde494904a1c7d9835535bd Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Toma=C5=BE=20Vajngerl?= <tomaz.vajngerl@collabora.com>
Date: Sat, 31 Oct 2015 13:59:46 +0100
Subject: [PATCH 251/398] android: don't use alpha VDev when painting tiles on
 Android

Improves tile rendering speed.

Change-Id: I6a4b87fbc1d9ed284f5c4a781d769eeacd9bc2ca
(cherry picked from commit e0d68da3ff3ae81e35f4e7393fb998a41886831d)
---
 desktop/source/lib/init.cxx | 34 ++++++++++++++++++++++++----------
 1 file changed, 24 insertions(+), 10 deletions(-)

diff --git a/desktop/source/lib/init.cxx b/desktop/source/lib/init.cxx
index 6785ae2328d4..98747ea62e3a 100644
--- a/desktop/source/lib/init.cxx
+++ b/desktop/source/lib/init.cxx
@@ -773,7 +773,30 @@ void doc_paintTile (LibreOfficeKitDocument* pThis,
 
 #if defined(UNX) && !defined(MACOSX) && !defined(ENABLE_HEADLESS)
 
-#ifndef IOS
+#if defined(IOS)
+    SystemGraphicsData aData;
+    aData.rCGContext = reinterpret_cast<CGContextRef>(pBuffer);
+    // the Size argument is irrelevant, I hope
+    ScopedVclPtrInstance<VirtualDevice> pDevice(&aData, Size(1, 1), (sal_uInt16)0);
+
+    pDoc->paintTile(*pDevice.get(), nCanvasWidth, nCanvasHeight,
+                    nTilePosX, nTilePosY, nTileWidth, nTileHeight);
+#elif defined(ANDROID)
+    InitSvpForLibreOfficeKit();
+
+    ScopedVclPtrInstance< VirtualDevice > pDevice(nullptr, Size(1, 1), (sal_uInt16)32) ;
+
+    boost::shared_array<sal_uInt8> aBuffer(pBuffer, NoDelete< sal_uInt8 >());
+
+    boost::shared_array<sal_uInt8> aAlphaBuffer;
+
+    pDevice->SetOutputSizePixelScaleOffsetAndBuffer(
+                Size(nCanvasWidth, nCanvasHeight), Fraction(1.0), Point(),
+                aBuffer, aAlphaBuffer, true);
+
+    pDoc->paintTile(*pDevice.get(), nCanvasWidth, nCanvasHeight,
+                    nTilePosX, nTilePosY, nTileWidth, nTileHeight);
+#else
     InitSvpForLibreOfficeKit();
 
     ScopedVclPtrInstance< VirtualDevice > pDevice(nullptr, Size(1, 1), (sal_uInt16)32) ;
@@ -806,15 +829,6 @@ void doc_paintTile (LibreOfficeKitDocument* pThis,
             pBuffer[nOffset * 4 +3] = 0xff - aAlpha[nOffset];
         }
     }
-
-#else
-    SystemGraphicsData aData;
-    aData.rCGContext = reinterpret_cast<CGContextRef>(pBuffer);
-    // the Size argument is irrelevant, I hope
-    ScopedVclPtrInstance<VirtualDevice> pDevice(&aData, Size(1, 1), (sal_uInt16)0);
-
-    pDoc->paintTile(*pDevice.get(), nCanvasWidth, nCanvasHeight,
-                    nTilePosX, nTilePosY, nTileWidth, nTileHeight);
 #endif
 
     static bool bDebug = getenv("LOK_DEBUG") != 0;
-- 
2.12.0