Date: prev next · Thread: first prev next last
2013 Archives by date, by thread · List index


Hi,

I have submitted a patch for review:

    https://gerrit.libreoffice.org/2581

To pull it, you can do:

    git pull ssh://gerrit.libreoffice.org:29418/core refs/changes/81/2581/1

Backport of EMF+ changes from master

Change-Id: Ibfc5d700a81e661b663dfd3eb1f83e488fd1112f
---
M cppcanvas/source/inc/implrenderer.hxx
M cppcanvas/source/mtfrenderer/emfplus.cxx
M cppcanvas/source/mtfrenderer/mtftools.cxx
M cppcanvas/source/mtfrenderer/pointaction.cxx
M cppcanvas/source/mtfrenderer/polypolyaction.cxx
M cppcanvas/source/mtfrenderer/textaction.hxx
6 files changed, 19 insertions(+), 17 deletions(-)



diff --git a/cppcanvas/source/inc/implrenderer.hxx b/cppcanvas/source/inc/implrenderer.hxx
index 7f34ad8..7d82ea7 100644
--- a/cppcanvas/source/inc/implrenderer.hxx
+++ b/cppcanvas/source/inc/implrenderer.hxx
@@ -259,7 +259,7 @@
                                    ActionVector::const_iterator& o_rRangeBegin,
                                    ActionVector::const_iterator& o_rRangeEnd ) const;
 
-            void processObjectRecord(SvMemoryStream& rObjectStream, sal_uInt16 flags, sal_Bool 
bUseWholeStream = sal_False);
+            void processObjectRecord(SvMemoryStream& rObjectStream, sal_uInt16 flags, sal_uInt32 
dataSize, sal_Bool bUseWholeStream = sal_False);
 
             /* EMF+ */
             void processEMFPlus( MetaCommentAction* pAct, const ActionFactoryParameters& 
rFactoryParms, OutDevState& rState, const CanvasSharedPtr& rCanvas );
diff --git a/cppcanvas/source/mtfrenderer/emfplus.cxx b/cppcanvas/source/mtfrenderer/emfplus.cxx
index 0c9db41..4c79953 100644
--- a/cppcanvas/source/mtfrenderer/emfplus.cxx
+++ b/cppcanvas/source/mtfrenderer/emfplus.cxx
@@ -714,7 +714,7 @@
             Graphic graphic;
 
 
-            void Read (SvMemoryStream &s, sal_Bool bUseWholeStream)
+            void Read (SvMemoryStream &s, sal_uInt32 dataSize, sal_Bool bUseWholeStream)
             {
                 sal_uInt32 header, unknown;
 
@@ -736,11 +736,11 @@
                     sal_Int32 mfType, mfSize;
 
                     s >> mfType >> mfSize;
-                    EMFP_DEBUG (printf ("EMF+\tmetafile type: %d dataSize: %d\n", mfType, mfSize));
+                    EMFP_DEBUG (printf ("EMF+\tmetafile type: %d dataSize: %d real size calculated 
from record dataSize: %d\n", mfType, mfSize, dataSize - 16));
 
                     GraphicFilter filter;
                     // workaround buggy metafiles, which have wrong mfSize set (n#705956 for 
example)
-                    SvMemoryStream mfStream (((char *)s.GetData()) + s.Tell(), bUseWholeStream ? 
s.remainingSize() : mfSize, STREAM_READ);
+                    SvMemoryStream mfStream (((char *)s.GetData()) + s.Tell(), bUseWholeStream ? 
s.remainingSize() : dataSize - 16, STREAM_READ);
 
                     filter.ImportGraphic (graphic, String (), mfStream);
 
@@ -1090,7 +1090,7 @@
             }
         }
 
-        void ImplRenderer::processObjectRecord(SvMemoryStream& rObjectStream, sal_uInt16 flags, 
sal_Bool bUseWholeStream)
+        void ImplRenderer::processObjectRecord(SvMemoryStream& rObjectStream, sal_uInt16 flags, 
sal_uInt32 dataSize, sal_Bool bUseWholeStream)
         {
             sal_uInt32 index;
 
@@ -1145,7 +1145,7 @@
                 {
                     EMFPImage *image;
                     aObjects [index] = image = new EMFPImage ();
-                    image->Read (rObjectStream, bUseWholeStream);
+                    image->Read (rObjectStream, dataSize, bUseWholeStream);
 
                     break;
                 }
@@ -1211,12 +1211,13 @@
                     if (mbMultipart) {
                         EMFP_DEBUG (printf ("EMF+ multipart record flags: %04hx\n", mMFlags));
                         mMStream.Seek (0);
-                        processObjectRecord (mMStream, mMFlags, sal_True);
+                        processObjectRecord (mMStream, mMFlags, dataSize, sal_True);
                     }
                     mbMultipart = false;
                 }
 
                 if (type != EmfPlusRecordTypeObject || !(flags & 0x8000))
