[Libreoffice-commits] core.git: cppcanvas/Library_cppcanvas.mk cppcanvas/source

Libreoffice Gerrit user logerrit at kemper.freedesktop.org
Fri Dec 7 07:29:48 UTC 2018


 cppcanvas/Library_cppcanvas.mk                     |    9 
 cppcanvas/source/inc/implrenderer.hxx              |   23 
 cppcanvas/source/mtfrenderer/emfpbrush.cxx         |  309 ---
 cppcanvas/source/mtfrenderer/emfpbrush.hxx         |  131 -
 cppcanvas/source/mtfrenderer/emfpcustomlinecap.cxx |  164 --
 cppcanvas/source/mtfrenderer/emfpcustomlinecap.hxx |   47 
 cppcanvas/source/mtfrenderer/emfpfont.cxx          |   75 
 cppcanvas/source/mtfrenderer/emfpfont.hxx          |   42 
 cppcanvas/source/mtfrenderer/emfpimage.cxx         |  101 -
 cppcanvas/source/mtfrenderer/emfpimage.hxx         |   44 
 cppcanvas/source/mtfrenderer/emfplus.cxx           | 1666 ---------------------
 cppcanvas/source/mtfrenderer/emfppath.cxx          |  193 --
 cppcanvas/source/mtfrenderer/emfppath.hxx          |   50 
 cppcanvas/source/mtfrenderer/emfppen.cxx           |  296 ---
 cppcanvas/source/mtfrenderer/emfppen.hxx           |   79 
 cppcanvas/source/mtfrenderer/emfpregion.cxx        |   86 -
 cppcanvas/source/mtfrenderer/emfpregion.hxx        |   42 
 cppcanvas/source/mtfrenderer/emfpstringformat.cxx  |   66 
 cppcanvas/source/mtfrenderer/emfpstringformat.hxx  |   54 
 cppcanvas/source/mtfrenderer/implrenderer.cxx      |   13 
 20 files changed, 1 insertion(+), 3489 deletions(-)

New commits:
commit 217ad59a412ebab07a106b14c8976d20bddb9356
Author:     Bartosz Kosiorek <gang65 at poczta.onet.pl>
AuthorDate: Fri Nov 30 23:08:47 2018 +0100
Commit:     Noel Grandin <noel.grandin at collabora.co.uk>
CommitDate: Fri Dec 7 08:29:18 2018 +0100

    tdf#111486 Removed not used EMF+ code
    
    Change-Id: I708876fecab1bd6b0c37892efa9c4ab180457d6b
    Reviewed-on: https://gerrit.libreoffice.org/64366
    Tested-by: Jenkins
    Reviewed-by: Noel Grandin <noel.grandin at collabora.co.uk>

