[Libreoffice-commits] core.git: 19 commits - include/test include/tools include/vcl sc/source sc/uiconfig test/Library_test.mk test/source tools/CppunitTest_tools_test.mk tools/qa tools/source vcl/CppunitTest_vcl_wmf_test.mk vcl/Module_vcl.mk vcl/qa vcl/source

Tomaž Vajngerl tomaz.vajngerl at collabora.com
Thu May 15 11:16:42 PDT 2014


 include/test/htmltesttools.hxx                                 |    2 
 include/test/mtfxmldump.hxx                                    |   37 
 include/test/xmltesttools.hxx                                  |    6 
 include/test/xmlwriter.hxx                                     |   45 
 include/tools/color.hxx                                        |    4 
 include/vcl/font.hxx                                           |    4 
 include/vcl/metaact.hxx                                        |  492 ++++-
 include/vcl/wmf.hxx                                            |    2 
 sc/source/ui/StatisticsDialogs/AnalysisOfVarianceDialog.cxx    |  455 ++++-
 sc/source/ui/StatisticsDialogs/RandomNumberGeneratorDialog.cxx |   64 
 sc/source/ui/StatisticsDialogs/StatisticsDialogs.hrc           |  134 -
 sc/source/ui/StatisticsDialogs/StatisticsDialogs.src           |    5 
 sc/source/ui/inc/AnalysisOfVarianceDialog.hxx                  |   25 
 sc/source/ui/inc/RandomNumberGeneratorDialog.hxx               |   16 
 sc/source/ui/inc/StatisticsInputOutputDialog.hxx               |    5 
 sc/uiconfig/scalc/ui/analysisofvariancedialog.ui               |  120 +
 sc/uiconfig/scalc/ui/randomnumbergenerator.ui                  |   65 
 test/Library_test.mk                                           |    2 
 test/source/htmltesttools.cxx                                  |   13 
 test/source/mtfxmldump.cxx                                     |  404 ++++
 test/source/xmltesttools.cxx                                   |   17 
 test/source/xmlwriter.cxx                                      |   87 
 tools/CppunitTest_tools_test.mk                                |    1 
 tools/qa/cppunit/test_color.cxx                                |   61 
 tools/source/generic/color.cxx                                 |    7 
 vcl/CppunitTest_vcl_wmf_test.mk                                |   57 
 vcl/Module_vcl.mk                                              |    1 
 vcl/qa/cppunit/wmf/data/visio_import_source.wmf                |binary
 vcl/qa/cppunit/wmf/wmfimporttest.cxx                           |   84 
 vcl/source/filter/wmf/winmtf.cxx                               |   46 
 vcl/source/filter/wmf/winmtf.hxx                               |   18 
 vcl/source/filter/wmf/winwmf.cxx                               |  147 +
 vcl/source/gdi/metaact.cxx                                     |  878 +++++-----
 33 files changed, 2568 insertions(+), 736 deletions(-)

New commits:
commit 1811336b058d1a26c7f6d836a5c478413c20f287
Author: Tomaž Vajngerl <tomaz.vajngerl at collabora.com>
Date:   Thu May 15 16:28:45 2014 +0200

    wmf: assume WinOrg/ViewportOrg = (0,0) if they are not provided
    
    Change-Id: Ia8a91a565118d102ff769da8bca65f16b5dfece2

diff --git a/vcl/source/filter/wmf/winwmf.cxx b/vcl/source/filter/wmf/winwmf.cxx
index f71c49d..4c2c95c 100644
--- a/vcl/source/filter/wmf/winwmf.cxx
+++ b/vcl/source/filter/wmf/winwmf.cxx
@@ -1361,10 +1361,10 @@ bool WMFReader::GetPlaceableBound( Rectangle& rPlaceableBound, SvStream* pStm )
 
     pStm->Seek( nPos );
 
-    boost::optional<Point> aWinOrg;
+    Point aWinOrg(0,0);
     boost::optional<Size>  aWinExt;
 
-    boost::optional<Point> aViewportOrg;
+    Point aViewportOrg(0,0);
     boost::optional<Size>  aViewportExt;
 
     if( nEnd - nPos )
@@ -1604,16 +1604,16 @@ bool WMFReader::GetPlaceableBound( Rectangle& rPlaceableBound, SvStream* pStm )
 
     if (bRet)
     {
-        if (aWinOrg && aWinExt)
+        if (aWinExt)
         {
-            rPlaceableBound = Rectangle(*aWinOrg, *aWinExt);
+            rPlaceableBound = Rectangle(aWinOrg, *aWinExt);
             SAL_INFO("vcl.wmf", "Window dimension "
                     << " t: " << rPlaceableBound.Left()  << " l: " << rPlaceableBound.Top()
                     << " b: " << rPlaceableBound.Right() << " r: " << rPlaceableBound.Bottom());
         }
-        else if (aViewportOrg && aViewportExt)
+        else if (aViewportExt)
         {
-            rPlaceableBound = Rectangle(*aViewportOrg, *aViewportExt);
+            rPlaceableBound = Rectangle(aViewportOrg, *aViewportExt);
             SAL_INFO("vcl.wmf", "Viewport dimension "
                     << " t: " << rPlaceableBound.Left()  << " l: " << rPlaceableBound.Top()
                     << " b: " << rPlaceableBound.Right() << " r: " << rPlaceableBound.Bottom());
commit 154752865f8c7c6ef73d2b7100f25c0b0c317d4f
Author: Tomaž Vajngerl <tomaz.vajngerl at collabora.com>
Date:   Thu May 15 16:26:43 2014 +0200

    wmf: add SAL_INFOs for interesting things at WMF import
    
    Change-Id: Ic21709896fe156c7393ece54345b00bceb37587d

diff --git a/vcl/source/filter/wmf/winmtf.cxx b/vcl/source/filter/wmf/winmtf.cxx
index ea42a07..0a7f8c4 100644
--- a/vcl/source/filter/wmf/winmtf.cxx
+++ b/vcl/source/filter/wmf/winmtf.cxx
@@ -246,7 +246,7 @@ WinMtfFontStyle::WinMtfFontStyle( LOGFONTW& rFont )
     // Convert height to positive
     aFontSize.Height() = std::abs(aFontSize.Height());
 
-    aFont.SetSize( aFontSize );
+    aFont.SetSize(aFontSize);
 };
 
 WinMtf::WinMtf( WinMtfOutput* pWinMtfOutput, SvStream& rStreamWMF, FilterConfigItem* pConfigItem )
@@ -631,10 +631,7 @@ void WinMtfOutput::SetTextAlign( sal_uInt32 nAlign )
 
 void WinMtfOutput::ImplResizeObjectArry( sal_uInt32 nNewEntrys )
 {
-    sal_uInt32 i = vGDIObj.size();
-    vGDIObj.resize( nNewEntrys );
-    for ( ; i < nNewEntrys ; i++ )
-        vGDIObj[ i ] = NULL;
+    vGDIObj.resize(nNewEntrys, NULL);
 }
 
 void WinMtfOutput::ImplDrawClippedPolyPolygon( const PolyPolygon& rPolyPoly )
diff --git a/vcl/source/filter/wmf/winwmf.cxx b/vcl/source/filter/wmf/winwmf.cxx
index 1baafa7..f71c49d 100644
--- a/vcl/source/filter/wmf/winwmf.cxx
+++ b/vcl/source/filter/wmf/winwmf.cxx
@@ -1102,8 +1102,13 @@ bool WMFReader::ReadHeader()
 
     Rectangle aPlaceableBound;
 
-    if (nPlaceableMetaKey == 0x9ac6cdd7L)
-    { //TODO do some real error handling here
+    bool bPlaceable = nPlaceableMetaKey == 0x9ac6cdd7L;
+
+    SAL_INFO("vcl.wmf", "Placeable: \"" << (bPlaceable ? "yes" : "no") << "\"");
+
+    if (bPlaceable)
+    {
+        //TODO do some real error handling here
         sal_Int16 nVal;
 
         // Skip reserved bytes
@@ -1143,6 +1148,11 @@ bool WMFReader::ReadHeader()
                           (double) pExternalHeader->xExt * 567 * nUnitsPerInch / 1440000,
                           (double) pExternalHeader->yExt * 567 * nUnitsPerInch / 1440000);
             aPlaceableBound = aExtRect;
+
+            SAL_INFO("vcl.wmf", "External header size "
+                    << " t: " << aPlaceableBound.Left()  << " l: " << aPlaceableBound.Top()
+                    << " b: " << aPlaceableBound.Right() << " r: " << aPlaceableBound.Bottom());
+
             pOut->SetMapMode( pExternalHeader->mapMode );
         }
         else
@@ -1163,6 +1173,10 @@ bool WMFReader::ReadHeader()
                                     aPlaceableBound.Top()    / fRatio,
                                     aPlaceableBound.Right()  / fRatio,
                                     aPlaceableBound.Bottom() / fRatio);
+
+                SAL_INFO("vcl.wmf", "Placeable bounds "
+                    << " t: " << aPlaceableBound.Left()  << " l: " << aPlaceableBound.Top()
+                    << " b: " << aPlaceableBound.Right() << " r: " << aPlaceableBound.Bottom());
             }
         }
 
@@ -1173,6 +1187,9 @@ bool WMFReader::ReadHeader()
     Size aWMFSize( labs( aPlaceableBound.GetWidth() ), labs( aPlaceableBound.GetHeight() ) );
     pOut->SetWinExt( aWMFSize );
 
+    SAL_INFO("vcl.wmf", "WMF size "
+                    << " w: " << aWMFSize.Width()    << " h: " << aWMFSize.Height());
+
     Size aDevExt( 10000, 10000 );
     if( ( labs( aWMFSize.Width() ) > 1 ) && ( labs( aWMFSize.Height() ) > 1 ) )
     {
@@ -1183,6 +1200,9 @@ bool WMFReader::ReadHeader()
     }
     pOut->SetDevExt( aDevExt );
 
+    SAL_INFO("vcl.wmf", "Dev size "
+                    << " w: " << aDevExt.Width()    << " h: " << aDevExt.Height());
+
     // read the METAHEADER
     sal_uInt32 nMetaKey(0);
     pWMF->ReadUInt32( nMetaKey ); // type and headersize
@@ -1453,7 +1473,7 @@ bool WMFReader::GetPlaceableBound( Rectangle& rPlaceableBound, SvStream* pStm )
                         nPoints += nP;
                     }
 
-                    SAL_WARN_IF(!bRecordOk, "vcl.filter", "polypolygon record has more polygons than we can handle");
+                    SAL_WARN_IF(!bRecordOk, "vcl.wmf", "polypolygon record has more polygons than we can handle");
 
                     bRecordOk = bRecordOk && pStm->good();
 
@@ -1587,14 +1607,23 @@ bool WMFReader::GetPlaceableBound( Rectangle& rPlaceableBound, SvStream* pStm )
         if (aWinOrg && aWinExt)
         {
             rPlaceableBound = Rectangle(*aWinOrg, *aWinExt);
+            SAL_INFO("vcl.wmf", "Window dimension "
+                    << " t: " << rPlaceableBound.Left()  << " l: " << rPlaceableBound.Top()
+                    << " b: " << rPlaceableBound.Right() << " r: " << rPlaceableBound.Bottom());
         }
         else if (aViewportOrg && aViewportExt)
         {
             rPlaceableBound = Rectangle(*aViewportOrg, *aViewportExt);
+            SAL_INFO("vcl.wmf", "Viewport dimension "
+                    << " t: " << rPlaceableBound.Left()  << " l: " << rPlaceableBound.Top()
+                    << " b: " << rPlaceableBound.Right() << " r: " << rPlaceableBound.Bottom());
         }
         else
         {
             rPlaceableBound = aBound;
+            SAL_INFO("vcl.wmf", "Detemined dimension "
+                    << " t: " << rPlaceableBound.Left()  << " l: " << rPlaceableBound.Top()
+                    << " b: " << rPlaceableBound.Right() << " r: " << rPlaceableBound.Bottom());
         }
     }
 
commit f9e81786f43a91f8cb562552ea0b379ea73ba08a
Author: Tomaž Vajngerl <tomaz.vajngerl at collabora.com>
Date:   Thu May 15 16:17:54 2014 +0200

    wmf: test that non-placeable WMF uses correct sizes
    
    Change-Id: I546d654726483b40ce4d981bc66377c8a3df6194

diff --git a/vcl/CppunitTest_vcl_wmf_test.mk b/vcl/CppunitTest_vcl_wmf_test.mk
new file mode 100644
index 0000000..f7272c9
--- /dev/null
+++ b/vcl/CppunitTest_vcl_wmf_test.mk
@@ -0,0 +1,57 @@
+# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
+#
+# 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/.
+#
+
+$(eval $(call gb_CppunitTest_CppunitTest,vcl_wmf_test))
+
+$(eval $(call gb_CppunitTest_add_exception_objects,vcl_wmf_test, \
+    vcl/qa/cppunit/wmf/wmfimporttest \
+))
+
+$(eval $(call gb_CppunitTest_use_externals,vcl_wmf_test,\
+	boost_headers \
+    libxml2 \
+))
+
+
+$(eval $(call gb_CppunitTest_set_include,vcl_wmf_test,\
+    $$(INCLUDE) \
+    -I$(SRCDIR)/vcl/inc \
+))
+
+$(eval $(call gb_CppunitTest_use_libraries,vcl_wmf_test, \
+	comphelper \
+	cppu \
+	cppuhelper \
+	sal \
+    svt \
+	test \
+	tl \
+	unotest \
+	vcl \
+	utl \
+	$(gb_UWINAPI) \
+))
+
+$(eval $(call gb_CppunitTest_use_api,vcl_wmf_test,\
+    udkapi \
+    offapi \
+))
+
+$(eval $(call gb_CppunitTest_use_ure,vcl_wmf_test))
+
+$(eval $(call gb_CppunitTest_use_components,vcl_wmf_test,\
+    configmgr/source/configmgr \
+    i18npool/util/i18npool \
+    ucb/source/core/ucb1 \
+    unotools/util/utl \
+))
+
+$(eval $(call gb_CppunitTest_use_configuration,vcl_wmf_test))
+
+# vim: set noet sw=4 ts=4:
diff --git a/vcl/Module_vcl.mk b/vcl/Module_vcl.mk
index 5f302a8..254fe0d 100644
--- a/vcl/Module_vcl.mk
+++ b/vcl/Module_vcl.mk
@@ -92,6 +92,7 @@ $(eval $(call gb_Module_add_check_targets,vcl,\
 	CppunitTest_vcl_complextext \
 	CppunitTest_vcl_filters_test \
 	CppunitTest_vcl_app_test \
+	CppunitTest_vcl_wmf_test \
 ))
 
 # vim: set noet sw=4 ts=4:
diff --git a/vcl/qa/cppunit/wmf/data/visio_import_source.wmf b/vcl/qa/cppunit/wmf/data/visio_import_source.wmf
new file mode 100644
index 0000000..88deac9
Binary files /dev/null and b/vcl/qa/cppunit/wmf/data/visio_import_source.wmf differ
diff --git a/vcl/qa/cppunit/wmf/wmfimporttest.cxx b/vcl/qa/cppunit/wmf/wmfimporttest.cxx
new file mode 100644
index 0000000..e75f5a1
--- /dev/null
+++ b/vcl/qa/cppunit/wmf/wmfimporttest.cxx
@@ -0,0 +1,84 @@
+/* -*- 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 <test/bootstrapfixture.hxx>
+#include <test/xmltesttools.hxx>
+#include <test/mtfxmldump.hxx>
+#include <vcl/wmf.hxx>
+#include <vcl/metaact.hxx>
+
+using namespace css;
+
+class WmfTest : public test::BootstrapFixture, public XmlTestTools
+{
+public:
+    WmfTest() :
+        BootstrapFixture(true, false)
+    {}
+
+    void runTest();
+    void testNonPlaceableWmf();
+
+    CPPUNIT_TEST_SUITE(WmfTest);
+    CPPUNIT_TEST(testNonPlaceableWmf);
+    CPPUNIT_TEST_SUITE_END();
+};
+
+void WmfTest::testNonPlaceableWmf()
+{
+    OUString aUrl = getURLFromSrc("/vcl/qa/cppunit/wmf/data/");
+
+    SvFileStream aFileStream(aUrl + "visio_import_source.wmf", STREAM_READ);
+    GDIMetaFile aGDIMetaFile;
+    ReadWindowMetafile(aFileStream, aGDIMetaFile);
+
+    boost::scoped_ptr<SvMemoryStream> aStream(new SvMemoryStream);
+
+    MetafileXmlDump dumper(*aStream);
+    dumper.filterAllActionTypes();
+    dumper.filterActionType(META_POLYLINE_ACTION, false);
+    dumper.dump(aGDIMetaFile);
+
+    aStream->Seek(STREAM_SEEK_TO_BEGIN);
+
+    xmlDocPtr pDoc = parseXmlStream(aStream.get());
+
+    CPPUNIT_ASSERT (pDoc);
+
+    assertXPath(pDoc, "/metafile/polyline[1]/point[1]", "x", "16798");
+    assertXPath(pDoc, "/metafile/polyline[1]/point[1]", "y", "1003");
+
+    assertXPath(pDoc, "/metafile/polyline[1]/point[2]", "x", "16798");
+    assertXPath(pDoc, "/metafile/polyline[1]/point[2]", "y", "7507");
+
+    assertXPath(pDoc, "/metafile/polyline[1]/point[3]", "x", "26090");
+    assertXPath(pDoc, "/metafile/polyline[1]/point[3]", "y", "7507");
+
+    assertXPath(pDoc, "/metafile/polyline[1]/point[4]", "x", "26090");
+    assertXPath(pDoc, "/metafile/polyline[1]/point[4]", "y", "1003");
+
+    assertXPath(pDoc, "/metafile/polyline[1]/point[5]", "x", "16798");
+    assertXPath(pDoc, "/metafile/polyline[1]/point[5]", "y", "1003");
+}
+
+CPPUNIT_TEST_SUITE_REGISTRATION(WmfTest);
+
+CPPUNIT_PLUGIN_IMPLEMENT();
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
commit fb688d64466b56ad7804c8ecf66aecae7f1faafa
Author: Tomaž Vajngerl <tomaz.vajngerl at collabora.com>
Date:   Thu May 15 16:14:46 2014 +0200

    test: dump staroffice metafile to XML & XML writer interface
    
    Change-Id: Ie42f72e0fc281d1f51e1729be408c2b0042f4174

diff --git a/include/test/mtfxmldump.hxx b/include/test/mtfxmldump.hxx
new file mode 100644
index 0000000..e630a4c
--- /dev/null
+++ b/include/test/mtfxmldump.hxx
@@ -0,0 +1,37 @@
+/* -*- 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/.
+ */
+
+#ifndef MFTXMLDUMP_HXX
+#define MFTXMLDUMP_HXX
+
+#include <sal/config.h>
+#include <test/testdllapi.hxx>
+
+#include <vcl/gdimtf.hxx>
+#include <vector>
+
+class OOO_DLLPUBLIC_TEST MetafileXmlDump
+{
+    std::vector<bool> maFilter;
+    SvStream& mrStream;
+
+public:
+    MetafileXmlDump(SvStream& rStream);
+    virtual ~MetafileXmlDump();
+
+    void filterActionType(const sal_uInt16 nActionType, bool bShouldFilter);
+    void filterAllActionTypes();
+    void filterNoneActionTypes();
+
+    void dump(GDIMetaFile& rMetaFile);
+};
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/include/test/xmlwriter.hxx b/include/test/xmlwriter.hxx
new file mode 100644
index 0000000..e4df527
--- /dev/null
+++ b/include/test/xmlwriter.hxx
@@ -0,0 +1,45 @@
+/* -*- 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/.
+ */
+
+#ifndef XML_WRITER_HXX
+#define XML_WRITER_HXX
+
+#include <test/testdllapi.hxx>
+
+#include <libxml/xmlwriter.h>
+#include <rtl/ustring.hxx>
+#include <rtl/string.hxx>
+
+class OOO_DLLPUBLIC_TEST XmlWriter
+{
+private:
+    xmlTextWriterPtr mpWriter;
+
+public:
+    XmlWriter(xmlTextWriterPtr pWriter);
+    virtual ~XmlWriter();
+
+    void startDocument(const OString& sTagName);
+    void endDocument();
+
+    void element(const OString& sTagName);
+
+    void startElement(const OString& sTagName);
+    void endElement();
+
+    void attribute(const OString& sTagName, const OString& aValue);
+    void attribute(const OString& sTagName, const OUString& aValue);
+    void attribute(const OString& sTagName, sal_Int32 aNumber);
+
+    void content(const OUString& aValue);
+};
+
+#endif // XML_WRITER_HXX
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/test/Library_test.mk b/test/Library_test.mk
index ec46f2c..a9f91c9 100644
--- a/test/Library_test.mk
+++ b/test/Library_test.mk
@@ -47,6 +47,8 @@ $(eval $(call gb_Library_add_exception_objects,test,\
     test/source/diff/diff \
     test/source/xmltesttools \
     test/source/htmltesttools \
+    test/source/mtfxmldump \
+    test/source/xmlwriter \
 ))
 
 # vim: set noet sw=4 ts=4:
diff --git a/test/source/mtfxmldump.cxx b/test/source/mtfxmldump.cxx
new file mode 100644
index 0000000..ef127e3
--- /dev/null
+++ b/test/source/mtfxmldump.cxx
@@ -0,0 +1,404 @@
+/* -*- 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/.
+ */
+
+#include <test/mtfxmldump.hxx>
+#include <test/xmlwriter.hxx>
+
+#include <vcl/metaact.hxx>
+#include <rtl/string.hxx>
+#include <rtl/strbuf.hxx>
+
+namespace
+{
+
+int writeCallback(void* pContext, const char* sBuffer, int nLen)
+{
+    OStringBuffer* pBuffer = static_cast<OStringBuffer*>(pContext);
+    pBuffer->append(sBuffer);
+    return nLen;
+}
+
+int closeCallback(void* )
+{
+    return 0;
+}
+
+OUString flagToString(sal_uInt16 nFlag)
+{
+    if (nFlag & PUSH_LINECOLOR)
+        return OUString("PushLineColor");
+    else if (nFlag & PUSH_FILLCOLOR)
+        return OUString("PushFillColor");
+    else if (nFlag & PUSH_FONT)
+        return OUString("PushFont");
+    else if (nFlag & PUSH_TEXTCOLOR)
+        return OUString("PushTextColor");
+    else if (nFlag & PUSH_MAPMODE)
+        return OUString("PushMapMode");
+    else if (nFlag & PUSH_CLIPREGION)
+        return OUString("PushClipRegion");
+    else if (nFlag & PUSH_RASTEROP)
+        return OUString("PushRasterOp");
+    else if (nFlag & PUSH_TEXTFILLCOLOR)
+        return OUString("PushTextFillColor");
+    else if (nFlag & PUSH_TEXTALIGN)
+        return OUString("PushTextAlign");
+    else if (nFlag & PUSH_REFPOINT)
+        return OUString("PushRefPoint");
+    else if (nFlag & PUSH_TEXTLINECOLOR)
+        return OUString("PushTextLineColor");
+    else if (nFlag & PUSH_TEXTLAYOUTMODE)
+        return OUString("PushTextLayoutMode");
+    else if (nFlag & PUSH_TEXTLANGUAGE)
+        return OUString("PushTextLanguage");
+    else if (nFlag & PUSH_OVERLINECOLOR)
+        return OUString("PushOverlineColor");
+
+    return OUString();
+}
+
+OUString collectPushFlags(sal_uInt16 nFlags)
+{
+    if ((nFlags & PUSH_ALL) == nFlags)
+        return OUString("PushAll");
+    else if ((nFlags & PUSH_ALLFONT) == nFlags)
+        return OUString("PushAllFont");
+    else if ((nFlags & PUSH_ALLTEXT) == nFlags)
+        return OUString("PushAllText");
+
+    OUString sFlags;
+
+    for (sal_uInt16 nFlag = 1; nFlag > 0; nFlag <<= 1)
+    {
+        OUString sFlag = flagToString(nFlag);
+        if (!sFlag.isEmpty())
+        {
+            if (!sFlags.isEmpty())
+            {
+                sFlags += ",";
+            }
+            sFlags += flagToString(nFlag);
+        }
+    }
+
+    return sFlags;
+}
+
+OUString convertRopToString(RasterOp eRop)
+{
+    switch (eRop)
+    {
+        case ROP_OVERPAINT: return OUString("overpaint");
+        case ROP_XOR:       return OUString("xor");
+        case ROP_0:         return OUString("0");
+        case ROP_1:         return OUString("1");
+        case ROP_INVERT:    return OUString("invert");
+    }
+    return OUString();
+}
+
+OUString convertTextAlignToString(TextAlign eAlign)
+{
+    switch (eAlign)
+    {
+        case ALIGN_BASELINE:             return OUString("baseline");
+        case ALIGN_BOTTOM:               return OUString("bottom");
+        case ALIGN_TOP:                  return OUString("top");
+        case TextAlign_FORCE_EQUAL_SIZE: return OUString("equalsize");
+    }
+    return OUString();
+}
+
+OUString convertColorToString(Color aColor)
+{
+    OUString aRGBString = aColor.AsRGBHexString();
+    return "#" + aRGBString;
+}
+
+OUString convertLineStyleToString(LineStyle eAlign)
+{
+    switch (eAlign)
+    {
+        case LINE_NONE:    return OUString("none");
+        case LINE_SOLID:   return OUString("solid");
+        case LINE_DASH:    return OUString("dash");
+        case LineStyle_FORCE_EQUAL_SIZE: return OUString("equalsize");
+    }
+    return OUString();
+}
+
+} // anonymous namespace
+
+MetafileXmlDump::MetafileXmlDump(SvStream& rStream) :
+    maFilter(512, false),
+    mrStream(rStream)
+{}
+
+MetafileXmlDump::~MetafileXmlDump()
+{}
+
+void MetafileXmlDump::filterActionType(const sal_uInt16 nActionType, bool bShouldFilter)
+{
+    maFilter[nActionType] = bShouldFilter;
+}
+
+void MetafileXmlDump::filterAllActionTypes()
+{
+    maFilter.assign(512, true);
+}
+
+void MetafileXmlDump::filterNoneActionTypes()
+{
+    maFilter.assign(512, false);
+}
+
+void MetafileXmlDump::dump(GDIMetaFile& rMetaFile)
+{
+    std::vector<bool> usedIds(512, false);
+
+    OStringBuffer aString;
+    xmlOutputBufferPtr xmlOutBuffer = xmlOutputBufferCreateIO( writeCallback, closeCallback, &aString, NULL );
+    xmlTextWriterPtr xmlWriter = xmlNewTextWriter( xmlOutBuffer );
+    xmlTextWriterSetIndent( xmlWriter, 1 );
+
+    XmlWriter aWriter(xmlWriter);
+    aWriter.startDocument("metafile");
+
+    for(MetaAction* pAction = rMetaFile.FirstAction(); pAction != NULL; pAction = rMetaFile.NextAction())
+    {
+        const sal_uInt16 nActionType = pAction->GetType();
+        if (maFilter[nActionType])
+            continue;
+
+        usedIds[nActionType] = true;
+
+        switch (nActionType)
+        {
+            case META_LINE_ACTION:
+            {
+                MetaLineAction* pMetaLineAction = static_cast<MetaLineAction*>(pAction);
+
+                aWriter.startElement("line");
+                aWriter.attribute("startx", pMetaLineAction->GetStartPoint().X());
+                aWriter.attribute("starty", pMetaLineAction->GetStartPoint().Y());
+                aWriter.attribute("endx", pMetaLineAction->GetEndPoint().X());
+                aWriter.attribute("endy", pMetaLineAction->GetEndPoint().Y());
+
+                LineInfo aLineInfo = pMetaLineAction->GetLineInfo();
+                aWriter.attribute("style", convertLineStyleToString(aLineInfo.GetStyle()));
+                aWriter.attribute("width", aLineInfo.GetWidth());
+                aWriter.attribute("dashlen", aLineInfo.GetDashLen());
+                aWriter.attribute("dotlen", aLineInfo.GetDotLen());
+                aWriter.attribute("distance", aLineInfo.GetDistance());
+
+                aWriter.endElement();
+            }
+            break;
+
+            case META_PUSH_ACTION:
+            {
+                MetaPushAction* pMetaPushAction = static_cast<MetaPushAction*>(pAction);
+
+                aWriter.startElement("push");
+                aWriter.attribute("flags", collectPushFlags(pMetaPushAction->GetFlags()));
+            }
+            break;
+
+            case META_POP_ACTION:
+            {
+                aWriter.endElement();
+            }
+            break;
+
+            case META_RASTEROP_ACTION:
+            {
+                MetaRasterOpAction* pMetaRasterOpAction = static_cast<MetaRasterOpAction*>(pAction);
+
+                aWriter.startElement("rop");
+                if (pMetaRasterOpAction->GetRasterOp() != ROP_OVERPAINT)
+                {
+                    aWriter.attribute("operation", convertRopToString(pMetaRasterOpAction->GetRasterOp()));
+                }
+                aWriter.endElement();
+            }
+            break;
+
+            case META_TEXTFILLCOLOR_ACTION:
+            {
+                MetaTextFillColorAction* pMetaTextFillColorAction = static_cast<MetaTextFillColorAction*>(pAction);
+
+                aWriter.startElement("textfillcolor");
+
+                aWriter.attribute("color", convertColorToString(pMetaTextFillColorAction->GetColor()));
+
+                if (pMetaTextFillColorAction->IsSetting())
+                    aWriter.attribute("setting", OUString("true"));
+
+                aWriter.endElement();
+            }
+            break;
+
+            case META_FONT_ACTION:
+            {
+                MetaFontAction* pMetaFontAction = static_cast<MetaFontAction*>(pAction);
+                aWriter.startElement("font");
+
+                Font aFont = pMetaFontAction->GetFont();
+
+                aWriter.attribute("color", convertColorToString(aFont.GetColor()));
+                aWriter.attribute("fillcolor", convertColorToString(aFont.GetFillColor()));
+                aWriter.attribute("name", aFont.GetName());
+                aWriter.attribute("stylename", aFont.GetStyleName());
+                aWriter.attribute("width", aFont.GetSize().Width());
+                aWriter.attribute("height", aFont.GetSize().Height());
+
+                aWriter.endElement();
+            }
+            break;
+
+            case META_TEXTALIGN_ACTION:
+            {
+                MetaTextAlignAction* pMetaTextAlignAction = static_cast<MetaTextAlignAction*>(pAction);
+                aWriter.startElement("textalign");
+                OUString sAlign = convertTextAlignToString(pMetaTextAlignAction->GetTextAlign());
+                if (!sAlign.isEmpty())
+                    aWriter.attribute("align", sAlign);
+                aWriter.endElement();
+            }
+            break;
+
+            case META_TEXTCOLOR_ACTION:
+            {
+                MetaTextColorAction* pMetaTextColorAction = static_cast<MetaTextColorAction*>(pAction);
+
+                aWriter.startElement("textcolor");
+                aWriter.attribute("color", convertColorToString(pMetaTextColorAction->GetColor()));
+                aWriter.endElement();
+            }
+            break;
+
+            case META_TEXTARRAY_ACTION:
+            {
+                MetaTextArrayAction* pMetaTextArrayAction = static_cast<MetaTextArrayAction*>(pAction);
+
+                aWriter.startElement("textarray");
+                sal_Int32 aIndex = pMetaTextArrayAction->GetIndex();
+                sal_Int32 aLength = pMetaTextArrayAction->GetLen();
+
+                aWriter.attribute("x", pMetaTextArrayAction->GetPoint().X());
+                aWriter.attribute("y", pMetaTextArrayAction->GetPoint().Y());
+                aWriter.attribute("index", aIndex);
+                aWriter.attribute("length", aLength);
+
+                aWriter.startElement("dxarray");
+                OUString sDxLengthString;
+                for (sal_Int32 i = 0; i < aLength; ++i)
+                {
+                    sDxLengthString += OUString::number(pMetaTextArrayAction->GetDXArray()[aIndex+i]);
+                    sDxLengthString += " ";
+                }
+                aWriter.content(sDxLengthString);
+                aWriter.endElement();
+
+                aWriter.startElement("text");
+                aWriter.content(pMetaTextArrayAction->GetText());
+                aWriter.endElement();
+
+                aWriter.endElement();
+            }
+            break;
+
+            case META_LINECOLOR_ACTION:
+            {
+                MetaTextLineColorAction* pMetaTextLineColorAction = static_cast<MetaTextLineColorAction*>(pAction);
+
+                aWriter.startElement("linecolor");
+                aWriter.attribute("color", convertColorToString(pMetaTextLineColorAction->GetColor()));
+                aWriter.endElement();
+            }
+            break;
+
+            case META_MAPMODE_ACTION:
+            {
+                aWriter.startElement("mapmode");
+                aWriter.endElement();
+            }
+            break;
+
+            case META_ISECTRECTCLIPREGION_ACTION:
+            {
+                MetaISectRectClipRegionAction* pMetaISectRectClipRegionAction = static_cast<MetaISectRectClipRegionAction*>(pAction);
+
+                aWriter.startElement("sectrectclipregion");
+                Rectangle aRectangle = pMetaISectRectClipRegionAction->GetRect();
+                aWriter.attribute("top",    aRectangle.Top());
+                aWriter.attribute("left",   aRectangle.Left());
+                aWriter.attribute("bottom", aRectangle.Bottom());
+                aWriter.attribute("right",  aRectangle.Right());
+
+                aWriter.endElement();
+            }
+            break;
+
+            case META_POLYLINE_ACTION:
+            {
+                MetaPolyLineAction* pMetaPolyLineAction = static_cast<MetaPolyLineAction*>(pAction);
+                aWriter.startElement("polyline");
+
+                Polygon aPolygon = pMetaPolyLineAction->GetPolygon();
+                for (sal_uInt16 i = 0; i < aPolygon.GetSize(); i++)
+                {
+                    aWriter.startElement("point");
+                    aWriter.attribute("x", aPolygon[i].X());
+                    aWriter.attribute("y", aPolygon[i].Y());
+                    aWriter.endElement();
+                }
+
+                LineInfo aLineInfo = pMetaPolyLineAction->GetLineInfo();
+                aWriter.attribute("style", convertLineStyleToString(aLineInfo.GetStyle()));
+                aWriter.attribute("width", aLineInfo.GetWidth());
+                aWriter.attribute("dashlen", aLineInfo.GetDashLen());
+                aWriter.attribute("dotlen", aLineInfo.GetDotLen());
+                aWriter.attribute("distance", aLineInfo.GetDistance());
+
+                aWriter.endElement();
+            }
+            break;
+
+            case META_POLYGON_ACTION:
+            {
+                MetaPolygonAction* pMetaPolygonAction = static_cast<MetaPolygonAction*>(pAction);
+                aWriter.startElement("polygon");
+
+                Polygon aPolygon = pMetaPolygonAction->GetPolygon();
+                for (sal_uInt16 i = 0; i < aPolygon.GetSize(); i++)
+                {
+                    aWriter.startElement("point");
+                    aWriter.attribute("x", aPolygon[i].X());
+                    aWriter.attribute("y", aPolygon[i].Y());
+                    aWriter.endElement();
+                }
+
+                aWriter.endElement();
+            }
+            break;
+
+        }
+    }
+    aWriter.endDocument();
+
+    for(size_t i=0; i<usedIds.size(); ++i)
+        if(usedIds[i])
+            printf("%ld ", i);
+    printf("\n");
+
+    mrStream.WriteOString(aString.makeStringAndClear());
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/test/source/xmlwriter.cxx b/test/source/xmlwriter.cxx
new file mode 100644
index 0000000..3485f10
--- /dev/null
+++ b/test/source/xmlwriter.cxx
@@ -0,0 +1,87 @@
+/* -*- 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 <libxml/xmlstring.h>
+#include <test/xmlwriter.hxx>
+
+XmlWriter::XmlWriter(xmlTextWriterPtr pWriter) :
+    mpWriter(pWriter)
+{}
+
+XmlWriter::~XmlWriter()
+{}
+
+void XmlWriter::startDocument(const OString& name)
+{
+    xmlTextWriterStartDocument(mpWriter, NULL, NULL, NULL);
+    startElement(name);
+}
+
+void XmlWriter::endDocument()
+{
+    xmlTextWriterEndDocument(mpWriter);
+    xmlFreeTextWriter(mpWriter);
+    mpWriter = NULL;
+}
+
+void XmlWriter::element(const OString& name)
+{
+    startElement(name);
+    endElement();
+}
+
+void XmlWriter::startElement(const OString& name)
+{
+    xmlChar* xmlName = xmlCharStrdup(name.getStr());
+    xmlTextWriterStartElement(mpWriter, xmlName);
+    xmlFree(xmlName);
+}
+
+void XmlWriter::attribute(const OString& name, const OString & value)
+{
+    xmlChar* xmlName = xmlCharStrdup(name.getStr());
+    xmlChar* xmlValue = xmlCharStrdup(value.getStr());
+    xmlTextWriterWriteAttribute(mpWriter, xmlName, xmlValue);
+    xmlFree(xmlValue);
+    xmlFree(xmlName);
+}
+
+void XmlWriter::attribute(const OString& name, const OUString& value)
+{
+    attribute(name, OUStringToOString(value, RTL_TEXTENCODING_UTF8).getStr());
+}
+
+void XmlWriter::attribute(const OString& name, const sal_Int32 aNumber)
+{
+    attribute(name, OUString::number(aNumber));
+}
+
+void XmlWriter::content(const OUString& aValue)
+{
+    xmlChar* xmlValue = xmlCharStrdup(OUStringToOString(aValue, RTL_TEXTENCODING_UTF8).getStr());
+    xmlTextWriterWriteString(mpWriter, xmlValue);
+    xmlFree(xmlValue);
+}
+
+void XmlWriter::endElement()
+{
+    xmlTextWriterEndElement(mpWriter);
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
commit 780cedb2cf63f6ffa3290d053172a117384b7383
Author: Tomaž Vajngerl <tomaz.vajngerl at collabora.com>
Date:   Thu May 15 16:04:47 2014 +0200

    test: parseXmlStream & parseHtmlStream added to test tools
    
    Change-Id: Iff8af5e9ffefb4c3cecf387b16473d45e8b4a65a

diff --git a/include/test/htmltesttools.hxx b/include/test/htmltesttools.hxx
index 1cc4932..8889a6e 100644
--- a/include/test/htmltesttools.hxx
+++ b/include/test/htmltesttools.hxx
@@ -17,12 +17,12 @@
 #include <libxml/HTMLtree.h>
 
 #include <unotools/tempfile.hxx>
-#include <boost/scoped_array.hpp>
 
 class OOO_DLLPUBLIC_TEST HtmlTestTools
 {
 protected:
     htmlDocPtr parseHtml(utl::TempFile& aTempFile);
+    htmlDocPtr parseHtmlStream(SvStream* pStream);
 };
 
 #endif
diff --git a/include/test/xmltesttools.hxx b/include/test/xmltesttools.hxx
index 3473f97..8937211 100644
--- a/include/test/xmltesttools.hxx
+++ b/include/test/xmltesttools.hxx
@@ -14,12 +14,15 @@
 #include <test/testdllapi.hxx>
 
 #include <libxml/xmlwriter.h>
+#include <libxml/tree.h>
 #include <libxml/xpath.h>
 #include <libxml/xpathInternals.h>
 #include <libxml/parserInternals.h>
 
 #include <rtl/string.hxx>
 #include <rtl/ustring.hxx>
+#include <unotools/tempfile.hxx>
+
 #include <cppunit/TestAssert.h>
 
 class OOO_DLLPUBLIC_TEST XmlTestTools
@@ -28,6 +31,9 @@ protected:
     XmlTestTools();
     virtual ~XmlTestTools();
 
+    htmlDocPtr parseXml(utl::TempFile& aTempFile);
+    htmlDocPtr parseXmlStream(SvStream* pStream);
+
     virtual void registerNamespaces(xmlXPathContextPtr& pXmlXpathCtx);
 
     xmlNodeSetPtr getXPathNode(xmlDocPtr pXmlDoc, const OString& rXPath);
diff --git a/test/source/htmltesttools.cxx b/test/source/htmltesttools.cxx
index 9b264bb..ba48aae 100644
--- a/test/source/htmltesttools.cxx
+++ b/test/source/htmltesttools.cxx
@@ -9,17 +9,20 @@
 
 #include <test/htmltesttools.hxx>
 
+#include <boost/scoped_array.hpp>
+
 htmlDocPtr HtmlTestTools::parseHtml(utl::TempFile& aTempFile)
 {
     SvFileStream aFileStream(aTempFile.GetURL(), STREAM_READ);
-    sal_Size nSize = aFileStream.remainingSize();
+    return parseHtmlStream(&aFileStream);
+}
 
+htmlDocPtr HtmlTestTools::parseHtmlStream(SvStream* pStream)
+{
+    sal_Size nSize = pStream->remainingSize();
     boost::scoped_array<sal_uInt8> pBuffer(new sal_uInt8[nSize + 1]);
-
-    aFileStream.Read(pBuffer.get(), nSize);
-
+    pStream->Read(pBuffer.get(), nSize);
     pBuffer[nSize] = 0;
-
     return htmlParseDoc(reinterpret_cast<xmlChar*>(pBuffer.get()), NULL);
 }
 
diff --git a/test/source/xmltesttools.cxx b/test/source/xmltesttools.cxx
index e80674d..1cb231c 100644
--- a/test/source/xmltesttools.cxx
+++ b/test/source/xmltesttools.cxx
@@ -9,12 +9,29 @@
 
 #include <test/xmltesttools.hxx>
 
+#include <boost/scoped_array.hpp>
+
 XmlTestTools::XmlTestTools()
 {}
 
 XmlTestTools::~XmlTestTools()
 {}
 
+htmlDocPtr XmlTestTools::parseXml(utl::TempFile& aTempFile)
+{
+    SvFileStream aFileStream(aTempFile.GetURL(), STREAM_READ);
+    return parseXmlStream(&aFileStream);
+}
+
+xmlDocPtr XmlTestTools::parseXmlStream(SvStream* pStream)
+{
+    sal_Size nSize = pStream->remainingSize();
+    boost::scoped_array<sal_uInt8> pBuffer(new sal_uInt8[nSize + 1]);
+    pStream->Read(pBuffer.get(), nSize);
+    pBuffer[nSize] = 0;
+    return xmlParseDoc(reinterpret_cast<xmlChar*>(pBuffer.get()));
+}
+
 xmlNodeSetPtr XmlTestTools::getXPathNode(xmlDocPtr pXmlDoc, const OString& rXPath)
 {
     xmlXPathContextPtr pXmlXpathCtx = xmlXPathNewContext(pXmlDoc);
commit 7da0a6e562de26222a8c56ae9a5a51611264c59a
Author: Tomaž Vajngerl <tomaz.vajngerl at collabora.com>
Date:   Thu May 15 13:52:21 2014 +0200

    fdo#78603 mixup (Left->Top) in Rectangle construction
    
    Change-Id: I7fa566e036508d43b153c7983dc89fc6660718e7

diff --git a/vcl/source/filter/wmf/winwmf.cxx b/vcl/source/filter/wmf/winwmf.cxx
index d98e024..1baafa7 100644
--- a/vcl/source/filter/wmf/winwmf.cxx
+++ b/vcl/source/filter/wmf/winwmf.cxx
@@ -1157,11 +1157,12 @@ bool WMFReader::ReadHeader()
             if (aPlaceableBound.GetWidth() > aMaxWidth)
             {
                 double fRatio = aPlaceableBound.GetWidth() / fMaxWidth;
+
                 aPlaceableBound = Rectangle(
-                                    aPlaceableBound.Top() / fRatio,
-                                    aPlaceableBound.Left() / fRatio,
-                                    aPlaceableBound.Bottom() / fRatio,
-                                    aPlaceableBound.Right() / fRatio);
+                                    aPlaceableBound.Left()   / fRatio,
+                                    aPlaceableBound.Top()    / fRatio,
+                                    aPlaceableBound.Right()  / fRatio,
+                                    aPlaceableBound.Bottom() / fRatio);
             }
         }
 
commit 29ef23b3074b0eee2cc769ec1a06280cff5b6f99
Author: Tomaž Vajngerl <tomaz.vajngerl at collabora.com>
Date:   Tue May 13 14:31:13 2014 +0200

    vcl: ReadWindowMetafile - make pConfigItem default to NULL
    
    Change-Id: Ib061b5e05df5215bea210a750d5dfd5314eeadec

diff --git a/include/vcl/wmf.hxx b/include/vcl/wmf.hxx
index 750dcc3..bd8e9af 100644
--- a/include/vcl/wmf.hxx
+++ b/include/vcl/wmf.hxx
@@ -57,7 +57,7 @@ struct WMF_EXTERNALHEADER
 
 bool ConvertWMFToGDIMetaFile( SvStream & rStreamWMF, GDIMetaFile & rGDIMetaFile, FilterConfigItem* pConfigItem = NULL, WMF_EXTERNALHEADER *pExtHeader = NULL );
 
-VCL_DLLPUBLIC bool ReadWindowMetafile( SvStream& rStream, GDIMetaFile& rMTF, FilterConfigItem* pConfigItem );
+VCL_DLLPUBLIC bool ReadWindowMetafile( SvStream& rStream, GDIMetaFile& rMTF, FilterConfigItem* pConfigItem = NULL );
 
 VCL_DLLPUBLIC bool ConvertGDIMetaFileToWMF( const GDIMetaFile & rMTF, SvStream & rTargetStream, FilterConfigItem* pConfigItem = NULL, bool bPlaceable = true );
 
commit 06e6aa68ceb53873daccf7cf914234a04b15675a
Author: Tomaž Vajngerl <tomaz.vajngerl at collabora.com>
Date:   Tue May 13 14:26:25 2014 +0200

    vcl: remove uselees comment from font.hxx
    
    Change-Id: Ifc933e9b4ca2f604f3aaf1ba74b34b414f96dd64

diff --git a/include/vcl/font.hxx b/include/vcl/font.hxx
index e7973a1..d9649ba 100644
--- a/include/vcl/font.hxx
+++ b/include/vcl/font.hxx
@@ -35,10 +35,6 @@ class Impl_Font;
 class ImplFontAttributes;
 class Size;
 
-
-// - Font -
-
-
 class VCL_DLLPUBLIC Font
 {
 private:
commit 6a94e8fbcbb43512b657c5b5a5d3d6ff5bd0fe7a
Author: Tomaž Vajngerl <tomaz.vajngerl at collabora.com>
Date:   Tue May 13 14:25:00 2014 +0200

    wmf: put WMFReader constructor out of the header file
    
    Change-Id: I8bf15c9990745759dd1414296257558adf5a42c0

diff --git a/vcl/source/filter/wmf/winmtf.hxx b/vcl/source/filter/wmf/winmtf.hxx
index bfa7a90..ede4141 100644
--- a/vcl/source/filter/wmf/winmtf.hxx
+++ b/vcl/source/filter/wmf/winmtf.hxx
@@ -842,22 +842,8 @@ private:
 public:
 
     WMFReader(SvStream& rStreamWMF, GDIMetaFile& rGDIMetaFile,
-        FilterConfigItem* pConfigItem = NULL,
-        WMF_EXTERNALHEADER* pExtHeader = NULL)
-        : WinMtf(new WinMtfOutput(rGDIMetaFile) , rStreamWMF, pConfigItem)
-        , nUnitsPerInch(96)
-        , nRecSize(0)
-        , pEMFStream(NULL)
-        , nEMFRecCount(0)
-        , nEMFRec(0)
-        , nEMFSize(0)
-        , nSkipActions(0)
-        , nCurrentAction(0)
-        , nUnicodeEscapeAction(0)
-        , pExternalHeader(pExtHeader)
-        {
-        }
-
+              FilterConfigItem* pConfigItem = NULL,
+              WMF_EXTERNALHEADER* pExtHeader = NULL);
     ~WMFReader();
 
     // read WMF file from stream and fill the GDIMetaFile
diff --git a/vcl/source/filter/wmf/winwmf.cxx b/vcl/source/filter/wmf/winwmf.cxx
index 2f5d3aa..d98e024 100644
--- a/vcl/source/filter/wmf/winwmf.cxx
+++ b/vcl/source/filter/wmf/winwmf.cxx
@@ -1600,10 +1600,24 @@ bool WMFReader::GetPlaceableBound( Rectangle& rPlaceableBound, SvStream* pStm )
     return bRet;
 }
 
+WMFReader::WMFReader(SvStream& rStreamWMF, GDIMetaFile& rGDIMetaFile,
+                     FilterConfigItem* pConfigItem, WMF_EXTERNALHEADER* pExtHeader)
+    : WinMtf(new WinMtfOutput(rGDIMetaFile) , rStreamWMF, pConfigItem)
+    , nUnitsPerInch(96)
+    , nRecSize(0)
+    , pEMFStream(NULL)
+    , nEMFRecCount(0)
+    , nEMFRec(0)
+    , nEMFSize(0)
+    , nSkipActions(0)
+    , nCurrentAction(0)
+    , nUnicodeEscapeAction(0)
+    , pExternalHeader(pExtHeader)
+{}
+
 WMFReader::~WMFReader()
 {
-    if( pEMFStream )
-        delete pEMFStream;
+    delete pEMFStream;
 }
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
commit 599328b0a9f50f65d8ad1efea8b72ac604153c56
Author: Tomaž Vajngerl <tomaz.vajngerl at collabora.com>
Date:   Mon May 12 12:29:20 2014 +0200

    tools: add AsRGBHexString to Color + unit test
    
    AsRGBHexString returns the Color as a RGB hex string. For example
    "00ff00" for green color.
    
    Change-Id: Ia95c7f9eb6d9aefc3ca989046fa8d76b7b7f9e8f

diff --git a/include/tools/color.hxx b/include/tools/color.hxx
index 0a55132..3515e59 100644
--- a/include/tools/color.hxx
+++ b/include/tools/color.hxx
@@ -162,6 +162,10 @@ public:
     TOOLS_DLLPUBLIC friend SvStream&    ReadColor( SvStream& rIStream, Color& rColor );
     TOOLS_DLLPUBLIC friend SvStream&    WriteColor( SvStream& rOStream, const Color& rColor );
 
+    // Return color as RGB hex string
+    // for example "00ff00" for green color
+    OUString AsRGBHexString();
+
     // get ::basegfx::BColor from this color
     ::basegfx::BColor getBColor() const { return ::basegfx::BColor(GetRed() / 255.0, GetGreen() / 255.0, GetBlue() / 255.0); }
 };
diff --git a/tools/CppunitTest_tools_test.mk b/tools/CppunitTest_tools_test.mk
index 959df07..48324de5 100644
--- a/tools/CppunitTest_tools_test.mk
+++ b/tools/CppunitTest_tools_test.mk
@@ -19,6 +19,7 @@ $(eval $(call gb_CppunitTest_add_exception_objects,tools_test, \
     tools/qa/cppunit/test_reversemap \
     tools/qa/cppunit/test_stream \
     tools/qa/cppunit/test_urlobj \
+    tools/qa/cppunit/test_color \
 ))
 
 $(eval $(call gb_CppunitTest_use_api,tools_test, \
diff --git a/tools/qa/cppunit/test_color.cxx b/tools/qa/cppunit/test_color.cxx
new file mode 100644
index 0000000..6846fad
--- /dev/null
+++ b/tools/qa/cppunit/test_color.cxx
@@ -0,0 +1,61 @@
+/* -*- 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/.
+ */
+
+#include <sal/types.h>
+#include "cppunit/TestAssert.h"
+#include "cppunit/TestFixture.h"
+#include "cppunit/extensions/HelperMacros.h"
+#include "cppunit/plugin/TestPlugIn.h"
+#include <tools/color.hxx>
+
+namespace
+{
+
+class Test: public CppUnit::TestFixture
+{
+public:
+    void test_asRGBColor();
+
+    CPPUNIT_TEST_SUITE(Test);
+    CPPUNIT_TEST(test_asRGBColor);
+    CPPUNIT_TEST_SUITE_END();
+};
+
+void Test::test_asRGBColor()
+{
+    Color aColor;
+    aColor = COL_BLACK;
+    CPPUNIT_ASSERT_EQUAL(aColor.AsRGBHexString(), OUString("000000"));
+
+    aColor = COL_WHITE;
+    CPPUNIT_ASSERT_EQUAL(aColor.AsRGBHexString(), OUString("ffffff"));
+
+    aColor = COL_RED;
+    CPPUNIT_ASSERT_EQUAL(aColor.AsRGBHexString(), OUString("800000"));
+
+    aColor = COL_TRANSPARENT;
+    CPPUNIT_ASSERT_EQUAL(aColor.AsRGBHexString(), OUString("ffffff"));
+
+    aColor = COL_BLUE;
+    CPPUNIT_ASSERT_EQUAL(aColor.AsRGBHexString(), OUString("000080"));
+
+    aColor.SetRed(0x12);
+    aColor.SetGreen(0x34);
+    aColor.SetBlue(0x56);
+    CPPUNIT_ASSERT_EQUAL(aColor.AsRGBHexString(), OUString("123456"));
+
+    aColor = COL_AUTO;
+    CPPUNIT_ASSERT_EQUAL(aColor.AsRGBHexString(), OUString("ffffff"));
+}
+
+CPPUNIT_TEST_SUITE_REGISTRATION(Test);
+
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/tools/source/generic/color.cxx b/tools/source/generic/color.cxx
index 909a4e8..64cc6c4 100644
--- a/tools/source/generic/color.cxx
+++ b/tools/source/generic/color.cxx
@@ -232,6 +232,13 @@ SvStream& Color::Write( SvStream& rOStm, bool bNewFormat )
     return rOStm;
 }
 
+OUString Color::AsRGBHexString()
+{
+    std::stringstream ss;
+    ss << std::hex << std::setfill ('0') << std::setw(6) << GetRGBColor();
+    return OUString::createFromAscii(ss.str().c_str());
+}
+
 #define COL_NAME_USER       ((sal_uInt16)0x8000)
 
 SvStream& ReadColor( SvStream& rIStream, Color& rColor )
commit 1c77fcacbd07b077412048a0647271fad16ff461
Author: Tomaž Vajngerl <tomaz.vajngerl at collabora.com>
Date:   Sun May 11 13:02:55 2014 +0200

    vcl: problems with WriteWithVersion so remove for now
    
    A sw test fails when WriteWithVersion is used istead of direct
    replacement. Remove it for now.
    
    Change-Id: I0425c85d6492061a5d7565e709d5913b79b28a46

diff --git a/include/vcl/metaact.hxx b/include/vcl/metaact.hxx
index f137d2e..50820fb 100644
--- a/include/vcl/metaact.hxx
+++ b/include/vcl/metaact.hxx
@@ -120,7 +120,6 @@ private:
     virtual bool    Compare( const MetaAction& ) const;
 
 protected:
-    void                WriteWithVersion(SvStream& rStream, ImplMetaWriteData* pWriteData, sal_uInt16 nVersion);
     virtual             ~MetaAction();
 
 public:
diff --git a/vcl/source/gdi/metaact.cxx b/vcl/source/gdi/metaact.cxx
index 87bd528..eb9217e 100644
--- a/vcl/source/gdi/metaact.cxx
+++ b/vcl/source/gdi/metaact.cxx
@@ -110,12 +110,6 @@ bool MetaAction::Compare( const MetaAction& ) const
     return true;
 }
 
-void MetaAction::WriteWithVersion( SvStream& rStream, ImplMetaWriteData* pWriteData, sal_uInt16 nVersion)
-{
-    MetaAction::Write(rStream, pWriteData);
-    VersionCompat aCompat(rStream, STREAM_WRITE, nVersion);
-}
-
 void MetaAction::Write( SvStream& rOStm, ImplMetaWriteData* )
 {
     rOStm.WriteUInt16( mnType );
@@ -248,7 +242,8 @@ bool MetaPixelAction::Compare( const MetaAction& rMetaAction ) const
 
 void MetaPixelAction::Write( SvStream& rOStm, ImplMetaWriteData* pData )
 {
-    WriteWithVersion(rOStm, pData, 1);
+    MetaAction::Write(rOStm, pData);
+    VersionCompat aCompat(rOStm, STREAM_WRITE, 1);
     WritePair( rOStm, maPt );
     maColor.Write( rOStm, true );
 }
@@ -301,7 +296,8 @@ bool MetaPointAction::Compare( const MetaAction& rMetaAction ) const
 
 void MetaPointAction::Write( SvStream& rOStm, ImplMetaWriteData* pData )
 {
-    WriteWithVersion(rOStm, pData, 1);
+    MetaAction::Write(rOStm, pData);
+    VersionCompat aCompat(rOStm, STREAM_WRITE, 1);
     WritePair( rOStm, maPt );
 }
 
@@ -369,7 +365,8 @@ bool MetaLineAction::Compare( const MetaAction& rMetaAction ) const
 
 void MetaLineAction::Write( SvStream& rOStm, ImplMetaWriteData* pData )
 {
-    WriteWithVersion(rOStm, pData, 2);
+    MetaAction::Write(rOStm, pData);
+    VersionCompat aCompat(rOStm, STREAM_WRITE, 2);
 
     WritePair( rOStm, maStartPt );
     WritePair( rOStm, maEndPt );  // Version 1
@@ -432,7 +429,8 @@ bool MetaRectAction::Compare( const MetaAction& rMetaAction ) const
 
 void MetaRectAction::Write( SvStream& rOStm, ImplMetaWriteData* pData )
 {
-    WriteWithVersion(rOStm, pData, 1);
+    MetaAction::Write(rOStm, pData);
+    VersionCompat aCompat(rOStm, STREAM_WRITE, 1);
     WriteRectangle( rOStm, maRect );
 }
 
@@ -492,7 +490,8 @@ bool MetaRoundRectAction::Compare( const MetaAction& rMetaAction ) const
 
 void MetaRoundRectAction::Write( SvStream& rOStm, ImplMetaWriteData* pData )
 {
-    WriteWithVersion(rOStm, pData, 1);
+    MetaAction::Write(rOStm, pData);
+    VersionCompat aCompat(rOStm, STREAM_WRITE, 1);
     WriteRectangle( rOStm, maRect );
     rOStm.WriteUInt32( mnHorzRound ).WriteUInt32( mnVertRound );
 }
@@ -544,7 +543,8 @@ bool MetaEllipseAction::Compare( const MetaAction& rMetaAction ) const
 
 void MetaEllipseAction::Write( SvStream& rOStm, ImplMetaWriteData* pData )
 {
-    WriteWithVersion(rOStm, pData, 1);
+    MetaAction::Write(rOStm, pData);
+    VersionCompat aCompat(rOStm, STREAM_WRITE, 1);
     WriteRectangle( rOStm, maRect );
 }
 
@@ -604,7 +604,8 @@ bool MetaArcAction::Compare( const MetaAction& rMetaAction ) const
 
 void MetaArcAction::Write( SvStream& rOStm, ImplMetaWriteData* pData )
 {
-    WriteWithVersion(rOStm, pData, 1);
+    MetaAction::Write(rOStm, pData);
+    VersionCompat aCompat(rOStm, STREAM_WRITE, 1);
     WriteRectangle( rOStm, maRect );
     WritePair( rOStm, maStartPt );
     WritePair( rOStm, maEndPt );
@@ -668,7 +669,8 @@ bool MetaPieAction::Compare( const MetaAction& rMetaAction ) const
 
 void MetaPieAction::Write( SvStream& rOStm, ImplMetaWriteData* pData )
 {
-    WriteWithVersion(rOStm, pData, 1);
+    MetaAction::Write(rOStm, pData);
+    VersionCompat aCompat(rOStm, STREAM_WRITE, 1);
     WriteRectangle( rOStm, maRect );
     WritePair( rOStm, maStartPt );
     WritePair( rOStm, maEndPt );
@@ -732,7 +734,8 @@ bool MetaChordAction::Compare( const MetaAction& rMetaAction ) const
 
 void MetaChordAction::Write( SvStream& rOStm, ImplMetaWriteData* pData )
 {
-    WriteWithVersion(rOStm, pData, 1);
+    MetaAction::Write(rOStm, pData);
+    VersionCompat aCompat(rOStm, STREAM_WRITE, 1);
     WriteRectangle( rOStm, maRect );
     WritePair( rOStm, maStartPt );
     WritePair( rOStm, maEndPt );
@@ -803,7 +806,8 @@ bool MetaPolyLineAction::Compare( const MetaAction& rMetaAction ) const
 
 void MetaPolyLineAction::Write( SvStream& rOStm, ImplMetaWriteData* pData )
 {
-    WriteWithVersion(rOStm, pData, 3);
+    MetaAction::Write(rOStm, pData);
+    VersionCompat aCompat(rOStm, STREAM_WRITE, 3);
 
     Polygon aSimplePoly;
     maPoly.AdaptiveSubdivide( aSimplePoly );
@@ -877,7 +881,8 @@ bool MetaPolygonAction::Compare( const MetaAction& rMetaAction ) const
 
 void MetaPolygonAction::Write( SvStream& rOStm, ImplMetaWriteData* pData )
 {
-    WriteWithVersion(rOStm, pData, 2);
+    MetaAction::Write(rOStm, pData);
+    VersionCompat aCompat(rOStm, STREAM_WRITE, 2);
 
     Polygon aSimplePoly;                            // Version 1
     maPoly.AdaptiveSubdivide( aSimplePoly );
@@ -946,7 +951,8 @@ bool MetaPolyPolygonAction::Compare( const MetaAction& rMetaAction ) const
 
 void MetaPolyPolygonAction::Write( SvStream& rOStm, ImplMetaWriteData* pData )
 {
-    WriteWithVersion(rOStm, pData, 2);
+    MetaAction::Write(rOStm, pData);
+    VersionCompat aCompat(rOStm, STREAM_WRITE, 2);
 
     sal_uInt16 nNumberOfComplexPolygons = 0;
     sal_uInt16 i, nPolyCount = maPolyPoly.Count();
@@ -1046,7 +1052,8 @@ bool MetaTextAction::Compare( const MetaAction& rMetaAction ) const
 
 void MetaTextAction::Write( SvStream& rOStm, ImplMetaWriteData* pData )
 {
-    WriteWithVersion(rOStm, pData, 2);
+    MetaAction::Write(rOStm, pData);
+    VersionCompat aCompat(rOStm, STREAM_WRITE, 2);
     WritePair( rOStm, maPt );
     rOStm.WriteUniOrByteString( maStr, pData->meActualCharSet );
     rOStm.WriteUInt16(mnIndex);
@@ -1164,7 +1171,8 @@ void MetaTextArrayAction::Write( SvStream& rOStm, ImplMetaWriteData* pData )
 {
     const sal_Int32 nAryLen = mpDXAry ? mnLen : 0;
 
-    WriteWithVersion(rOStm, pData, 2);
+    MetaAction::Write(rOStm, pData);
+    VersionCompat aCompat(rOStm, STREAM_WRITE, 2);
     WritePair( rOStm, maStartPt );
     rOStm.WriteUniOrByteString( maStr, pData->meActualCharSet );
     rOStm.WriteUInt16(mnIndex);
@@ -1296,7 +1304,8 @@ bool MetaStretchTextAction::Compare( const MetaAction& rMetaAction ) const
 
 void MetaStretchTextAction::Write( SvStream& rOStm, ImplMetaWriteData* pData )
 {
-    WriteWithVersion(rOStm, pData, 2);
+    MetaAction::Write(rOStm, pData);
+    VersionCompat aCompat(rOStm, STREAM_WRITE, 2);
     WritePair( rOStm, maPt );
     rOStm.WriteUniOrByteString( maStr, pData->meActualCharSet );
     rOStm.WriteUInt32( mnWidth );
@@ -1370,7 +1379,8 @@ bool MetaTextRectAction::Compare( const MetaAction& rMetaAction ) const
 
 void MetaTextRectAction::Write( SvStream& rOStm, ImplMetaWriteData* pData )
 {
-    WriteWithVersion(rOStm, pData, 2);
+    MetaAction::Write(rOStm, pData);
+    VersionCompat aCompat(rOStm, STREAM_WRITE, 2);
     WriteRectangle( rOStm, maRect );
     rOStm.WriteUniOrByteString( maStr, pData->meActualCharSet );
     rOStm.WriteUInt16( mnStyle );
@@ -1446,7 +1456,8 @@ bool MetaTextLineAction::Compare( const MetaAction& rMetaAction ) const
 
 void MetaTextLineAction::Write( SvStream& rOStm, ImplMetaWriteData* pData )
 {
-    WriteWithVersion(rOStm, pData, 2);
+    MetaAction::Write(rOStm, pData);
+    VersionCompat aCompat(rOStm, STREAM_WRITE, 2);
 
     //#fdo39428 SvStream no longer supports operator<<(long)
     WritePair( rOStm, maPos );
@@ -1524,7 +1535,8 @@ void MetaBmpAction::Write( SvStream& rOStm, ImplMetaWriteData* pData )
 {
     if( !!maBmp )
     {
-        WriteWithVersion(rOStm, pData, 1);
+        MetaAction::Write(rOStm, pData);
+    VersionCompat aCompat(rOStm, STREAM_WRITE, 1);
         WriteDIB(maBmp, rOStm, false, true);
         WritePair( rOStm, maPt );
     }
@@ -1588,7 +1600,8 @@ void MetaBmpScaleAction::Write( SvStream& rOStm, ImplMetaWriteData* pData )
 {
     if( !!maBmp )
     {
-        WriteWithVersion(rOStm, pData, 1);
+        MetaAction::Write(rOStm, pData);
+        VersionCompat aCompat(rOStm, STREAM_WRITE, 1);
         WriteDIB(maBmp, rOStm, false, true);
         WritePair( rOStm, maPt );
         WritePair( rOStm, maSz );
@@ -1659,7 +1672,8 @@ void MetaBmpScalePartAction::Write( SvStream& rOStm, ImplMetaWriteData* pData )
 {
     if( !!maBmp )
     {
-        WriteWithVersion(rOStm, pData, 1);
+        MetaAction::Write(rOStm, pData);
+        VersionCompat aCompat(rOStm, STREAM_WRITE, 1);
         WriteDIB(maBmp, rOStm, false, true);
         WritePair( rOStm, maDstPt );
         WritePair( rOStm, maDstSz );
@@ -1723,7 +1737,8 @@ void MetaBmpExAction::Write( SvStream& rOStm, ImplMetaWriteData* pData )
 {
     if( !!maBmpEx.GetBitmap() )
     {
-        WriteWithVersion(rOStm, pData, 1);
+        MetaAction::Write(rOStm, pData);
+        VersionCompat aCompat(rOStm, STREAM_WRITE, 1);
         WriteDIBBitmapEx(maBmpEx, rOStm);
         WritePair( rOStm, maPt );
     }
@@ -1787,7 +1802,8 @@ void MetaBmpExScaleAction::Write( SvStream& rOStm, ImplMetaWriteData* pData )
 {
     if( !!maBmpEx.GetBitmap() )
     {
-        WriteWithVersion(rOStm, pData, 1);
+        MetaAction::Write(rOStm, pData);
+        VersionCompat aCompat(rOStm, STREAM_WRITE, 1);
         WriteDIBBitmapEx(maBmpEx, rOStm);
         WritePair( rOStm, maPt );
         WritePair( rOStm, maSz );
@@ -1858,7 +1874,8 @@ void MetaBmpExScalePartAction::Write( SvStream& rOStm, ImplMetaWriteData* pData
 {
     if( !!maBmpEx.GetBitmap() )
     {
-        WriteWithVersion(rOStm, pData, 1);
+        MetaAction::Write(rOStm, pData);
+        VersionCompat aCompat(rOStm, STREAM_WRITE, 1);
         WriteDIBBitmapEx(maBmpEx, rOStm);
         WritePair( rOStm, maDstPt );
         WritePair( rOStm, maDstSz );
@@ -1926,7 +1943,8 @@ void MetaMaskAction::Write( SvStream& rOStm, ImplMetaWriteData* pData )
 {
     if( !!maBmp )
     {
-        WriteWithVersion(rOStm, pData, 1);
+        MetaAction::Write(rOStm, pData);
+        VersionCompat aCompat(rOStm, STREAM_WRITE, 1);
         WriteDIB(maBmp, rOStm, false, true);
         WritePair( rOStm, maPt );
     }
@@ -1993,7 +2011,8 @@ void MetaMaskScaleAction::Write( SvStream& rOStm, ImplMetaWriteData* pData )
 {
     if( !!maBmp )
     {
-        WriteWithVersion(rOStm, pData, 1);
+        MetaAction::Write(rOStm, pData);
+        VersionCompat aCompat(rOStm, STREAM_WRITE, 1);
         WriteDIB(maBmp, rOStm, false, true);
         WritePair( rOStm, maPt );
         WritePair( rOStm, maSz );
@@ -2067,7 +2086,8 @@ void MetaMaskScalePartAction::Write( SvStream& rOStm, ImplMetaWriteData* pData )
 {
     if( !!maBmp )
     {
-        WriteWithVersion(rOStm, pData, 1);
+        MetaAction::Write(rOStm, pData);
+        VersionCompat aCompat(rOStm, STREAM_WRITE, 1);
         WriteDIB(maBmp, rOStm, false, true);
         maColor.Write( rOStm, true );
         WritePair( rOStm, maDstPt );
@@ -2131,7 +2151,8 @@ bool MetaGradientAction::Compare( const MetaAction& rMetaAction ) const
 
 void MetaGradientAction::Write( SvStream& rOStm, ImplMetaWriteData* pData )
 {
-    WriteWithVersion(rOStm, pData, 1);
+    MetaAction::Write(rOStm, pData);
+    VersionCompat aCompat(rOStm, STREAM_WRITE, 1);
     WriteRectangle( rOStm, maRect );
     WriteGradient( rOStm, maGradient );
 }
@@ -2191,7 +2212,8 @@ bool MetaGradientExAction::Compare( const MetaAction& rMetaAction ) const
 
 void MetaGradientExAction::Write( SvStream& rOStm, ImplMetaWriteData* pData )
 {
-    WriteWithVersion(rOStm, pData, 1);
+    MetaAction::Write(rOStm, pData);
+    VersionCompat aCompat(rOStm, STREAM_WRITE, 1);
 
     // #i105373# see comment at MetaTransparentAction::Write
     PolyPolygon aNoCurvePolyPolygon;
@@ -2252,7 +2274,8 @@ bool MetaHatchAction::Compare( const MetaAction& rMetaAction ) const
 
 void MetaHatchAction::Write( SvStream& rOStm, ImplMetaWriteData* pData )
 {
-    WriteWithVersion(rOStm, pData, 1);
+    MetaAction::Write(rOStm, pData);
+    VersionCompat aCompat(rOStm, STREAM_WRITE, 1);
 
     // #i105373# see comment at MetaTransparentAction::Write
     PolyPolygon aNoCurvePolyPolygon;
@@ -2313,7 +2336,9 @@ bool MetaWallpaperAction::Compare( const MetaAction& rMetaAction ) const
 
 void MetaWallpaperAction::Write( SvStream& rOStm, ImplMetaWriteData* pData )
 {
-    WriteWithVersion(rOStm, pData, 1);
+    MetaAction::Write(rOStm, pData);
+    VersionCompat aCompat(rOStm, STREAM_WRITE, 1);
+
     WriteWallpaper( rOStm, maWallpaper );
 }
 
@@ -2370,7 +2395,9 @@ bool MetaClipRegionAction::Compare( const MetaAction& rMetaAction ) const
 
 void MetaClipRegionAction::Write( SvStream& rOStm, ImplMetaWriteData* pData )
 {
-    WriteWithVersion(rOStm, pData, 1);
+    MetaAction::Write(rOStm, pData);
+    VersionCompat aCompat(rOStm, STREAM_WRITE, 1);
+
     WriteRegion( rOStm, maRegion );
     rOStm.WriteUChar( mbClip );
 }
@@ -2423,7 +2450,8 @@ bool MetaISectRectClipRegionAction::Compare( const MetaAction& rMetaAction ) con
 
 void MetaISectRectClipRegionAction::Write( SvStream& rOStm, ImplMetaWriteData* pData )
 {
-    WriteWithVersion(rOStm, pData, 1);
+    MetaAction::Write(rOStm, pData);
+    VersionCompat aCompat(rOStm, STREAM_WRITE, 1);
     WriteRectangle( rOStm, maRect );
 }
 
@@ -2475,7 +2503,8 @@ bool MetaISectRegionClipRegionAction::Compare( const MetaAction& rMetaAction ) c
 
 void MetaISectRegionClipRegionAction::Write( SvStream& rOStm, ImplMetaWriteData* pData )
 {
-    WriteWithVersion(rOStm, pData, 1);
+    MetaAction::Write(rOStm, pData);
+    VersionCompat aCompat(rOStm, STREAM_WRITE, 1);
     WriteRegion( rOStm, maRegion );
 }
 
@@ -2526,7 +2555,8 @@ bool MetaMoveClipRegionAction::Compare( const MetaAction& rMetaAction ) const
 
 void MetaMoveClipRegionAction::Write( SvStream& rOStm, ImplMetaWriteData* pData )
 {
-    WriteWithVersion(rOStm, pData, 1);
+    MetaAction::Write(rOStm, pData);
+    VersionCompat aCompat(rOStm, STREAM_WRITE, 1);
     //#fdo39428 SvStream no longer supports operator<<(long)
     rOStm.WriteInt32( sal::static_int_cast<sal_Int32>(mnHorzMove) ).WriteInt32( sal::static_int_cast<sal_Int32>(mnVertMove) );
 }
@@ -2578,7 +2608,8 @@ bool MetaLineColorAction::Compare( const MetaAction& rMetaAction ) const
 
 void MetaLineColorAction::Write( SvStream& rOStm, ImplMetaWriteData* pData )
 {
-    WriteWithVersion(rOStm, pData, 1);
+    MetaAction::Write(rOStm, pData);
+    VersionCompat aCompat(rOStm, STREAM_WRITE, 1);
     maColor.Write( rOStm, true );
     rOStm.WriteUChar( mbSet );
 }
@@ -2627,7 +2658,8 @@ bool MetaFillColorAction::Compare( const MetaAction& rMetaAction ) const
 
 void MetaFillColorAction::Write( SvStream& rOStm, ImplMetaWriteData* pData )
 {
-    WriteWithVersion(rOStm, pData, 1);
+    MetaAction::Write(rOStm, pData);
+    VersionCompat aCompat(rOStm, STREAM_WRITE, 1);
     maColor.Write( rOStm, true );
     rOStm.WriteUChar( mbSet );
 }
@@ -2670,7 +2702,8 @@ bool MetaTextColorAction::Compare( const MetaAction& rMetaAction ) const
 
 void MetaTextColorAction::Write( SvStream& rOStm, ImplMetaWriteData* pData )
 {
-    WriteWithVersion(rOStm, pData, 1);
+    MetaAction::Write(rOStm, pData);
+    VersionCompat aCompat(rOStm, STREAM_WRITE, 1);
     maColor.Write( rOStm, true );
 }
 
@@ -2717,7 +2750,8 @@ bool MetaTextFillColorAction::Compare( const MetaAction& rMetaAction ) const
 
 void MetaTextFillColorAction::Write( SvStream& rOStm, ImplMetaWriteData* pData )
 {
-    WriteWithVersion(rOStm, pData, 1);
+    MetaAction::Write(rOStm, pData);
+    VersionCompat aCompat(rOStm, STREAM_WRITE, 1);
     maColor.Write( rOStm, true );
     rOStm.WriteUChar( mbSet );
 }
@@ -2766,7 +2800,8 @@ bool MetaTextLineColorAction::Compare( const MetaAction& rMetaAction ) const
 
 void MetaTextLineColorAction::Write( SvStream& rOStm, ImplMetaWriteData* pData )
 {
-    WriteWithVersion(rOStm, pData, 1);
+    MetaAction::Write(rOStm, pData);
+    VersionCompat aCompat(rOStm, STREAM_WRITE, 1);
     maColor.Write( rOStm, true );
     rOStm.WriteUChar( mbSet );
 }
@@ -2815,7 +2850,8 @@ bool MetaOverlineColorAction::Compare( const MetaAction& rMetaAction ) const
 
 void MetaOverlineColorAction::Write( SvStream& rOStm, ImplMetaWriteData* pData )
 {
-    WriteWithVersion(rOStm, pData, 1);
+    MetaAction::Write(rOStm, pData);
+    VersionCompat aCompat(rOStm, STREAM_WRITE, 1);
     maColor.Write( rOStm, true );
     rOStm.WriteUChar( mbSet );
 }
@@ -2859,7 +2895,8 @@ bool MetaTextAlignAction::Compare( const MetaAction& rMetaAction ) const
 
 void MetaTextAlignAction::Write( SvStream& rOStm, ImplMetaWriteData* pData )
 {
-    WriteWithVersion(rOStm, pData, 1);
+    MetaAction::Write(rOStm, pData);
+    VersionCompat aCompat(rOStm, STREAM_WRITE, 1);
     rOStm.WriteUInt16( (sal_uInt16) maAlign );
 }
 
@@ -2910,7 +2947,8 @@ bool MetaMapModeAction::Compare( const MetaAction& rMetaAction ) const
 
 void MetaMapModeAction::Write( SvStream& rOStm, ImplMetaWriteData* pData )
 {
-    WriteWithVersion(rOStm, pData, 1);
+    MetaAction::Write(rOStm, pData);
+    VersionCompat aCompat(rOStm, STREAM_WRITE, 1);
     WriteMapMode( rOStm, maMapMode );
 }
 
@@ -2969,7 +3007,8 @@ bool MetaFontAction::Compare( const MetaAction& rMetaAction ) const
 
 void MetaFontAction::Write( SvStream& rOStm, ImplMetaWriteData* pData )
 {
-    WriteWithVersion(rOStm, pData, 1);
+    MetaAction::Write(rOStm, pData);
+    VersionCompat aCompat(rOStm, STREAM_WRITE, 1);
     WriteFont( rOStm, maFont );
     pData->meActualCharSet = maFont.GetCharSet();
     if ( pData->meActualCharSet == RTL_TEXTENCODING_DONTKNOW )
@@ -3017,7 +3056,8 @@ bool MetaPushAction::Compare( const MetaAction& rMetaAction ) const
 
 void MetaPushAction::Write( SvStream& rOStm, ImplMetaWriteData* pData )
 {
-    WriteWithVersion(rOStm, pData, 1);
+    MetaAction::Write(rOStm, pData);
+    VersionCompat aCompat(rOStm, STREAM_WRITE, 1);
     rOStm.WriteUInt16( mnFlags );
 }
 
@@ -3048,7 +3088,8 @@ MetaAction* MetaPopAction::Clone()
 
 void MetaPopAction::Write( SvStream& rOStm, ImplMetaWriteData* pData )
 {
-    WriteWithVersion(rOStm, pData, 1);
+    MetaAction::Write(rOStm, pData);
+    VersionCompat aCompat(rOStm, STREAM_WRITE, 1);
 }
 
 void MetaPopAction::Read( SvStream& rIStm, ImplMetaReadData* )
@@ -3089,7 +3130,8 @@ bool MetaRasterOpAction::Compare( const MetaAction& rMetaAction ) const
 
 void MetaRasterOpAction::Write( SvStream& rOStm, ImplMetaWriteData* pData )
 {
-    WriteWithVersion(rOStm, pData, 1);
+    MetaAction::Write(rOStm, pData);
+    VersionCompat aCompat(rOStm, STREAM_WRITE, 1);
     rOStm.WriteUInt16( (sal_uInt16) meRasterOp );
 }
 
@@ -3146,7 +3188,8 @@ bool MetaTransparentAction::Compare( const MetaAction& rMetaAction ) const
 
 void MetaTransparentAction::Write( SvStream& rOStm, ImplMetaWriteData* pData )
 {
-    WriteWithVersion(rOStm, pData, 1);
+    MetaAction::Write(rOStm, pData);
+    VersionCompat aCompat(rOStm, STREAM_WRITE, 1);
 
     // #i105373# The PolyPolygon in this action may be a curve; this
     // was ignored until now what is an error. To make older office
@@ -3222,7 +3265,8 @@ bool MetaFloatTransparentAction::Compare( const MetaAction& rMetaAction ) const
 
 void MetaFloatTransparentAction::Write( SvStream& rOStm, ImplMetaWriteData* pData )
 {
-    WriteWithVersion(rOStm, pData, 1);
+    MetaAction::Write(rOStm, pData);
+    VersionCompat aCompat(rOStm, STREAM_WRITE, 1);
 
     maMtf.Write( rOStm );
     WritePair( rOStm,  maPoint );
@@ -3290,7 +3334,9 @@ bool MetaEPSAction::Compare( const MetaAction& rMetaAction ) const
 
 void MetaEPSAction::Write( SvStream& rOStm, ImplMetaWriteData* pData )
 {
-    WriteWithVersion(rOStm, pData, 1);
+    MetaAction::Write(rOStm, pData);
+    VersionCompat aCompat(rOStm, STREAM_WRITE, 1);
+
     WriteGfxLink( rOStm, maGfxLink );
     WritePair( rOStm, maPoint );
     WritePair( rOStm, maSize );
@@ -3343,7 +3389,9 @@ bool MetaRefPointAction::Compare( const MetaAction& rMetaAction ) const
 
 void MetaRefPointAction::Write( SvStream& rOStm, ImplMetaWriteData* pData )
 {
-    WriteWithVersion(rOStm, pData, 1);
+    MetaAction::Write(rOStm, pData);
+    VersionCompat aCompat(rOStm, STREAM_WRITE, 1);
+
     WritePair( rOStm, maRefPoint );
     rOStm.WriteUChar( mbSet );
 }
@@ -3540,7 +3588,8 @@ bool MetaCommentAction::Compare( const MetaAction& rMetaAction ) const
 
 void MetaCommentAction::Write( SvStream& rOStm, ImplMetaWriteData* pData )
 {
-    WriteWithVersion(rOStm, pData, 1);
+    MetaAction::Write(rOStm, pData);
+    VersionCompat aCompat(rOStm, STREAM_WRITE, 1);
     write_uInt16_lenPrefixed_uInt8s_FromOString(rOStm, maComment);
     rOStm.WriteInt32( mnValue ).WriteUInt32( mnDataSize );
 
@@ -3599,7 +3648,8 @@ bool MetaLayoutModeAction::Compare( const MetaAction& rMetaAction ) const
 
 void MetaLayoutModeAction::Write( SvStream& rOStm, ImplMetaWriteData* pData )
 {
-    WriteWithVersion(rOStm, pData, 1);
+    MetaAction::Write(rOStm, pData);
+    VersionCompat aCompat(rOStm, STREAM_WRITE, 1);
     rOStm.WriteUInt32( mnLayoutMode );
 }
 
@@ -3641,7 +3691,8 @@ bool MetaTextLanguageAction::Compare( const MetaAction& rMetaAction ) const
 
 void MetaTextLanguageAction::Write( SvStream& rOStm, ImplMetaWriteData* pData )
 {
-    WriteWithVersion(rOStm, pData, 1);
+    MetaAction::Write(rOStm, pData);
+    VersionCompat aCompat(rOStm, STREAM_WRITE, 1);
     rOStm.WriteUInt16( meTextLanguage );
 }
 
commit ccb96f34399b1a5a0e2082f84ba8e4fba92b763a
Author: Tomaž Vajngerl <tomaz.vajngerl at collabora.com>
Date:   Fri May 9 10:48:03 2014 +0200

    vcl: remove macros in metaact.cxx{hxx}
    
    Macros to reduce code duplication in metaact.cxx are discuraged
    as it is not possible to find those classes using "git grep".
    Lets find a better way to reduce code duplication for those
    classes (some have already been replaced in this commit).
    
    Change-Id: I35c7cd74d6345f37e937754e2d0177b816e0e0fa

diff --git a/include/vcl/metaact.hxx b/include/vcl/metaact.hxx
index 183aca9..f137d2e 100644
--- a/include/vcl/metaact.hxx
+++ b/include/vcl/metaact.hxx
@@ -95,39 +95,22 @@ class SvStream;
 
 struct ImplMetaReadData
 {
-    rtl_TextEncoding        meActualCharSet;
+    rtl_TextEncoding meActualCharSet;
 
-                            ImplMetaReadData() :
-                                meActualCharSet( RTL_TEXTENCODING_ASCII_US )
-                            {
-                            }
+    ImplMetaReadData() :
+        meActualCharSet( RTL_TEXTENCODING_ASCII_US )
+    {}
 };
 
 struct ImplMetaWriteData
 {
-    rtl_TextEncoding        meActualCharSet;
+    rtl_TextEncoding meActualCharSet;
 
-                            ImplMetaWriteData() :
-                                meActualCharSet( RTL_TEXTENCODING_ASCII_US )
-                            {
-                            }
+    ImplMetaWriteData() :
+        meActualCharSet( RTL_TEXTENCODING_ASCII_US )
+    {}
 };
 
-#define DECL_META_ACTION( Name, nType )                                     \
-                        Meta##Name##Action();                               \
-protected:                                                                  \
-    virtual             ~Meta##Name##Action();                              \
-public:                                                                     \
-    virtual void        Execute( OutputDevice* pOut ) SAL_OVERRIDE;                      \
-    virtual MetaAction* Clone() SAL_OVERRIDE;                                            \
-    virtual void        Write( SvStream& rOStm, ImplMetaWriteData* pData ) SAL_OVERRIDE; \
-    virtual void        Read( SvStream& rIStm, ImplMetaReadData* pData ) SAL_OVERRIDE;
-
-#define IMPL_META_ACTION( Name, nType )                                 \
-Meta##Name##Action::Meta##Name##Action() :                              \
-    MetaAction( nType ) {}                                              \
-Meta##Name##Action::~Meta##Name##Action() {}
-
 class VCL_DLLPUBLIC MetaAction
 {
 private:
@@ -137,6 +120,7 @@ private:
     virtual bool    Compare( const MetaAction& ) const;
 
 protected:
+    void                WriteWithVersion(SvStream& rStream, ImplMetaWriteData* pWriteData, sal_uInt16 nVersion);
     virtual             ~MetaAction();
 
 public:
@@ -172,7 +156,14 @@ private:
     virtual bool    Compare( const MetaAction& ) const SAL_OVERRIDE;
 
 public:
-                        DECL_META_ACTION( Pixel, META_PIXEL_ACTION )
+                        MetaPixelAction();
+protected:
+    virtual             ~MetaPixelAction();
+public:
+    virtual void        Execute( OutputDevice* pOut ) SAL_OVERRIDE;
+    virtual MetaAction* Clone() SAL_OVERRIDE;
+    virtual void        Write( SvStream& rOStm, ImplMetaWriteData* pData ) SAL_OVERRIDE;
+    virtual void        Read( SvStream& rIStm, ImplMetaReadData* pData ) SAL_OVERRIDE;
 
                         MetaPixelAction( const Point& rPt, const Color& rColor );
 
@@ -191,7 +182,14 @@ private:
     virtual bool    Compare( const MetaAction& ) const SAL_OVERRIDE;
 
 public:
-                        DECL_META_ACTION( Point, META_POINT_ACTION )
+                        MetaPointAction();
+protected:
+    virtual             ~MetaPointAction();
+public:
+    virtual void        Execute( OutputDevice* pOut ) SAL_OVERRIDE;
+    virtual MetaAction* Clone() SAL_OVERRIDE;
+    virtual void        Write( SvStream& rOStm, ImplMetaWriteData* pData ) SAL_OVERRIDE;
+    virtual void        Read( SvStream& rIStm, ImplMetaReadData* pData ) SAL_OVERRIDE;
 
     explicit            MetaPointAction( const Point& );
 
@@ -212,7 +210,14 @@ private:
     virtual bool    Compare( const MetaAction& ) const SAL_OVERRIDE;
 
 public:
-                        DECL_META_ACTION( Line, META_LINE_ACTION )
+                        MetaLineAction();
+protected:
+    virtual             ~MetaLineAction();
+public:
+    virtual void        Execute( OutputDevice* pOut ) SAL_OVERRIDE;
+    virtual MetaAction* Clone() SAL_OVERRIDE;
+    virtual void        Write( SvStream& rOStm, ImplMetaWriteData* pData ) SAL_OVERRIDE;
+    virtual void        Read( SvStream& rIStm, ImplMetaReadData* pData ) SAL_OVERRIDE;
 
                         MetaLineAction( const Point& rStart, const Point& rEnd );
                         MetaLineAction( const Point& rStart, const Point& rEnd,
@@ -234,7 +239,14 @@ private:
 
     virtual bool    Compare( const MetaAction& ) const SAL_OVERRIDE;
 public:
-                        DECL_META_ACTION( Rect, META_RECT_ACTION )
+                        MetaRectAction();
+protected:
+    virtual             ~MetaRectAction();
+public:
+    virtual void        Execute( OutputDevice* pOut ) SAL_OVERRIDE;
+    virtual MetaAction* Clone() SAL_OVERRIDE;
+    virtual void        Write( SvStream& rOStm, ImplMetaWriteData* pData ) SAL_OVERRIDE;
+    virtual void        Read( SvStream& rIStm, ImplMetaReadData* pData ) SAL_OVERRIDE;
 
     explicit            MetaRectAction( const Rectangle& );
 
@@ -255,7 +267,14 @@ private:
     virtual bool    Compare( const MetaAction& ) const SAL_OVERRIDE;
 
 public:
-                        DECL_META_ACTION( RoundRect, META_ROUNDRECT_ACTION )
+                        MetaRoundRectAction();
+protected:
+    virtual             ~MetaRoundRectAction();
+public:
+    virtual void        Execute( OutputDevice* pOut ) SAL_OVERRIDE;
+    virtual MetaAction* Clone() SAL_OVERRIDE;
+    virtual void        Write( SvStream& rOStm, ImplMetaWriteData* pData ) SAL_OVERRIDE;
+    virtual void        Read( SvStream& rIStm, ImplMetaReadData* pData ) SAL_OVERRIDE;
 
                         MetaRoundRectAction( const Rectangle& rRect,
                                              sal_uInt32 nHorzRound, sal_uInt32 nVertRound );
@@ -277,7 +296,14 @@ private:
     virtual bool    Compare( const MetaAction& ) const SAL_OVERRIDE;
 
 public:
-                        DECL_META_ACTION( Ellipse, META_ELLIPSE_ACTION )
+                        MetaEllipseAction();
+protected:
+    virtual             ~MetaEllipseAction();
+public:
+    virtual void        Execute( OutputDevice* pOut ) SAL_OVERRIDE;
+    virtual MetaAction* Clone() SAL_OVERRIDE;
+    virtual void        Write( SvStream& rOStm, ImplMetaWriteData* pData ) SAL_OVERRIDE;
+    virtual void        Read( SvStream& rIStm, ImplMetaReadData* pData ) SAL_OVERRIDE;
 
     explicit            MetaEllipseAction( const Rectangle& );
 
@@ -298,7 +324,14 @@ private:
     virtual bool    Compare( const MetaAction& ) const SAL_OVERRIDE;
 
 public:
-                        DECL_META_ACTION( Arc, META_ARC_ACTION )
+                        MetaArcAction();
+protected:
+    virtual             ~MetaArcAction();
+public:
+    virtual void        Execute( OutputDevice* pOut ) SAL_OVERRIDE;
+    virtual MetaAction* Clone() SAL_OVERRIDE;
+    virtual void        Write( SvStream& rOStm, ImplMetaWriteData* pData ) SAL_OVERRIDE;
+    virtual void        Read( SvStream& rIStm, ImplMetaReadData* pData ) SAL_OVERRIDE;
 
                         MetaArcAction( const Rectangle& rRect,
                                        const Point& rStart, const Point& rEnd );
@@ -322,7 +355,14 @@ private:
     virtual bool    Compare( const MetaAction& ) const SAL_OVERRIDE;
 
 public:
-                        DECL_META_ACTION( Pie, META_PIE_ACTION )
+                        MetaPieAction();
+protected:
+    virtual             ~MetaPieAction();
+public:
+    virtual void        Execute( OutputDevice* pOut ) SAL_OVERRIDE;
+    virtual MetaAction* Clone() SAL_OVERRIDE;
+    virtual void        Write( SvStream& rOStm, ImplMetaWriteData* pData ) SAL_OVERRIDE;
+    virtual void        Read( SvStream& rIStm, ImplMetaReadData* pData ) SAL_OVERRIDE;
 
                         MetaPieAction( const Rectangle& rRect,
                                        const Point& rStart, const Point& rEnd );
@@ -346,7 +386,14 @@ private:
     virtual bool    Compare( const MetaAction& ) const SAL_OVERRIDE;
 
 public:
-                        DECL_META_ACTION( Chord, META_CHORD_ACTION )
+                        MetaChordAction();
+protected:
+    virtual             ~MetaChordAction();
+public:
+    virtual void        Execute( OutputDevice* pOut ) SAL_OVERRIDE;
+    virtual MetaAction* Clone() SAL_OVERRIDE;
+    virtual void        Write( SvStream& rOStm, ImplMetaWriteData* pData ) SAL_OVERRIDE;
+    virtual void        Read( SvStream& rIStm, ImplMetaReadData* pData ) SAL_OVERRIDE;
 
                         MetaChordAction( const Rectangle& rRect,
                                          const Point& rStart, const Point& rEnd );
@@ -369,7 +416,14 @@ private:
     virtual bool    Compare( const MetaAction& ) const SAL_OVERRIDE;
 
 public:
-                        DECL_META_ACTION( PolyLine, META_POLYLINE_ACTION )
+                        MetaPolyLineAction();
+protected:
+    virtual             ~MetaPolyLineAction();
+public:
+    virtual void        Execute( OutputDevice* pOut ) SAL_OVERRIDE;
+    virtual MetaAction* Clone() SAL_OVERRIDE;
+    virtual void        Write( SvStream& rOStm, ImplMetaWriteData* pData ) SAL_OVERRIDE;
+    virtual void        Read( SvStream& rIStm, ImplMetaReadData* pData ) SAL_OVERRIDE;
 
     explicit            MetaPolyLineAction( const Polygon& );
     explicit            MetaPolyLineAction( const Polygon&, const LineInfo& );
@@ -390,7 +444,14 @@ private:
     virtual bool    Compare( const MetaAction& ) const SAL_OVERRIDE;
 
 public:
-                        DECL_META_ACTION( Polygon, META_POLYGON_ACTION )
+                        MetaPolygonAction();
+protected:
+    virtual             ~MetaPolygonAction();
+public:
+    virtual void        Execute( OutputDevice* pOut ) SAL_OVERRIDE;
+    virtual MetaAction* Clone() SAL_OVERRIDE;
+    virtual void        Write( SvStream& rOStm, ImplMetaWriteData* pData ) SAL_OVERRIDE;
+    virtual void        Read( SvStream& rIStm, ImplMetaReadData* pData ) SAL_OVERRIDE;
 
     explicit            MetaPolygonAction( const Polygon& );
 
@@ -409,7 +470,14 @@ private:
     virtual bool    Compare( const MetaAction& ) const SAL_OVERRIDE;
 
 public:
-                        DECL_META_ACTION( PolyPolygon, META_POLYPOLYGON_ACTION )
+                        MetaPolyPolygonAction();
+protected:
+    virtual             ~MetaPolyPolygonAction();
+public:
+    virtual void        Execute( OutputDevice* pOut ) SAL_OVERRIDE;
+    virtual MetaAction* Clone() SAL_OVERRIDE;
+    virtual void        Write( SvStream& rOStm, ImplMetaWriteData* pData ) SAL_OVERRIDE;
+    virtual void        Read( SvStream& rIStm, ImplMetaReadData* pData ) SAL_OVERRIDE;
 
     explicit            MetaPolyPolygonAction( const PolyPolygon& );
 
@@ -431,7 +499,14 @@ private:
     virtual bool    Compare( const MetaAction& ) const SAL_OVERRIDE;
 
 public:
-                        DECL_META_ACTION( Text, META_TEXT_ACTION )
+                        MetaTextAction();
+protected:
+    virtual             ~MetaTextAction();
+public:
+    virtual void        Execute( OutputDevice* pOut ) SAL_OVERRIDE;
+    virtual MetaAction* Clone() SAL_OVERRIDE;
+    virtual void        Write( SvStream& rOStm, ImplMetaWriteData* pData ) SAL_OVERRIDE;
+    virtual void        Read( SvStream& rIStm, ImplMetaReadData* pData ) SAL_OVERRIDE;
 
     MetaTextAction( const Point& rPt, const OUString& rStr,
                     sal_Int32 nIndex, sal_Int32 nLen );
@@ -497,7 +572,14 @@ private:
     virtual bool    Compare( const MetaAction& ) const SAL_OVERRIDE;
 
 public:
-                        DECL_META_ACTION( StretchText, META_STRETCHTEXT_ACTION )
+                        MetaStretchTextAction();
+protected:
+    virtual             ~MetaStretchTextAction();
+public:
+    virtual void        Execute( OutputDevice* pOut ) SAL_OVERRIDE;
+    virtual MetaAction* Clone() SAL_OVERRIDE;
+    virtual void        Write( SvStream& rOStm, ImplMetaWriteData* pData ) SAL_OVERRIDE;
+    virtual void        Read( SvStream& rIStm, ImplMetaReadData* pData ) SAL_OVERRIDE;
 
     MetaStretchTextAction( const Point& rPt, sal_uInt32 nWidth,
                            const OUString& rStr,
@@ -524,7 +606,14 @@ private:
     virtual bool    Compare( const MetaAction& ) const SAL_OVERRIDE;
 
 public:
-                        DECL_META_ACTION( TextRect, META_TEXTRECT_ACTION )
+                        MetaTextRectAction();
+protected:
+    virtual             ~MetaTextRectAction();
+public:
+    virtual void        Execute( OutputDevice* pOut ) SAL_OVERRIDE;
+    virtual MetaAction* Clone() SAL_OVERRIDE;
+    virtual void        Write( SvStream& rOStm, ImplMetaWriteData* pData ) SAL_OVERRIDE;
+    virtual void        Read( SvStream& rIStm, ImplMetaReadData* pData ) SAL_OVERRIDE;
 
     MetaTextRectAction( const Rectangle& rRect,
                         const OUString& rStr, sal_uInt16 nStyle );
@@ -550,7 +639,14 @@ private:
     virtual bool    Compare( const MetaAction& ) const SAL_OVERRIDE;
 
 public:
-                        DECL_META_ACTION( TextLine, META_TEXTLINE_ACTION )
+                        MetaTextLineAction();
+protected:
+    virtual             ~MetaTextLineAction();
+public:
+    virtual void        Execute( OutputDevice* pOut ) SAL_OVERRIDE;
+    virtual MetaAction* Clone() SAL_OVERRIDE;
+    virtual void        Write( SvStream& rOStm, ImplMetaWriteData* pData ) SAL_OVERRIDE;
+    virtual void        Read( SvStream& rIStm, ImplMetaReadData* pData ) SAL_OVERRIDE;
 
                         MetaTextLineAction( const Point& rPos, long nWidth,
                                             FontStrikeout eStrikeout,
@@ -576,7 +672,14 @@ private:
     virtual bool    Compare( const MetaAction& ) const SAL_OVERRIDE;
 
 public:
-                        DECL_META_ACTION( Bmp, META_BMP_ACTION )
+                        MetaBmpAction();
+protected:
+    virtual             ~MetaBmpAction();
+public:
+    virtual void        Execute( OutputDevice* pOut ) SAL_OVERRIDE;
+    virtual MetaAction* Clone() SAL_OVERRIDE;
+    virtual void        Write( SvStream& rOStm, ImplMetaWriteData* pData ) SAL_OVERRIDE;
+    virtual void        Read( SvStream& rIStm, ImplMetaReadData* pData ) SAL_OVERRIDE;
 
                         MetaBmpAction( const Point& rPt, const Bitmap& rBmp );
 
@@ -598,7 +701,14 @@ private:
     virtual bool    Compare( const MetaAction& ) const SAL_OVERRIDE;
 
 public:
-                        DECL_META_ACTION( BmpScale, META_BMPSCALE_ACTION )
+                        MetaBmpScaleAction();
+protected:
+    virtual             ~MetaBmpScaleAction();
+public:
+    virtual void        Execute( OutputDevice* pOut ) SAL_OVERRIDE;
+    virtual MetaAction* Clone() SAL_OVERRIDE;
+    virtual void        Write( SvStream& rOStm, ImplMetaWriteData* pData ) SAL_OVERRIDE;
+    virtual void        Read( SvStream& rIStm, ImplMetaReadData* pData ) SAL_OVERRIDE;
 
                         MetaBmpScaleAction( const Point& rPt, const Size& rSz,
                                             const Bitmap& rBmp );
@@ -624,7 +734,14 @@ private:
     virtual bool    Compare( const MetaAction& ) const SAL_OVERRIDE;
 
 public:
-                        DECL_META_ACTION( BmpScalePart, META_BMPSCALEPART_ACTION )
+                        MetaBmpScalePartAction();
+protected:
+    virtual             ~MetaBmpScalePartAction();
+public:
+    virtual void        Execute( OutputDevice* pOut ) SAL_OVERRIDE;
+    virtual MetaAction* Clone() SAL_OVERRIDE;
+    virtual void        Write( SvStream& rOStm, ImplMetaWriteData* pData ) SAL_OVERRIDE;
+    virtual void        Read( SvStream& rIStm, ImplMetaReadData* pData ) SAL_OVERRIDE;
 
                         MetaBmpScalePartAction( const Point& rDstPt, const Size& rDstSz,
                                                 const Point& rSrcPt, const Size& rSrcSz,
@@ -650,7 +767,14 @@ private:
     virtual bool    Compare( const MetaAction& ) const SAL_OVERRIDE;
 
 public:
-                        DECL_META_ACTION( BmpEx, META_BMPEX_ACTION )
+                        MetaBmpExAction();
+protected:
+    virtual             ~MetaBmpExAction();
+public:
+    virtual void        Execute( OutputDevice* pOut ) SAL_OVERRIDE;
+    virtual MetaAction* Clone() SAL_OVERRIDE;
+    virtual void        Write( SvStream& rOStm, ImplMetaWriteData* pData ) SAL_OVERRIDE;
+    virtual void        Read( SvStream& rIStm, ImplMetaReadData* pData ) SAL_OVERRIDE;
 
                         MetaBmpExAction( const Point& rPt, const BitmapEx& rBmpEx );
 
@@ -672,7 +796,14 @@ private:
     virtual bool    Compare( const MetaAction& ) const SAL_OVERRIDE;
 
 public:
-                        DECL_META_ACTION( BmpExScale, META_BMPEXSCALE_ACTION )
+                        MetaBmpExScaleAction();
+protected:
+    virtual             ~MetaBmpExScaleAction();
+public:
+    virtual void        Execute( OutputDevice* pOut ) SAL_OVERRIDE;
+    virtual MetaAction* Clone() SAL_OVERRIDE;
+    virtual void        Write( SvStream& rOStm, ImplMetaWriteData* pData ) SAL_OVERRIDE;
+    virtual void        Read( SvStream& rIStm, ImplMetaReadData* pData ) SAL_OVERRIDE;
 
                         MetaBmpExScaleAction( const Point& rPt, const Size& rSz,
                                               const BitmapEx& rBmpEx ) ;
@@ -698,7 +829,14 @@ private:
     virtual bool    Compare( const MetaAction& ) const SAL_OVERRIDE;
 
 public:
-                        DECL_META_ACTION( BmpExScalePart, META_BMPEXSCALEPART_ACTION )
+                        MetaBmpExScalePartAction();
+protected:
+    virtual             ~MetaBmpExScalePartAction();
+public:
+    virtual void        Execute( OutputDevice* pOut ) SAL_OVERRIDE;
+    virtual MetaAction* Clone() SAL_OVERRIDE;
+    virtual void        Write( SvStream& rOStm, ImplMetaWriteData* pData ) SAL_OVERRIDE;
+    virtual void        Read( SvStream& rIStm, ImplMetaReadData* pData ) SAL_OVERRIDE;
 
                         MetaBmpExScalePartAction( const Point& rDstPt, const Size& rDstSz,
                                                   const Point& rSrcPt, const Size& rSrcSz,
@@ -725,7 +863,14 @@ private:
     virtual bool    Compare( const MetaAction& ) const SAL_OVERRIDE;
 
 public:
-                        DECL_META_ACTION( Mask, META_MASK_ACTION )
+                        MetaMaskAction();
+protected:
+    virtual             ~MetaMaskAction();
+public:
+    virtual void        Execute( OutputDevice* pOut ) SAL_OVERRIDE;
+    virtual MetaAction* Clone() SAL_OVERRIDE;
+    virtual void        Write( SvStream& rOStm, ImplMetaWriteData* pData ) SAL_OVERRIDE;
+    virtual void        Read( SvStream& rIStm, ImplMetaReadData* pData ) SAL_OVERRIDE;
 
                         MetaMaskAction( const Point& rPt,
                                         const Bitmap& rBmp,
@@ -751,7 +896,14 @@ private:
     virtual bool    Compare( const MetaAction& ) const SAL_OVERRIDE;
 
 public:
-                        DECL_META_ACTION( MaskScale, META_MASKSCALE_ACTION )
+                        MetaMaskScaleAction();
+protected:
+    virtual             ~MetaMaskScaleAction();
+public:
+    virtual void        Execute( OutputDevice* pOut ) SAL_OVERRIDE;
+    virtual MetaAction* Clone() SAL_OVERRIDE;
+    virtual void        Write( SvStream& rOStm, ImplMetaWriteData* pData ) SAL_OVERRIDE;
+    virtual void        Read( SvStream& rIStm, ImplMetaReadData* pData ) SAL_OVERRIDE;
 
                         MetaMaskScaleAction( const Point& rPt, const Size& rSz,
                                              const Bitmap& rBmp,
@@ -780,7 +932,14 @@ private:
     virtual bool    Compare( const MetaAction& ) const SAL_OVERRIDE;
 
 public:
-                        DECL_META_ACTION( MaskScalePart, META_MASKSCALEPART_ACTION )
+                        MetaMaskScalePartAction();
+protected:
+    virtual             ~MetaMaskScalePartAction();
+public:
+    virtual void        Execute( OutputDevice* pOut ) SAL_OVERRIDE;
+    virtual MetaAction* Clone() SAL_OVERRIDE;
+    virtual void        Write( SvStream& rOStm, ImplMetaWriteData* pData ) SAL_OVERRIDE;
+    virtual void        Read( SvStream& rIStm, ImplMetaReadData* pData ) SAL_OVERRIDE;
 
                         MetaMaskScalePartAction( const Point& rDstPt, const Size& rDstSz,
                                                  const Point& rSrcPt, const Size& rSrcSz,
@@ -808,7 +967,14 @@ private:
     virtual bool    Compare( const MetaAction& ) const SAL_OVERRIDE;
 
 public:
-                        DECL_META_ACTION( Gradient, META_GRADIENT_ACTION )
+                        MetaGradientAction();
+protected:
+    virtual             ~MetaGradientAction();
+public:
+    virtual void        Execute( OutputDevice* pOut ) SAL_OVERRIDE;
+    virtual MetaAction* Clone() SAL_OVERRIDE;
+    virtual void        Write( SvStream& rOStm, ImplMetaWriteData* pData ) SAL_OVERRIDE;
+    virtual void        Read( SvStream& rIStm, ImplMetaReadData* pData ) SAL_OVERRIDE;
 
                         MetaGradientAction( const Rectangle& rRect, const Gradient& rGradient );
 
@@ -829,7 +995,14 @@ private:
     virtual bool    Compare( const MetaAction& ) const SAL_OVERRIDE;
 
 public:
-                        DECL_META_ACTION( GradientEx, META_GRADIENTEX_ACTION )
+                        MetaGradientExAction();
+protected:
+    virtual             ~MetaGradientExAction();
+public:
+    virtual void        Execute( OutputDevice* pOut ) SAL_OVERRIDE;
+    virtual MetaAction* Clone() SAL_OVERRIDE;
+    virtual void        Write( SvStream& rOStm, ImplMetaWriteData* pData ) SAL_OVERRIDE;
+    virtual void        Read( SvStream& rIStm, ImplMetaReadData* pData ) SAL_OVERRIDE;
 
                         MetaGradientExAction( const PolyPolygon& rPolyPoly, const Gradient& rGradient );
 
@@ -850,7 +1023,14 @@ private:
     virtual bool    Compare( const MetaAction& ) const SAL_OVERRIDE;
 
 public:
-                        DECL_META_ACTION( Hatch, META_HATCH_ACTION )
+                        MetaHatchAction();
+protected:
+    virtual             ~MetaHatchAction();
+public:
+    virtual void        Execute( OutputDevice* pOut ) SAL_OVERRIDE;
+    virtual MetaAction* Clone() SAL_OVERRIDE;
+    virtual void        Write( SvStream& rOStm, ImplMetaWriteData* pData ) SAL_OVERRIDE;
+    virtual void        Read( SvStream& rIStm, ImplMetaReadData* pData ) SAL_OVERRIDE;
 
                         MetaHatchAction( const PolyPolygon& rPolyPoly, const Hatch& rHatch );
 
@@ -871,7 +1051,14 @@ private:
     virtual bool    Compare( const MetaAction& ) const SAL_OVERRIDE;
 
 public:
-                        DECL_META_ACTION( Wallpaper, META_WALLPAPER_ACTION )
+                        MetaWallpaperAction();
+protected:
+    virtual             ~MetaWallpaperAction();
+public:
+    virtual void        Execute( OutputDevice* pOut ) SAL_OVERRIDE;
+    virtual MetaAction* Clone() SAL_OVERRIDE;
+    virtual void        Write( SvStream& rOStm, ImplMetaWriteData* pData ) SAL_OVERRIDE;
+    virtual void        Read( SvStream& rIStm, ImplMetaReadData* pData ) SAL_OVERRIDE;
 
                         MetaWallpaperAction( const Rectangle& rRect,
                                              const Wallpaper& rPaper );
@@ -893,7 +1080,14 @@ private:
     virtual bool    Compare( const MetaAction& ) const SAL_OVERRIDE;
 
 public:
-                        DECL_META_ACTION( ClipRegion, META_CLIPREGION_ACTION )
+                        MetaClipRegionAction();
+protected:
+    virtual             ~MetaClipRegionAction();
+public:
+    virtual void        Execute( OutputDevice* pOut ) SAL_OVERRIDE;
+    virtual MetaAction* Clone() SAL_OVERRIDE;
+    virtual void        Write( SvStream& rOStm, ImplMetaWriteData* pData ) SAL_OVERRIDE;
+    virtual void        Read( SvStream& rIStm, ImplMetaReadData* pData ) SAL_OVERRIDE;
 
                         MetaClipRegionAction( const Region& rRegion, bool bClip );
 
@@ -913,7 +1107,14 @@ private:
     virtual bool    Compare( const MetaAction& ) const SAL_OVERRIDE;
 
 public:
-                        DECL_META_ACTION( ISectRectClipRegion, META_ISECTRECTCLIPREGION_ACTION )
+                        MetaISectRectClipRegionAction();
+protected:
+    virtual             ~MetaISectRectClipRegionAction();
+public:
+    virtual void        Execute( OutputDevice* pOut ) SAL_OVERRIDE;
+    virtual MetaAction* Clone() SAL_OVERRIDE;
+    virtual void        Write( SvStream& rOStm, ImplMetaWriteData* pData ) SAL_OVERRIDE;
+    virtual void        Read( SvStream& rIStm, ImplMetaReadData* pData ) SAL_OVERRIDE;
 
     explicit            MetaISectRectClipRegionAction( const Rectangle& );
 
@@ -932,7 +1133,14 @@ private:
     virtual bool    Compare( const MetaAction& ) const SAL_OVERRIDE;
 
 public:
-                        DECL_META_ACTION( ISectRegionClipRegion, META_ISECTREGIONCLIPREGION_ACTION )
+                        MetaISectRegionClipRegionAction();
+protected:
+    virtual             ~MetaISectRegionClipRegionAction();
+public:
+    virtual void        Execute( OutputDevice* pOut ) SAL_OVERRIDE;
+    virtual MetaAction* Clone() SAL_OVERRIDE;
+    virtual void        Write( SvStream& rOStm, ImplMetaWriteData* pData ) SAL_OVERRIDE;
+    virtual void        Read( SvStream& rIStm, ImplMetaReadData* pData ) SAL_OVERRIDE;
 
     explicit            MetaISectRegionClipRegionAction( const Region& );
 
@@ -952,7 +1160,14 @@ private:
     virtual bool    Compare( const MetaAction& ) const SAL_OVERRIDE;
 
 public:
-                        DECL_META_ACTION( MoveClipRegion, META_MOVECLIPREGION_ACTION )
+                        MetaMoveClipRegionAction();
+protected:
+    virtual             ~MetaMoveClipRegionAction();
+public:
+    virtual void        Execute( OutputDevice* pOut ) SAL_OVERRIDE;
+    virtual MetaAction* Clone() SAL_OVERRIDE;
+    virtual void        Write( SvStream& rOStm, ImplMetaWriteData* pData ) SAL_OVERRIDE;
+    virtual void        Read( SvStream& rIStm, ImplMetaReadData* pData ) SAL_OVERRIDE;
 
                         MetaMoveClipRegionAction( long nHorzMove, long nVertMove );
 
@@ -972,7 +1187,14 @@ private:
     virtual bool    Compare( const MetaAction& ) const SAL_OVERRIDE;
 
 public:
-                        DECL_META_ACTION( LineColor, META_LINECOLOR_ACTION )
+                        MetaLineColorAction();
+protected:
+    virtual             ~MetaLineColorAction();
+public:
+    virtual void        Execute( OutputDevice* pOut ) SAL_OVERRIDE;
+    virtual MetaAction* Clone() SAL_OVERRIDE;
+    virtual void        Write( SvStream& rOStm, ImplMetaWriteData* pData ) SAL_OVERRIDE;
+    virtual void        Read( SvStream& rIStm, ImplMetaReadData* pData ) SAL_OVERRIDE;
 
                         MetaLineColorAction( const Color& rColor, bool bSet );
 
@@ -990,7 +1212,14 @@ private:
     virtual bool    Compare( const MetaAction& ) const SAL_OVERRIDE;
 
 public:
-                        DECL_META_ACTION( FillColor, META_FILLCOLOR_ACTION )
+                        MetaFillColorAction();
+protected:
+    virtual             ~MetaFillColorAction();
+public:
+    virtual void        Execute( OutputDevice* pOut ) SAL_OVERRIDE;
+    virtual MetaAction* Clone() SAL_OVERRIDE;
+    virtual void        Write( SvStream& rOStm, ImplMetaWriteData* pData ) SAL_OVERRIDE;
+    virtual void        Read( SvStream& rIStm, ImplMetaReadData* pData ) SAL_OVERRIDE;
 
                         MetaFillColorAction( const Color& rColor, bool bSet );
 
@@ -1007,7 +1236,14 @@ private:
     virtual bool    Compare( const MetaAction& ) const SAL_OVERRIDE;
 
 public:
-                        DECL_META_ACTION( TextColor, META_TEXTCOLOR_ACTION )
+                        MetaTextColorAction();
+protected:
+    virtual             ~MetaTextColorAction();
+public:
+    virtual void        Execute( OutputDevice* pOut ) SAL_OVERRIDE;
+    virtual MetaAction* Clone() SAL_OVERRIDE;
+    virtual void        Write( SvStream& rOStm, ImplMetaWriteData* pData ) SAL_OVERRIDE;
+    virtual void        Read( SvStream& rIStm, ImplMetaReadData* pData ) SAL_OVERRIDE;
 
     explicit            MetaTextColorAction( const Color& );
 
@@ -1024,7 +1260,14 @@ private:
     virtual bool    Compare( const MetaAction& ) const SAL_OVERRIDE;
 
 public:
-                        DECL_META_ACTION( TextFillColor, META_TEXTFILLCOLOR_ACTION )
+                        MetaTextFillColorAction();
+protected:
+    virtual             ~MetaTextFillColorAction();
+public:
+    virtual void        Execute( OutputDevice* pOut ) SAL_OVERRIDE;
+    virtual MetaAction* Clone() SAL_OVERRIDE;
+    virtual void        Write( SvStream& rOStm, ImplMetaWriteData* pData ) SAL_OVERRIDE;
+    virtual void        Read( SvStream& rIStm, ImplMetaReadData* pData ) SAL_OVERRIDE;
 
                         MetaTextFillColorAction( const Color& rColor, bool bSet );
 
@@ -1042,7 +1285,14 @@ private:
     virtual bool    Compare( const MetaAction& ) const SAL_OVERRIDE;
 
 public:
-                        DECL_META_ACTION( TextLineColor, META_TEXTLINECOLOR_ACTION )
+                        MetaTextLineColorAction();
+protected:
+    virtual             ~MetaTextLineColorAction();
+public:
+    virtual void        Execute( OutputDevice* pOut ) SAL_OVERRIDE;
+    virtual MetaAction* Clone() SAL_OVERRIDE;
+    virtual void        Write( SvStream& rOStm, ImplMetaWriteData* pData ) SAL_OVERRIDE;
+    virtual void        Read( SvStream& rIStm, ImplMetaReadData* pData ) SAL_OVERRIDE;
 
                         MetaTextLineColorAction( const Color& rColor, bool bSet );
 
@@ -1060,7 +1310,14 @@ private:
     virtual bool    Compare( const MetaAction& ) const SAL_OVERRIDE;
 
 public:
-                        DECL_META_ACTION( OverlineColor, META_OVERLINECOLOR_ACTION )
+                        MetaOverlineColorAction();
+protected:
+    virtual             ~MetaOverlineColorAction();
+public:
+    virtual void        Execute( OutputDevice* pOut ) SAL_OVERRIDE;
+    virtual MetaAction* Clone() SAL_OVERRIDE;
+    virtual void        Write( SvStream& rOStm, ImplMetaWriteData* pData ) SAL_OVERRIDE;
+    virtual void        Read( SvStream& rIStm, ImplMetaReadData* pData ) SAL_OVERRIDE;
 
                         MetaOverlineColorAction( const Color& rColor, bool bSet );
 
@@ -1077,7 +1334,14 @@ private:
     virtual bool    Compare( const MetaAction& ) const SAL_OVERRIDE;
 
 public:
-                        DECL_META_ACTION( TextAlign, META_TEXTALIGN_ACTION )
+                        MetaTextAlignAction();
+protected:
+    virtual             ~MetaTextAlignAction();
+public:
+    virtual void        Execute( OutputDevice* pOut ) SAL_OVERRIDE;
+    virtual MetaAction* Clone() SAL_OVERRIDE;
+    virtual void        Write( SvStream& rOStm, ImplMetaWriteData* pData ) SAL_OVERRIDE;
+    virtual void        Read( SvStream& rIStm, ImplMetaReadData* pData ) SAL_OVERRIDE;
 
     explicit            MetaTextAlignAction( TextAlign eAlign );
 
@@ -1093,7 +1357,14 @@ private:
     virtual bool    Compare( const MetaAction& ) const SAL_OVERRIDE;
 
 public:
-                        DECL_META_ACTION( MapMode, META_MAPMODE_ACTION )
+                        MetaMapModeAction();
+protected:
+    virtual             ~MetaMapModeAction();
+public:
+    virtual void        Execute( OutputDevice* pOut ) SAL_OVERRIDE;
+    virtual MetaAction* Clone() SAL_OVERRIDE;
+    virtual void        Write( SvStream& rOStm, ImplMetaWriteData* pData ) SAL_OVERRIDE;
+    virtual void        Read( SvStream& rIStm, ImplMetaReadData* pData ) SAL_OVERRIDE;
 
     explicit            MetaMapModeAction( const MapMode& );
 
@@ -1111,7 +1382,14 @@ private:
     virtual bool    Compare( const MetaAction& ) const SAL_OVERRIDE;
 
 public:
-                        DECL_META_ACTION( Font, META_FONT_ACTION )
+                        MetaFontAction();
+protected:
+    virtual             ~MetaFontAction();
+public:
+    virtual void        Execute( OutputDevice* pOut ) SAL_OVERRIDE;
+    virtual MetaAction* Clone() SAL_OVERRIDE;
+    virtual void        Write( SvStream& rOStm, ImplMetaWriteData* pData ) SAL_OVERRIDE;

... etc. - the rest is truncated


More information about the Libreoffice-commits mailing list