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 <fridr...@documentfoundation.org> _______________________________________________ LibreOffice mailing list LibreOffice@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice