[Libreoffice-commits] core.git: Branch 'aoo/trunk' - 2 commits - svx/source sysui/desktop

Jürgen Schmidt jsc at apache.org
Mon Sep 2 07:07:46 PDT 2013


 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 <jsc at apache.org>
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 <alg at apache.org>
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;
 }
 


More information about the Libreoffice-commits mailing list