svx/source/unodraw/UnoGraphicExporter.cxx | 91 ++++++++++++++++++++++-------- sysui/desktop/icons/main.icns |binary 2 files changed, 69 insertions(+), 22 deletions(-)
New commits: commit 06ccd57389a708bb168a1402521c8bb45a262fd7 Author: Jürgen Schmidt <[email protected]> Date: Mon Sep 2 13:32:04 2013 +0000 #122881# exchange main.icns to support older MacOS version 10.5 diff --git a/sysui/desktop/icons/main.icns b/sysui/desktop/icons/main.icns index df341eb9..e42a021 100755 Binary files a/sysui/desktop/icons/main.icns and b/sysui/desktop/icons/main.icns differ commit 50f1445bda91cb44a1a1e8636ab0bcb6a8c4f381 Author: Armin Le Grand <[email protected]> Date: Mon Sep 2 12:13:37 2013 +0000 i122820 Corrected graphics creation, allow bigger limits if directly requested diff --git a/svx/source/unodraw/UnoGraphicExporter.cxx b/svx/source/unodraw/UnoGraphicExporter.cxx index 142874c..6abb5be 100644 --- a/svx/source/unodraw/UnoGraphicExporter.cxx +++ b/svx/source/unodraw/UnoGraphicExporter.cxx @@ -225,6 +225,7 @@ namespace svx { // use new primitive conversion tooling basegfx::B2DRange aRange(basegfx::B2DPoint(0.0, 0.0)); + sal_uInt32 nMaximumQuadraticPixels(500000); if(pSize) { @@ -233,6 +234,10 @@ namespace svx const Size aSize100th(Application::GetDefaultDevice()->PixelToLogic(*pSize, MapMode(MAP_100TH_MM))); aRange.expand(basegfx::B2DPoint(aSize100th.Width(), aSize100th.Height())); + + // when explicitely pixels are requested from the GraphicExporter, use a *very* high limit + // of 16gb (4096x4096 pixels), else use the default for the converters + nMaximumQuadraticPixels = std::min(sal_uInt32(4096 * 4096), sal_uInt32(pSize->Width() * pSize->Height())); } else { @@ -242,13 +247,42 @@ namespace svx aRange.expand(basegfx::B2DPoint(aSize100th.Width(), aSize100th.Height())); } - aBmpEx = convertMetafileToBitmapEx(rMtf, aRange); + aBmpEx = convertMetafileToBitmapEx(rMtf, aRange, nMaximumQuadraticPixels); } else { const SvtOptionsDrawinglayer aDrawinglayerOpt; + Size aTargetSize(0, 0); + + if(pSize) + { + // #122820# If a concrete target size in pixels is given, use it + aTargetSize = *pSize; + + // get hairline and full bound rect to evtl. reduce given target pixel size when + // it is known that it will be expanded to get the right and bottom hairlines right + Rectangle aHairlineRect; + const Rectangle aRect(rMtf.GetBoundRect(*Application::GetDefaultDevice(), &aHairlineRect)); + + if(!aRect.IsEmpty() && !aHairlineRect.IsEmpty()) + { + if(aRect.Right() == aHairlineRect.Right() || aRect.Bottom() == aHairlineRect.Bottom()) + { + if(aTargetSize.Width()) + { + aTargetSize.Width() -= 1; + } + + if(aTargetSize.Height()) + { + aTargetSize.Height() -= 1; + } + } + } + } + const GraphicConversionParameters aParameters( - pSize ? *pSize : Size(0, 0), + aTargetSize, true, // allow unlimited size aDrawinglayerOpt.IsAntiAliasing(), aDrawinglayerOpt.IsSnapHorVerLinesToDiscrete()); @@ -429,26 +463,39 @@ VirtualDevice* GraphicExporter::CreatePageVDev( SdrPage* pPage, sal_uIntPtr nWid } pVDev->SetMapMode( aMM ); -#ifdef DBG_UTIL - sal_Bool bAbort = ! -#endif - pVDev->SetOutputSize(aPageSize); - DBG_ASSERT(!bAbort, "virt. Device nicht korrekt erzeugt"); - - SdrView* pView = new SdrView(mpDoc, pVDev); - pView->SetPageVisible( sal_False ); - pView->SetBordVisible( sal_False ); - pView->SetGridVisible( sal_False ); - pView->SetHlplVisible( sal_False ); - pView->SetGlueVisible( sal_False ); - pView->ShowSdrPage(pPage); - Region aRegion (Rectangle( aPoint, aPageSize ) ); - - ImplExportCheckVisisbilityRedirector aRedirector( mpCurrentPage ); - - pView->CompleteRedraw(pVDev, aRegion, &aRedirector); - - delete pView; + bool bSuccess(false); + + // #122820# If available, use pixel size directly + if(nWidthPixel && nHeightPixel) + { + bSuccess = pVDev->SetOutputSizePixel(Size(nWidthPixel, nHeightPixel)); + } + else + { + bSuccess = pVDev->SetOutputSize(aPageSize); + } + + if(bSuccess) + { + SdrView* pView = new SdrView(mpDoc, pVDev); + pView->SetPageVisible( sal_False ); + pView->SetBordVisible( sal_False ); + pView->SetGridVisible( sal_False ); + pView->SetHlplVisible( sal_False ); + pView->SetGlueVisible( sal_False ); + pView->ShowSdrPage(pPage); + Region aRegion (Rectangle( aPoint, aPageSize ) ); + + ImplExportCheckVisisbilityRedirector aRedirector( mpCurrentPage ); + + pView->CompleteRedraw(pVDev, aRegion, &aRedirector); + delete pView; + } + else + { + OSL_ENSURE(false, "Could not get a VirtualDevice of requested size (!)"); + } + return pVDev; }
_______________________________________________ Libreoffice-commits mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
