diff options
-rw-r--r-- | chart2/qa/extras/chart2import.cxx | 36 | ||||
-rw-r--r-- | chart2/qa/extras/data/docx/testAxisTitlePosition.docx | bin | 0 -> 26274 bytes | |||
-rw-r--r-- | oox/inc/drawingml/chart/converterbase.hxx | 2 | ||||
-rw-r--r-- | oox/source/drawingml/chart/converterbase.cxx | 15 |
4 files changed, 47 insertions, 6 deletions
diff --git a/chart2/qa/extras/chart2import.cxx b/chart2/qa/extras/chart2import.cxx index c0850820acc3..34477f69d6ac 100644 --- a/chart2/qa/extras/chart2import.cxx +++ b/chart2/qa/extras/chart2import.cxx @@ -21,6 +21,7 @@ #include <com/sun/star/drawing/FillStyle.hpp> #include <com/sun/star/drawing/LineStyle.hpp> #include <com/sun/star/chart/XAxisXSupplier.hpp> +#include <com/sun/star/chart/XAxisYSupplier.hpp> #include <com/sun/star/chart/MissingValueTreatment.hpp> #include <com/sun/star/chart2/TickmarkStyle.hpp> #include <com/sun/star/chart2/SymbolStyle.hpp> @@ -108,6 +109,7 @@ public: void testAxisTitleDefaultRotationXLSX(); void testSecondaryAxisTitleDefaultRotationXLSX(); void testAxisTitleRotationXLSX(); + void testAxisTitlePositionDOCX(); void testCombinedChartAttachedAxisXLSX(); void testTdf90510(); // Pie chart label placement settings(XLS) @@ -200,6 +202,7 @@ public: CPPUNIT_TEST(testAxisTitleDefaultRotationXLSX); CPPUNIT_TEST(testSecondaryAxisTitleDefaultRotationXLSX); CPPUNIT_TEST(testAxisTitleRotationXLSX); + CPPUNIT_TEST(testAxisTitlePositionDOCX); CPPUNIT_TEST(testCombinedChartAttachedAxisXLSX); CPPUNIT_TEST(testTdf90510); CPPUNIT_TEST(testTdf109858); @@ -1505,6 +1508,39 @@ void Chart2ImportTest::testAxisTitleRotationXLSX() } +void Chart2ImportTest::testAxisTitlePositionDOCX() +{ + load("/chart2/qa/extras/data/docx/", "testAxisTitlePosition.docx"); + uno::Reference< chart::XDiagram > mxDiagram; + uno::Reference< drawing::XShape > xAxisTitle; + uno::Reference< chart::XChartDocument > xChartDoc = getChartDocFromWriter(0); + CPPUNIT_ASSERT_MESSAGE("failed to load chart", xChartDoc.is()); + mxDiagram.set(xChartDoc->getDiagram()); + CPPUNIT_ASSERT(mxDiagram.is()); + // test X Axis title position + uno::Reference< chart::XAxisXSupplier > xAxisXSupp(mxDiagram, uno::UNO_QUERY); + CPPUNIT_ASSERT(xAxisXSupp.is()); + + xAxisTitle = xAxisXSupp->getXAxisTitle(); + CPPUNIT_ASSERT(xAxisTitle.is()); + + awt::Point aPos = xAxisTitle->getPosition(); + CPPUNIT_ASSERT_EQUAL(sal_Int32(10640), static_cast<sal_Int32>(aPos.X)); + CPPUNIT_ASSERT_EQUAL(sal_Int32(7157), static_cast<sal_Int32>(aPos.Y)); + + // test Y Axis title position + uno::Reference< chart::XAxisYSupplier > xAxisYSupp(mxDiagram, uno::UNO_QUERY); + CPPUNIT_ASSERT(xAxisYSupp.is()); + + xAxisTitle = xAxisYSupp->getYAxisTitle(); + CPPUNIT_ASSERT(xAxisTitle.is()); + + aPos = xAxisTitle->getPosition(); + CPPUNIT_ASSERT_EQUAL(sal_Int32(387), static_cast<sal_Int32>(aPos.X)); + // y coordinate is still wrong because of another older bug! + /*CPPUNIT_ASSERT_EQUAL(sal_Int32(1535), static_cast<sal_Int32>(aPos.Y));*/ +} + void Chart2ImportTest::testCombinedChartAttachedAxisXLSX() { load("/chart2/qa/extras/data/xlsx/", "testCombinedChartAxis.xlsx"); diff --git a/chart2/qa/extras/data/docx/testAxisTitlePosition.docx b/chart2/qa/extras/data/docx/testAxisTitlePosition.docx Binary files differnew file mode 100644 index 000000000000..6abd37eec5a0 --- /dev/null +++ b/chart2/qa/extras/data/docx/testAxisTitlePosition.docx diff --git a/oox/inc/drawingml/chart/converterbase.hxx b/oox/inc/drawingml/chart/converterbase.hxx index 32e3e95d550e..6af038bb262f 100644 --- a/oox/inc/drawingml/chart/converterbase.hxx +++ b/oox/inc/drawingml/chart/converterbase.hxx @@ -85,6 +85,8 @@ protected: getChartDocument() const; /** Returns the position and size of the chart shape in 1/100 mm. */ const css::awt::Size& getChartSize() const; + /** Returns the default position and size of the chart shape in 1/100 mm. */ + static css::awt::Size getDefaultPageSize() { return css::awt::Size(16000, 9000); } /** Returns the object formatter. */ ObjectFormatter& getFormatter() const; diff --git a/oox/source/drawingml/chart/converterbase.cxx b/oox/source/drawingml/chart/converterbase.cxx index 7f12741c568e..8acf77c619df 100644 --- a/oox/source/drawingml/chart/converterbase.cxx +++ b/oox/source/drawingml/chart/converterbase.cxx @@ -350,11 +350,10 @@ bool LayoutConverter::calcAbsRectangle( awt::Rectangle& orRect ) const { if( !mrModel.mbAutoLayout ) { - awt::Size aChartSize=getChartSize(); + awt::Size aChartSize = getChartSize(); if( aChartSize.Width <= 0 || aChartSize.Height <= 0 ) { - aChartSize.Width = 16000; - aChartSize.Height = 9000; + aChartSize = getDefaultPageSize(); } orRect.X = lclCalcPosition( aChartSize.Width, mrModel.mfX, mrModel.mnXMode ); orRect.Y = lclCalcPosition( aChartSize.Height, mrModel.mfY, mrModel.mnYMode ); @@ -396,10 +395,14 @@ void LayoutConverter::convertFromModel( const Reference< XShape >& rxShape, doub { if( !mrModel.mbAutoLayout ) { - const awt::Size& rChartSize = getChartSize(); + awt::Size aChartSize = getChartSize(); + if( aChartSize.Width <= 0 || aChartSize.Height <= 0 ) + { + aChartSize = getDefaultPageSize(); + } awt::Point aShapePos( - lclCalcPosition( rChartSize.Width, mrModel.mfX, mrModel.mnXMode ), - lclCalcPosition( rChartSize.Height, mrModel.mfY, mrModel.mnYMode ) ); + lclCalcPosition( aChartSize.Width, mrModel.mfX, mrModel.mnXMode ), + lclCalcPosition( aChartSize.Height, mrModel.mfY, mrModel.mnYMode ) ); if( (aShapePos.X >= 0) && (aShapePos.Y >= 0) ) { // the call to XShape.getSize() may recalc the chart view |