Kaydet (Commit) 69b19ba2 authored tarafından Radek Doulik's avatar Radek Doulik

implemented EmfPlusRecordTypeSave and EmfPlusRecordTypeRestore records

Change-Id: Iac87870c0f50a74b7f4db4c674adcded1494c055
üst 9988dfd9
...@@ -28,8 +28,10 @@ ...@@ -28,8 +28,10 @@
#include <canvasgraphichelper.hxx> #include <canvasgraphichelper.hxx>
#include <action.hxx> #include <action.hxx>
#include <outdevstate.hxx>
#include <vector> #include <vector>
#include <map>
class GDIMetaFile; class GDIMetaFile;
class VirtualDevice; class VirtualDevice;
...@@ -166,6 +168,12 @@ static float GetSwapFloat( SvStream& rSt ) ...@@ -166,6 +168,12 @@ static float GetSwapFloat( SvStream& rSt )
} }
}; };
// EMF+
typedef struct {
XForm aWorldTransform;
OutDevState aDevState;
} EmfPlusGraphicState;
class ImplRenderer : public virtual Renderer, protected CanvasGraphicHelper class ImplRenderer : public virtual Renderer, protected CanvasGraphicHelper
{ {
public: public:
...@@ -278,7 +286,6 @@ static float GetSwapFloat( SvStream& rSt ) ...@@ -278,7 +286,6 @@ static float GetSwapFloat( SvStream& rSt )
sal_Int32 nOriginY; sal_Int32 nOriginY;
sal_Int32 nHDPI; sal_Int32 nHDPI;
sal_Int32 nVDPI; sal_Int32 nVDPI;
::PolyPolygon aClippingPolygon;
/* EMF+ emf header info */ /* EMF+ emf header info */
sal_Int32 nFrameLeft; sal_Int32 nFrameLeft;
sal_Int32 nFrameTop; sal_Int32 nFrameTop;
...@@ -292,6 +299,9 @@ static float GetSwapFloat( SvStream& rSt ) ...@@ -292,6 +299,9 @@ static float GetSwapFloat( SvStream& rSt )
bool mbMultipart; bool mbMultipart;
sal_uInt16 mMFlags; sal_uInt16 mMFlags;
SvMemoryStream mMStream; SvMemoryStream mMStream;
/* emf+ graphic state stack */
::std::map<int,EmfPlusGraphicState> mGSStack;
typedef ::std::map<int,EmfPlusGraphicState>::iterator EPGSSIter;
}; };
......
...@@ -68,6 +68,7 @@ ...@@ -68,6 +68,7 @@
#define EmfPlusRecordTypeSetPixelOffsetMode 16418 #define EmfPlusRecordTypeSetPixelOffsetMode 16418
#define EmfPlusRecordTypeSetCompositingQuality 16420 #define EmfPlusRecordTypeSetCompositingQuality 16420
#define EmfPlusRecordTypeSave 16421 #define EmfPlusRecordTypeSave 16421
#define EmfPlusRecordTypeRestore 16422
#define EmfPlusRecordTypeSetWorldTransform 16426 #define EmfPlusRecordTypeSetWorldTransform 16426
#define EmfPlusRecordTypeResetWorldTransform 16427 #define EmfPlusRecordTypeResetWorldTransform 16427
#define EmfPlusRecordTypeMultiplyWorldTransform 16428 #define EmfPlusRecordTypeMultiplyWorldTransform 16428
...@@ -1669,9 +1670,53 @@ namespace cppcanvas ...@@ -1669,9 +1670,53 @@ namespace cppcanvas
EMFP_DEBUG (printf ("EMF+\tTODO\n")); EMFP_DEBUG (printf ("EMF+\tTODO\n"));
break; break;
case EmfPlusRecordTypeSave: 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; 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: { case EmfPlusRecordTypeSetWorldTransform: {
EMFP_DEBUG (printf ("EMF+ SetWorldTransform\n")); EMFP_DEBUG (printf ("EMF+ SetWorldTransform\n"));
XForm transform; XForm transform;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment