summaryrefslogtreecommitdiffstats
path: root/drawinglayer/source/tools
diff options
context:
space:
mode:
authorArmin Le Grand <Armin.Le.Grand@cib.de>2017-06-22 13:03:50 +0200
committerThorsten Behrens <Thorsten.Behrens@CIB.de>2017-07-15 11:01:30 +0200
commit34a0cb059c2bcfa62afe1dbd775cb69f637e130d (patch)
treee091b370e6f186f128a74d7b871fa88b5f09f964 /drawinglayer/source/tools
parentemfplus: more corrections and rough geometry (diff)
downloadcore-34a0cb059c2bcfa62afe1dbd775cb69f637e130d.tar.gz
core-34a0cb059c2bcfa62afe1dbd775cb69f637e130d.zip
emfplus: unified transformations, added test code
More unifications, changed all Map*() methods to use a single B2DHomMatrix which is created based on former stuff, XForm now completely replaced. To check, added debug-only code and switches to the VclPixelProcessor so that visual checks get easy when using these modes (overlay of both methods with modded colors). Also resynched to master. Change-Id: I7b749f90bfde2ec1c2e49ee90ca2ef368da0547e
Diffstat (limited to 'drawinglayer/source/tools')
-rw-r--r--drawinglayer/source/tools/emfpbrush.hxx2
-rw-r--r--drawinglayer/source/tools/emfphelperdata.cxx179
-rw-r--r--drawinglayer/source/tools/emfphelperdata.hxx52
-rw-r--r--drawinglayer/source/tools/emfpimage.hxx1
-rw-r--r--drawinglayer/source/tools/wmfemfhelper.cxx38
5 files changed, 145 insertions, 127 deletions
diff --git a/drawinglayer/source/tools/emfpbrush.hxx b/drawinglayer/source/tools/emfpbrush.hxx
index 852b2d469b4b..792b5f018790 100644
--- a/drawinglayer/source/tools/emfpbrush.hxx
+++ b/drawinglayer/source/tools/emfpbrush.hxx
@@ -21,6 +21,8 @@
#define INCLUDED_DRAWINGLAYER_SOURCE_TOOLS_EMFPBRUSH_HXX
#include <emfphelperdata.hxx>
+#include <tools/color.hxx>
+#include <basegfx/polygon/b2dpolypolygon.hxx>
namespace emfplushelper
{
diff --git a/drawinglayer/source/tools/emfphelperdata.cxx b/drawinglayer/source/tools/emfphelperdata.cxx
index 80d9a7f3fafa..fdb0fb11c42f 100644
--- a/drawinglayer/source/tools/emfphelperdata.cxx
+++ b/drawinglayer/source/tools/emfphelperdata.cxx
@@ -28,6 +28,8 @@
#include <basegfx/curve/b2dcubicbezier.hxx>
#include <wmfemfhelper.hxx>
#include <drawinglayer/primitive2d/polypolygonprimitive2d.hxx>
+#include <basegfx/matrix/b2dhommatrixtools.hxx>
+#include <basegfx/polygon/b2dpolygontools.hxx>
namespace emfplushelper
{
@@ -131,14 +133,14 @@ namespace emfplushelper
case EmfPlusObjectTypeBrush:
{
EMFPBrush *brush;
- aObjects[index].reset(brush = new EMFPBrush());
+ maEMFPObjects[index].reset(brush = new EMFPBrush());
brush->Read(rObjectStream, *this);
break;
}
case EmfPlusObjectTypePen:
{
EMFPPen *pen;
- aObjects[index].reset(pen = new EMFPPen());
+ maEMFPObjects[index].reset(pen = new EMFPPen());
pen->Read(rObjectStream, *this);
break;
}
@@ -151,21 +153,21 @@ namespace emfplushelper
SAL_INFO("cppcanvas.emf", "EMF+\tpath");
SAL_INFO("cppcanvas.emf", "EMF+\theader: 0x" << std::hex << header << " points: " << std::dec << points << " additional flags: 0x" << std::hex << pathFlags << std::dec);
EMFPPath *path;
- aObjects[index].reset(path = new EMFPPath(points));
+ maEMFPObjects[index].reset(path = new EMFPPath(points));
path->Read(rObjectStream, pathFlags, *this);
break;
}
case EmfPlusObjectTypeRegion:
{
EMFPRegion *region;
- aObjects[index].reset(region = new EMFPRegion());
+ maEMFPObjects[index].reset(region = new EMFPRegion());
region->Read(rObjectStream);
break;
}
case EmfPlusObjectTypeImage:
{
EMFPImage *image;
- aObjects[index].reset(image = new EMFPImage);
+ maEMFPObjects[index].reset(image = new EMFPImage);
image->type = 0;
image->width = 0;
image->height = 0;
@@ -177,7 +179,7 @@ namespace emfplushelper
case EmfPlusObjectTypeFont:
{
EMFPFont *font;
- aObjects[index].reset(font = new EMFPFont);
+ maEMFPObjects[index].reset(font = new EMFPFont);
font->emSize = 0;
font->sizeUnit = 0;
font->fontFlags = 0;
@@ -187,7 +189,7 @@ namespace emfplushelper
case EmfPlusObjectTypeStringFormat:
{
EMFPStringFormat *stringFormat;
- aObjects[index].reset(stringFormat = new EMFPStringFormat());
+ maEMFPObjects[index].reset(stringFormat = new EMFPStringFormat());
stringFormat->Read(rObjectStream);
break;
}
@@ -287,49 +289,39 @@ namespace emfplushelper
return true;
}
- void EmfPlusHelperData::MapToDevice(double& x, double& y)
+ void EmfPlusHelperData::mappingChanged()
{
- // TODO: other units
- x = 100 * mnMmX*x / mnPixX;
- y = 100 * mnMmY*y / mnPixY;
+ // Call when mnMmX/mnMmY/mnPixX/mnPixY/mnFrameLeft/mnFrameTop/maWorldTransform/ changes.
+ // Currently not used are mnHDPI/mnVDPI/mnFrameRight/mnFrameBottom. *If* these should
+ // be used in the future, this method will need to be called.
+ //
+ // Re-calculate maMapTransform to contain the complete former transformation so that
+ // it can be applied by a single matrix multiplication or be added to an encapsulated
+ // primitive later
+ //
+ // To evtl. correct and see where this came from, please compare with the implementations
+ // of EmfPlusHelperData::MapToDevice and EmfPlusHelperData::Map* in prev versions
+ maMapTransform = maWorldTransform;
+ maMapTransform *= basegfx::tools::createScaleB2DHomMatrix(100.0 * mnMmX / mnPixX, 100.0 * mnMmY / mnPixY);
+ maMapTransform *= basegfx::tools::createTranslateB2DHomMatrix(double(-mnFrameLeft), double(-mnFrameTop));
+ maMapTransform *= basegfx::tools::createScaleB2DHomMatrix(maBaseTransform.get(0, 0), maBaseTransform.get(1, 1));
}
::basegfx::B2DPoint EmfPlusHelperData::Map(double ix, double iy)
{
- double x, y;
-
- x = ix*aWorldTransform.get(0,0) + iy*aWorldTransform.get(0,1) + aWorldTransform.get(0,2);
- y = ix*aWorldTransform.get(1,0) + iy*aWorldTransform.get(1,1) + aWorldTransform.get(1,2);
-
- MapToDevice(x, y);
-
- x -= mnFrameLeft;
- y -= mnFrameTop;
-
- x *= aBaseTransform.get(0,0);
- y *= aBaseTransform.get(1,1);
-
- return ::basegfx::B2DPoint(x, y);
+ // map in one step using complete MapTransform (see mappingChanged)
+ return maMapTransform * ::basegfx::B2DPoint(ix, iy);
}
::basegfx::B2DSize EmfPlusHelperData::MapSize(double iwidth, double iheight)
{
- double w, h;
-
- w = iwidth*aWorldTransform.get(0,0) + iheight*aWorldTransform.get(1,0);
- h = iwidth*aWorldTransform.get(1,0) + iheight*aWorldTransform.get(1,1);
-
- MapToDevice(w, h);
-
- w *= aBaseTransform.get(0,0);
- h *= aBaseTransform.get(1,1);
-
- return ::basegfx::B2DSize(w, h);
+ // map in one step using complete MapTransform (see mappingChanged)
+ return maMapTransform * ::basegfx::B2DSize(iwidth, iheight);
}
void EmfPlusHelperData::EMFPPlusDrawPolygon(const ::basegfx::B2DPolyPolygon& polygon, sal_uInt32 penIndex)
{
- const EMFPPen* pen = static_cast<EMFPPen*>(aObjects[penIndex & 0xff].get());
+ const EMFPPen* pen = static_cast<EMFPPen*>(maEMFPObjects[penIndex & 0xff].get());
SAL_WARN_IF(!pen, "cppcanvas.emf", "emf+ missing pen");
if (pen && polygon.count())
@@ -359,14 +351,15 @@ namespace emfplushelper
SvMemoryStream& rMS,
wmfemfhelper::TargetHolders& rTargetHolders,
wmfemfhelper::PropertyHolders& rPropertyHolders)
- : aBaseTransform(),
- aWorldTransform(),
- aObjects(),
- fPageScale(0.0),
- nOriginX(0),
- nOriginY(0),
- nHDPI(0),
- nVDPI(0),
+ : maBaseTransform(),
+ maWorldTransform(),
+ maMapTransform(),
+ maEMFPObjects(),
+ mfPageScale(0.0),
+ mnOriginX(0),
+ mnOriginY(0),
+ mnHDPI(0),
+ mnVDPI(0),
mnFrameLeft(0),
mnFrameTop(0),
mnFrameRight(0),
@@ -387,7 +380,8 @@ namespace emfplushelper
SAL_INFO("cppcanvas.emf", "EMF+ picture frame: " << mnFrameLeft << "," << mnFrameTop << " - " << mnFrameRight << "," << mnFrameBottom);
rMS.ReadInt32(mnPixX).ReadInt32(mnPixY).ReadInt32(mnMmX).ReadInt32(mnMmY);
SAL_INFO("cppcanvas.emf", "EMF+ ref device pixel size: " << mnPixX << "x" << mnPixY << " mm size: " << mnMmX << "x" << mnMmY);
- readXForm(rMS, aBaseTransform);
+ readXForm(rMS, maBaseTransform);
+ mappingChanged();
}
EmfPlusHelperData::~EmfPlusHelperData()
@@ -466,9 +460,9 @@ namespace emfplushelper
{
sal_uInt32 header, version;
- rMS.ReadUInt32(header).ReadUInt32(version).ReadInt32(nHDPI).ReadInt32(nVDPI);
+ rMS.ReadUInt32(header).ReadUInt32(version).ReadInt32(mnHDPI).ReadInt32(mnVDPI);
SAL_INFO("cppcanvas.emf", "EMF+ Header");
- SAL_INFO("cppcanvas.emf", "EMF+\theader: 0x" << std::hex << header << " version: " << std::dec << version << " horizontal DPI: " << nHDPI << " vertical DPI: " << nVDPI << " dual: " << (flags & 1));
+ SAL_INFO("cppcanvas.emf", "EMF+\theader: 0x" << std::hex << header << " version: " << std::dec << version << " horizontal DPI: " << mnHDPI << " vertical DPI: " << mnVDPI << " dual: " << (flags & 1));
break;
}
case EmfPlusRecordTypeEndOfFile:
@@ -573,8 +567,8 @@ namespace emfplushelper
rMS.ReadUInt32(brushIndexOrColor);
SAL_INFO("cppcanvas.emf", "EMF+ FillPath slot: " << index);
- EMFPPlusFillPolygon(static_cast<EMFPPath*>(aObjects[index].get())->GetPolygon(*this), flags & 0x8000, brushIndexOrColor);
- // EMFPPlusFillPolygon(static_cast<EMFPPath*>(aObjects[index])->GetPolygon(*this), rFactoryParms, rState, rCanvas, flags & 0x8000, brushIndexOrColor);
+ EMFPPlusFillPolygon(static_cast<EMFPPath*>(maEMFPObjects[index].get())->GetPolygon(*this), flags & 0x8000, brushIndexOrColor);
+ // EMFPPlusFillPolygon(static_cast<EMFPPath*>(maEMFPObjects[index])->GetPolygon(*this), rFactoryParms, rState, rCanvas, flags & 0x8000, brushIndexOrColor);
}
break;
case EmfPlusRecordTypeDrawEllipse:
@@ -705,7 +699,7 @@ namespace emfplushelper
rMS.ReadUInt32(penIndex);
SAL_INFO("cppcanvas.emf", "EMF+ DrawPath");
SAL_INFO("cppcanvas.emf", "EMF+\tpen: " << penIndex);
- EMFPPath* path = static_cast<EMFPPath*>(aObjects[flags & 0xff].get());
+ EMFPPath* path = static_cast<EMFPPath*>(maEMFPObjects[flags & 0xff].get());
SAL_WARN_IF(!path, "cppcanvas.emf", "EmfPlusRecordTypeDrawPath missing path");
EMFPPlusDrawPolygon(path->GetPolygon(*this), penIndex);
@@ -768,10 +762,10 @@ namespace emfplushelper
SAL_INFO("cppcanvas.emf", "EMF+ " << (type == EmfPlusRecordTypeDrawImagePoints ? "DrawImagePoints" : "DrawImage") << "attributes index: " << attrIndex << "source unit: " << sourceUnit);
SAL_INFO("cppcanvas.emf", "EMF+\tTODO: use image attributes");
- if (sourceUnit == 2 && aObjects[flags & 0xff].get())
+ if (sourceUnit == 2 && maEMFPObjects[flags & 0xff].get())
{
// we handle only GraphicsUnit.Pixel now
- EMFPImage& image = *static_cast<EMFPImage *>(aObjects[flags & 0xff].get());
+ EMFPImage& image = *static_cast<EMFPImage *>(maEMFPObjects[flags & 0xff].get());
float sx, sy, sw, sh;
sal_Int32 aCount;
ReadRectangle(rMS, sx, sy, sw, sh);
@@ -867,7 +861,7 @@ namespace emfplushelper
rMS.ReadFloat(lx).ReadFloat(ly).ReadFloat(lw).ReadFloat(lh);
SAL_INFO("cppcanvas.emf", "EMF+ DrawString layoutRect: " << lx << "," << ly << " - " << lw << "x" << lh);
OUString text = read_uInt16s_ToOUString(rMS, stringLength);
- EMFPStringFormat *stringFormat = static_cast< EMFPStringFormat* >(aObjects[formatId & 0xff].get());
+ EMFPStringFormat *stringFormat = static_cast< EMFPStringFormat* >(maEMFPObjects[formatId & 0xff].get());
// css::rendering::FontRequest aFontRequest;
//
// if (stringFormat)
@@ -922,9 +916,9 @@ namespace emfplushelper
}
case EmfPlusRecordTypeSetPageTransform:
{
- rMS.ReadFloat(fPageScale);
+ rMS.ReadFloat(mfPageScale);
SAL_INFO("cppcanvas.emf", "EMF+ SetPageTransform");
- SAL_INFO("cppcanvas.emf", "EMF+\tscale: " << fPageScale << " unit: " << flags);
+ SAL_INFO("cppcanvas.emf", "EMF+\tscale: " << mfPageScale << " unit: " << flags);
if (flags != UnitTypePixel)
{
@@ -932,16 +926,17 @@ namespace emfplushelper
}
else
{
- mnMmX *= fPageScale;
- mnMmY *= fPageScale;
+ mnMmX *= mfPageScale;
+ mnMmY *= mfPageScale;
+ mappingChanged();
}
break;
}
case EmfPlusRecordTypeSetRenderingOrigin:
{
- rMS.ReadInt32(nOriginX).ReadInt32(nOriginY);
+ rMS.ReadInt32(mnOriginX).ReadInt32(mnOriginY);
SAL_INFO("cppcanvas.emf", "EMF+ SetRenderingOrigin");
- SAL_INFO("cppcanvas.emf", "EMF+\torigin [x,y]: " << nOriginX << "," << nOriginY);
+ SAL_INFO("cppcanvas.emf", "EMF+\torigin [x,y]: " << mnOriginX << "," << mnOriginY);
break;
}
case EmfPlusRecordTypeSetTextRenderingHint:
@@ -1017,17 +1012,19 @@ namespace emfplushelper
SAL_INFO("cppcanvas.emf", "EMF+ SetWorldTransform");
basegfx::B2DHomMatrix transform;
readXForm(rMS, transform);
- aWorldTransform = transform;
+ maWorldTransform = transform;
+ mappingChanged();
SAL_INFO("cppcanvas.emf",
- "EMF+\tm11: " << aWorldTransform.get(0,0) << "\tm12: " << aWorldTransform.get(1,0) <<
- "\tm21: " << aWorldTransform.get(0,1) << "\tm22: " << aWorldTransform.get(1,1) <<
- "\tdx: " << aWorldTransform.get(0,2) << "\tdy: " << aWorldTransform.get(1,2));
+ "EMF+\tm11: " << maWorldTransform.get(0,0) << "\tm12: " << maWorldTransform.get(1,0) <<
+ "\tm21: " << maWorldTransform.get(0,1) << "\tm22: " << maWorldTransform.get(1,1) <<
+ "\tdx: " << maWorldTransform.get(0,2) << "\tdy: " << maWorldTransform.get(1,2));
break;
}
case EmfPlusRecordTypeResetWorldTransform:
{
SAL_INFO("cppcanvas.emf", "EMF+ ResetWorldTransform");
- aWorldTransform.identity();
+ maWorldTransform.identity();
+ mappingChanged();
break;
}
case EmfPlusRecordTypeMultiplyWorldTransform:
@@ -1044,19 +1041,21 @@ namespace emfplushelper
if (flags & 0x2000)
{
// post multiply
- aWorldTransform *= transform;
+ maWorldTransform *= transform;
}
else
{
// pre multiply
- transform *= aWorldTransform;
- aWorldTransform = transform;
+ transform *= maWorldTransform;
+ maWorldTransform = transform;
}
+ mappingChanged();
+
SAL_INFO("cppcanvas.emf",
- "EMF+\tmatrix m11: " << aWorldTransform.get(0, 0) << "m12: " << aWorldTransform.get(0, 1) <<
- "EMF+\tm21: " << aWorldTransform.get(1, 0) << "m22: " << aWorldTransform.get(1, 1) <<
- "EMF+\tdx: " << aWorldTransform.get(2, 0) << "dy: " << aWorldTransform.get(2, 1));
+ "EMF+\tmatrix m11: " << maWorldTransform.get(0, 0) << "m12: " << maWorldTransform.get(0, 1) <<
+ "EMF+\tm21: " << maWorldTransform.get(1, 0) << "m22: " << maWorldTransform.get(1, 1) <<
+ "EMF+\tdx: " << maWorldTransform.get(2, 0) << "dy: " << maWorldTransform.get(2, 1));
break;
}
case EmfPlusRecordTypeTranslateWorldTransform:
@@ -1077,19 +1076,21 @@ namespace emfplushelper
if (flags & 0x2000)
{
// post multiply
- aWorldTransform *= transform;
+ maWorldTransform *= transform;
}
else
{
// pre multiply
- transform *= aWorldTransform;
- aWorldTransform = transform;
+ transform *= maWorldTransform;
+ maWorldTransform = transform;
}
+ mappingChanged();
+
SAL_INFO("cppcanvas.emf",
- "EMF+\tmatrix m11: " << aWorldTransform.get(0, 0) << "m12: " << aWorldTransform.get(0, 1) <<
- "EMF+\tm21: " << aWorldTransform.get(1, 0) << "m22: " << aWorldTransform.get(1, 1) <<
- "EMF+\tdx: " << aWorldTransform.get(2, 0) << "dy: " << aWorldTransform.get(2, 1));
+ "EMF+\tmatrix m11: " << maWorldTransform.get(0, 0) << "m12: " << maWorldTransform.get(0, 1) <<
+ "EMF+\tm21: " << maWorldTransform.get(1, 0) << "m22: " << maWorldTransform.get(1, 1) <<
+ "EMF+\tdx: " << maWorldTransform.get(2, 0) << "dy: " << maWorldTransform.get(2, 1));
break;
}
case EmfPlusRecordTypeScaleWorldTransform:
@@ -1102,26 +1103,28 @@ namespace emfplushelper
SAL_INFO("cppcanvas.emf", "EMF+ ScaleWorldTransform Sx: " << transform.get(0,0) << " Sy: " << transform.get(1,1));
SAL_INFO("cppcanvas.emf",
- "EMF+\t m11: " << aWorldTransform.get(0,0) << ", m12: " << aWorldTransform.get(0,1) <<
- "EMF+\t m21: " << aWorldTransform.get(1,0) << ", m22: " << aWorldTransform.get(1,1) <<
- "EMF+\t dx: " << aWorldTransform.get(2,0) << ", dy: " << aWorldTransform.get(2,1));
+ "EMF+\t m11: " << maWorldTransform.get(0,0) << ", m12: " << maWorldTransform.get(0,1) <<
+ "EMF+\t m21: " << maWorldTransform.get(1,0) << ", m22: " << maWorldTransform.get(1,1) <<
+ "EMF+\t dx: " << maWorldTransform.get(2,0) << ", dy: " << maWorldTransform.get(2,1));
if (flags & 0x2000)
{
// post multiply
- aWorldTransform *= transform;
+ maWorldTransform *= transform;
}
else
{
// pre multiply
- transform *= aWorldTransform;
- aWorldTransform = transform;
+ transform *= maWorldTransform;
+ maWorldTransform = transform;
}
+ mappingChanged();
+
SAL_INFO("cppcanvas.emf",
- "EMF+\t m11: " << aWorldTransform.get(0, 0) << ", m12: " << aWorldTransform.get(0, 1) <<
- "EMF+\t m21: " << aWorldTransform.get(1, 0) << ", m22: " << aWorldTransform.get(1, 1) <<
- "EMF+\t dx: " << aWorldTransform.get(2, 0) << ", dy: " << aWorldTransform.get(2, 1));
+ "EMF+\t m11: " << maWorldTransform.get(0, 0) << ", m12: " << maWorldTransform.get(0, 1) <<
+ "EMF+\t m21: " << maWorldTransform.get(1, 0) << ", m22: " << maWorldTransform.get(1, 1) <<
+ "EMF+\t dx: " << maWorldTransform.get(2, 0) << ", dy: " << maWorldTransform.get(2, 1));
break;
}
case EmfPlusRecordTypeSetClipRect:
@@ -1161,7 +1164,7 @@ namespace emfplushelper
SAL_INFO("cppcanvas.emf", "EMF+ SetClipPath combine mode: " << combineMode);
SAL_INFO("cppcanvas.emf", "EMF+\tpath in slot: " << (flags & 0xff));
- EMFPPath& path = *static_cast<EMFPPath*>(aObjects[flags & 0xff].get());
+ EMFPPath& path = *static_cast<EMFPPath*>(maEMFPObjects[flags & 0xff].get());
::basegfx::B2DPolyPolygon& clipPoly(path.GetPolygon(*this));
// clipPoly.transform(rState.mapModeTransform);
@@ -1192,7 +1195,7 @@ namespace emfplushelper
int combineMode = (flags >> 8) & 0xf;
SAL_INFO("cppcanvas.emf", "EMF+ SetClipRegion");
SAL_INFO("cppcanvas.emf", "EMF+\tregion in slot: " << (flags & 0xff) << " combine mode: " << combineMode);
- EMFPRegion *region = static_cast<EMFPRegion*>(aObjects[flags & 0xff].get());
+ EMFPRegion *region = static_cast<EMFPRegion*>(maEMFPObjects[flags & 0xff].get());
// reset clip
if (region && region->parts == 0 && region->initialState == EmfPlusRegionInitialStateInfinite)
diff --git a/drawinglayer/source/tools/emfphelperdata.hxx b/drawinglayer/source/tools/emfphelperdata.hxx
index c2d799cfd5f5..a700df8dac6c 100644
--- a/drawinglayer/source/tools/emfphelperdata.hxx
+++ b/drawinglayer/source/tools/emfphelperdata.hxx
@@ -21,9 +21,17 @@
#define INCLUDED_DRAWINGLAYER_SOURCE_TOOLS_EMFPHELPERDATA_HXX
#include <emfplushelper.hxx>
+#include <basegfx/matrix/b2dhommatrix.hxx>
+#include <tools/stream.hxx>
+#include <basegfx/point/b2dpoint.hxx>
+#include <basegfx/vector/b2dsize.hxx>
//#include <com/sun/star/rendering/XCanvasFont.hpp>
//#include <com/sun/star/rendering/TextDirection.hpp>
+// predefines
+class SvStream;
+namespace basegfx { class B2DPolyPolygon; }
+
namespace emfplushelper
{
// EMF+ commands
@@ -171,7 +179,7 @@ namespace emfplushelper
// typedef struct
// {
-// basegfx::B2DHomMatrix aWorldTransform;
+// basegfx::B2DHomMatrix maWorldTransform;
// OutDevState aDevState;
// } EmfPlusGraphicState;
//
@@ -181,29 +189,31 @@ namespace emfplushelper
{
private:
/* EMF+ */
- basegfx::B2DHomMatrix aBaseTransform;
- basegfx::B2DHomMatrix aWorldTransform;
- std::unique_ptr<EMFPObject> aObjects[256];
- float fPageScale;
- sal_Int32 nOriginX;
- sal_Int32 nOriginY;
- sal_Int32 nHDPI;
- sal_Int32 nVDPI;
+ basegfx::B2DHomMatrix maBaseTransform;
+ basegfx::B2DHomMatrix maWorldTransform;
+ basegfx::B2DHomMatrix maMapTransform;
+
+ std::unique_ptr<EMFPObject> maEMFPObjects[256];
+ float mfPageScale;
+ sal_Int32 mnOriginX;
+ sal_Int32 mnOriginY;
+ sal_Int32 mnHDPI;
+ sal_Int32 mnVDPI;
/* EMF+ emf header info */
- sal_Int32 mnFrameLeft;
- sal_Int32 mnFrameTop;
- sal_Int32 mnFrameRight;
- sal_Int32 mnFrameBottom;
- sal_Int32 mnPixX;
- sal_Int32 mnPixY;
- sal_Int32 mnMmX;
- sal_Int32 mnMmY;
+ sal_Int32 mnFrameLeft;
+ sal_Int32 mnFrameTop;
+ sal_Int32 mnFrameRight;
+ sal_Int32 mnFrameBottom;
+ sal_Int32 mnPixX;
+ sal_Int32 mnPixY;
+ sal_Int32 mnMmX;
+ sal_Int32 mnMmY;
/* multipart object data */
- bool mbMultipart;
- sal_uInt16 mMFlags;
- SvMemoryStream mMStream;
+ bool mbMultipart;
+ sal_uInt16 mMFlags;
+ SvMemoryStream mMStream;
/* emf+ graphic state stack */
// GraphicStateMap mGSStack;
@@ -218,7 +228,7 @@ namespace emfplushelper
void ReadPoint(SvStream& s, float& x, float& y, sal_uInt32 flags);
// internal mapper
- void MapToDevice(double& x, double& y);
+ void mappingChanged();
// primitive creators
void EMFPPlusDrawPolygon(const ::basegfx::B2DPolyPolygon& polygon, sal_uInt32 penIndex);
diff --git a/drawinglayer/source/tools/emfpimage.hxx b/drawinglayer/source/tools/emfpimage.hxx
index d5a06c5e56b9..455a88ea7757 100644
--- a/drawinglayer/source/tools/emfpimage.hxx
+++ b/drawinglayer/source/tools/emfpimage.hxx
@@ -21,6 +21,7 @@
#define INCLUDED_DRAWINGLAYER_SOURCE_TOOLS_EMFPIMAGE_HXX
#include <emfphelperdata.hxx>
+#include <vcl/graph.hxx>
namespace emfplushelper
{
diff --git a/drawinglayer/source/tools/wmfemfhelper.cxx b/drawinglayer/source/tools/wmfemfhelper.cxx
index b272f4a51eb3..4c7a298b912f 100644
--- a/drawinglayer/source/tools/wmfemfhelper.cxx
+++ b/drawinglayer/source/tools/wmfemfhelper.cxx
@@ -22,39 +22,41 @@
//#include <basegfx/tools/canvastools.hxx>
//#include <drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx>
//#include <basegfx/color/bcolor.hxx>
-//#include <drawinglayer/primitive2d/pointarrayprimitive2d.hxx>
-//#include <vcl/lineinfo.hxx>
+#include <drawinglayer/primitive2d/pointarrayprimitive2d.hxx>
+#include <vcl/lineinfo.hxx>
//#include <drawinglayer/attribute/lineattribute.hxx>
//#include <drawinglayer/attribute/strokeattribute.hxx>
-//#include <drawinglayer/primitive2d/polygonprimitive2d.hxx>
+#include <drawinglayer/primitive2d/polygonprimitive2d.hxx>
//#include <vcl/metaact.hxx>
-//#include <drawinglayer/primitive2d/transformprimitive2d.hxx>
-//#include <basegfx/matrix/b2dhommatrixtools.hxx>
-//#include <drawinglayer/primitive2d/polypolygonprimitive2d.hxx>
-//#include <basegfx/polygon/b2dpolygontools.hxx>
+#include <drawinglayer/primitive2d/transformprimitive2d.hxx>
+#include <basegfx/matrix/b2dhommatrixtools.hxx>
+#include <drawinglayer/primitive2d/polypolygonprimitive2d.hxx>
+#include <basegfx/polygon/b2dpolygontools.hxx>
#include <drawinglayer/primitive2d/discretebitmapprimitive2d.hxx>
-//#include <drawinglayer/primitive2d/bitmapprimitive2d.hxx>
+#include <drawinglayer/primitive2d/bitmapprimitive2d.hxx>
#include <vcl/salbtype.hxx>
-//#include <drawinglayer/primitive2d/unifiedtransparenceprimitive2d.hxx>
-//#include <drawinglayer/primitive2d/fillgradientprimitive2d.hxx>
+#include <drawinglayer/primitive2d/unifiedtransparenceprimitive2d.hxx>
+#include <drawinglayer/primitive2d/fillgradientprimitive2d.hxx>
//#include <vcl/svapp.hxx>
-//#include <drawinglayer/primitive2d/transparenceprimitive2d.hxx>
-//#include <drawinglayer/primitive2d/fillhatchprimitive2d.hxx>
-//#include <drawinglayer/primitive2d/maskprimitive2d.hxx>
-//#include <basegfx/polygon/b2dpolygonclipper.hxx>
+#include <drawinglayer/primitive2d/transparenceprimitive2d.hxx>
+#include <drawinglayer/primitive2d/fillhatchprimitive2d.hxx>
+#include <drawinglayer/primitive2d/maskprimitive2d.hxx>
+#include <basegfx/polygon/b2dpolygonclipper.hxx>
#include <drawinglayer/primitive2d/invertprimitive2d.hxx>
-//#include <drawinglayer/primitive2d/modifiedcolorprimitive2d.hxx>
+#include <drawinglayer/primitive2d/modifiedcolorprimitive2d.hxx>
//#include <drawinglayer/primitive2d/fillgraphicprimitive2d.hxx>
#include <drawinglayer/primitive2d/wallpaperprimitive2d.hxx>
//#include <drawinglayer/primitive2d/textprimitive2d.hxx>
-//#include <drawinglayer/primitive2d/textlayoutdevice.hxx>
-//#include <drawinglayer/primitive2d/textdecoratedprimitive2d.hxx>
+#include <drawinglayer/primitive2d/textlayoutdevice.hxx>
+#include <drawinglayer/primitive2d/textdecoratedprimitive2d.hxx>
//#include <i18nlangtag/languagetag.hxx>
#include <drawinglayer/primitive2d/textlineprimitive2d.hxx>
#include <drawinglayer/primitive2d/textstrikeoutprimitive2d.hxx>
-//#include <drawinglayer/primitive2d/epsprimitive2d.hxx>
+#include <drawinglayer/primitive2d/epsprimitive2d.hxx>
#include <tools/fract.hxx>
//#include <numeric>
+#include <vcl/gradient.hxx>
+#include <vcl/hatch.hxx>
#include <emfplushelper.hxx>
namespace drawinglayer