diff --git a/cppcanvas/Library_cppcanvas.mk b/cppcanvas/Library_cppcanvas.mk
index 8a374b58dcee..6aa698d5e9b7 100644
--- a/cppcanvas/Library_cppcanvas.mk
+++ b/cppcanvas/Library_cppcanvas.mk
@@ -50,20 +50,11 @@ $(eval $(call gb_Library_use_libraries,cppcanvas,\
 $(eval $(call gb_Library_add_exception_objects,cppcanvas,\
 	cppcanvas/source/mtfrenderer/bitmapaction \
 	cppcanvas/source/mtfrenderer/cachedprimitivebase \
-	cppcanvas/source/mtfrenderer/emfpbrush \
-	cppcanvas/source/mtfrenderer/emfpcustomlinecap \
-	cppcanvas/source/mtfrenderer/emfpfont \
-	cppcanvas/source/mtfrenderer/emfpimage \
-	cppcanvas/source/mtfrenderer/emfplus \
-	cppcanvas/source/mtfrenderer/emfppen \
-	cppcanvas/source/mtfrenderer/emfppath \
-	cppcanvas/source/mtfrenderer/emfpregion \
 	cppcanvas/source/mtfrenderer/implrenderer \
 	cppcanvas/source/mtfrenderer/lineaction \
 	cppcanvas/source/mtfrenderer/mtftools \
 	cppcanvas/source/mtfrenderer/pointaction \
 	cppcanvas/source/mtfrenderer/polypolyaction \
-	cppcanvas/source/mtfrenderer/emfpstringformat \
 	cppcanvas/source/mtfrenderer/textaction \
 	cppcanvas/source/mtfrenderer/textlineshelper \
 	cppcanvas/source/mtfrenderer/transparencygroupaction \
diff --git a/cppcanvas/source/inc/implrenderer.hxx b/cppcanvas/source/inc/implrenderer.hxx
index 6fec26e3d18a..26fc5046eede 100644
--- a/cppcanvas/source/inc/implrenderer.hxx
+++ b/cppcanvas/source/inc/implrenderer.hxx
@@ -196,15 +196,6 @@ namespace cppcanvas
             // (externally not visible)
             typedef std::vector< MtfAction >      ActionVector;
 
-            /* EMF+ */
-            static void ReadRectangle (SvStream& s, float& x, float& y, float &width, float& height, bool bCompressed = false);
-            static void ReadPoint (SvStream& s, float& x, float& y, sal_uInt32 flags);
-            void MapToDevice (double &x, double &y) const;
-            ::basegfx::B2DPoint Map (double ix, double iy) const;
-            ::basegfx::B2DSize MapSize (double iwidth, double iheight) const;
-            void GraphicStatePush (GraphicStateMap& map, sal_Int32 index, OutDevState const & rState);
-            void GraphicStatePop (GraphicStateMap& map, sal_Int32 index, OutDevState& rState);
-
         private:
             ImplRenderer(const ImplRenderer&) = delete;
             ImplRenderer& operator=( const ImplRenderer& ) = delete;
@@ -257,20 +248,6 @@ namespace cppcanvas
 
             void processObjectRecord(SvMemoryStream& rObjectStream, sal_uInt16 flags, sal_uInt32 dataSize, bool bUseWholeStream = false);
 
-            /* EMF+ */
-            void processEMFPlus( MetaCommentAction const * pAct, const ActionFactoryParameters& rFactoryParms, OutDevState& rState, const CanvasSharedPtr& rCanvas );
-            double setFont(css::rendering::FontRequest& aFontRequest, sal_uInt8 fontObjectId, const ActionFactoryParameters& rParms, OutDevState& rState );
-
-            /// Render LineCap, like the start or end arrow of a polygon.
-            /// @return how much we should shorten the original polygon.
-            double EMFPPlusDrawLineCap(const ::basegfx::B2DPolygon& rPolygon, double fPolyLength,
-                    const ::basegfx::B2DPolyPolygon& rLineCap, bool isFilled, bool bStart,
-                    const css::rendering::StrokeAttributes& rAttributes,
-                    const ActionFactoryParameters& rParms, OutDevState& rState);
-
-            void EMFPPlusDrawPolygon (const ::basegfx::B2DPolyPolygon & polygon, const ActionFactoryParameters& rParms, OutDevState& rState, const CanvasSharedPtr& rCanvas, sal_uInt32 penIndex);
-            void EMFPPlusFillPolygon (::basegfx::B2DPolyPolygon const & polygon, const ActionFactoryParameters& rParms, OutDevState& rState, const CanvasSharedPtr& rCanvas, bool isColor, sal_uInt32 brushIndexOrColor);
-
             ActionVector maActions;
 
             /* EMF+ */
diff --git a/cppcanvas/source/mtfrenderer/emfpbrush.cxx b/cppcanvas/source/mtfrenderer/emfpbrush.cxx
deleted file mode 100644
index dc676c33a5d8..000000000000
--- a/cppcanvas/source/mtfrenderer/emfpbrush.cxx
+++ /dev/null
@@ -1,309 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- *   Licensed to the Apache Software Foundation (ASF) under one or more
- *   contributor license agreements. See the NOTICE file distributed
- *   with this work for additional information regarding copyright
- *   ownership. The ASF licenses this file to you under the Apache
- *   License, Version 2.0 (the "License"); you may not use this file
- *   except in compliance with the License. You may obtain a copy of
- *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-#include <com/sun/star/rendering/PathCapType.hpp>
-#include <com/sun/star/rendering/PathJoinType.hpp>
-#include <com/sun/star/rendering/TexturingMode.hpp>
-#include <com/sun/star/rendering/XCanvas.hpp>
-#include <basegfx/utils/canvastools.hxx>
-#include <basegfx/utils/gradienttools.hxx>
-#include <basegfx/utils/tools.hxx>
-#include <basegfx/numeric/ftools.hxx>
-#include <basegfx/point/b2dpoint.hxx>
-#include <basegfx/vector/b2dsize.hxx>
-#include <basegfx/range/b2drange.hxx>
-#include <basegfx/range/b2drectangle.hxx>
-#include <basegfx/polygon/b2dlinegeometry.hxx>
-#include <basegfx/polygon/b2dpolygon.hxx>
-#include <basegfx/polygon/b2dpolygontools.hxx>
-#include <basegfx/polygon/b2dpolypolygon.hxx>
-#include <basegfx/polygon/b2dpolypolygontools.hxx>
-#include <vcl/canvastools.hxx>
-#include <implrenderer.hxx>
-#include "emfpbrush.hxx"
-#include "emfppath.hxx"
-#include <sal/log.hxx>
-
-namespace cppcanvas
-{
-    namespace internal
-    {
-        EMFPBrush::EMFPBrush()
-            : type(0)
-            , additionalFlags(0)
-            , wrapMode(0)
-            , areaX(0.0)
-            , areaY(0.0)
-            , areaWidth(0.0)
-            , areaHeight(0.0)
-            , hasTransformation(false)
-            , blendPoints(0)
-            , blendFactors(nullptr)
-            , colorblendPoints(0)
-            , surroundColorsNumber(0)
-            , hatchStyle(HatchStyleHorizontal)
-        {
-        }
-
-        EMFPBrush::~EMFPBrush()
-        {
-            path.reset();
-        }
-
-        void EMFPBrush::Read(SvStream& s, ImplRenderer const & rR)
-        {
-            sal_uInt32 header;
-
-            s.ReadUInt32(header).ReadUInt32(type);
-
-            SAL_INFO("cppcanvas.emf", "EMF+\tbrush");
-            SAL_INFO("cppcanvas.emf", "EMF+\theader: 0x" << std::hex << header << " type: " << type << std::dec);
-
-            switch (type) {
-            case BrushTypeSolidColor:
-            {
-                sal_uInt32 color;
-
-                s.ReadUInt32(color);
-                solidColor = ::Color(0xff - (color >> 24), (color >> 16) & 0xff, (color >> 8) & 0xff, color & 0xff);
-                SAL_INFO("cppcanvas.emf", "EMF+\tsolid color: 0x" << std::hex << color << std::dec);
-                break;
-            }
-            case BrushTypeHatchFill:
-            {
-                sal_uInt32 style;
-                sal_uInt32 foregroundColor;
-                sal_uInt32 backgroundColor;
-                s.ReadUInt32(style);
-                s.ReadUInt32(foregroundColor);
-                s.ReadUInt32(backgroundColor);
-
-                hatchStyle = static_cast<EmfPlusHatchStyle>(style);
-                solidColor = ::Color(0xff - (foregroundColor >> 24), (foregroundColor >> 16) & 0xff, (foregroundColor >> 8) & 0xff, foregroundColor & 0xff);
-                secondColor = ::Color(0xff - (backgroundColor >> 24), (backgroundColor >> 16) & 0xff, (backgroundColor >> 8) & 0xff, backgroundColor & 0xff);
-                SAL_INFO("cppcanvas.emf", "EMF+\thatch style " << style << " foregroundcolor: 0x" << solidColor.AsRGBHexString() << " background 0x" << secondColor.AsRGBHexString());
-                break;
-            }
-            case BrushTypeTextureFill:
-            {
-                SAL_WARN("cppcanvas.emf", "EMF+\tTODO: implement BrushTypeTextureFill brush");
-                break;
-            }
-            case BrushTypePathGradient:
-            {
-                s.ReadUInt32(additionalFlags).ReadInt32(wrapMode);
-
-                SAL_INFO("cppcanvas.emf", "EMF+\tpath gradient, additional flags: 0x" << std::hex << additionalFlags << std::dec);
-
-                sal_uInt32 color;
-
-                s.ReadUInt32(color);
-                solidColor = ::Color(0xff - (color >> 24), (color >> 16) & 0xff, (color >> 8) & 0xff, color & 0xff);
-                SAL_INFO("cppcanvas.emf", "EMF+\tcenter color: 0x" << std::hex << color << std::dec);
-
-                s.ReadFloat(areaX).ReadFloat(areaY);
-                SAL_INFO("cppcanvas.emf", "EMF+\tcenter point: " << areaX << "," << areaY);
-
-                s.ReadInt32(surroundColorsNumber);
-                SAL_INFO("cppcanvas.emf", "EMF+\t number of surround colors: " << surroundColorsNumber);
-
-                if (surroundColorsNumber<0 || sal_uInt32(surroundColorsNumber)>SAL_MAX_INT32 / sizeof(::Color))
-                    surroundColorsNumber = SAL_MAX_INT32 / sizeof(::Color);
-
-                surroundColors.reset( new ::Color[surroundColorsNumber] );
-                for (int i = 0; i < surroundColorsNumber; i++) {
-                    s.ReadUInt32(color);
-                    surroundColors[i] = ::Color(0xff - (color >> 24), (color >> 16) & 0xff, (color >> 8) & 0xff, color & 0xff);
-                    if (i == 0)
-                        secondColor = surroundColors[0];
-                    SAL_INFO("cppcanvas.emf", "EMF+\tsurround color[" << i << "]: 0x" << std::hex << color << std::dec);
-                }
-
-                if (additionalFlags & 0x01) {
-                    sal_Int32 pathLength;
-
-                    s.ReadInt32(pathLength);
-                    SAL_INFO("cppcanvas.emf", "EMF+\tpath length: " << pathLength);
-
-                    sal_uInt64 const pos = s.Tell();
-
-                    sal_uInt32 pathHeader;
-                    sal_Int32 pathPoints, pathFlags;
-                    s.ReadUInt32(pathHeader).ReadInt32(pathPoints).ReadInt32(pathFlags);
-
-                    SAL_INFO("cppcanvas.emf", "EMF+\tpath (brush path gradient)");
-                    SAL_INFO("cppcanvas.emf", "EMF+\theader: 0x" << std::hex << pathHeader << " points: " << std::dec << pathPoints << " additional flags: 0x" << std::hex << pathFlags << std::dec);
-
-                    path.reset( new EMFPPath(pathPoints) );
-                    path->Read(s, pathFlags, rR);
-
-                    s.Seek(pos + pathLength);
-
-                    const ::basegfx::B2DRectangle aBounds(::basegfx::utils::getRange(path->GetPolygon(rR, false)));
-                    areaWidth = aBounds.getWidth();
-                    areaHeight = aBounds.getHeight();
-                    SAL_INFO("cppcanvas.emf", "EMF+\t polygon bounding box: " << aBounds.getMinX() << "," << aBounds.getMinY() << " " << aBounds.getWidth() << "x" << aBounds.getHeight());
-                }
-                else
-                {
-                    sal_Int32 boundaryPointCount;
-                    s.ReadInt32(boundaryPointCount);
-
-                    sal_uInt64 const pos = s.Tell();
-                    SAL_INFO("cppcanvas.emf", "EMF+\t use boundary, points: " << boundaryPointCount);
-                    path.reset( new EMFPPath(boundaryPointCount) );
-                    path->Read(s, 0x0, rR);
-
-                    s.Seek(pos + 8 * boundaryPointCount);
-
-                    const ::basegfx::B2DRectangle aBounds(::basegfx::utils::getRange(path->GetPolygon(rR, false)));
-                    areaWidth = aBounds.getWidth();
-                    areaHeight = aBounds.getHeight();
-                    SAL_INFO("cppcanvas.emf", "EMF+\t polygon bounding box: " << aBounds.getMinX() << "," << aBounds.getMinY() << " " << aBounds.getWidth() << "x" << aBounds.getHeight());
-                }
-
-                if (additionalFlags & 0x02) {
-                    SAL_INFO("cppcanvas.emf", "EMF+\tuse transformation");
-                    ReadXForm(s, brush_transformation);
-                    hasTransformation = true;
-                    SAL_INFO("cppcanvas.emf",
-                             "EMF+\tm11: " << brush_transformation.eM11 << " m12: " << brush_transformation.eM12 <<
-                             "\nEMF+\tm21: " << brush_transformation.eM21 << " m22: " << brush_transformation.eM22 <<
-                             "\nEMF+\tdx: " << brush_transformation.eDx << " dy: " << brush_transformation.eDy);
-
-                }
-                if (additionalFlags & 0x08) {
-                    s.ReadInt32(blendPoints);
-                    SAL_INFO("cppcanvas.emf", "EMF+\tuse blend, points: " << blendPoints);
-                    if (blendPoints<0 || sal_uInt32(blendPoints)>SAL_MAX_INT32 / (2 * sizeof(float)))
-                        blendPoints = SAL_MAX_INT32 / (2 * sizeof(float));
-                    blendPositions.reset( new float[2 * blendPoints] );
-                    blendFactors = blendPositions.get() + blendPoints;
-                    for (int i = 0; i < blendPoints; i++) {
-                        s.ReadFloat(blendPositions[i]);
-                        SAL_INFO("cppcanvas.emf", "EMF+\tposition[" << i << "]: " << blendPositions[i]);
-                    }
-                    for (int i = 0; i < blendPoints; i++) {
-                        s.ReadFloat(blendFactors[i]);
-                        SAL_INFO("cppcanvas.emf", "EMF+\tfactor[" << i << "]: " << blendFactors[i]);
-                    }
-                }
-
-                if (additionalFlags & 0x04) {
-                    s.ReadInt32(colorblendPoints);
-                    SAL_INFO("cppcanvas.emf", "EMF+\tuse color blend, points: " << colorblendPoints);
-                    if (colorblendPoints<0 || sal_uInt32(colorblendPoints)>SAL_MAX_INT32 / sizeof(float))
-                        colorblendPoints = SAL_MAX_INT32 / sizeof(float);
-                    if (sal_uInt32(colorblendPoints)>SAL_MAX_INT32 / sizeof(::Color))
-                        colorblendPoints = SAL_MAX_INT32 / sizeof(::Color);
-                    colorblendPositions.reset( new float[colorblendPoints] );
-                    colorblendColors.reset( new ::Color[colorblendPoints] );
-                    for (int i = 0; i < colorblendPoints; i++) {
-                        s.ReadFloat(colorblendPositions[i]);
-                        SAL_INFO("cppcanvas.emf", "EMF+\tposition[" << i << "]: " << colorblendPositions[i]);
-                    }
-                    for (int i = 0; i < colorblendPoints; i++) {
-                        s.ReadUInt32(color);
-                        colorblendColors[i] = ::Color(0xff - (color >> 24), (color >> 16) & 0xff, (color >> 8) & 0xff, color & 0xff);
-                        SAL_INFO("cppcanvas.emf", "EMF+\tcolor[" << i << "]: 0x" << std::hex << color << std::dec);
-                    }
-                }
-
-                break;
-            }
-            case BrushTypeLinearGradient:
-            {
-                s.ReadUInt32(additionalFlags).ReadInt32(wrapMode);
-
-                SAL_INFO("cppcanvas.emf", "EMF+\tlinear gradient, additional flags: 0x" << std::hex << additionalFlags << std::dec);
-
-                s.ReadFloat(areaX).ReadFloat(areaY).ReadFloat(areaWidth).ReadFloat(areaHeight);
-
-                SAL_INFO("cppcanvas.emf", "EMF+\tarea: " << areaX << "," << areaY << " - " << areaWidth << "x" << areaHeight);
-
-                sal_uInt32 color;
-
-                s.ReadUInt32(color);
-                solidColor = ::Color(0xff - (color >> 24), (color >> 16) & 0xff, (color >> 8) & 0xff, color & 0xff);
-                SAL_INFO("cppcanvas.emf", "EMF+\tfirst color: 0x" << std::hex << color << std::dec);
-
-                s.ReadUInt32(color);
-                secondColor = ::Color(0xff - (color >> 24), (color >> 16) & 0xff, (color >> 8) & 0xff, color & 0xff);
-                SAL_INFO("cppcanvas.emf", "EMF+\tsecond color: 0x" << std::hex << color << std::dec);
-
-                // repeated colors, unknown meaning, see http://www.aces.uiuc.edu/~jhtodd/Metafile/MetafileRecords/ObjectBrush.html
-                s.ReadUInt32(color);
-                s.ReadUInt32(color);
-
-                if (additionalFlags & 0x02) {
-                    SAL_INFO("cppcanvas.emf", "EMF+\tuse transformation");
-                    ReadXForm(s, brush_transformation);
-                    hasTransformation = true;
-                    SAL_INFO("cppcanvas.emf",
-                        "EMF+\tm11: " << brush_transformation.eM11 << " m12: " << brush_transformation.eM12 <<
-                        "\nEMF+\tm21: " << brush_transformation.eM21 << " m22: " << brush_transformation.eM22 <<
-                        "\nEMF+\tdx: " << brush_transformation.eDx << " dy: " << brush_transformation.eDy);
-                }
-                if (additionalFlags & 0x08) {
-                    s.ReadInt32(blendPoints);
-                    SAL_INFO("cppcanvas.emf", "EMF+\tuse blend, points: " << blendPoints);
-                    if (blendPoints<0 || sal_uInt32(blendPoints)>SAL_MAX_INT32 / (2 * sizeof(float)))
-                        blendPoints = SAL_MAX_INT32 / (2 * sizeof(float));
-                    blendPositions.reset( new float[2 * blendPoints] );
-                    blendFactors = blendPositions.get() + blendPoints;
-                    for (int i = 0; i < blendPoints; i++) {
-                        s.ReadFloat(blendPositions[i]);
-                        SAL_INFO("cppcanvas.emf", "EMF+\tposition[" << i << "]: " << blendPositions[i]);
-                    }
-                    for (int i = 0; i < blendPoints; i++) {
-                        s.ReadFloat(blendFactors[i]);
-                        SAL_INFO("cppcanvas.emf", "EMF+\tfactor[" << i << "]: " << blendFactors[i]);
-                    }
-                }
-
-                if (additionalFlags & 0x04) {
-                    s.ReadInt32(colorblendPoints);
-                    SAL_INFO("cppcanvas.emf", "EMF+\tuse color blend, points: " << colorblendPoints);
-                    if (colorblendPoints<0 || sal_uInt32(colorblendPoints)>SAL_MAX_INT32 / sizeof(float))
-                        colorblendPoints = SAL_MAX_INT32 / sizeof(float);
-                    if (sal_uInt32(colorblendPoints)>SAL_MAX_INT32 / sizeof(::Color))
-                        colorblendPoints = sal_uInt32(SAL_MAX_INT32) / sizeof(::Color);
-                    colorblendPositions.reset(new float[colorblendPoints] );
-                    colorblendColors.reset( new ::Color[colorblendPoints] );
-                    for (int i = 0; i < colorblendPoints; i++) {
-                        s.ReadFloat(colorblendPositions[i]);
-                        SAL_INFO("cppcanvas.emf", "EMF+\tposition[" << i << "]: " << colorblendPositions[i]);
-                    }
-                    for (int i = 0; i < colorblendPoints; i++) {
-                        s.ReadUInt32(color);
-                        colorblendColors[i] = ::Color(0xff - (color >> 24), (color >> 16) & 0xff, (color >> 8) & 0xff, color & 0xff);
-                        SAL_INFO("cppcanvas.emf", "EMF+\tcolor[" << i << "]: 0x" << std::hex << color << std::dec);
-                    }
-                }
-
-                break;
-            }
-            default:
-                SAL_INFO("cppcanvas.emf", "EMF+\tunhandled brush type: " << std::hex << type << std::dec);
-            }
-        }
-    }
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/cppcanvas/source/mtfrenderer/emfpbrush.hxx b/cppcanvas/source/mtfrenderer/emfpbrush.hxx
deleted file mode 100644
index f651f837d1ce..000000000000
--- a/cppcanvas/source/mtfrenderer/emfpbrush.hxx
+++ /dev/null
@@ -1,131 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- *   Licensed to the Apache Software Foundation (ASF) under one or more
- *   contributor license agreements. See the NOTICE file distributed
- *   with this work for additional information regarding copyright
- *   ownership. The ASF licenses this file to you under the Apache
- *   License, Version 2.0 (the "License"); you may not use this file
- *   except in compliance with the License. You may obtain a copy of
- *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-#ifndef INCLUDED_CPPCANVAS_SOURCE_MTFRENDERER_EMFPBRUSH_HXX
-#define INCLUDED_CPPCANVAS_SOURCE_MTFRENDERER_EMFPBRUSH_HXX
-
-namespace cppcanvas
-{
-    namespace internal
-    {
-        enum EmfPlusHatchStyle
-        {
-            HatchStyleHorizontal = 0x00000000,
-            HatchStyleVertical = 0x00000001,
-            HatchStyleForwardDiagonal = 0x00000002,
-            HatchStyleBackwardDiagonal = 0x00000003,
-            HatchStyleLargeGrid = 0x00000004,
-            HatchStyleDiagonalCross = 0x00000005,
-            HatchStyle05Percent = 0x00000006,
-            HatchStyle10Percent = 0x00000007,
-            HatchStyle20Percent = 0x00000008,
-            HatchStyle25Percent = 0x00000009,
-            HatchStyle30Percent = 0x0000000A,
-            HatchStyle40Percent = 0x0000000B,
-            HatchStyle50Percent = 0x0000000C,
-            HatchStyle60Percent = 0x0000000D,
-            HatchStyle70Percent = 0x0000000E,
-            HatchStyle75Percent = 0x0000000F,
-            HatchStyle80Percent = 0x00000010,
-            HatchStyle90Percent = 0x00000011,
-            HatchStyleLightDownwardDiagonal = 0x00000012,
-            HatchStyleLightUpwardDiagonal = 0x00000013,
-            HatchStyleDarkDownwardDiagonal = 0x00000014,
-            HatchStyleDarkUpwardDiagonal = 0x00000015,
-            HatchStyleWideDownwardDiagonal = 0x00000016,
-            HatchStyleWideUpwardDiagonal = 0x00000017,
-            HatchStyleLightVertical = 0x00000018,
-            HatchStyleLightHorizontal = 0x00000019,
-            HatchStyleNarrowVertical = 0x0000001A,
-            HatchStyleNarrowHorizontal = 0x0000001B,
-            HatchStyleDarkVertical = 0x0000001C,
-            HatchStyleDarkHorizontal = 0x0000001D,
-            HatchStyleDashedDownwardDiagonal = 0x0000001E,
-            HatchStyleDashedUpwardDiagonal = 0x0000001F,
-            HatchStyleDashedHorizontal = 0x00000020,
-            HatchStyleDashedVertical = 0x00000021,
-            HatchStyleSmallConfetti = 0x00000022,
-            HatchStyleLargeConfetti = 0x00000023,
-            HatchStyleZigZag = 0x00000024,
-            HatchStyleWave = 0x00000025,
-            HatchStyleDiagonalBrick = 0x00000026,
-            HatchStyleHorizontalBrick = 0x00000027,
-            HatchStyleWeave = 0x00000028,
-            HatchStylePlaid = 0x00000029,
-            HatchStyleDivot = 0x0000002A,
-            HatchStyleDottedGrid = 0x0000002B,
-            HatchStyleDottedDiamond = 0x0000002C,
-            HatchStyleShingle = 0x0000002D,
-            HatchStyleTrellis = 0x0000002E,
-            HatchStyleSphere = 0x0000002F,
-            HatchStyleSmallGrid = 0x00000030,
-            HatchStyleSmallCheckerBoard = 0x00000031,
-            HatchStyleLargeCheckerBoard = 0x00000032,
-            HatchStyleOutlinedDiamond = 0x00000033,
-            HatchStyleSolidDiamond = 0x00000034
-        };
-
-        enum EmfPlusBrushType
-        {
-            BrushTypeSolidColor = 0x00000000,
-            BrushTypeHatchFill = 0x00000001,
-            BrushTypeTextureFill = 0x00000002,
-            BrushTypePathGradient = 0x00000003,
-            BrushTypeLinearGradient = 0x00000004
-        };
-
-        struct EMFPPath;
-
-        struct EMFPBrush : public EMFPObject
-        {
-            ::Color solidColor;
-            sal_uInt32 type;
-            sal_uInt32 additionalFlags;
-
-            /* linear gradient */
-            sal_Int32 wrapMode;
-            float areaX, areaY, areaWidth, areaHeight;
-            ::Color secondColor; // first color is stored in solidColor;
-            XForm brush_transformation;
-            bool hasTransformation;
-            sal_Int32 blendPoints;
-            std::unique_ptr<float[]> blendPositions;
-            float* blendFactors;
-            sal_Int32 colorblendPoints;
-            std::unique_ptr<float[]> colorblendPositions;
-            std::unique_ptr<::Color[]> colorblendColors;
-            sal_Int32 surroundColorsNumber;
-            std::unique_ptr<::Color[]> surroundColors;
-            std::unique_ptr<EMFPPath> path;
-            EmfPlusHatchStyle hatchStyle;
-
-            EMFPBrush();
-            virtual ~EMFPBrush() override;
-
-            sal_uInt32 GetType() const { return type; }
-            const ::Color& GetColor() const { return solidColor; }
-
-            void Read(SvStream& s, ImplRenderer const & rR);
-        };
-    }
-}
-
-#endif // INCLUDED_CPPCANVAS_SOURCE_MTFRENDERER_EMFPBRUSH_HXX
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/cppcanvas/source/mtfrenderer/emfpcustomlinecap.cxx b/cppcanvas/source/mtfrenderer/emfpcustomlinecap.cxx
deleted file mode 100644
index 8cb3c56114c9..000000000000
--- a/cppcanvas/source/mtfrenderer/emfpcustomlinecap.cxx
+++ /dev/null
@@ -1,164 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- *   Licensed to the Apache Software Foundation (ASF) under one or more
- *   contributor license agreements. See the NOTICE file distributed
- *   with this work for additional information regarding copyright
- *   ownership. The ASF licenses this file to you under the Apache
- *   License, Version 2.0 (the "License"); you may not use this file
- *   except in compliance with the License. You may obtain a copy of
- *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-#include <com/sun/star/rendering/PathCapType.hpp>
-#include <com/sun/star/rendering/PathJoinType.hpp>
-#include <com/sun/star/rendering/TexturingMode.hpp>
-#include <com/sun/star/rendering/XCanvas.hpp>
-#include <basegfx/utils/canvastools.hxx>
-#include <basegfx/utils/gradienttools.hxx>
-#include <basegfx/utils/tools.hxx>
-#include <basegfx/numeric/ftools.hxx>
-#include <basegfx/point/b2dpoint.hxx>
-#include <basegfx/vector/b2dsize.hxx>
-#include <basegfx/range/b2drange.hxx>
-#include <basegfx/range/b2drectangle.hxx>
-#include <basegfx/polygon/b2dlinegeometry.hxx>
-#include <basegfx/polygon/b2dpolygon.hxx>
-#include <basegfx/polygon/b2dpolygontools.hxx>
-#include <basegfx/polygon/b2dpolypolygon.hxx>
-#include <basegfx/polygon/b2dpolypolygontools.hxx>
-#include <sal/log.hxx>
-#include <vcl/canvastools.hxx>
-#include <implrenderer.hxx>
-
-#include "emfpcustomlinecap.hxx"
-#include "emfppath.hxx"
-#include "emfppen.hxx"
-
-using namespace ::com::sun::star;
-using namespace ::basegfx;
-
-namespace cppcanvas
-{
-    namespace internal
-    {
-        const sal_uInt32 EmfPlusCustomLineCapDataTypeDefault = 0x00000000;
-        const sal_uInt32 EmfPlusCustomLineCapDataTypeAdjustableArrow = 0x00000001;
-
-        const sal_uInt32 EmfPlusCustomLineCapDataFillPath = 0x00000001;
-        const sal_uInt32 EmfPlusCustomLineCapDataLinePath = 0x00000002;
-
-        EMFPCustomLineCap::EMFPCustomLineCap()
-            : EMFPObject()
-            , type(0)
-            , strokeStartCap(0)
-            , strokeEndCap(0)
-            , strokeJoin(0)
-            , miterLimit(0.0)
-            , mbIsFilled(false)
-        {
-        }
-
-        void EMFPCustomLineCap::SetAttributes(rendering::StrokeAttributes& aAttributes)
-        {
-            aAttributes.StartCapType = EMFPPen::lcl_convertStrokeCap(strokeStartCap);
-            aAttributes.EndCapType = EMFPPen::lcl_convertStrokeCap(strokeEndCap);
-            aAttributes.JoinType = EMFPPen::lcl_convertLineJoinType(strokeJoin);
-
-            aAttributes.MiterLimit = miterLimit;
-        }
-
-        void EMFPCustomLineCap::ReadPath(SvStream& s, ImplRenderer const & rR, bool bFill)
-        {
-            sal_Int32 pathLength;
-            s.ReadInt32(pathLength);
-            SAL_INFO("cppcanvas.emf", "EMF+\t\tpath length: " << pathLength);
-
-            sal_uInt32 pathHeader;
-            sal_Int32 pathPoints, pathFlags;
-            s.ReadUInt32(pathHeader).ReadInt32(pathPoints).ReadInt32(pathFlags);
-
-            SAL_INFO("cppcanvas.emf", "EMF+\t\tpath (custom cap line path)");
-            SAL_INFO("cppcanvas.emf", "EMF+\t\theader: 0x" << std::hex << pathHeader << " points: " << std::dec << pathPoints << " additional flags: 0x" << std::hex << pathFlags << std::dec);
-
-            EMFPPath path(pathPoints);
-            path.Read(s, pathFlags, rR);
-
-            polygon = path.GetPolygon(rR, false);
-            mbIsFilled = bFill;
-
-            // transformation to convert the path to what LibreOffice
-            // expects
-            B2DHomMatrix aMatrix;
-            aMatrix.scale(1.0, -1.0);
-
-            polygon.transform(aMatrix);
-        };
-
-        void EMFPCustomLineCap::Read(SvStream& s, ImplRenderer const & rR)
-        {
-            sal_uInt32 header;
-
-            s.ReadUInt32(header).ReadUInt32(type);
-
-            SAL_INFO("cppcanvas.emf", "EMF+\t\tcustom cap");
-            SAL_INFO("cppcanvas.emf", "EMF+\t\theader: 0x" << std::hex << header << " type: " << type << std::dec);
-
-            if (type == EmfPlusCustomLineCapDataTypeDefault)
-            {
-                sal_uInt32 customLineCapDataFlags, baseCap;
-                float baseInset;
-                float widthScale;
-                float fillHotSpotX, fillHotSpotY, strokeHotSpotX, strokeHotSpotY;
-
-                s.ReadUInt32(customLineCapDataFlags).ReadUInt32(baseCap).ReadFloat(baseInset)
-                    .ReadUInt32(strokeStartCap).ReadUInt32(strokeEndCap).ReadUInt32(strokeJoin)
-                    .ReadFloat(miterLimit).ReadFloat(widthScale)
-                    .ReadFloat(fillHotSpotX).ReadFloat(fillHotSpotY).ReadFloat(strokeHotSpotX).ReadFloat(strokeHotSpotY);
-
-                SAL_INFO("cppcanvas.emf", "EMF+\t\tcustomLineCapDataFlags: 0x" << std::hex << customLineCapDataFlags);
-                SAL_INFO("cppcanvas.emf", "EMF+\t\tbaseCap: 0x" << std::hex << baseCap);
-                SAL_INFO("cppcanvas.emf", "EMF+\t\tbaseInset: " << baseInset);
-                SAL_INFO("cppcanvas.emf", "EMF+\t\tstrokeStartCap: 0x" << std::hex << strokeStartCap);
-                SAL_INFO("cppcanvas.emf", "EMF+\t\tstrokeEndCap: 0x" << std::hex << strokeEndCap);
-                SAL_INFO("cppcanvas.emf", "EMF+\t\tstrokeJoin: 0x" << std::hex << strokeJoin);
-                SAL_INFO("cppcanvas.emf", "EMF+\t\tmiterLimit: " << miterLimit);
-                SAL_INFO("cppcanvas.emf", "EMF+\t\twidthScale: " << widthScale);
-
-                if (customLineCapDataFlags & EmfPlusCustomLineCapDataFillPath)
-                {
-                    ReadPath(s, rR, true);
-                }
-
-                if (customLineCapDataFlags & EmfPlusCustomLineCapDataLinePath)
-                {
-                    ReadPath(s, rR, false);
-                }
-            }
-            else if (type == EmfPlusCustomLineCapDataTypeAdjustableArrow)
-            {
-                // TODO only reads the data, does not use them [I've had
-                // no test document to be able to implement it]
-
-                sal_Int32 width, height, middleInset, fillState, lineStartCap;
-                sal_Int32 lineEndCap, lineJoin, widthScale;
-                float fillHotSpotX, fillHotSpotY, lineHotSpotX, lineHotSpotY;
-
-                s.ReadInt32(width).ReadInt32(height).ReadInt32(middleInset).ReadInt32(fillState).ReadInt32(lineStartCap)
-                    .ReadInt32(lineEndCap).ReadInt32(lineJoin).ReadFloat(miterLimit).ReadInt32(widthScale)
-                    .ReadFloat(fillHotSpotX).ReadFloat(fillHotSpotY).ReadFloat(lineHotSpotX).ReadFloat(lineHotSpotY);
-
-                SAL_INFO("cppcanvas.emf", "EMF+\t\tTODO - actually read EmfPlusCustomLineCapArrowData object (section 2.2.2.12)");
-            }
-        }
-    }
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/cppcanvas/source/mtfrenderer/emfpcustomlinecap.hxx b/cppcanvas/source/mtfrenderer/emfpcustomlinecap.hxx
deleted file mode 100644
index cd5a45eec997..000000000000
--- a/cppcanvas/source/mtfrenderer/emfpcustomlinecap.hxx
+++ /dev/null
@@ -1,47 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- *   Licensed to the Apache Software Foundation (ASF) under one or more
- *   contributor license agreements. See the NOTICE file distributed
- *   with this work for additional information regarding copyright
- *   ownership. The ASF licenses this file to you under the Apache
- *   License, Version 2.0 (the "License"); you may not use this file
- *   except in compliance with the License. You may obtain a copy of
- *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-#ifndef INCLUDED_CPPCANVAS_SOURCE_MTFRENDERER_EMFPCUSTOMLINECAP_HXX
-#define INCLUDED_CPPCANVAS_SOURCE_MTFRENDERER_EMFPCUSTOMLINECAP_HXX
-
-namespace cppcanvas
-{
-    namespace internal
-    {
-        struct EMFPCustomLineCap : public EMFPObject
-        {
-            sal_uInt32 type;
-            sal_uInt32 strokeStartCap, strokeEndCap, strokeJoin;
-            float miterLimit;
-            basegfx::B2DPolyPolygon polygon;
-            bool mbIsFilled;
-
-            EMFPCustomLineCap();
-
-            void SetAttributes(com::sun::star::rendering::StrokeAttributes& aAttributes);
-            void ReadPath(SvStream& s, ImplRenderer const & rR, bool bFill);
-            void Read(SvStream& s, ImplRenderer const & rR);
-        };
-    }
-}
-
-
-#endif // INCLUDED_CPPCANVAS_SOURCE_MTFRENDERER_EMFPCUSTOMLINECAP_HXX
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/cppcanvas/source/mtfrenderer/emfpfont.cxx b/cppcanvas/source/mtfrenderer/emfpfont.cxx
deleted file mode 100644
index 67c06a1f0f7e..000000000000
--- a/cppcanvas/source/mtfrenderer/emfpfont.cxx
+++ /dev/null
@@ -1,75 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- *   Licensed to the Apache Software Foundation (ASF) under one or more
- *   contributor license agreements. See the NOTICE file distributed
- *   with this work for additional information regarding copyright
- *   ownership. The ASF licenses this file to you under the Apache
- *   License, Version 2.0 (the "License"); you may not use this file
- *   except in compliance with the License. You may obtain a copy of
- *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-#include <com/sun/star/rendering/PathCapType.hpp>
-#include <com/sun/star/rendering/PathJoinType.hpp>
-#include <com/sun/star/rendering/TexturingMode.hpp>
-#include <com/sun/star/rendering/XCanvas.hpp>
-#include <basegfx/utils/canvastools.hxx>
-#include <basegfx/utils/gradienttools.hxx>
-#include <basegfx/utils/tools.hxx>
-#include <basegfx/numeric/ftools.hxx>
-#include <basegfx/point/b2dpoint.hxx>
-#include <basegfx/vector/b2dsize.hxx>
-#include <basegfx/range/b2drange.hxx>
-#include <basegfx/range/b2drectangle.hxx>
-#include <basegfx/polygon/b2dlinegeometry.hxx>
-#include <basegfx/polygon/b2dpolygon.hxx>
-#include <basegfx/polygon/b2dpolygontools.hxx>
-#include <basegfx/polygon/b2dpolypolygon.hxx>
-#include <basegfx/polygon/b2dpolypolygontools.hxx>
-#include <sal/log.hxx>
-#include <vcl/canvastools.hxx>
-#include <implrenderer.hxx>
-#include "emfpfont.hxx"
-
-
-namespace cppcanvas
-{
-    namespace internal
-    {
-        void EMFPFont::Read(SvMemoryStream &s)
-        {
-            sal_uInt32 header;
-            sal_uInt32 reserved;
-            sal_uInt32 length;
-
-            s.ReadUInt32(header).ReadFloat(emSize).ReadUInt32(sizeUnit).ReadInt32(fontFlags).ReadUInt32(reserved).ReadUInt32(length);
-
-            SAL_WARN_IF((header >> 12) != 0xdbc01, "cppcanvas.emf", "Invalid header - not 0xdbc01");
-
-            SAL_INFO("cppcanvas.emf", "EMF+\tfont\nEMF+\theader: 0x" << std::hex << (header >> 12) << " version: 0x" << (header & 0x1fff) << " size: " << std::dec << emSize << " unit: 0x" << std::hex << sizeUnit << std::dec);
-            SAL_INFO("cppcanvas.emf", "EMF+\tflags: 0x" << std::hex << fontFlags << " reserved: 0x" << reserved << " length: 0x" << std::hex << length << std::dec);
-
-            if (length > 0 && length < 0x4000)
-            {
-                rtl_uString *pStr = rtl_uString_alloc(length);
-                sal_Unicode *chars = pStr->buffer;
-
-                for (sal_uInt32 i = 0; i < length; ++i)
-                    s.ReadUtf16(chars[i]);
-
-                family = OUString(pStr, SAL_NO_ACQUIRE);
-                SAL_INFO("cppcanvas.emf", "EMF+\tfamily: " << family);
-            }
-        }
-    }
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/cppcanvas/source/mtfrenderer/emfpfont.hxx b/cppcanvas/source/mtfrenderer/emfpfont.hxx
deleted file mode 100644
index aa9d0c45942a..000000000000
--- a/cppcanvas/source/mtfrenderer/emfpfont.hxx
+++ /dev/null
@@ -1,42 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- *   Licensed to the Apache Software Foundation (ASF) under one or more
- *   contributor license agreements. See the NOTICE file distributed
- *   with this work for additional information regarding copyright
- *   ownership. The ASF licenses this file to you under the Apache
- *   License, Version 2.0 (the "License"); you may not use this file
- *   except in compliance with the License. You may obtain a copy of
- *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-#ifndef INCLUDED_CPPCANVAS_SOURCE_MTFRENDERER_EMFPFONT_HXX
-#define INCLUDED_CPPCANVAS_SOURCE_MTFRENDERER_EMFPFONT_HXX
-
-namespace cppcanvas
-{
-    namespace internal
-    {
-        struct EMFPFont : public EMFPObject
-        {
-            float emSize;
-            sal_uInt32 sizeUnit;
-            sal_Int32 fontFlags;
-            OUString family;
-
-            void Read(SvMemoryStream &s);
-        };
-    }
-}
-
-
-#endif // INCLUDED_CPPCANVAS_SOURCE_MTFRENDERER_EMFPFONT_HXX
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/cppcanvas/source/mtfrenderer/emfpimage.cxx b/cppcanvas/source/mtfrenderer/emfpimage.cxx
deleted file mode 100644
index 0e1f353845f7..000000000000
--- a/cppcanvas/source/mtfrenderer/emfpimage.cxx
+++ /dev/null
@@ -1,101 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- *   Licensed to the Apache Software Foundation (ASF) under one or more
- *   contributor license agreements. See the NOTICE file distributed
- *   with this work for additional information regarding copyright
- *   ownership. The ASF licenses this file to you under the Apache
- *   License, Version 2.0 (the "License"); you may not use this file
- *   except in compliance with the License. You may obtain a copy of
- *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-#include <com/sun/star/rendering/PathCapType.hpp>
-#include <com/sun/star/rendering/PathJoinType.hpp>
-#include <com/sun/star/rendering/TexturingMode.hpp>
-#include <com/sun/star/rendering/XCanvas.hpp>
-#include <basegfx/utils/canvastools.hxx>
-#include <basegfx/utils/gradienttools.hxx>
-#include <basegfx/utils/tools.hxx>
-#include <basegfx/numeric/ftools.hxx>
-#include <basegfx/point/b2dpoint.hxx>
-#include <basegfx/vector/b2dsize.hxx>
-#include <basegfx/range/b2drange.hxx>
-#include <basegfx/range/b2drectangle.hxx>
-#include <basegfx/polygon/b2dlinegeometry.hxx>
-#include <basegfx/polygon/b2dpolygon.hxx>
-#include <basegfx/polygon/b2dpolygontools.hxx>
-#include <basegfx/polygon/b2dpolypolygon.hxx>
-#include <basegfx/polygon/b2dpolypolygontools.hxx>
-#include <vcl/canvastools.hxx>
-#include <implrenderer.hxx>
-#include <vcl/graphicfilter.hxx>
-#include "emfpimage.hxx"
-#include <sal/log.hxx>
-
-
-namespace cppcanvas
-{
-    namespace internal
-    {
-        void EMFPImage::Read(SvMemoryStream &s, sal_uInt32 dataSize, bool bUseWholeStream)
-        {
-            sal_uInt32 header, bitmapType;
-
-            s.ReadUInt32(header).ReadUInt32(type);
-
-            SAL_INFO("cppcanvas.emf", "EMF+\timage\nEMF+\theader: 0x" << std::hex << header << " type: " << type << std::dec);
-
-            if (type == 1) { // bitmap
-                s.ReadInt32(width).ReadInt32(height).ReadInt32(stride).ReadInt32(pixelFormat).ReadUInt32(bitmapType);
-                SAL_INFO("cppcanvas.emf", "EMF+\tbitmap width: " << width << " height: " << height << " stride: " << stride << " pixelFormat: 0x" << std::hex << pixelFormat << std::dec);
-                if ((bitmapType != 0) || (width == 0)) { // non native formats
-                    GraphicFilter filter;
-
-                    filter.ImportGraphic(graphic, OUString(), s);
-                    SAL_INFO("cppcanvas.emf", "EMF+\tbitmap width: " << graphic.GetSizePixel().Width() << " height: " << graphic.GetSizePixel().Height());
-                }
-
-            }
-            else if (type == 2) { // metafile
-                sal_Int32 mfType, mfSize;
-
-                s.ReadInt32(mfType).ReadInt32(mfSize);
-                if (bUseWholeStream)
-                    dataSize = s.remainingSize();
-                else
-                    dataSize -= 16;
-                SAL_INFO("cppcanvas.emf", "EMF+\tmetafile type: " << mfType << " dataSize: " << mfSize << " real size calculated from record dataSize: " << dataSize);
-
-                GraphicFilter filter;
-                // workaround buggy metafiles, which have wrong mfSize set (n#705956 for example)
-                SvMemoryStream mfStream(const_cast<char *>(static_cast<char const *>(s.GetData()) + s.Tell()), dataSize, StreamMode::READ);
-
-                filter.ImportGraphic(graphic, OUString(), mfStream);
-
-                // debug code - write the stream to debug file /tmp/emf-stream.emf
-#if OSL_DEBUG_LEVEL > 1
-                mfStream.Seek(0);
-                static sal_Int32 emfp_debug_stream_number = 0;
-                OUString emfp_debug_filename = "/tmp/emf-embedded-stream" +
-                    OUString::number(emfp_debug_stream_number++) + ".emf";
-
-                SvFileStream file(emfp_debug_filename, StreamMode::WRITE | StreamMode::TRUNC);
-
-                mfStream.WriteStream(file);
-                file.Flush();
-                file.Close();
-#endif
-            }
-        }
-    }
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/cppcanvas/source/mtfrenderer/emfpimage.hxx b/cppcanvas/source/mtfrenderer/emfpimage.hxx
deleted file mode 100644
index a30c73e03dde..000000000000
--- a/cppcanvas/source/mtfrenderer/emfpimage.hxx
+++ /dev/null
@@ -1,44 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- *   Licensed to the Apache Software Foundation (ASF) under one or more
- *   contributor license agreements. See the NOTICE file distributed
- *   with this work for additional information regarding copyright
- *   ownership. The ASF licenses this file to you under the Apache
- *   License, Version 2.0 (the "License"); you may not use this file
- *   except in compliance with the License. You may obtain a copy of
- *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-#ifndef INCLUDED_CPPCANVAS_SOURCE_MTFRENDERER_EMFPIMAGE_HXX
-#define INCLUDED_CPPCANVAS_SOURCE_MTFRENDERER_EMFPIMAGE_HXX
-
-namespace cppcanvas
-{
-    namespace internal
-    {
-        struct EMFPImage : public EMFPObject
-        {
-            sal_uInt32 type;
-            sal_Int32 width;
-            sal_Int32 height;
-            sal_Int32 stride;
-            sal_Int32 pixelFormat;
-            Graphic graphic;
-
-            void Read(SvMemoryStream &s, sal_uInt32 dataSize, bool bUseWholeStream);
-        };
-    }
-}
-
-
-#endif // INCLUDED_CPPCANVAS_SOURCE_MTFRENDERER_EMFPIMAGE_HXX
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/cppcanvas/source/mtfrenderer/emfplus.cxx b/cppcanvas/source/mtfrenderer/emfplus.cxx
deleted file mode 100644
index a36d37b56d6b..000000000000
--- a/cppcanvas/source/mtfrenderer/emfplus.cxx
+++ /dev/null
@@ -1,1666 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- *   Licensed to the Apache Software Foundation (ASF) under one or more
- *   contributor license agreements. See the NOTICE file distributed
- *   with this work for additional information regarding copyright
- *   ownership. The ASF licenses this file to you under the Apache
- *   License, Version 2.0 (the "License"); you may not use this file
- *   except in compliance with the License. You may obtain a copy of
- *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-#include <memory>
-#include <tools/stream.hxx>
-#include <vcl/metaact.hxx>
-#include <vcl/graphicfilter.hxx>
-#include <basegfx/curve/b2dcubicbezier.hxx>
-#include <basegfx/utils/canvastools.hxx>
-#include <basegfx/utils/gradienttools.hxx>
-#include <basegfx/utils/tools.hxx>
-#include <basegfx/numeric/ftools.hxx>
-#include <basegfx/point/b2dpoint.hxx>
-#include <basegfx/vector/b2dsize.hxx>
-#include <basegfx/range/b2drange.hxx>
-#include <basegfx/range/b2drectangle.hxx>
-#include <basegfx/polygon/b2dlinegeometry.hxx>
-#include <basegfx/polygon/b2dpolygon.hxx>
-#include <basegfx/polygon/b2dpolygontools.hxx>
-#include <basegfx/polygon/b2dpolypolygon.hxx>
-#include <basegfx/polygon/b2dpolypolygontools.hxx>
-#include <vcl/canvastools.hxx>
-#include <rtl/ustring.hxx>
-#include <sal/log.hxx>
-#include <i18nlangtag/languagetag.hxx>
-
-#include <com/sun/star/rendering/PanoseWeight.hpp>
-#include <com/sun/star/rendering/TexturingMode.hpp>
-#include <com/sun/star/rendering/XCanvas.hpp>
-#include <comphelper/propertysequence.hxx>
-
-#include "bitmapaction.hxx"
-#include <implrenderer.hxx>
-#include <outdevstate.hxx>
-#include "polypolyaction.hxx"
-#include "textaction.hxx"
-
-#include "emfpbrush.hxx"
-#include "emfpcustomlinecap.hxx"
-#include "emfpfont.hxx"
-#include "emfpimage.hxx"
-#include "emfppath.hxx"
-#include "emfppen.hxx"
-#include "emfpregion.hxx"
-#include "emfpstringformat.hxx"
-
-namespace
-{
-
-#define EmfPlusRecordTypeHeader 0x4001
-#define EmfPlusRecordTypeEndOfFile 0x4002
-//TODO EmfPlusRecordTypeComment 0x4003
-#define EmfPlusRecordTypeGetDC 0x4004
-//TODO EmfPlusRecordTypeMultiFormatStart 0x4005
-//TODO EmfPlusRecordTypeMultiFormatSection 0x4006
-//TODO EmfPlusRecordTypeMultiFormatEnd 0x4007
-#define EmfPlusRecordTypeObject 0x4008
-//TODO EmfPlusRecordTypeClear 0x4009
-#define EmfPlusRecordTypeFillRects 0x400A
-#define EmfPlusRecordTypeDrawRects 0x400B
-#define EmfPlusRecordTypeFillPolygon 0x400C
-#define EmfPlusRecordTypeDrawLines 0x400D
-#define EmfPlusRecordTypeFillEllipse 0x400E
-#define EmfPlusRecordTypeDrawEllipse 0x400F
-#define EmfPlusRecordTypeFillPie 0x4010
-#define EmfPlusRecordTypeDrawPie 0x4011
-#define EmfPlusRecordTypeDrawArc 0x4012
-//TODO EmfPlusRecordTypeFillRegion 0x4013
-#define EmfPlusRecordTypeFillPath 0x4014
-#define EmfPlusRecordTypeDrawPath 0x4015
-//TODO EmfPlusRecordTypeFillClosedCurve 0x4016
-//TODO EmfPlusRecordTypeDrawClosedCurve 0x4017
-//TODO EmfPlusRecordTypeDrawCurve 0x4018
-#define EmfPlusRecordTypeDrawBeziers 0x4019
-#define EmfPlusRecordTypeDrawImage 0x401A
-#define EmfPlusRecordTypeDrawImagePoints 0x401B
-#define EmfPlusRecordTypeDrawString 0x401C
-#define EmfPlusRecordTypeSetRenderingOrigin 0x401D
-#define EmfPlusRecordTypeSetAntiAliasMode 0x401E
-#define EmfPlusRecordTypeSetTextRenderingHint 0x401F
-#define EmfPlusRecordTypeSetInterpolationMode 0x4021
-#define EmfPlusRecordTypeSetPixelOffsetMode 0x4022
-//TODO EmfPlusRecordTypeSetCompositingMode 0x4023
-#define EmfPlusRecordTypeSetCompositingQuality 0x4024
-#define EmfPlusRecordTypeSave 0x4025
-#define EmfPlusRecordTypeRestore 0x4026
-//TODO EmfPlusRecordTypeBeginContainer 0x4027
-#define EmfPlusRecordTypeBeginContainerNoParams 0x4028
-#define EmfPlusRecordTypeEndContainer 0x4029
-#define EmfPlusRecordTypeSetWorldTransform 0x402A
-#define EmfPlusRecordTypeResetWorldTransform 0x402B
-#define EmfPlusRecordTypeMultiplyWorldTransform 0x402C
-#define EmfPlusRecordTypeTranslateWorldTransform 0x402D
-#define EmfPlusRecordTypeScaleWorldTransform 0x402E
-//TODO EmfPlusRecordTypeRotateWorldTransform 0x402F
-#define EmfPlusRecordTypeSetPageTransform 0x4030
-//TODO EmfPlusRecordTypeResetClip 0x4031
-#define EmfPlusRecordTypeSetClipRect 0x4032
-#define EmfPlusRecordTypeSetClipPath 0x4033
-#define EmfPlusRecordTypeSetClipRegion 0x4034
-//TODO EmfPlusRecordTypeOffsetClip 0x4035
-#define EmfPlusRecordTypeDrawDriverString 0x4036
-//TODO EmfPlusRecordTypeStrokeFillPath 0x4037
-//TODO EmfPlusRecordTypeSerializableObject 0x4038
-//TODO EmfPlusRecordTypeSetTSGraphics 0x4039
-//TODO EmfPlusRecordTypeSetTSClip 0x403A
-
-#define EmfPlusObjectTypeBrush 0x100
-#define EmfPlusObjectTypePen 0x200
-#define EmfPlusObjectTypePath 0x300
-#define EmfPlusObjectTypeRegion 0x400
-#define EmfPlusObjectTypeImage 0x500
-#define EmfPlusObjectTypeFont 0x600
-#define EmfPlusObjectTypeStringFormat 0x700
-#define EmfPlusObjectTypeImageAttributes 0x800
-#define EmfPlusObjectTypeCustomLineCap 0x900
-
-#define EmfPlusRegionInitialStateInfinite 0x10000003
-
-enum EmfPlusCombineMode
-{
-    EmfPlusCombineModeReplace = 0x00000000,
-    EmfPlusCombineModeIntersect = 0x00000001,
-    EmfPlusCombineModeUnion = 0x00000002,
-    EmfPlusCombineModeXOR = 0x00000003,
-    EmfPlusCombineModeExclude = 0x00000004,
-    EmfPlusCombineModeComplement = 0x00000005
-};
-
-enum EmfPlusFontStyle
-{
-    FontStyleBold = 0x00000001,
-    FontStyleItalic = 0x00000002,
-    FontStyleUnderline = 0x00000004,
-    FontStyleStrikeout = 0x00000008
-};
-
-enum UnitType
-{
-    UnitTypeWorld = 0x00,
-    UnitTypeDisplay = 0x01,
-    UnitTypePixel = 0x02,
-    UnitTypePoint = 0x03,
-    UnitTypeInch = 0x04,
-    UnitTypeDocument = 0x05,
-    UnitTypeMillimeter = 0x06
-};
-
-const char* emfTypeToName(sal_uInt16 type)
-{
-    switch(type)
-    {
-        case EmfPlusRecordTypeHeader: return "EmfPlusRecordTypeHeader";
-        case EmfPlusRecordTypeEndOfFile: return "EmfPlusRecordTypeEndOfFile";
-        case EmfPlusRecordTypeGetDC: return "EmfPlusRecordTypeGetDC";
-        case EmfPlusRecordTypeObject: return "EmfPlusRecordTypeObject";
-        case EmfPlusRecordTypeFillRects: return "EmfPlusRecordTypeFillRects";
-        case EmfPlusRecordTypeDrawRects: return "EmfPlusRecordTypeDrawRects";
-        case EmfPlusRecordTypeFillPolygon: return "EmfPlusRecordTypeFillPolygon";
-        case EmfPlusRecordTypeDrawLines: return "EmfPlusRecordTypeDrawLines";
-        case EmfPlusRecordTypeFillEllipse: return "EmfPlusRecordTypeFillEllipse";
-        case EmfPlusRecordTypeDrawEllipse: return "EmfPlusRecordTypeDrawEllipse";
-        case EmfPlusRecordTypeFillPie: return "EmfPlusRecordTypeFillPie";
-        case EmfPlusRecordTypeDrawPie: return "EmfPlusRecordTypeDrawPie";
-        case EmfPlusRecordTypeDrawArc: return "EmfPlusRecordTypeDrawArc";
-        case EmfPlusRecordTypeFillPath: return "EmfPlusRecordTypeFillPath";
-        case EmfPlusRecordTypeDrawPath: return "EmfPlusRecordTypeDrawPath";
-        case EmfPlusRecordTypeDrawBeziers: return "EmfPlusRecordTypeDrawBeziers";
-        case EmfPlusRecordTypeDrawImage: return "EmfPlusRecordTypeDrawImage";
-        case EmfPlusRecordTypeDrawImagePoints: return "EmfPlusRecordTypeDrawImagePoints";
-        case EmfPlusRecordTypeDrawString: return "EmfPlusRecordTypeDrawString";
-        case EmfPlusRecordTypeSetRenderingOrigin: return "EmfPlusRecordTypeSetRenderingOrigin";
-        case EmfPlusRecordTypeSetAntiAliasMode: return "EmfPlusRecordTypeSetAntiAliasMode";
-        case EmfPlusRecordTypeSetTextRenderingHint: return "EmfPlusRecordTypeSetTextRenderingHint";
-        case EmfPlusRecordTypeSetInterpolationMode: return "EmfPlusRecordTypeSetInterpolationMode";
-        case EmfPlusRecordTypeSetPixelOffsetMode: return "EmfPlusRecordTypeSetPixelOffsetMode";
-        case EmfPlusRecordTypeSetCompositingQuality: return "EmfPlusRecordTypeSetCompositingQuality";
-        case EmfPlusRecordTypeSave: return "EmfPlusRecordTypeSave";
-        case EmfPlusRecordTypeRestore: return "EmfPlusRecordTypeRestore";
-        case EmfPlusRecordTypeBeginContainerNoParams: return "EmfPlusRecordTypeBeginContainerNoParams";
-        case EmfPlusRecordTypeEndContainer: return "EmfPlusRecordTypeEndContainer";
-        case EmfPlusRecordTypeSetWorldTransform: return "EmfPlusRecordTypeSetWorldTransform";
-        case EmfPlusRecordTypeResetWorldTransform: return "EmfPlusRecordTypeResetWorldTransform";
-        case EmfPlusRecordTypeMultiplyWorldTransform: return "EmfPlusRecordTypeMultiplyWorldTransform";
-        case EmfPlusRecordTypeTranslateWorldTransform: return "EmfPlusRecordTypeTranslateWorldTransform";
-        case EmfPlusRecordTypeScaleWorldTransform: return "EmfPlusRecordTypeScaleWorldTransform";
-        case EmfPlusRecordTypeSetPageTransform: return "EmfPlusRecordTypeSetPageTransform";
-        case EmfPlusRecordTypeSetClipRect: return "EmfPlusRecordTypeSetClipRect";
-        case EmfPlusRecordTypeSetClipPath: return "EmfPlusRecordTypeSetClipPath";
-        case EmfPlusRecordTypeSetClipRegion: return "EmfPlusRecordTypeSetClipRegion";
-        case EmfPlusRecordTypeDrawDriverString: return "EmfPlusRecordTypeDrawDriverString";
-    }
-    return "";
-}
-
-} // anonymous namespace
-
-using namespace ::com::sun::star;
-using namespace ::basegfx;
-
-namespace cppcanvas
-{
-    namespace internal
-    {
-        void ImplRenderer::ReadRectangle (SvStream& s, float& x, float& y, float &width, float& height, bool bCompressed)
-        {
-            if (bCompressed) {
-                sal_Int16 ix, iy, iw, ih;
-
-                s.ReadInt16( ix ).ReadInt16( iy ).ReadInt16( iw ).ReadInt16( ih );
-
-                x = ix;
-                y = iy;
-                width = iw;
-                height = ih;
-            } else
-                s.ReadFloat( x ).ReadFloat( y ).ReadFloat( width ).ReadFloat( height );
-        }
-
-        void ImplRenderer::ReadPoint (SvStream& s, float& x, float& y, sal_uInt32 flags)
-        {
-            if (flags & 0x800) {
-                // specifies a location in the coordinate space that is relative to
-                // the location specified by the previous element in the array. In the case of the first element in
-                // PointData, a previous location at coordinates (0,0) is assumed.
-                SAL_WARN("cppcanvas.emf", "EMF+\t\t TODO Relative coordinates bit detected. Implement parse EMFPlusPointR");
-            }
-            if (flags & 0x4000) {
-                sal_Int16 ix, iy;
-
-                s.ReadInt16( ix ).ReadInt16( iy );
-
-                x = ix;
-                y = iy;
-            } else
-                s.ReadFloat( x ).ReadFloat( y );
-        }
-
-        void ImplRenderer::MapToDevice (double& x, double& y) const
-        {
-            // TODO: other units
-            x = 100*nMmX*x/nPixX;
-            y = 100*nMmY*y/nPixY;
-        }
-
-        ::basegfx::B2DPoint ImplRenderer::Map (double ix, double iy) const
-        {
-            double x, y;
-
-            x = ix*aWorldTransform.eM11 + iy*aWorldTransform.eM21 + aWorldTransform.eDx;
-            y = ix*aWorldTransform.eM12 + iy*aWorldTransform.eM22 + aWorldTransform.eDy;
-
-            MapToDevice (x, y);
-
-            x -= nFrameLeft;
-            y -= nFrameTop;
-
-            x *= aBaseTransform.eM11;
-            y *= aBaseTransform.eM22;
-
-            return ::basegfx::B2DPoint (x, y);
-        }
-
-        ::basegfx::B2DSize ImplRenderer::MapSize (double iwidth, double iheight) const
-        {
-            double w, h;
-
-            w = iwidth*aWorldTransform.eM11 + iheight*aWorldTransform.eM21;
-            h = iwidth*aWorldTransform.eM12 + iheight*aWorldTransform.eM22;
-
-            MapToDevice (w, h);
-
-            w *= aBaseTransform.eM11;
-            h *= aBaseTransform.eM22;
-
-            return ::basegfx::B2DSize (w, h);
-        }
-
-#define COLOR(x) \
-    vcl::unotools::colorToDoubleSequence( ::Color (0xff - (x >> 24), \
-                             (x >> 16) & 0xff, \
-                             (x >> 8) & 0xff, \
-                             x & 0xff), \
-                        rCanvas->getUNOCanvas()->getDevice()->getDeviceColorSpace());
-
-        void ImplRenderer::EMFPPlusFillPolygon (::basegfx::B2DPolyPolygon const & polygon, const ActionFactoryParameters& rParms,
-                                                OutDevState& rState, const CanvasSharedPtr& rCanvas, bool isColor, sal_uInt32 brushIndexOrColor)
-        {
-            ::basegfx::B2DPolyPolygon localPolygon (polygon);
-
-            SAL_INFO("cppcanvas.emf", "EMF+\tfill polygon");
-
-            localPolygon.transform( rState.mapModeTransform );
-
-            std::shared_ptr<Action> pPolyAction;
-
-            if (isColor) {
-                SAL_INFO("cppcanvas.emf", "EMF+\t\tcolor fill:0x" << std::hex << brushIndexOrColor << std::dec);
-                rState.isFillColorSet = true;
-                rState.isLineColorSet = false;
-
-                rState.fillColor = COLOR(brushIndexOrColor);
-
-                pPolyAction = internal::PolyPolyActionFactory::createPolyPolyAction( localPolygon, rParms.mrCanvas, rState );
-
-            } else {
-                rState.isFillColorSet = true;
-                // extract UseBrush
-                EMFPBrush* brush = static_cast<EMFPBrush*>( aObjects [brushIndexOrColor & 0xff].get() );
-                SAL_INFO("cppcanvas.emf", "EMF+\tbrush fill slot: " << brushIndexOrColor << " (type: " << (brush ? brush->GetType() : -1) << ")");
-
-                // give up in case something wrong happened
-                if( !brush )
-                    return;
-
-                rState.isFillColorSet = false;
-                rState.isLineColorSet = false;
-
-                if (brush->type == BrushTypeHatchFill)
-                {
-                    // EMF+ like hatching is currently not supported. These are just color blends which serve as an approximation for some of them
-                    // for the others the hatch "background" color (secondColor in brush) is used.
-
-                    bool isHatchBlend = true;
-                    double blendFactor = 0.0;
-
-                    switch (brush->hatchStyle)
-                    {
-                        case HatchStyle05Percent: blendFactor = 0.05; break;
-                        case HatchStyle10Percent: blendFactor = 0.10; break;
-                        case HatchStyle20Percent: blendFactor = 0.20; break;
-                        case HatchStyle25Percent: blendFactor = 0.25; break;
-                        case HatchStyle30Percent: blendFactor = 0.30; break;
-                        case HatchStyle40Percent: blendFactor = 0.40; break;
-                        case HatchStyle50Percent: blendFactor = 0.50; break;
-                        case HatchStyle60Percent: blendFactor = 0.60; break;
-                        case HatchStyle70Percent: blendFactor = 0.70; break;
-                        case HatchStyle75Percent: blendFactor = 0.75; break;
-                        case HatchStyle80Percent: blendFactor = 0.80; break;
-                        case HatchStyle90Percent: blendFactor = 0.90; break;
-                        default:
-                            isHatchBlend = false;
-                            break;
-                    }
-                    rState.isFillColorSet = true;
-                    rState.isLineColorSet = false;
-                    ::Color fillColor;
-                    if (isHatchBlend)
-                    {
-                        fillColor = brush->solidColor;
-                        fillColor.Merge(brush->secondColor, static_cast<sal_uInt8>(255 * blendFactor));
-                    }
-                    else
-                    {
-                        fillColor = brush->secondColor;
-                    }
-                    rState.fillColor = vcl::unotools::colorToDoubleSequence(fillColor, rCanvas->getUNOCanvas()->getDevice()->getDeviceColorSpace());
-                    pPolyAction = internal::PolyPolyActionFactory::createPolyPolyAction( localPolygon, rParms.mrCanvas, rState );
-                }
-                else if (brush->type == BrushTypeTextureFill)
-                {
-                    SAL_WARN("cppcanvas.emf", "EMF+\tTODO: implement BrushTypeTextureFill brush");
-                }
-                else if (brush->type == BrushTypePathGradient || brush->type == BrushTypeLinearGradient)
-                {
-                    if (brush->type == BrushTypePathGradient && !(brush->additionalFlags & 0x1))
-                    {
-                        SAL_WARN("cppcanvas.emf", "EMF+\t TODO Verify proper displaying of BrushTypePathGradient with flags: " <<  std::hex << brush->additionalFlags << std::dec);
-                    }
-                    ::basegfx::B2DHomMatrix aTextureTransformation;
-                    ::basegfx::B2DHomMatrix aWorldTransformation;
-                    ::basegfx::B2DHomMatrix aBaseTransformation;
-                    rendering::Texture aTexture;
-
-                    aWorldTransformation.set (0, 0, aWorldTransform.eM11);
-                    aWorldTransformation.set (0, 1, aWorldTransform.eM21);
-                    aWorldTransformation.set (0, 2, aWorldTransform.eDx);
-                    aWorldTransformation.set (1, 0, aWorldTransform.eM12);
-                    aWorldTransformation.set (1, 1, aWorldTransform.eM22);
-                    aWorldTransformation.set (1, 2, aWorldTransform.eDy);
-
-                    aBaseTransformation.set (0, 0, aBaseTransform.eM11);
-                    aBaseTransformation.set (0, 1, aBaseTransform.eM21);
-                    aBaseTransformation.set (0, 2, aBaseTransform.eDx);
-                    aBaseTransformation.set (1, 0, aBaseTransform.eM12);
-                    aBaseTransformation.set (1, 1, aBaseTransform.eM22);
-                    aBaseTransformation.set (1, 2, aBaseTransform.eDy);
-
-                    // TODO Verify on example image, why there is shift (-0.5, -0.5)
-                    if (brush->type == BrushTypePathGradient && (brush->additionalFlags & 0x1))
-                    {
-                        aTextureTransformation.translate (-0.5, -0.5);
-                    }
-                    aTextureTransformation.scale (brush->areaWidth, brush->areaHeight);
-                    aTextureTransformation.translate (brush->areaX, brush->areaY);
-
-                    if (brush->hasTransformation) {
-                        ::basegfx::B2DHomMatrix aTransformation;
-
-                        aTransformation.set (0, 0, brush->brush_transformation.eM11);
-                        aTransformation.set (0, 1, brush->brush_transformation.eM21);
-                        aTransformation.set (0, 2, brush->brush_transformation.eDx);
-                        aTransformation.set (1, 0, brush->brush_transformation.eM12);
-                        aTransformation.set (1, 1, brush->brush_transformation.eM22);
-                        aTransformation.set (1, 2, brush->brush_transformation.eDy);
-
-                        aTextureTransformation *= aTransformation;
-                    }
-
-                    aTextureTransformation *= aWorldTransformation;
-                    aTextureTransformation.scale (100.0*nMmX/nPixX, 100.0*nMmY/nPixY);
-                    aTextureTransformation.translate (-nFrameLeft, -nFrameTop);
-                    aTextureTransformation *= rState.mapModeTransform;
-                    aTextureTransformation *= aBaseTransformation;
-
-                    aTexture.RepeatModeX = rendering::TexturingMode::CLAMP;
-                    aTexture.RepeatModeY = rendering::TexturingMode::CLAMP;
-                    aTexture.Alpha = 1.0;
-
-                    basegfx::ODFGradientInfo aGradInfo;
-                    OUString aGradientService;
-
-                    const uno::Sequence< double > aStartColor(
-                            vcl::unotools::colorToDoubleSequence( brush->solidColor,
-                                rParms.mrCanvas->getUNOCanvas()->getDevice()->getDeviceColorSpace() ) );
-                    const uno::Sequence< double > aEndColor(
-                            vcl::unotools::colorToDoubleSequence( brush->secondColor,
-                                rParms.mrCanvas->getUNOCanvas()->getDevice()->getDeviceColorSpace() ) );
-                    uno::Sequence< uno::Sequence < double > > aColors (2);
-                    uno::Sequence< double > aStops (2);
-
-                    if (brush->blendPositions) {
-                        SAL_INFO("cppcanvas.emf", "EMF+\t\tuse blend");
-                        aColors.realloc (brush->blendPoints);
-                        aStops.realloc (brush->blendPoints);
-                        int length = aStartColor.getLength ();
-                        uno::Sequence< double > aColor (length);
-
-                        assert(length == aEndColor.getLength());
-                        for (int i = 0; i < brush->blendPoints; i++) {
-                            aStops[i] = brush->blendPositions [i];
-
-                            for (int j = 0; j < length; j++) {
-                                if (brush->type == BrushTypeLinearGradient) {
-                                    aColor [j] = aStartColor [j]*(1 - brush->blendFactors[i]) + aEndColor [j]*brush->blendFactors[i];
-                                } else
-                                    aColor [j] = aStartColor [j]*brush->blendFactors[i] + aEndColor [j]*(1 - brush->blendFactors[i]);
-                            }
-
-                            aColors[i] = aColor;
-                        }
-                    } else if (brush->colorblendPositions) {
-                        SAL_INFO("cppcanvas.emf", "EMF+\t\tuse color blend");
-                        aColors.realloc (brush->colorblendPoints);
-                        aStops.realloc (brush->colorblendPoints);
-
-                        for (int i = 0; i < brush->colorblendPoints; i++) {
-                            aStops[i] = brush->colorblendPositions [i];
-                            aColors[(brush->type == BrushTypeLinearGradient) ? i : brush->colorblendPoints - 1 - i] = vcl::unotools::colorToDoubleSequence( brush->colorblendColors [i],
-                                    rParms.mrCanvas->getUNOCanvas()->getDevice()->getDeviceColorSpace() );
-                        }
-                    } else {
-                        aStops[0] = 0.0;
-                        aStops[1] = 1.0;
-
-                        if (brush->type == BrushTypeLinearGradient) {
-                            aColors[0] = aStartColor;
-                            aColors[1] = aEndColor;
-                        } else {
-                            aColors[1] = aStartColor;
-                            aColors[0] = aEndColor;
-                        }
-                    }
-
-                    SAL_INFO("cppcanvas.emf", "EMF+\t\tset gradient");
-                    basegfx::B2DRange aBoundsRectangle (0, 0, 1, 1);
-                    if (brush->type == BrushTypeLinearGradient) {
-                        aGradientService = "LinearGradient";
-                        aGradInfo = basegfx::utils::createLinearODFGradientInfo(
-                                aBoundsRectangle,
-                                aStops.getLength(),
-                                0,
-                                0);
-
-                    } else {
-                        aGradientService = "EllipticalGradient";
-                        aGradInfo = basegfx::utils::createEllipticalODFGradientInfo(
-                                aBoundsRectangle,
-                                ::basegfx::B2DVector( 0, 0 ),
-                                aStops.getLength(),
-                                0,
-                                0);
-                    }
-
-                    uno::Reference< lang::XMultiServiceFactory > xFactory(
-                            rParms.mrCanvas->getUNOCanvas()->getDevice()->getParametricPolyPolygonFactory() );
-
-                    if( xFactory.is() ) {
-                        uno::Sequence<uno::Any> args(comphelper::InitAnyPropertySequence(
-                        {
-                            {"Colors", uno::Any(aColors)},
-                            {"Stops", uno::Any(aStops)},
-                            {"AspectRatio", uno::Any(static_cast<sal_Int32>(1))},
-                        }));
-                        aTexture.Gradient.set(
-                                xFactory->createInstanceWithArguments( aGradientService,
-                                    args ),
-                                uno::UNO_QUERY);
-                    }
-
-                    ::basegfx::unotools::affineMatrixFromHomMatrix( aTexture.AffineTransform,
-                            aTextureTransformation );
-
-                    if( aTexture.Gradient.is() )
-                        pPolyAction = internal::PolyPolyActionFactory::createPolyPolyAction( localPolygon,
-                                        rParms.mrCanvas,
-                                        rState,
-                                        aTexture );
-                }
-            }
-
-            if( pPolyAction )
-            {
-                SAL_INFO("cppcanvas.emf", "EMF+\t\tadd poly action");
-
-                maActions.emplace_back(
-                        pPolyAction,
-                        rParms.mrCurrActionIndex );
-
-                rParms.mrCurrActionIndex += pPolyAction->getActionCount()-1;
-            }
-        }
-
-        double ImplRenderer::EMFPPlusDrawLineCap(const ::basegfx::B2DPolygon& rPolygon, double fPolyLength,
-                const ::basegfx::B2DPolyPolygon& rLineCap, bool bIsFilled, bool bStart, const rendering::StrokeAttributes& rAttributes,
-                const ActionFactoryParameters& rParms, OutDevState& rState)
-        {
-            if (!rLineCap.count())
-                return 0.0;
-
-            // createAreaGeometryForLineStartEnd normalises the arrows height
-            // before scaling (i.e. scales down by rPolygon.height), hence
-            // we pre-scale it (which means we can avoid changing the logic
-            // that would affect arrows rendered outside of EMF+).
-            const double fWidth = rAttributes.StrokeWidth*rLineCap.getB2DRange().getWidth();
-
-            // When drawing an outline (as opposed to a filled endCap), we also
-            // need to take account that the brush width also adds to the area
-            // of the polygon.
-            const double fShift = bIsFilled ? 0 : rAttributes.StrokeWidth;
-            double fConsumed = 0;
-            basegfx::B2DPolyPolygon aArrow(basegfx::utils::createAreaGeometryForLineStartEnd(
-                        rPolygon, rLineCap, bStart,
-                        fWidth, fPolyLength, 0, &fConsumed, fShift));
-
-            // createAreaGeometryForLineStartEnd from some reason always sets
-            // the path as closed, correct it
-            aArrow.setClosed(rLineCap.isClosed());
-
-            // If the endcap is filled, we draw ONLY the filling, if it isn't
-            // filled we draw ONLY the outline, but never both.
-            if (bIsFilled)
-            {
-                bool bWasFillColorSet = rState.isFillColorSet;
-                rState.isFillColorSet = true;
-                rState.fillColor = rState.lineColor;
-                std::shared_ptr<Action> pAction2(internal::PolyPolyActionFactory::createPolyPolyAction(aArrow, rParms.mrCanvas, rState));
-                if (pAction2)
-                {
-                    maActions.emplace_back(pAction2, rParms.mrCurrActionIndex);
-                    rParms.mrCurrActionIndex += pAction2->getActionCount()-1;
-                }
-                rState.isFillColorSet = bWasFillColorSet;
-            }
-            else
-            {
-                std::shared_ptr<Action> pAction(internal::PolyPolyActionFactory::createPolyPolyAction(aArrow, rParms.mrCanvas, rState, rAttributes));
-                if (pAction)
-                {
-                    maActions.emplace_back(pAction, rParms.mrCurrActionIndex);
-                    rParms.mrCurrActionIndex += pAction->getActionCount()-1;
-                }
-            }
-
-            // There isn't any clear definition of how far the line should extend
-            // for arrows, however the following values seem to give best results
-            // (fConsumed/2 draws the line to the center-point of the endcap
-            // for filled caps -- however it is likely this will need to be
-            // changed once we start taking baseInset into account).
-            if (bIsFilled)
-                return fConsumed/2;
-            else
-                return rAttributes.StrokeWidth;
-        }
-
-        void ImplRenderer::EMFPPlusDrawPolygon (const ::basegfx::B2DPolyPolygon& polygon, const ActionFactoryParameters& rParms,
-                                                OutDevState& rState, const CanvasSharedPtr& rCanvas, sal_uInt32 penIndex)
-        {
-            EMFPPen* pen = static_cast<EMFPPen*>( aObjects [penIndex & 0xff].get() );
-
-            SAL_WARN_IF( !pen, "cppcanvas.emf", "emf+ missing pen" );
-
-            if (pen)
-            {
-                rState.isFillColorSet = false;
-                rState.isLineColorSet = true;
-                rState.lineColor = vcl::unotools::colorToDoubleSequence (pen->GetColor (),
-                                                                           rCanvas->getUNOCanvas ()->getDevice()->getDeviceColorSpace());
-
-                basegfx::B2DPolyPolygon aPolyPolygon(polygon);
-                aPolyPolygon.transform(rState.mapModeTransform);
-                rendering::StrokeAttributes aCommonAttributes;
-
-                // some attributes are common for the polygon, and the line
-                // starts & ends - like the stroke width
-                pen->SetStrokeWidth(aCommonAttributes, *this, rState);
-
-                // but eg. dashing has to be additionally set only on the
-                // polygon
-                rendering::StrokeAttributes aPolygonAttributes(aCommonAttributes);
-                pen->SetStrokeAttributes(aPolygonAttributes);
-
-                basegfx::B2DPolyPolygon aFinalPolyPolygon;
-
-                // render line starts & ends if present
-                if (!pen->customStartCap && !pen->customEndCap)
-                    aFinalPolyPolygon = aPolyPolygon;
-                else
-                {
-                    for (sal_uInt32 i = 0; i < aPolyPolygon.count(); ++i)
-                    {
-                        basegfx::B2DPolygon aPolygon(aPolyPolygon.getB2DPolygon(i));
-
-                        if (!aPolygon.isClosed())
-                        {
-                            double fStart = 0.0;
-                            double fEnd = 0.0;
-                            double fPolyLength = basegfx::utils::getLength(aPolygon);
-
-                            // line start
-                            if (pen->customStartCap)
-                            {
-                                rendering::StrokeAttributes aAttributes(aCommonAttributes);
-                                pen->customStartCap->SetAttributes(aAttributes);
-
-                                fStart = EMFPPlusDrawLineCap(aPolygon, fPolyLength, pen->customStartCap->polygon,
-                                        pen->customStartCap->mbIsFilled,
-                                        true, aAttributes, rParms, rState);
-                            }
-
-                            // line end
-                            if (pen->customEndCap)
-                            {
-                                rendering::StrokeAttributes aAttributes(aCommonAttributes);
-                                pen->customEndCap->SetAttributes(aAttributes);
-
-                                fEnd = EMFPPlusDrawLineCap(aPolygon, fPolyLength, pen->customEndCap->polygon,
-                                        pen->customEndCap->mbIsFilled,
-                                        false, aAttributes, rParms, rState);
-                            }
-
-                            // build new poly, consume something from the old poly
-                            if (fStart != 0.0 || fEnd != 0.0)
-                                aPolygon = basegfx::utils::getSnippetAbsolute(aPolygon, fStart, fPolyLength - fEnd, fPolyLength);
-                        }
-
-                        aFinalPolyPolygon.append(aPolygon);
-                    }
-                }
-
-                // finally render the polygon
-                std::shared_ptr<Action> pPolyAction(internal::PolyPolyActionFactory::createPolyPolyAction(aFinalPolyPolygon, rParms.mrCanvas, rState, aPolygonAttributes));
-                if( pPolyAction )
-                {
-                    maActions.emplace_back(pPolyAction, rParms.mrCurrActionIndex);
-                    rParms.mrCurrActionIndex += pPolyAction->getActionCount()-1;
-                }
-            }
-        }
-
-        void ImplRenderer::processObjectRecord(SvMemoryStream& rObjectStream, sal_uInt16 flags, sal_uInt32 dataSize, bool bUseWholeStream)
-        {
-            sal_uInt32 index;
-
-            SAL_INFO("cppcanvas.emf", "EMF+ Object slot: " << (flags & 0xff) << " flags: " << (flags & 0xff00));
-
-            index = flags & 0xff;
-            if (aObjects [index] != nullptr) {
-                aObjects [index].reset();
-            }
-
-            switch (flags & 0x7f00) {
-            case EmfPlusObjectTypeBrush:
-                {
-                    std::unique_ptr<EMFPBrush> brush(new EMFPBrush());
-                    brush->Read (rObjectStream, *this);
-                    aObjects [index] = std::move(brush);
-
-                    break;
-                }
-            case EmfPlusObjectTypePen:
-                {
-                    std::unique_ptr<EMFPPen> pen(new EMFPPen ());
-                    pen->Read (rObjectStream, *this);
-                    aObjects [index] = std::move(pen);
-
-                    break;
-                }
-            case EmfPlusObjectTypePath: {
-                sal_uInt32 header, pathFlags;
-                sal_Int32 points;
-
-                rObjectStream.ReadUInt32( header ).ReadInt32( points ).ReadUInt32( pathFlags );
-
-                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);
-
-                std::unique_ptr<EMFPPath> path(new EMFPPath (points));
-                path->Read (rObjectStream, pathFlags, *this);
-                aObjects [index] = std::move(path);
-
-                break;
-            }
-            case EmfPlusObjectTypeRegion: {
-                std::unique_ptr<EMFPRegion> region(new EMFPRegion ());
-                region->Read (rObjectStream);
-                aObjects [index] = std::move(region);
-                break;
-            }
-            case EmfPlusObjectTypeImage:
-                {
-                    std::unique_ptr<EMFPImage> image(new EMFPImage);
-                    image->type = 0;
-                    image->width = 0;
-                    image->height = 0;
-                    image->stride = 0;
-                    image->pixelFormat = 0;
-                    image->Read (rObjectStream, dataSize, bUseWholeStream);
-                    aObjects [index] = std::move(image);
-
-                    break;
-                }
-            case EmfPlusObjectTypeFont:
-                {
-                    std::unique_ptr<EMFPFont> font(new EMFPFont);
-                    font->emSize = 0;
-                    font->sizeUnit = 0;
-                    font->fontFlags = 0;
-                    font->Read (rObjectStream);
-                    aObjects [index] = std::move(font);
-
-                    break;
-                }
-            case EmfPlusObjectTypeStringFormat:
-                {
-                    std::unique_ptr<EMFPStringFormat> stringFormat(new EMFPStringFormat());
-                    stringFormat->Read (rObjectStream);
-                    aObjects [index] = std::move(stringFormat);
-                    break;
-                }
-            case EmfPlusObjectTypeImageAttributes:
-                {
-                    SAL_INFO("cppcanvas.emf", "EMF+\t Object type 'image attributes' not yet implemented");
-                    break;
-                }
-            case EmfPlusObjectTypeCustomLineCap:
-                {
-                    SAL_INFO("cppcanvas.emf", "EMF+\t Object type 'custom line cap' not yet implemented");
-                    break;
-                }
-            default:
-                SAL_INFO("cppcanvas.emf", "EMF+\tObject unhandled flags: 0x" << std::hex << (flags & 0xff00) << std::dec);
-                break;
-            }
-        }
-
-        double ImplRenderer::setFont (css::rendering::FontRequest& aFontRequest, sal_uInt8 fontObjectId, const ActionFactoryParameters& rParms, OutDevState& rState)
-        {
-            EMFPFont *font = static_cast< EMFPFont* >( aObjects[ fontObjectId ].get() );
-
-            aFontRequest.FontDescription.FamilyName = font->family;
-            double cellSize = font->emSize;
-            if( font->fontFlags & FontStyleBold )
-            {
-                aFontRequest.FontDescription.FontDescription.Weight = rendering::PanoseWeight::BOLD;
-            }
-            aFontRequest.CellSize = (rState.mapModeTransform*MapSize( cellSize, 0 )).getX();
-            rState.xFont = rParms.mrCanvas->getUNOCanvas()->createFont( aFontRequest,
-                                               uno::Sequence< beans::PropertyValue >(),
-                                               geometry::Matrix2D() );
-
-            return cellSize;
-        }
-
-        void ImplRenderer::GraphicStatePush(GraphicStateMap& map, sal_Int32 index, OutDevState const & rState)
-        {
-            GraphicStateMap::iterator iter = map.find( index );
-
-            if ( iter != map.end() )
-            {
-                EmfPlusGraphicState state = iter->second;
-                map.erase( iter );
-
-                SAL_INFO("cppcanvas.emf", "stack index: " << index << " found and erased");
-            }
-
-            EmfPlusGraphicState state;
-
-            state.aWorldTransform = aWorldTransform;
-            state.aDevState = rState;
-
-            map[ index ] = state;
-        }
-
-        void ImplRenderer::GraphicStatePop(GraphicStateMap& map, sal_Int32 index, OutDevState& rState)
-        {
-            GraphicStateMap::iterator iter = map.find( index );
-
-            if ( iter != map.end() )
-            {
-                SAL_INFO("cppcanvas.emf", "stack index: " << index << " found");
-
-                EmfPlusGraphicState state = iter->second;
-
-                aWorldTransform = state.aWorldTransform;
-                rState.clip = state.aDevState.clip;
-                rState.clipRect = state.aDevState.clipRect;
-                rState.xClipPoly = state.aDevState.xClipPoly;
-            }
-        }
-
-        void ImplRenderer::processEMFPlus( MetaCommentAction const * pAct, const ActionFactoryParameters& rFactoryParms,
-                                           OutDevState& rState, const CanvasSharedPtr& rCanvas )
-        {
-            sal_uInt32 length = pAct->GetDataSize ();
-            SvMemoryStream rMF (const_cast<sal_uInt8 *>(pAct->GetData ()), length, StreamMode::READ);
-
-            if (length < 12) {
-                SAL_INFO("cppcanvas.emf", "length is less than required header size");
-            }
-
-            // 12 is minimal valid EMF+ record size; remaining bytes are padding
-            while (length >= 12) {
-                sal_uInt16 type, flags;
-                sal_uInt32 size, dataSize;
-                sal_uInt64 next;
-
-                rMF.ReadUInt16( type ).ReadUInt16( flags ).ReadUInt32( size ).ReadUInt32( dataSize );
-
-                next = rMF.Tell() + ( size - 12 );
-
-                if (size < 12) {
-                    SAL_INFO("cppcanvas.emf", "Size field is less than 12 bytes");
-                } else if (size > length) {
-                    SAL_INFO("cppcanvas.emf", "Size field is greater than bytes left");
-                }
-                if (dataSize > (size-12)) {
-                    SAL_INFO("cppcanvas.emf", "DataSize field is greater than Size-12");
-                }
-
-                SAL_INFO("cppcanvas.emf", "EMF+ record size: " << size << " type: " << emfTypeToName(type) << " flags: " << flags << " data size: " << dataSize);
-
-                if (type == EmfPlusRecordTypeObject && ((mbMultipart && (flags & 0x7fff) == (mMFlags & 0x7fff)) || (flags & 0x8000))) {
-                    if (!mbMultipart) {
-                        mbMultipart = true;
-                        mMFlags = flags;
-                        mMStream.Seek(0);
-                    }
-
-                    OSL_ENSURE(dataSize >= 4, "No room for TotalObjectSize in EmfPlusContinuedObjectRecord");
-                    // 1st 4 bytes are TotalObjectSize
-                    mMStream.WriteBytes(static_cast<const char *>(rMF.GetData()) + rMF.Tell() + 4, dataSize - 4);
-                    SAL_INFO("cppcanvas.emf", "EMF+ read next object part size: " << size << " type: " << type << " flags: " << flags << " data size: " << dataSize);
-                } else {
-                    if (mbMultipart) {
-                        SAL_INFO("cppcanvas.emf", "EMF+ multipart record flags: " << mMFlags);
-                        mMStream.Seek (0);
-                        processObjectRecord (mMStream, mMFlags, 0, true);
-                    }
-                    mbMultipart = false;
-                }
-
-                if (type != EmfPlusRecordTypeObject || !(flags & 0x8000))
-                {
-                    switch (type) {
-                    case EmfPlusRecordTypeHeader:
-                        sal_uInt32 header, version;
-
-                        rMF.ReadUInt32( header ).ReadUInt32( version ).ReadInt32( nHDPI ).ReadInt32( nVDPI );
-
-                        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));
-
-                        break;
-                    case EmfPlusRecordTypeEndOfFile:
-                        SAL_INFO("cppcanvas.emf", "EMF+ EndOfFile");
-                        break;
-                    case EmfPlusRecordTypeGetDC:
-                        SAL_INFO("cppcanvas.emf", "EMF+ GetDC");
-                        SAL_INFO("cppcanvas.emf", "EMF+\talready used in svtools wmf/emf filter parser");
-                        break;
-                    case EmfPlusRecordTypeObject:
-                        processObjectRecord (rMF, flags, dataSize);
-                        break;
-                    case EmfPlusRecordTypeFillPie:
-                    case EmfPlusRecordTypeDrawPie:
-                    case EmfPlusRecordTypeDrawArc:
-                        {
-                            float startAngle, sweepAngle;
-
-                            // Silent MSVC warning C4701: potentially uninitialized local variable 'brushIndexOrColor' used
-                            sal_uInt32 brushIndexOrColor = 999;
-
-                            if ( type == EmfPlusRecordTypeFillPie )
-                            {
-                                rMF.ReadUInt32( brushIndexOrColor );
-                                SAL_INFO("cppcanvas.emf", "EMF+ FillPie colorOrIndex: " << brushIndexOrColor);
-                            }
-                            else if ( type == EmfPlusRecordTypeDrawPie )
-                            {
-                                SAL_INFO("cppcanvas.emf", "EMF+ DrawPie");
-                            }
-                            else
-                            {
-                                SAL_INFO("cppcanvas.emf", "EMF+ DrawArc");
-                            }
-                            rMF.ReadFloat( startAngle ).ReadFloat( sweepAngle );
-
-                            float dx, dy, dw, dh;
-
-                            ReadRectangle (rMF, dx, dy, dw, dh, bool(flags & 0x4000));
-
-                            SAL_INFO("cppcanvas.emf", "EMF+\t RectData: " << dx << "," << dy << " " << dw << "x" << dh);
-
-                            startAngle = basegfx::deg2rad(startAngle);
-                            sweepAngle = basegfx::deg2rad(sweepAngle);
-
-                            B2DPoint mappedCenter (Map (dx + dw/2, dy + dh/2));
-                            B2DSize mappedSize( MapSize (dw/2, dh/2));
-
-                            float endAngle = startAngle + sweepAngle;
-                            startAngle = fmodf(startAngle, static_cast<float>(M_PI*2));
-                            if (startAngle < 0)
-                                startAngle += static_cast<float>(M_PI*2);
-                            endAngle = fmodf(endAngle, static_cast<float>(M_PI*2));
-                            if (endAngle < 0)
-                                endAngle += static_cast<float>(M_PI*2);
-
-                            if (sweepAngle < 0)
-                                std::swap (endAngle, startAngle);
-
-                            SAL_INFO("cppcanvas.emf", "EMF+\t adjusted angles: start " <<
-                                     basegfx::rad2deg(startAngle) << ", end: " << basegfx::rad2deg(endAngle) <<
-                                     " startAngle: " << startAngle << " sweepAngle: " << sweepAngle);
-
-                            B2DPolygon polygon = basegfx::utils::createPolygonFromEllipseSegment (mappedCenter, mappedSize.getX (), mappedSize.getY (), startAngle, endAngle);
-                            if ( type != EmfPlusRecordTypeDrawArc )
-                            {
-                                polygon.append (mappedCenter);
-                                polygon.setClosed (true);
-                            }
-
-                            B2DPolyPolygon polyPolygon (polygon);
-                            if ( type == EmfPlusRecordTypeFillPie )
-                                EMFPPlusFillPolygon( polyPolygon,
-                                                     rFactoryParms, rState, rCanvas, flags & 0x8000, brushIndexOrColor );
-                            else
-                                EMFPPlusDrawPolygon( polyPolygon,
-                                                     rFactoryParms, rState, rCanvas, flags & 0xff );
-                        }
-                        break;
-                    case EmfPlusRecordTypeFillPath:
-                        {
-                            sal_uInt32 index = flags & 0xff;
-                            sal_uInt32 brushIndexOrColor;
-
-                            rMF.ReadUInt32( brushIndexOrColor );
-
-                            SAL_INFO("cppcanvas.emf", "EMF+ FillPath slot: " << index);
-
-                            EMFPPlusFillPolygon( static_cast<EMFPPath*>( aObjects [index].get())->GetPolygon (*this), rFactoryParms, rState, rCanvas, flags & 0x8000, brushIndexOrColor);
-                        }
-                        break;
-                    case EmfPlusRecordTypeDrawEllipse:
-                    case EmfPlusRecordTypeFillEllipse:
-                        {
-                            // Intentionally very bogus initial value to avoid MSVC complaining about potentially uninitialized local
-                            // variable. As long as the code stays as intended, this variable will be assigned a (real) value in the case
-                            // when it is later used.
-                            sal_uInt32 brushIndexOrColor = 1234567;
-
-                            if ( type == EmfPlusRecordTypeFillEllipse )
-                                rMF.ReadUInt32( brushIndexOrColor );
-
-                            SAL_INFO("cppcanvas.emf", "EMF+ " << (type == EmfPlusRecordTypeFillEllipse ? "Fill" : "Draw") << "Ellipse slot: " << (flags & 0xff));
-
-                            float dx, dy, dw, dh;
-
-                            ReadRectangle (rMF, dx, dy, dw, dh, bool(flags & 0x4000));
-
-                            SAL_INFO("cppcanvas.emf", "EMF+ RectData: " << dx << "," << dy << " " << dw << "x" << dh);
-
-                            B2DPoint mappedCenter (Map (dx + dw/2, dy + dh/2));
-                            B2DSize mappedSize( MapSize (dw/2, dh/2));
-
-                            ::basegfx::B2DPolyPolygon polyPolygon( ::basegfx::utils::createPolygonFromEllipse( mappedCenter, mappedSize.getX (), mappedSize.getY () ) );
-
-                            if ( type == EmfPlusRecordTypeFillEllipse )
-                                EMFPPlusFillPolygon( polyPolygon,
-                                                     rFactoryParms, rState, rCanvas, flags & 0x8000, brushIndexOrColor );
-                            else
-                                EMFPPlusDrawPolygon( polyPolygon,
-                                                     rFactoryParms, rState, rCanvas, flags & 0xff );
-                        }
-                        break;
-                    case EmfPlusRecordTypeFillRects:
-                    case EmfPlusRecordTypeDrawRects:
-                        {
-                            // Silent MSVC warning C4701: potentially uninitialized local variable 'brushIndexOrColor' used
-                            sal_uInt32 brushIndexOrColor = 999;
-                            sal_Int32 rectangles;
-                            bool isColor = (flags & 0x8000);
-                            ::basegfx::B2DPolygon polygon;
-
-                            if ( type == EmfPlusRecordTypeFillRects )
-                            {
-                                SAL_INFO("cppcanvas.emf", "EMF+ FillRects");
-                                rMF.ReadUInt32( brushIndexOrColor );
-                                SAL_INFO("cppcanvas.emf", "EMF+\t" << (isColor ? "color" : "brush index") << ": 0x" << std::hex << brushIndexOrColor << std::dec);
-                            }
-                            else
-                            {
-                                SAL_INFO("cppcanvas.emf", "EMF+ DrawRects");
-                            }
-
-                            rMF.ReadInt32( rectangles );
-
-                            for (int i=0; i < rectangles; i++) {
-                                float x, y, width, height;
-                                ReadRectangle (rMF, x, y, width, height, bool(flags & 0x4000));
-
-                                polygon.append (Map (x, y));
-                                polygon.append (Map (x + width, y));
-                                polygon.append (Map (x + width, y + height));
-                                polygon.append (Map (x, y + height));
-                                polygon.append (Map (x, y));
-
-                                SAL_INFO("cppcanvas.emf", "EMF+\trectangle: " << x << ", " << width << "x" << height);
-
-                                ::basegfx::B2DPolyPolygon polyPolygon (polygon);
-                                if( type == EmfPlusRecordTypeFillRects )
-                                    EMFPPlusFillPolygon( polyPolygon,
-                                                         rFactoryParms, rState, rCanvas, isColor, brushIndexOrColor );
-                                else
-                                    EMFPPlusDrawPolygon( polyPolygon,
-                                                         rFactoryParms, rState, rCanvas, flags & 0xff );
-                            }
-                            break;
-                        }
-                    case EmfPlusRecordTypeFillPolygon:
-                        {
-                            sal_uInt8 index = flags & 0xff;

... etc. - the rest is truncated


More information about the Libreoffice-commits mailing list