unotools/source/config/fltrcfg.cxx | 16 +++++++++ vcl/quartz/salbmp.cxx | 39 ++++++++++++++++++++++ vcl/quartz/salgdicommon.cxx | 63 +++++++++++++++++++------------------ 3 files changed, 87 insertions(+), 31 deletions(-)
New commits: commit 6807c13a39cfcfd16db221196e348f5fd374e967 Author: Tor Lillqvist <t...@collabora.com> Date: Thu Apr 10 16:59:03 2014 +0300 More iOS-only debugging hackery: write CGImages out as PNGs for inspection Change-Id: I966189a74414ea83b2ec7f5035cd7c9d4d674179 diff --git a/vcl/quartz/salbmp.cxx b/vcl/quartz/salbmp.cxx index 1e06fd43..45c3e1a 100644 --- a/vcl/quartz/salbmp.cxx +++ b/vcl/quartz/salbmp.cxx @@ -46,6 +46,38 @@ static const unsigned long k32BitRedColorMask = 0x00ff0000; static const unsigned long k32BitGreenColorMask = 0x0000ff00; static const unsigned long k32BitBlueColorMask = 0x000000ff; +#if defined IOS && defined DBG_UTIL + +#include <MobileCoreServices/UTCoreTypes.h> +#include <ImageIO/ImageIO.h> + +static void writeImageToFile(CGImageRef image, const char *baseName) +{ + static int counter = 0; + NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); + NSString *documentsDirectory = [paths objectAtIndex:0]; + NSString *path = [NSString stringWithFormat:@"%@/%s.%d.png", documentsDirectory, baseName, counter++]; + CFURLRef url = (CFURLRef)[NSURL fileURLWithPath:path]; + CGImageDestinationRef destination = CGImageDestinationCreateWithURL(url, kUTTypePNG, 1, NULL); + CGImageDestinationAddImage(destination, image, nil); + + if (!CGImageDestinationFinalize(destination)) { + NSLog(@"Failed to write image to %@", path); + } else { + SAL_DEBUG("--- saved image " << baseName << " to " << [path UTF8String]); + } + + CFRelease(destination); +} + +#define DBG_WRITE_IMAGE(image, name) writeImageToFile(image, name) + +#else + +#define DBG_WRITE_IMAGE(image, name) /* empty */ + +#endif + static bool isValidBitCount( sal_uInt16 nBitCount ) { return (nBitCount == 1) || (nBitCount == 4) || (nBitCount == 8) || (nBitCount == 16) || (nBitCount == 24) || (nBitCount == 32); @@ -753,6 +785,7 @@ CGImageRef QuartzSalBitmap::CreateWithMask( const QuartzSalBitmap& rMask, // CGImageCreateWithMask() only likes masks or greyscale images => convert if needed // TODO: isolate in an extra method? + DBG_WRITE_IMAGE(xMask, "xMask"); if( !CGImageIsMask(xMask) || rMask.GetBitCount() != 8)//(CGImageGetColorSpace(xMask) != GetSalData()->mxGraySpace) ) { const CGRect xImageRect=CGRectMake( 0, 0, nWidth, nHeight );//the rect has no offset @@ -763,7 +796,7 @@ CGImageRef QuartzSalBitmap::CreateWithMask( const QuartzSalBitmap& rMask, void* pMaskMem = rtl_allocateMemory( nMaskBytesPerRow * nHeight ); CGContextRef xMaskContext = CGBitmapContextCreate( pMaskMem, nWidth, nHeight, 8, nMaskBytesPerRow, GetSalData()->mxGraySpace, kCGImageAlphaNone ); - CG_TRACE( "CGBitmapContextCreate(" << nWidth << "x" << nHeight << "x8) = " << xMaskContext ); + CG_TRACE( "CGBitmapContextCreate(" << nWidth << "x" << nHeight << "x8," << nMaskBytesPerRow << ") = " << xMaskContext ); CG_TRACE( "CGContextDrawImage(" << xMaskContext << "," << xImageRect << "," << xMask << ")" ); CGContextDrawImage( xMaskContext, xImageRect, xMask ); CG_TRACE( "CFRelease(" << xMask << ")" ); @@ -773,6 +806,7 @@ CGImageRef QuartzSalBitmap::CreateWithMask( const QuartzSalBitmap& rMask, static const CGFloat* pDecode = NULL; xMask = CGImageMaskCreate( nWidth, nHeight, 8, 8, nMaskBytesPerRow, xDataProvider, pDecode, false ); CG_TRACE( "CGImageMaskCreate(" << nWidth << "," << nHeight << ",8,8) = " << xMask ); + DBG_WRITE_IMAGE(xMask, "xMask.new"); CFRelease( xDataProvider ); CG_TRACE( "CFRelease(" << xMaskContext << ")" ); CFRelease( xMaskContext ); @@ -784,6 +818,8 @@ CGImageRef QuartzSalBitmap::CreateWithMask( const QuartzSalBitmap& rMask, // combine image and alpha mask CGImageRef xMaskedImage = CGImageCreateWithMask( xImage, xMask ); CG_TRACE( "CGImageCreateWithMask(" << xImage << "," << xMask << ") = " << xMaskedImage ); + DBG_WRITE_IMAGE(xImage, "xImage"); + DBG_WRITE_IMAGE(xMaskedImage, "xMaskedImage"); CG_TRACE( "CFRelease(" << xMask << ")" ); CFRelease( xMask ); CG_TRACE( "CFRelease(" << xImage << ")" ); commit d0315bd4819416142b413c33f40db16c4fb2dbd8 Author: Tor Lillqvist <t...@collabora.com> Date: Thu Apr 10 13:01:48 2014 +0300 Set mbPrinter anc mbVirDev for iOS, too But, has no visible effect, doesn't fix rendering problems. Change-Id: Ic79b38b665e357a2dafe679c35979250c3bff538 diff --git a/vcl/quartz/salgdicommon.cxx b/vcl/quartz/salgdicommon.cxx index 5f90fef..ceb1ee5 100644 --- a/vcl/quartz/salgdicommon.cxx +++ b/vcl/quartz/salgdicommon.cxx @@ -2140,9 +2140,9 @@ void AquaSalGraphics::SetVirDevGraphics( CGLayerRef xLayer, CGContextRef xContex #ifndef IOS mbWindow = false; +#endif mbPrinter = false; mbVirDev = true; -#endif #ifdef IOS (void) nBitmapDepth; commit f5eae0955438dcaf9e7109ba61d7398fe2eebee1 Author: Tor Lillqvist <t...@collabora.com> Date: Thu Apr 10 12:42:07 2014 +0300 Mention early exits in the verbose debugging log Change-Id: I68e5aa92cb6ccff8b8d077c311d2ebc3f4676ae7 diff --git a/vcl/quartz/salgdicommon.cxx b/vcl/quartz/salgdicommon.cxx index ba80504..5f90fef 100644 --- a/vcl/quartz/salgdicommon.cxx +++ b/vcl/quartz/salgdicommon.cxx @@ -58,10 +58,13 @@ extern int DBG_DRAW_ROUNDS, DBG_DRAW_COUNTER, DBG_DRAW_DEPTH; SAL_DEBUG("<=== " << s << " " << DBG_DRAW_COUNTER); \ } while (false) +#define DBG_DRAW_OPERATION_EXIT_EARLY(s) DBG_DRAW_OPERATION_EXIT(s << " exit early " << __LINE__) + #else #define DBG_DRAW_OPERATION(s,v) /* empty */ #define DBG_DRAW_OPERATION_EXIT(s) /* empty */ +#define DBG_DRAW_OPERATION_EXIT_EARLY(s) /* empty */ #endif @@ -569,7 +572,7 @@ bool AquaSalGraphics::drawAlphaBitmap( const SalTwoRect& rTR, // An image mask can't have a depth > 8 bits (should be 1 to 8 bits) if( rAlphaBmp.GetBitCount() > 8 ) { - DBG_DRAW_OPERATION_EXIT("drawAlphaBitmap"); + DBG_DRAW_OPERATION_EXIT_EARLY("drawAlphaBitmap"); return false; } @@ -577,7 +580,7 @@ bool AquaSalGraphics::drawAlphaBitmap( const SalTwoRect& rTR, // horizontal/vertical mirroring not implemented yet if( rTR.mnDestWidth < 0 || rTR.mnDestHeight < 0 ) { - DBG_DRAW_OPERATION_EXIT("drawAlphaBitmap"); + DBG_DRAW_OPERATION_EXIT_EARLY("drawAlphaBitmap"); return false; } @@ -588,7 +591,7 @@ bool AquaSalGraphics::drawAlphaBitmap( const SalTwoRect& rTR, rTR.mnSrcHeight ); if( !xMaskedImage ) { - DBG_DRAW_OPERATION_EXIT("drawAlphaBitmap"); + DBG_DRAW_OPERATION_EXIT_EARLY("drawAlphaBitmap"); return false; } @@ -615,7 +618,7 @@ bool AquaSalGraphics::drawTransformedBitmap( if( !CheckContext() ) { - DBG_DRAW_OPERATION_EXIT("drawTransformedBitmap"); + DBG_DRAW_OPERATION_EXIT_EARLY("drawTransformedBitmap"); return true; } @@ -630,7 +633,7 @@ bool AquaSalGraphics::drawTransformedBitmap( xImage = rSrcSalBmp.CreateWithMask( *pMaskSalBmp, 0, 0, (int)aSize.Width(), (int)aSize.Height() ); if( !xImage ) { - DBG_DRAW_OPERATION_EXIT("drawTransformedBitmap"); + DBG_DRAW_OPERATION_EXIT_EARLY("drawTransformedBitmap"); return false; } @@ -672,7 +675,7 @@ bool AquaSalGraphics::drawAlphaRect( long nX, long nY, long nWidth, if( !CheckContext() ) { - DBG_DRAW_OPERATION_EXIT("drawAlphaRect"); + DBG_DRAW_OPERATION_EXIT_EARLY("drawAlphaRect"); return true; } @@ -711,7 +714,7 @@ void AquaSalGraphics::drawBitmap( const SalTwoRect& rPosAry, const SalBitmap& rS if( !CheckContext() ) { - DBG_DRAW_OPERATION_EXIT("drawBitmap"); + DBG_DRAW_OPERATION_EXIT_EARLY("drawBitmap"); return; } @@ -720,7 +723,7 @@ void AquaSalGraphics::drawBitmap( const SalTwoRect& rPosAry, const SalBitmap& rS (int)rPosAry.mnSrcWidth, (int)rPosAry.mnSrcHeight ); if( !xImage ) { - DBG_DRAW_OPERATION_EXIT("drawBitmap"); + DBG_DRAW_OPERATION_EXIT_EARLY("drawBitmap"); return; } @@ -747,7 +750,7 @@ void AquaSalGraphics::drawBitmap( const SalTwoRect& rPosAry, const SalBitmap& rS if( !CheckContext() ) { - DBG_DRAW_OPERATION_EXIT("drawBitmap"); + DBG_DRAW_OPERATION_EXIT_EARLY("drawBitmap"); return; } @@ -757,7 +760,7 @@ void AquaSalGraphics::drawBitmap( const SalTwoRect& rPosAry, const SalBitmap& rS rPosAry.mnSrcWidth, rPosAry.mnSrcHeight ) ); if( !xMaskedImage ) { - DBG_DRAW_OPERATION_EXIT("drawBitmap"); + DBG_DRAW_OPERATION_EXIT_EARLY("drawBitmap"); return; } @@ -832,13 +835,13 @@ void AquaSalGraphics::drawLine( long nX1, long nY1, long nX2, long nY2 ) // #i109453# platform independent code expects at least one pixel to be drawn drawPixel( nX1, nY1 ); - DBG_DRAW_OPERATION_EXIT("drawLine"); + DBG_DRAW_OPERATION_EXIT_EARLY("drawLine"); return; } if( !CheckContext() ) { - DBG_DRAW_OPERATION_EXIT("drawLine"); + DBG_DRAW_OPERATION_EXIT_EARLY("drawLine"); return; } @@ -864,7 +867,7 @@ void AquaSalGraphics::drawMask( const SalTwoRect& rPosAry, const SalBitmap& rSal if( !CheckContext() ) { - DBG_DRAW_OPERATION_EXIT("drawMask"); + DBG_DRAW_OPERATION_EXIT_EARLY("drawMask"); return; } @@ -874,7 +877,7 @@ void AquaSalGraphics::drawMask( const SalTwoRect& rPosAry, const SalBitmap& rSal nMaskColor ); if( !xImage ) { - DBG_DRAW_OPERATION_EXIT("drawMask"); + DBG_DRAW_OPERATION_EXIT_EARLY("drawMask"); return; } @@ -913,21 +916,21 @@ bool AquaSalGraphics::drawPolyLine( const int nPointCount = rPolyLine.count(); if( nPointCount <= 0 ) { - DBG_DRAW_OPERATION_EXIT("drawPolyLine"); + DBG_DRAW_OPERATION_EXIT_EARLY("drawPolyLine"); return true; } // reject requests that cannot be handled yet if( rLineWidths.getX() != rLineWidths.getY() ) { - DBG_DRAW_OPERATION_EXIT("drawPolyLine"); + DBG_DRAW_OPERATION_EXIT_EARLY("drawPolyLine"); return false; } #ifdef IOS if( !CheckContext() ) { - DBG_DRAW_OPERATION_EXIT("drawPolyLine"); + DBG_DRAW_OPERATION_EXIT_EARLY("drawPolyLine"); return false; } #endif @@ -938,7 +941,7 @@ bool AquaSalGraphics::drawPolyLine( if( (basegfx::B2DLINEJOIN_NONE == eLineJoin) && (rLineWidths.getX() > 1.3) ) { - DBG_DRAW_OPERATION_EXIT("drawPolyLine"); + DBG_DRAW_OPERATION_EXIT_EARLY("drawPolyLine"); return false; } @@ -1029,14 +1032,14 @@ bool AquaSalGraphics::drawPolyPolygon( const ::basegfx::B2DPolyPolygon& rPolyPol const int nPolyCount = rPolyPoly.count(); if( nPolyCount <= 0 ) { - DBG_DRAW_OPERATION_EXIT("drawPolyPolygon"); + DBG_DRAW_OPERATION_EXIT_EARLY("drawPolyPolygon"); return true; } // ignore invisible polygons if( (fTransparency >= 1.0) || (fTransparency < 0) ) { - DBG_DRAW_OPERATION_EXIT("drawPolyPolygon"); + DBG_DRAW_OPERATION_EXIT_EARLY("drawPolyPolygon"); return true; } @@ -1073,7 +1076,7 @@ bool AquaSalGraphics::drawPolyPolygon( const ::basegfx::B2DPolyPolygon& rPolyPol SAL_WARN( "vcl.quartz", "Neither pen nor brush visible" ); CG_TRACE( "CGPathRelease(" << xPath << ")" ); CGPathRelease( xPath ); - DBG_DRAW_OPERATION_EXIT("drawPolyPolygon"); + DBG_DRAW_OPERATION_EXIT_EARLY("drawPolyPolygon"); return true; } @@ -1111,13 +1114,13 @@ void AquaSalGraphics::drawPolyPolygon( sal_uInt32 nPolyCount, const sal_uInt32 * if( nPolyCount <= 0 ) { - DBG_DRAW_OPERATION_EXIT("drawPolyPolygon"); + DBG_DRAW_OPERATION_EXIT_EARLY("drawPolyPolygon"); return; } if( !CheckContext() ) { - DBG_DRAW_OPERATION_EXIT("drawPolyPolygon"); + DBG_DRAW_OPERATION_EXIT_EARLY("drawPolyPolygon"); return; } @@ -1165,7 +1168,7 @@ void AquaSalGraphics::drawPolyPolygon( sal_uInt32 nPolyCount, const sal_uInt32 * else { SAL_WARN( "vcl.quartz", "Neither pen nor brush visible" ); - DBG_DRAW_OPERATION_EXIT("drawPolyPolygon"); + DBG_DRAW_OPERATION_EXIT_EARLY("drawPolyPolygon"); return; } @@ -1238,13 +1241,13 @@ void AquaSalGraphics::drawPolygon( sal_uInt32 nPoints, const SalPoint *pPtAry ) if( nPoints <= 1 ) { - DBG_DRAW_OPERATION_EXIT("drawPolygon"); + DBG_DRAW_OPERATION_EXIT_EARLY("drawPolygon"); return; } if( !CheckContext() ) { - DBG_DRAW_OPERATION_EXIT("drawPolygon"); + DBG_DRAW_OPERATION_EXIT_EARLY("drawPolygon"); return; } @@ -1325,7 +1328,7 @@ void AquaSalGraphics::drawRect( long nX, long nY, long nWidth, long nHeight ) if( !CheckContext() ) { - DBG_DRAW_OPERATION_EXIT("drawRect"); + DBG_DRAW_OPERATION_EXIT_EARLY("drawRect"); return; } @@ -1359,13 +1362,13 @@ void AquaSalGraphics::drawPolyLine( sal_uInt32 nPoints, const SalPoint *pPtAry ) if( nPoints < 1 ) { - DBG_DRAW_OPERATION_EXIT("drawPolyLine"); + DBG_DRAW_OPERATION_EXIT_EARLY("drawPolyLine"); return; } if( !CheckContext() ) { - DBG_DRAW_OPERATION_EXIT("drawPolyLine"); + DBG_DRAW_OPERATION_EXIT_EARLY("drawPolyLine"); return; } commit 6a8d7ddf9a451955856d32c35accd416f9982cce Author: Tor Lillqvist <t...@collabora.com> Date: Thu Apr 10 12:10:28 2014 +0300 CF_TRACE also the CFRetain to avoid confusion Change-Id: Iae712de4efbbe254ba381a036e2c84d5e27d5e40 diff --git a/vcl/quartz/salbmp.cxx b/vcl/quartz/salbmp.cxx index 973a675..1e06fd43 100644 --- a/vcl/quartz/salbmp.cxx +++ b/vcl/quartz/salbmp.cxx @@ -721,6 +721,7 @@ CGImageRef QuartzSalBitmap::CreateCroppedImage( int nX, int nY, int nNewWidth, i if( !nX && !nY && (mnWidth == nNewWidth) && (mnHeight == nNewHeight) ) { xCroppedImage = mxCachedImage; + CG_TRACE( "CFRetain(" << xCroppedImage << ")" ); CFRetain( xCroppedImage ); } else commit f66d64ab2e85f574a4b9f644ef709ff981483836 Author: Tor Lillqvist <t...@collabora.com> Date: Wed Apr 9 18:38:00 2014 +0300 Intermediate commit: un-revert last change Change-Id: I3d18f8d6844377edc0864d81284c7fb9dbb9dbf9 diff --git a/unotools/source/config/fltrcfg.cxx b/unotools/source/config/fltrcfg.cxx index 6c2c473..dc8dbbd 100644 --- a/unotools/source/config/fltrcfg.cxx +++ b/unotools/source/config/fltrcfg.cxx @@ -584,8 +584,24 @@ void SvtFilterOptions::SetImpress2PowerPoint( bool bFlag ) SetModified(); } +static bool lcl_DoTiledRendering() +{ +#if !HAVE_FEATURE_DESKTOP + // We do tiled rendering only for iOS at the moment, actually, but + // let's see what happens if we assume it for Android, too. + return true; +#else + // We need some way to know globally if this process will use + // tiled rendering or not. Or should this be a per-window setting? + // Or what? + return false; +#endif +} + bool SvtFilterOptions::IsSmartArt2Shape() const { + if (lcl_DoTiledRendering()) + return true; return pImp->IsFlag( FILTERCFG_SMARTART_SHAPE_LOAD ); } _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits