From 34a0cb059c2bcfa62afe1dbd775cb69f637e130d Mon Sep 17 00:00:00 2001 From: Armin Le Grand Date: Thu, 22 Jun 2017 13:03:50 +0200 Subject: 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 --- drawinglayer/inc/emfplushelper.hxx | 4 + drawinglayer/inc/wmfemfhelper.hxx | 3 + .../source/primitive2d/metafileprimitive2d.cxx | 4 +- .../source/processor2d/vclpixelprocessor2d.cxx | 43 ++++- drawinglayer/source/tools/emfpbrush.hxx | 2 + drawinglayer/source/tools/emfphelperdata.cxx | 179 +++++++++++---------- drawinglayer/source/tools/emfphelperdata.hxx | 52 +++--- drawinglayer/source/tools/emfpimage.hxx | 1 + drawinglayer/source/tools/wmfemfhelper.cxx | 38 ++--- 9 files changed, 193 insertions(+), 133 deletions(-) (limited to 'drawinglayer') diff --git a/drawinglayer/inc/emfplushelper.hxx b/drawinglayer/inc/emfplushelper.hxx index 839a94d82e95..78e59dbf1abc 100644 --- a/drawinglayer/inc/emfplushelper.hxx +++ b/drawinglayer/inc/emfplushelper.hxx @@ -20,12 +20,16 @@ #ifndef INCLUDED_DRAWINGLAYER_INC_EMFPLUSHELPER_HXX #define INCLUDED_DRAWINGLAYER_INC_EMFPLUSHELPER_HXX +#include #include +#include /// predefines namespace emfplushelper { struct EmfPlusHelperData; } namespace wmfemfhelper { class TargetHolders; } namespace wmfemfhelper { class PropertyHolders; } +namespace drawinglayer { namespace geometry { class ViewInformation2D; }} +class SvMemoryStream; namespace emfplushelper { diff --git a/drawinglayer/inc/wmfemfhelper.hxx b/drawinglayer/inc/wmfemfhelper.hxx index a11b6578e572..7ae8e64ad6e8 100644 --- a/drawinglayer/inc/wmfemfhelper.hxx +++ b/drawinglayer/inc/wmfemfhelper.hxx @@ -22,6 +22,9 @@ #include #include +#include +#include +#include // predefines namespace drawinglayer { namespace geometry { class ViewInformation2D; }} diff --git a/drawinglayer/source/primitive2d/metafileprimitive2d.cxx b/drawinglayer/source/primitive2d/metafileprimitive2d.cxx index 65ec52c894de..148eb9c5725b 100644 --- a/drawinglayer/source/primitive2d/metafileprimitive2d.cxx +++ b/drawinglayer/source/primitive2d/metafileprimitive2d.cxx @@ -21,7 +21,7 @@ #include //#include -//#include +#include //#include //#include //#include @@ -29,7 +29,7 @@ //#include //#include //#include -//#include +#include //#include //#include //#include diff --git a/drawinglayer/source/processor2d/vclpixelprocessor2d.cxx b/drawinglayer/source/processor2d/vclpixelprocessor2d.cxx index a93f85df4595..177c780f212f 100644 --- a/drawinglayer/source/processor2d/vclpixelprocessor2d.cxx +++ b/drawinglayer/source/processor2d/vclpixelprocessor2d.cxx @@ -497,17 +497,52 @@ namespace drawinglayer const primitive2d::MetafilePrimitive2D& rMetafilePrimitive( static_cast< const primitive2d::MetafilePrimitive2D& >(rCandidate) ); - static bool bTestMetaFilePrimitiveDecomposition( true ); - if( bTestMetaFilePrimitiveDecomposition && !rMetafilePrimitive.getMetaFile().GetUseCanvas() ) + if( !rMetafilePrimitive.getMetaFile().GetUseCanvas() ) { // use new Metafile decomposition - // TODO EMF+ stuffed into METACOMMENT support required process(rCandidate); } else { +#ifdef DBG_UTIL + // switch to test EMFPlus-enhanced MetafileDecomposition + static bool bTestEMFPDecomposition(true); + // switch to show the new visualization color.-changed behind + // the original output vor visual testing + static bool bUseChangedColorObject(true); + + if (bTestEMFPDecomposition) + { + if (bUseChangedColorObject) + { + primitive2d::Primitive2DContainer aDecomposition; + rMetafilePrimitive.get2DDecomposition(aDecomposition, getViewInformation2D()); + const primitive2d::ModifiedColorPrimitive2D aPrimitiveR( + aDecomposition, + basegfx::BColorModifierSharedPtr( + new basegfx::BColorModifier_RGBLuminanceContrast( + 0.5, // red + -0.5, // green + -0.5, // blue + 0.0, // luminance + 0.0))); // contrast + processBasePrimitive2D(aPrimitiveR); + RenderMetafilePrimitive2D(rMetafilePrimitive); + } + else + { + process(rCandidate); + } + } + else + { + // direct draw of MetaFile + RenderMetafilePrimitive2D(rMetafilePrimitive); + } +#else // DBG_UTIL // direct draw of MetaFile - RenderMetafilePrimitive2D( rMetafilePrimitive ); + RenderMetafilePrimitive2D(rMetafilePrimitive); +#endif // DBG_UTIL } if(bForceLineSnap) 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 +#include +#include 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 #include #include +#include +#include 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(aObjects[penIndex & 0xff].get()); + const EMFPPen* pen = static_cast(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(aObjects[index].get())->GetPolygon(*this), flags & 0x8000, brushIndexOrColor); - // EMFPPlusFillPolygon(static_cast(aObjects[index])->GetPolygon(*this), rFactoryParms, rState, rCanvas, flags & 0x8000, brushIndexOrColor); + EMFPPlusFillPolygon(static_cast(maEMFPObjects[index].get())->GetPolygon(*this), flags & 0x8000, brushIndexOrColor); + // EMFPPlusFillPolygon(static_cast(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(aObjects[flags & 0xff].get()); + EMFPPath* path = static_cast(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(aObjects[flags & 0xff].get()); + EMFPImage& image = *static_cast(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(aObjects[flags & 0xff].get()); + EMFPPath& path = *static_cast(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(aObjects[flags & 0xff].get()); + EMFPRegion *region = static_cast(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 +#include +#include +#include +#include //#include //#include +// 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 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 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 +#include 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 //#include //#include -//#include -//#include +#include +#include //#include //#include -//#include +#include //#include -//#include -//#include -//#include -//#include +#include +#include +#include +#include #include -//#include +#include #include -//#include -//#include +#include +#include //#include -//#include -//#include -//#include -//#include +#include +#include +#include +#include #include -//#include +#include //#include #include //#include -//#include -//#include +#include +#include //#include #include #include -//#include +#include #include //#include +#include +#include #include namespace drawinglayer -- cgit