Kaydet (Commit) ac03883c authored tarafından Miklos Vajna's avatar Miklos Vajna

tdf#105127 VML import: handle <v:shape style="flip:..." path="...">

I don't see an easy way to implement this via UNO, so use the internal
API. As to the internal API usage,
SdrEditView::MirrorMarkedObjVertical() (for UI) and
SvxMSDffManager::ImportShape() (for WW8 import) are example client code.

Change-Id: I9bf27788db32fd35d6b56e0f1a240c4b7abc5604
üst c2b24cd6
...@@ -1058,6 +1058,28 @@ Reference< XShape > BezierShape::implConvertAndInsert( const Reference< XShapes ...@@ -1058,6 +1058,28 @@ Reference< XShape > BezierShape::implConvertAndInsert( const Reference< XShapes
aPropSet.setProperty( PROP_PolyPolygonBezier, aBezierCoords ); aPropSet.setProperty( PROP_PolyPolygonBezier, aBezierCoords );
} }
// Handle horizontal and vertical flip.
if (!maTypeModel.maFlip.isEmpty())
{
if (SdrObject* pShape = GetSdrObjectFromXShape(xShape))
{
if (maTypeModel.maFlip.startsWith("x"))
{
Point aCenter(pShape->GetSnapRect().Center());
Point aPoint2(aCenter);
aPoint2.setY(aPoint2.getY() + 1);
pShape->NbcMirror(aCenter, aPoint2);
}
if (maTypeModel.maFlip.endsWith("y"))
{
Point aCenter(pShape->GetSnapRect().Center());
Point aPoint2(aCenter);
aPoint2.setX(aPoint2.getX() + 1);
pShape->NbcMirror(aCenter, aPoint2);
}
}
}
// Hacky way of ensuring the shape is correctly sized/positioned // Hacky way of ensuring the shape is correctly sized/positioned
xShape->setSize( awt::Size( rShapeRect.Width, rShapeRect.Height ) ); xShape->setSize( awt::Size( rShapeRect.Width, rShapeRect.Height ) );
xShape->setPosition( awt::Point( rShapeRect.X, rShapeRect.Y ) ); xShape->setPosition( awt::Point( rShapeRect.X, rShapeRect.Y ) );
......
...@@ -692,6 +692,13 @@ DECLARE_OOXMLIMPORT_TEST(testBnc779620, "bnc779620.docx") ...@@ -692,6 +692,13 @@ DECLARE_OOXMLIMPORT_TEST(testBnc779620, "bnc779620.docx")
lcl_countTextFrames( mxComponent, 1 ); lcl_countTextFrames( mxComponent, 1 );
} }
DECLARE_OOXMLIMPORT_TEST(testTdf105127, "tdf105127.docx")
{
auto aPolyPolygon = getProperty<drawing::PolyPolygonBezierCoords>(getShape(1), "PolyPolygonBezier");
// This was 1910, the shape was rendered upside down.
CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(3257), aPolyPolygon.Coordinates[0][0].Y);
}
DECLARE_OOXMLIMPORT_TEST(testfdo76583, "fdo76583.docx") DECLARE_OOXMLIMPORT_TEST(testfdo76583, "fdo76583.docx")
{ {
// The problem was that the floating table was imported as a non-floating one. // The problem was that the floating table was imported as a non-floating one.
......
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