Hi,
I have submitted a patch for review:
https://gerrit.libreoffice.org/2839
To pull it, you can do:
git pull ssh://gerrit.libreoffice.org:29418/core refs/changes/39/2839/1
implemented EmfPlusRecordTypeSave and EmfPlusRecordTypeRestore records
Signed-off-by: Fridrich Štrba <fridrich.strba@bluewin.ch>
(cherry picked from commit 5a86702e13b3654982f1ee84da981d7fb8c442c5)
Change-Id: Iac87870c0f50a74b7f4db4c674adcded1494c055
---
M cppcanvas/source/inc/implrenderer.hxx
R cppcanvas/source/inc/outdevstate.hxx
M cppcanvas/source/mtfrenderer/emfplus.cxx
3 files changed, 58 insertions(+), 3 deletions(-)
diff --git a/cppcanvas/source/inc/implrenderer.hxx b/cppcanvas/source/inc/implrenderer.hxx
index c2902d6..4537368 100644
--- a/cppcanvas/source/inc/implrenderer.hxx
+++ b/cppcanvas/source/inc/implrenderer.hxx
@@ -28,8 +28,10 @@
#include <canvasgraphichelper.hxx>
#include <action.hxx>
+#include <outdevstate.hxx>
#include <vector>
+#include <map>
class GDIMetaFile;
class VirtualDevice;
@@ -166,6 +168,12 @@
}
};
+ // EMF+
+ typedef struct {
+ XForm aWorldTransform;
+ OutDevState aDevState;
+ } EmfPlusGraphicState;
+
class ImplRenderer : public virtual Renderer, protected CanvasGraphicHelper
{
public:
@@ -278,7 +286,6 @@
sal_Int32 nOriginY;
sal_Int32 nHDPI;
sal_Int32 nVDPI;
- ::PolyPolygon aClippingPolygon;
/* EMF+ emf header info */
sal_Int32 nFrameLeft;
sal_Int32 nFrameTop;
@@ -292,6 +299,9 @@
bool mbMultipart;
sal_uInt16 mMFlags;
SvMemoryStream mMStream;
+ /* emf+ graphic state stack */
+ ::std::map<int,EmfPlusGraphicState> mGSStack;
+ typedef ::std::map<int,EmfPlusGraphicState>::iterator EPGSSIter;
};
diff --git a/cppcanvas/source/mtfrenderer/outdevstate.hxx b/cppcanvas/source/inc/outdevstate.hxx
similarity index 100%
rename from cppcanvas/source/mtfrenderer/outdevstate.hxx
rename to cppcanvas/source/inc/outdevstate.hxx
diff --git a/cppcanvas/source/mtfrenderer/emfplus.cxx b/cppcanvas/source/mtfrenderer/emfplus.cxx
index 491b085..81f7eb7 100644
--- a/cppcanvas/source/mtfrenderer/emfplus.cxx
+++ b/cppcanvas/source/mtfrenderer/emfplus.cxx
@@ -68,6 +68,7 @@
#define EmfPlusRecordTypeSetPixelOffsetMode 16418
#define EmfPlusRecordTypeSetCompositingQuality 16420
#define EmfPlusRecordTypeSave 16421
+#define EmfPlusRecordTypeRestore 16422
#define EmfPlusRecordTypeSetWorldTransform 16426
#define EmfPlusRecordTypeResetWorldTransform 16427
#define EmfPlusRecordTypeMultiplyWorldTransform 16428
@@ -1658,9 +1659,53 @@
EMFP_DEBUG (printf ("EMF+\tTODO\n"));
break;
case EmfPlusRecordTypeSave:
- EMFP_DEBUG (printf ("EMF+ Save\n"));
- EMFP_DEBUG (printf ("EMF+\tTODO\n"));
+ {
+ sal_uInt32 stackIndex;
+
+ rMF >> stackIndex;
+
+ EMFP_DEBUG (printf ("EMF+ Save stack index: %d\n", stackIndex));
+
+ EPGSSIter aIter = mGSStack.find( stackIndex );
+
+ if ( aIter != mGSStack.end() )
+ {
+ EmfPlusGraphicState aState = aIter->second;
+ mGSStack.erase( aIter );
+
+ EMFP_DEBUG (printf ("stack index: %d found and erased\n", stackIndex));
+ }
+
+ EmfPlusGraphicState aState;
+
+ aState.aWorldTransform = aWorldTransform;
+ aState.aDevState = rState;
+
+ mGSStack[ stackIndex ] = aState;
+
break;
+ }
+ case EmfPlusRecordTypeRestore:
+ {
+ sal_uInt32 stackIndex;
+
+ rMF >> stackIndex;
+
+ EMFP_DEBUG (printf ("EMF+ Restore stack index: %d\n", stackIndex));
+
+ EPGSSIter aIter = mGSStack.find( stackIndex );
+
+ if ( aIter != mGSStack.end() ) {
+ EMFP_DEBUG (printf ("stack index: %d found\n", stackIndex));
+ EmfPlusGraphicState aState = aIter->second;
+ aWorldTransform = aState.aWorldTransform;
+ rState.clip = aState.aDevState.clip;
+ rState.clipRect = aState.aDevState.clipRect;
+ rState.xClipPoly = aState.aDevState.xClipPoly;
+ }
+
+ break;
+ }
case EmfPlusRecordTypeSetWorldTransform: {
EMFP_DEBUG (printf ("EMF+ SetWorldTransform\n"));
XForm transform;
--
To view, visit https://gerrit.libreoffice.org/2839
To unsubscribe, visit https://gerrit.libreoffice.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: Iac87870c0f50a74b7f4db4c674adcded1494c055
Gerrit-PatchSet: 1
Gerrit-Project: core
Gerrit-Branch: libreoffice-4-0-2
Gerrit-Owner: Fridrich Strba <fridrich@documentfoundation.org>
Gerrit-Reviewer: Radek Doulík <rodo@novell.com>
Context
- [PATCH libreoffice-4-0-2] implemented EmfPlusRecordTypeSave and EmfPlusRecordTypeResto... · Fridrich Strba (via Code Review)
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.