+                {
                 switch (type) {
                 case EmfPlusRecordTypeHeader:
                     sal_uInt32 header, version;
@@ -1235,7 +1236,7 @@
                     EMFP_DEBUG (printf ("EMF+\talready used in svtools wmf/emf filter parser\n"));
                     break;
                 case EmfPlusRecordTypeObject:
-                    processObjectRecord (rMF, flags);
+                        processObjectRecord (rMF, flags, dataSize);
                     break;
                 case EmfPlusRecordTypeFillPie:
                     {
@@ -1476,6 +1477,9 @@
                                     ReadPoint (rMF, x2, y2, flags);
                                     ReadPoint (rMF, x3, y3, flags);
 
+                                        EMFP_DEBUG (printf ("EMF+ destination points: %f,%f %f,%f 
%f,%f\n", x1, y1, x2, y2, x3, y3));
+                                        EMFP_DEBUG (printf ("EMF+ destination rectangle: %f,%f 
%fx%f\n", x1, y1, x2 - x1, y3 - y1));
+
                                     aDstPoint = Map (x1, y1);
                                     aDstSize = MapSize(x2 - x1, y3 - y1);
 
@@ -1486,6 +1490,8 @@
 
                                 ReadRectangle (rMF, dx, dy, dw, dh, flags & 0x4000);
 
+                                    EMFP_DEBUG (printf ("EMF+ destination rectangle: %f,%f 
%fx%f\n", dx, dy, dw, dh));
+
                                 aDstPoint = Map (dx, dy);
                                 aDstSize = MapSize(dw, dh);
 
@@ -1494,12 +1500,9 @@
 
                             if (bValid) {
                                 BitmapEx aBmp( image.graphic.GetBitmapEx () );
-                                const Rectangle aCropRect (::vcl::unotools::pointFromB2DPoint 
(basegfx::B2DPoint (sx, sy)),
-                                                           ::vcl::unotools::sizeFromB2DSize 
(basegfx::B2DSize(sw, sh)));
-                                aBmp.Crop( aCropRect );
-
 
                                 Size aSize( aBmp.GetSizePixel() );
+                                    EMFP_DEBUG (printf ("EMF+ bitmap size: %ldx%ld\n", 
aSize.Width(), aSize.Height()));
                                 if( aSize.Width() > 0 && aSize.Height() > 0 ) {
                                     ActionSharedPtr pBmpAction (
                                         internal::BitmapActionFactory::createBitmapAction (
@@ -1760,6 +1763,7 @@
                     EMFP_DEBUG (printf ("EMF+ unhandled record type: %d\n", type));
                     EMFP_DEBUG (printf ("EMF+\tTODO\n"));
                 }
+                }
 
                 rMF.Seek (next);
 
diff --git a/cppcanvas/source/mtfrenderer/mtftools.cxx b/cppcanvas/source/mtfrenderer/mtftools.cxx
index 5ca31a7..f34487b 100644
--- a/cppcanvas/source/mtfrenderer/mtftools.cxx
+++ b/cppcanvas/source/mtfrenderer/mtftools.cxx
@@ -126,8 +126,6 @@
                          const ::basegfx::B2DVector*                        pScaling,
                          const double*                                      pRotation )
         {
-            const ::Point aEmptyPoint;
-
             const bool bOffsetting( !rOffset.equalZero() );
             const bool bScaling( pScaling &&
                                  pScaling->getX() != 1.0 &&
diff --git a/cppcanvas/source/mtfrenderer/pointaction.cxx 
b/cppcanvas/source/mtfrenderer/pointaction.cxx
index 72b2895..43bd43e 100644
--- a/cppcanvas/source/mtfrenderer/pointaction.cxx
+++ b/cppcanvas/source/mtfrenderer/pointaction.cxx
@@ -21,7 +21,7 @@
 #include <rtl/logfile.hxx>
 #include <com/sun/star/rendering/XCanvas.hpp>
 
-#include <tools/gen.hxx>
+#include <sal/types.h>
 #include <vcl/canvastools.hxx>
 
 #include <basegfx/range/b2drange.hxx>
diff --git a/cppcanvas/source/mtfrenderer/polypolyaction.cxx 
b/cppcanvas/source/mtfrenderer/polypolyaction.cxx
index 723dea5..92d7063 100644
--- a/cppcanvas/source/mtfrenderer/polypolyaction.cxx
+++ b/cppcanvas/source/mtfrenderer/polypolyaction.cxx
@@ -23,7 +23,7 @@
 #include <com/sun/star/rendering/XCanvas.hpp>
 #include <com/sun/star/rendering/TexturingMode.hpp>
 
-#include <tools/gen.hxx>
+#include <sal/types.h>
 #include <vcl/canvastools.hxx>
 
 #include <basegfx/range/b2drectangle.hxx>
diff --git a/cppcanvas/source/mtfrenderer/textaction.hxx 
b/cppcanvas/source/mtfrenderer/textaction.hxx
index d6f0f33..b3218b0a 100644
--- a/cppcanvas/source/mtfrenderer/textaction.hxx
+++ b/cppcanvas/source/mtfrenderer/textaction.hxx
@@ -26,10 +26,10 @@
 #include <cppcanvas/canvas.hxx>
 #include <cppcanvas/renderer.hxx>
 #include <tools/poly.hxx>
-#include <tools/gen.hxx>
 
 class VirtualDevice;
 class Point;
+class Size;
 class Color;
 class String;
 

-- 
To view, visit https://gerrit.libreoffice.org/2581
To unsubscribe, visit https://gerrit.libreoffice.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ibfc5d700a81e661b663dfd3eb1f83e488fd1112f
Gerrit-PatchSet: 1
Gerrit-Project: core
Gerrit-Branch: libreoffice-4-0
Gerrit-Owner: Fridrich Strba <fridrich@documentfoundation.org>


Context


Privacy Policy | Impressum (Legal Info) | Copyright information: Unless otherwise specified, all text and images on this website are licensed under the Creative Commons Attribution-Share Alike 3.0 License. This does not include the source code of LibreOffice, which is licensed under the Mozilla Public License (MPLv2). "LibreOffice" and "The Document Foundation" are registered trademarks of their corresponding registered owners or are in actual use as trademarks in one or more countries. Their respective logos and icons are also subject to international copyright laws. Use thereof is explained in our trademark policy.