Add LayoutMode cppunit test to vcl.

The test sets two LayoutModes (using ComplexTextLayoutFlags)
and checks their attributes.

Change-Id: Id765c150485c6f06c1326498a7f1b40b8f9c12fa
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/117575
Tested-by: Jenkins
Reviewed-by: Tomaž Vajngerl <quikee@gmail.com>
diff --git a/vcl/qa/cppunit/svm/data/layoutmode.svm b/vcl/qa/cppunit/svm/data/layoutmode.svm
new file mode 100644
index 0000000..d12f09d
--- /dev/null
+++ b/vcl/qa/cppunit/svm/data/layoutmode.svm
Binary files differ
diff --git a/vcl/qa/cppunit/svm/svmtest.cxx b/vcl/qa/cppunit/svm/svmtest.cxx
index a8244ff..a95c249 100644
--- a/vcl/qa/cppunit/svm/svmtest.cxx
+++ b/vcl/qa/cppunit/svm/svmtest.cxx
@@ -190,7 +190,7 @@ class SvmTest : public test::BootstrapFixture, public XmlTestTools
    void checkComment(const GDIMetaFile& rMetaFile);
    void testComment();

    //void checkLayoutMode(const GDIMetaFile& rMetaFile);
    void checkLayoutMode(const GDIMetaFile& rMetaFile);
    void testLayoutMode();

    void checkTextLanguage(const GDIMetaFile& rMetaFile);
@@ -2108,8 +2108,31 @@ void SvmTest::testComment()
    checkComment(readFile(u"comment.svm"));
}

void SvmTest::checkLayoutMode(const GDIMetaFile& rMetaFile)
{
    xmlDocUniquePtr pDoc = dumpMeta(rMetaFile);

    assertXPathAttrs(pDoc, "/metafile/layoutmode[1]", {
        {"textlayout", "#0004"}
    });

    assertXPathAttrs(pDoc, "/metafile/layoutmode[2]", {
        {"textlayout", "#0001"}
    });
}

void SvmTest::testLayoutMode()
{}
{
    GDIMetaFile aGDIMetaFile;
    ScopedVclPtrInstance<VirtualDevice> pVirtualDev;
    setupBaseVirtualDevice(*pVirtualDev, aGDIMetaFile);

    pVirtualDev->SetLayoutMode(ComplexTextLayoutFlags::TextOriginLeft);
    pVirtualDev->SetLayoutMode(ComplexTextLayoutFlags::BiDiRtl);

    checkLayoutMode(writeAndReadStream(aGDIMetaFile));
    checkLayoutMode(readFile(u"layoutmode.svm"));
}

void SvmTest::checkTextLanguage(const GDIMetaFile& rMetaFile)
{
diff --git a/vcl/source/gdi/mtfxmldump.cxx b/vcl/source/gdi/mtfxmldump.cxx
index 901edde..0b9ba2c2 100644
--- a/vcl/source/gdi/mtfxmldump.cxx
+++ b/vcl/source/gdi/mtfxmldump.cxx
@@ -439,6 +439,19 @@ OUString convertPixelFormatToString(vcl::PixelFormat ePixelFormat)
    return OUString();
}

OUString convertComplexTestLayoutFlags(ComplexTextLayoutFlags eComplexTestLayoutFlags)
{
    switch(eComplexTestLayoutFlags)
    {
        default:
        case ComplexTextLayoutFlags::Default: return "#0000";
        case ComplexTextLayoutFlags::BiDiRtl: return "#0001";
        case ComplexTextLayoutFlags::BiDiStrong: return "#0002";
        case ComplexTextLayoutFlags::TextOriginLeft: return "#0004";
        case ComplexTextLayoutFlags::TextOriginRight: return "#0008";
    }
}

OUString hex32(sal_uInt32 nNumber)
{
    std::stringstream ss;
@@ -1351,7 +1364,18 @@ void MetafileXmlDump::writeXml(const GDIMetaFile& rMetaFile, tools::XmlWriter& r
            }
            break;

            //case MetaActionType::LAYOUTMODE:
            case MetaActionType::LAYOUTMODE:
            {
                const MetaLayoutModeAction* pMetaLayoutModeAction = static_cast<MetaLayoutModeAction*>(pAction);

                rWriter.startElement(sCurrentElementTag);

                rWriter.attribute("textlayout", convertComplexTestLayoutFlags(pMetaLayoutModeAction->GetLayoutMode()));

                rWriter.endElement();
            }
            break;

            case MetaActionType::TEXTLANGUAGE:
            {
                const MetaTextLanguageAction* pMetaTextLanguageAction = static_cast<MetaTextLanguageAction*>(pAction);