summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--chart2/qa/extras/chart2import.cxx19
-rw-r--r--chart2/qa/extras/charttest.hxx27
-rw-r--r--chart2/qa/extras/data/docx/testTdf114179.docxbin0 -> 5839 bytes
-rw-r--r--oox/source/drawingml/chart/converterbase.cxx8
4 files changed, 53 insertions, 1 deletions
diff --git a/chart2/qa/extras/chart2import.cxx b/chart2/qa/extras/chart2import.cxx
index e478dbb66803..f9d5343c0317 100644
--- a/chart2/qa/extras/chart2import.cxx
+++ b/chart2/qa/extras/chart2import.cxx
@@ -111,8 +111,11 @@ public:
void testTdf115107_2(); // import complex data point labels in cobo charts with multiple data series
void testTdf116163();
+
void testTdf121205();
+ void testTdf114179();
+
CPPUNIT_TEST_SUITE(Chart2ImportTest);
CPPUNIT_TEST(Fdo60083);
CPPUNIT_TEST(testSteppedLines);
@@ -177,8 +180,11 @@ public:
CPPUNIT_TEST(testTdf115107_2);
CPPUNIT_TEST(testTdf116163);
+
CPPUNIT_TEST(testTdf121205);
+ CPPUNIT_TEST(testTdf114179);
+
CPPUNIT_TEST_SUITE_END();
private:
@@ -1598,6 +1604,19 @@ void Chart2ImportTest::testTdf121205()
CPPUNIT_ASSERT_EQUAL(OUString("Firstline\nSecondline\nThirdline"), aTitle);
}
+void Chart2ImportTest::testTdf114179()
+{
+ load( "/chart2/qa/extras/data/docx/", "testTdf114179.docx" );
+ uno::Reference< chart2::XChartDocument > xChartDoc ( getChartDocFromWriter(0), uno::UNO_QUERY);
+ CPPUNIT_ASSERT( xChartDoc.is() );
+ css::uno::Reference<chart2::XDiagram> xDiagram;
+ xDiagram.set( xChartDoc->getFirstDiagram() );
+ CPPUNIT_ASSERT_MESSAGE( "There is a Diagram." , xDiagram.is() );
+ awt::Size aPage = getPageSize( xChartDoc );
+ awt::Size aSize = getSize( xDiagram,aPage );
+ CPPUNIT_ASSERT( aSize.Width > 0);
+ CPPUNIT_ASSERT( aSize.Height > 0);
+}
CPPUNIT_TEST_SUITE_REGISTRATION(Chart2ImportTest);
diff --git a/chart2/qa/extras/charttest.hxx b/chart2/qa/extras/charttest.hxx
index 202475e7e4ca..84cea90845c3 100644
--- a/chart2/qa/extras/charttest.hxx
+++ b/chart2/qa/extras/charttest.hxx
@@ -65,6 +65,9 @@
#include <libxml/xmlwriter.h>
#include <libxml/xpath.h>
+#include <com/sun/star/embed/Aspects.hpp>
+#include <com/sun/star/embed/XVisualObject.hpp>
+#include <com/sun/star/chart2/RelativeSize.hpp>
using namespace css;
using namespace css::uno;
@@ -84,6 +87,8 @@ public:
uno::Reference<chart::XChartDocument> getChartDocFromDrawImpress( sal_Int32 nPage, sal_Int32 nShape );
uno::Reference<chart::XChartDocument> getChartDocFromWriter( sal_Int32 nShape );
+ awt::Size getPageSize( const Reference< chart2::XChartDocument > & xChartDoc );
+ awt::Size getSize(css::uno::Reference<chart2::XDiagram> xDiagram, const awt::Size& rPageSize);
virtual void setUp() override;
virtual void tearDown() override;
@@ -590,6 +595,28 @@ sal_Int16 getNumberFormatType( const Reference<chart2::XChartDocument>& xChartDo
return nType;
}
+awt::Size ChartTest::getPageSize( const Reference< chart2::XChartDocument > & xChartDoc )
+{
+ awt::Size aSize( 0, 0 );
+ uno::Reference< com::sun::star::embed::XVisualObject > xVisualObject( xChartDoc, uno::UNO_QUERY );
+ CPPUNIT_ASSERT( xVisualObject.is() );
+ aSize = xVisualObject->getVisualAreaSize( com::sun::star::embed::Aspects::MSOLE_CONTENT );
+return aSize;
+}
+
+awt::Size ChartTest::getSize(css::uno::Reference<chart2::XDiagram> xDiagram, const awt::Size& rPageSize)
+{
+ Reference< beans::XPropertySet > xProp(xDiagram, uno::UNO_QUERY);
+ chart2::RelativeSize aRelativeSize;
+ xProp->getPropertyValue( "RelativeSize" ) >>= aRelativeSize;
+ double fX = aRelativeSize.Primary * rPageSize.Width;
+ double fY = aRelativeSize.Secondary * rPageSize.Height;
+ awt::Size aSize;
+ aSize.Width = static_cast< sal_Int32 >( ::rtl::math::round( fX ) );
+ aSize.Height = static_cast< sal_Int32 >( ::rtl::math::round( fY ) );
+ return aSize;
+}
+
#endif // INCLUDED_CHART2_QA_EXTRAS_CHARTTEST_HXX
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/chart2/qa/extras/data/docx/testTdf114179.docx b/chart2/qa/extras/data/docx/testTdf114179.docx
new file mode 100644
index 000000000000..36fb11e170f7
--- /dev/null
+++ b/chart2/qa/extras/data/docx/testTdf114179.docx
Binary files differ
diff --git a/oox/source/drawingml/chart/converterbase.cxx b/oox/source/drawingml/chart/converterbase.cxx
index 678c3a4ba630..7faeb36576d1 100644
--- a/oox/source/drawingml/chart/converterbase.cxx
+++ b/oox/source/drawingml/chart/converterbase.cxx
@@ -39,6 +39,7 @@
#include <oox/token/tokens.hxx>
#include <comphelper/processfactory.hxx>
+
namespace oox {
namespace drawingml {
namespace chart {
@@ -349,7 +350,12 @@ bool LayoutConverter::calcAbsRectangle( awt::Rectangle& orRect ) const
{
if( !mrModel.mbAutoLayout )
{
- const awt::Size& rChartSize = getChartSize();
+ awt::Size rChartSize=getChartSize();
+ if( (rChartSize.Width < 0) || (rChartSize.Height < 0) )
+ {
+ rChartSize.Width = 16000;
+ rChartSize.Height = 9000;
+ }
orRect.X = lclCalcPosition( rChartSize.Width, mrModel.mfX, mrModel.mnXMode );
orRect.Y = lclCalcPosition( rChartSize.Height, mrModel.mfY, mrModel.mnYMode );
if( (orRect.X >= 0) && (orRect.Y >= 0) )