tdf#122800 Chart view: Textbreak of X axis labels

Do not break the word into individual letters below
each other in the X axis labels. Keep the default
45 degree (even if the textbreak is true) rotation
if there is no enough space for a single word between
two tickmark.

Change-Id: I6f11e55b7ee8373210c1c417e64d552a6cd89812
Reviewed-on: https://gerrit.libreoffice.org/66580
Tested-by: Jenkins
Reviewed-by: László Németh <nemeth@numbertext.org>
diff --git a/chart2/source/view/axes/VCartesianAxis.cxx b/chart2/source/view/axes/VCartesianAxis.cxx
index ed31fab..42b767a 100644
--- a/chart2/source/view/axes/VCartesianAxis.cxx
+++ b/chart2/source/view/axes/VCartesianAxis.cxx
@@ -835,14 +835,17 @@

        recordMaximumTextSize( pTickInfo->xTextShape, rAxisLabelProperties.fRotationAngleDegree );

        // Label has multiple lines and the words are broken
        if( nLimitedSpaceForText>0 && !rAxisLabelProperties.bOverlapAllowed
                && rAxisLabelProperties.fRotationAngleDegree == 0.0
                && m_aAxisProperties.m_bComplexCategories
                && lcl_hasWordBreak( pTickInfo->xTextShape ) )
        {
            // Label has multiple lines and belongs to a complex category
            // axis. Rotate 90 degrees to try to avoid overlaps.
            rAxisLabelProperties.fRotationAngleDegree = 90;
            if ( m_aAxisProperties.m_bComplexCategories )
            {
                rAxisLabelProperties.fRotationAngleDegree = 90;
            }
            rAxisLabelProperties.bLineBreakAllowed = false;
            m_aAxisLabelProperties.fRotationAngleDegree = rAxisLabelProperties.fRotationAngleDegree;
            removeTextShapesFromTicks();
diff --git a/sw/qa/extras/layout/data/tdf122800.odt b/sw/qa/extras/layout/data/tdf122800.odt
new file mode 100755
index 0000000..ff1e35c
--- /dev/null
+++ b/sw/qa/extras/layout/data/tdf122800.odt
Binary files differ
diff --git a/sw/qa/extras/layout/layout.cxx b/sw/qa/extras/layout/layout.cxx
index 7ed2477..79b55c8 100644
--- a/sw/qa/extras/layout/layout.cxx
+++ b/sw/qa/extras/layout/layout.cxx
@@ -41,6 +41,7 @@
    void testTdf116830();
    void testTdf114163();
    void testTdf108021();
    void testTdf122800();
    void testTdf116925();
    void testTdf117028();
    void testTdf106390();
@@ -79,6 +80,7 @@
    CPPUNIT_TEST(testTdf116830);
    CPPUNIT_TEST(testTdf114163);
    CPPUNIT_TEST(testTdf108021);
    CPPUNIT_TEST(testTdf122800);
    CPPUNIT_TEST(testTdf116925);
    CPPUNIT_TEST(testTdf117028);
    CPPUNIT_TEST(testTdf106390);
@@ -2394,6 +2396,24 @@
    // This failed, if the textarray length of the first axis label not 17.
}

void SwLayoutWriter::testTdf122800()
{
    SwDoc* pDoc = createDoc("tdf122800.odt");
    SwDocShell* pShell = pDoc->GetDocShell();

    // Dump the rendering of the first page as an XML file.
    std::shared_ptr<GDIMetaFile> xMetaFile = pShell->GetPreviewMetaFile();
    MetafileXmlDump dumper;
    xmlDocPtr pXmlDoc = dumpAndParse(dumper, *xMetaFile);
    CPPUNIT_ASSERT(pXmlDoc);

    assertXPath(
        pXmlDoc,
        "/metafile/push[1]/push[1]/push[1]/push[3]/push[1]/push[1]/push[1]/textarray[@length='22']",
        9);
    // This failed, if the textarray length of the first axis label not 22.
}

void SwLayoutWriter::testTdf116925()
{
    SwDoc* pDoc = createDoc("tdf116925.docx");