summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--chart2/qa/extras/chart2import.cxx36
-rw-r--r--chart2/qa/extras/data/docx/testAxisTitlePosition.docxbin0 -> 26274 bytes
-rw-r--r--oox/inc/drawingml/chart/converterbase.hxx2
-rw-r--r--oox/source/drawingml/chart/converterbase.cxx15
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
new file mode 100644
index 000000000000..6abd37eec5a0
--- /dev/null
+++ b/chart2/qa/extras/data/docx/testAxisTitlePosition.docx
Binary files differ
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