desktop/source/lib/init.cxx | 71 +++++++++++++++++++++++++++----------------- 1 file changed, 44 insertions(+), 27 deletions(-)
New commits: commit b85aa20fc2d5037dcbcd687673f194167405b671 Author: Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk> AuthorDate: Mon Jun 3 12:50:47 2019 +0900 Commit: Tor Lillqvist <t...@collabora.com> CommitDate: Mon Jun 3 13:38:01 2019 +0200 LOK: Factor out iOS painting code Change-Id: Ica706842003fe60ba864e013614eb535580446bb Reviewed-on: https://gerrit.libreoffice.org/73365 Reviewed-by: Tor Lillqvist <t...@collabora.com> Tested-by: Tor Lillqvist <t...@collabora.com> diff --git a/desktop/source/lib/init.cxx b/desktop/source/lib/init.cxx index bd17b54eea8d..2342d6a8f10a 100644 --- a/desktop/source/lib/init.cxx +++ b/desktop/source/lib/init.cxx @@ -1673,6 +1673,45 @@ ITiledRenderable* getTiledRenderable(LibreOfficeKitDocument* pThis) return dynamic_cast<ITiledRenderable*>(pDocument->mxComponent.get()); } +#ifdef IOS +void paintTileToCGContext(ITiledRenderable* pDocument, + void* rCGContext, const Size nCanvasSize, + const int nTilePosX, const int nTilePosY, + const int nTileWidth, const int nTileHeight) +{ + SystemGraphicsData aData; + aData.rCGContext = reinterpret_cast<CGContextRef>(rCGContext); + + ScopedVclPtrInstance<VirtualDevice> pDevice(&aData, Size(1, 1), DeviceFormat::DEFAULT); + pDevice->SetBackground(Wallpaper(COL_TRANSPARENT)); + pDevice->SetOutputSizePixel(nCanvasSize); + pDocument->paintTile(*pDevice.get(), nCanvasSize.Width(), nCanvasSize.Height(), + nTilePosX, nTilePosY, nTileWidth, nTileHeight); +} + +void paintTileIOS(LibreOfficeKitDocument* pThis, + unsigned char* pBuffer, + const int nCanvasWidth, const int nCanvasHeight, const double fDPIScale, + const int nTilePosX, const int nTilePosY, + const int nTileWidth, const int nTileHeight) +{ + CGContextRef pCGContext = CGBitmapContextCreate(pBuffer, nCanvasWidth, nCanvasHeight, 8, + nCanvasWidth * 4, CGColorSpaceCreateDeviceRGB(), + kCGImageAlphaPremultipliedFirst | kCGImageByteOrder32Little); + + // Use the vcl.cg tag even if this code is not in vcl, to match all other SAL_INFO logging about Core Graphics, in vcl. + SAL_INFO("vcl.cg", "CGBitmapContextCreate(" << nCanvasWidth << "x" << nCanvasHeight << "x32) = " << pCGContext); + + CGContextTranslateCTM(pCGContext, 0, nCanvasHeight); + CGContextScaleCTM(pCGContext, fDPIScale, -fDPIScale); + + doc_paintTileToCGContext(pThis, (void*) pCGContext, nCanvasWidth, nCanvasHeight, nTilePosX, nTilePosY, nTileWidth, nTileHeight); + + SAL_INFO("vcl.cg", "CGContextRelease(" << pCGContext << ")"); + CGContextRelease(pCGContext); +} +#endif + } // anonymous namespace // Wonder global state ... @@ -2548,7 +2587,7 @@ static void doc_paintTile(LibreOfficeKitDocument* pThis, // what Calc's internal scaling would do - because that one is trying to // fit the lines between cells to integer multiples of pixels. comphelper::ScopeGuard dpiScaleGuard([]() { comphelper::LibreOfficeKit::setDPIScale(1.0); }); - double fDPIScaleX = 1; + double fDPIScaleX = 1.0; if (doc_getDocumentType(pThis) == LOK_DOCTYPE_SPREADSHEET) { fDPIScaleX = (nCanvasWidth * 3840.0) / (256.0 * nTileWidth); @@ -2559,18 +2598,7 @@ static void doc_paintTile(LibreOfficeKitDocument* pThis, #if defined(UNX) && !defined(MACOSX) && !defined(ENABLE_HEADLESS) #if defined(IOS) - CGContextRef cgc = CGBitmapContextCreate(pBuffer, nCanvasWidth, nCanvasHeight, 8, nCanvasWidth*4, CGColorSpaceCreateDeviceRGB(), kCGImageAlphaPremultipliedFirst | kCGImageByteOrder32Little); - - // Use the vcl.cg tag even if this code is not in vcl, to match all other SAL_INFO logging about Core Graphics, in vcl. - SAL_INFO( "vcl.cg", "CGBitmapContextCreate(" << nCanvasWidth << "x" << nCanvasHeight << "x32) = " << cgc ); - - CGContextTranslateCTM(cgc, 0, nCanvasHeight); - CGContextScaleCTM(cgc, fDPIScaleX, -fDPIScaleX); - - doc_paintTileToCGContext(pThis, (void*) cgc, nCanvasWidth, nCanvasHeight, nTilePosX, nTilePosY, nTileWidth, nTileHeight); - - SAL_INFO( "vcl.cg", "CGContextRelease(" << cgc << ")" ); - CGContextRelease(cgc); + paintTileIOS(pThis, pBuffer, nCanvasWidth, nCanvasHeight, fDPIScaleX, nTilePosX, nTilePosY, nTileWidth, nTileHeight); #else ScopedVclPtrInstance< VirtualDevice > pDevice(nullptr, Size(1, 1), DeviceFormat::DEFAULT) ; @@ -2608,8 +2636,7 @@ static void doc_paintTile(LibreOfficeKitDocument* pThis, #ifdef IOS // This function is separate only to be used by LibreOfficeLight. If that app can be retired, this -// function's code can be inlined into the iOS part of doc_paintTile(). - +// function's code can be inlined. static void doc_paintTileToCGContext(LibreOfficeKitDocument* pThis, void* rCGContext, const int nCanvasWidth, const int nCanvasHeight, @@ -2630,18 +2657,8 @@ static void doc_paintTileToCGContext(LibreOfficeKitDocument* pThis, return; } - SystemGraphicsData aData; - aData.rCGContext = reinterpret_cast<CGContextRef>(rCGContext); - // the Size argument is irrelevant, I hope - ScopedVclPtrInstance<VirtualDevice> pDevice(&aData, Size(1, 1), DeviceFormat::DEFAULT); - - pDevice->SetBackground(Wallpaper(COL_TRANSPARENT)); - - pDevice->SetOutputSizePixel(Size(nCanvasWidth, nCanvasHeight)); - - pDoc->paintTile(*pDevice.get(), nCanvasWidth, nCanvasHeight, - nTilePosX, nTilePosY, nTileWidth, nTileHeight); - + Size aCanvasSize(nCanvasWidth, nCanvasHeight); + paintTileToCGContext(pDoc, rCGContext, aCanvasSize, nTilePosX, nTilePosY, nTileWidth, nTileHeight); } #endif _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits