[Libreoffice-commits] core.git: chart2/source sw/qa

Tünde Tóth (via logerrit) logerrit at kemper.freedesktop.org
Tue Feb 4 10:23:19 UTC 2020


 chart2/source/tools/ChartTypeHelper.cxx |   20 ++++++++++++++++++--
 sw/qa/extras/layout/data/tdf130242.odt  |binary
 sw/qa/extras/layout/layout.cxx          |   32 ++++++++++++++++++++++++++++++++
 3 files changed, 50 insertions(+), 2 deletions(-)

New commits:
commit be936c5896045794b251a63ab1175ac06a36eee5
Author:     Tünde Tóth <tundeth at gmail.com>
AuthorDate: Thu Jan 30 14:22:51 2020 +0100
Commit:     László Németh <nemeth at numbertext.org>
CommitDate: Tue Feb 4 11:22:30 2020 +0100

    tdf#130242 chart: default center label placement in stacked area charts
    
    instead of top label placement, like MSO does (or LO has already done
    in stacked bar charts) for readability.
    
    Change-Id: Icac6e8703d0d04122f9cc28254b053ee9fd434ec
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/87846
    Reviewed-by: László Németh <nemeth at numbertext.org>
    Tested-by: László Németh <nemeth at numbertext.org>

diff --git a/chart2/source/tools/ChartTypeHelper.cxx b/chart2/source/tools/ChartTypeHelper.cxx
index b7b3e889e1a1..b54e410bcb73 100644
--- a/chart2/source/tools/ChartTypeHelper.cxx
+++ b/chart2/source/tools/ChartTypeHelper.cxx
@@ -314,10 +314,26 @@ uno::Sequence < sal_Int32 > ChartTypeHelper::getSupportedLabelPlacements( const
     }
     else if( aChartTypeName.match(CHART2_SERVICE_NAME_CHARTTYPE_AREA) )
     {
+        bool bStacked = false;
+        {
+            uno::Reference<beans::XPropertySet> xSeriesProp(xSeries, uno::UNO_QUERY);
+            chart2::StackingDirection eStacking = chart2::StackingDirection_NO_STACKING;
+            xSeriesProp->getPropertyValue("StackingDirection") >>= eStacking;
+            bStacked = (eStacking == chart2::StackingDirection_Y_STACKING);
+        }
+
         aRet.realloc(2);
         sal_Int32* pSeq = aRet.getArray();
-        *pSeq++ = css::chart::DataLabelPlacement::TOP;
-        *pSeq++ = css::chart::DataLabelPlacement::CENTER;
+        if (bStacked)
+        {
+            *pSeq++ = css::chart::DataLabelPlacement::CENTER;
+            *pSeq++ = css::chart::DataLabelPlacement::TOP;
+        }
+        else
+        {
+            *pSeq++ = css::chart::DataLabelPlacement::TOP;
+            *pSeq++ = css::chart::DataLabelPlacement::CENTER;
+        }
     }
     else if( aChartTypeName.match(CHART2_SERVICE_NAME_CHARTTYPE_NET) )
     {
diff --git a/sw/qa/extras/layout/data/tdf130242.odt b/sw/qa/extras/layout/data/tdf130242.odt
new file mode 100644
index 000000000000..3e97bd3e5fe1
Binary files /dev/null and b/sw/qa/extras/layout/data/tdf130242.odt differ
diff --git a/sw/qa/extras/layout/layout.cxx b/sw/qa/extras/layout/layout.cxx
index b6bdd958cbed..c1c43399c9f4 100644
--- a/sw/qa/extras/layout/layout.cxx
+++ b/sw/qa/extras/layout/layout.cxx
@@ -2515,9 +2515,41 @@ CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testTdf130031)
     xmlDocPtr pXmlDoc = dumpAndParse(dumper, *xMetaFile);
     CPPUNIT_ASSERT(pXmlDoc);
     sal_Int32 nY = getXPath(pXmlDoc, "//textarray[11]", "y").toInt32();
+    // Without the accompanying fix in place, this test would have failed with:
+    // - Expected: 4339
+    // - Actual  : 2182
+    // - Delta   : 50
+    // i.e. the data label appeared above the data point.
     CPPUNIT_ASSERT_DOUBLES_EQUAL(4339, nY, 50);
 }
 
+CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testTdf130242)
+{
+    SwDoc* pDoc = createDoc("tdf130242.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);
+    sal_Int32 nY = getXPath(pXmlDoc, "//textarray[11]", "y").toInt32();
+    // Without the accompanying fix in place, this test would have failed with:
+    // - Expected: 4958
+    // - Actual  : 3352
+    // - Delta   : 50
+    // i.e. the data label appeared above the data point.
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(4958, nY, 50);
+
+    nY = getXPath(pXmlDoc, "//textarray[13]", "y").toInt32();
+    // Without the accompanying fix in place, this test would have failed with:
+    // - Expected: 3018
+    // - Actual  : 2343
+    // - Delta   : 50
+    // i.e. the data label appeared above the data point.
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(3018, nY, 50);
+}
+
 CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testTdf116925)
 {
     SwDoc* pDoc = createDoc("tdf116925.docx");


More information about the Libreoffice-commits mailing list