Kaydet (Commit) aa204f1c authored tarafından Tamás Zolnai's avatar Tamás Zolnai

tdf#106217: Wrong size and position of a shape inside chart

Same code which was added to the method
DrawingFragment::onEndElement() in
d178d7be

A shape's size and position inside a chart object
are primarily defined by <cdr:from> and <cdr:to> tags in
drawing.xml, but in the same file we also have
an <a:xfrm> tag which is used for the same thing
(defining size and postion) in general. Testing with
MSO it seems it ignores what values are set to <a:xfrm> and
uses only the <cdr:from> and <cdr:to> values.
The test document showing this problem must be created
an earlier version of MSO, becuase <a:xfrm> is set to some
random values. Editing the chart and saving it with MSO
2013 the <a:xfrm> values are set consistently with
<cdr:from> and <cdr:to> pair.

Change-Id: Icbaff78e5a6fcea36678c3b3755c97f57976b626
Reviewed-on: https://gerrit.libreoffice.org/35069Tested-by: 's avatarJenkins <ci@libreoffice.org>
Reviewed-by: 's avatarTamás Zolnai <tamas.zolnai@collabora.com>
üst 588a8579
......@@ -22,6 +22,7 @@
#include <com/sun/star/chart/XTwoAxisXSupplier.hpp>
#include <com/sun/star/chart/MissingValueTreatment.hpp>
#include <com/sun/star/chart2/TickmarkStyle.hpp>
#include <com/sun/star/container/XNamed.hpp>
#include <com/sun/star/util/Color.hpp>
......@@ -60,6 +61,7 @@ public:
void testFdo54361();
void testFdo54361_1();
void testTdf86624(); // manually placed legends
void testTdf106217();
void testAutoBackgroundXLSX();
void testChartAreaStyleBackgroundXLSX();
void testAxisTextRotationXLSX();
......@@ -120,6 +122,7 @@ public:
CPPUNIT_TEST(testFdo54361);
CPPUNIT_TEST(testFdo54361_1);
CPPUNIT_TEST(testTdf86624);
CPPUNIT_TEST(testTdf106217);
CPPUNIT_TEST(testAutoBackgroundXLSX);
CPPUNIT_TEST(testChartAreaStyleBackgroundXLSX);
CPPUNIT_TEST(testAxisTextRotationXLSX);
......@@ -713,6 +716,28 @@ void Chart2ImportTest::testTdf86624()
CPPUNIT_ASSERT(aPos.Y > 4000); // real value for ms is above 7000
}
void Chart2ImportTest::testTdf106217()
{
load("/chart2/qa/extras/data/pptx/", "tdf106217.pptx");
uno::Reference< chart::XChartDocument > xChartDoc = getChartDocFromDrawImpress(0, 0);
CPPUNIT_ASSERT(xChartDoc.is());
uno::Reference<drawing::XDrawPageSupplier> xDrawPageSupplier(xChartDoc, uno::UNO_QUERY);
uno::Reference<drawing::XDrawPage> xDrawPage = xDrawPageSupplier->getDrawPage();
uno::Reference<drawing::XShape> xCircle(xDrawPage->getByIndex(1), uno::UNO_QUERY);
CPPUNIT_ASSERT(xCircle.is());
uno::Reference<container::XNamed> xNamedShape(xCircle, uno::UNO_QUERY);
CPPUNIT_ASSERT_EQUAL(xNamedShape->getName(), OUString("Oval 1"));
awt::Point aPosition = xCircle->getPosition();
CPPUNIT_ASSERT_EQUAL(aPosition.X, sal_Int32(6870));
CPPUNIT_ASSERT_EQUAL(aPosition.Y, sal_Int32(7261));
awt::Size aSize = xCircle->getSize();
CPPUNIT_ASSERT_EQUAL(aSize.Width, sal_Int32(2701));
CPPUNIT_ASSERT_EQUAL(aSize.Height, sal_Int32(2700));
}
void Chart2ImportTest::testTransparentBackground(OUString const & filename)
{
load("/chart2/qa/extras/data/xlsx/", filename);
......
......@@ -216,6 +216,11 @@ void ChartDrawingFragment::onEndElement()
getLimitedValue< sal_Int32, sal_Int64 >( aShapeRectEmu.Y, 0, SAL_MAX_INT32 ),
getLimitedValue< sal_Int32, sal_Int64 >( aShapeRectEmu.Width, 0, SAL_MAX_INT32 ),
getLimitedValue< sal_Int32, sal_Int64 >( aShapeRectEmu.Height, 0, SAL_MAX_INT32 ) );
// Set the position and size before calling addShape().
mxShape->setPosition(awt::Point(aShapeRectEmu.X, aShapeRectEmu.Y));
mxShape->setSize(awt::Size(aShapeRectEmu.Width, aShapeRectEmu.Height));
basegfx::B2DHomMatrix aMatrix;
mxShape->addShape( getFilter(), getFilter().getCurrentTheme(), mxDrawPage, aMatrix, mxShape->getFillProperties(), &aShapeRectEmu32 );
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment