diff options
author | Stephan Bergmann <sbergman@redhat.com> | 2017-03-29 09:15:48 +0200 |
---|---|---|
committer | Stephan Bergmann <sbergman@redhat.com> | 2017-03-29 08:11:20 +0000 |
commit | 26909d9de4c6e7165fc8f5d938ee6ef55b87cc5c (patch) | |
tree | 98ea955595fd8b46e4c64eabbe3504f2ab6d9872 /svx/source/unodraw/unoshap2.cxx | |
parent | d93b8268da982ad26db9e03156ce9b89f3410486 (diff) |
tdf#106792: Fix "Geometry" property of changed-to-bezier SvxShapePolyPolygon
After "Convert to Curve" as described in the issue, the shape apparently is
still an SvxShapePolyPolygon shape but with getShapeKind() of OBJ_PATHLINE
instead of OBJ_PLIN (and same for OBJ_PATHFILL). That causes
XMLShapeExport::ImpExportPolygonShape (xmloff/source/draw/shapeexport.cxx) to
determine bBezier == true and thus expect the obtained "Geometry" property to be
of type css::drawing::PolyPolygonBezierCoords, not merely
css::drawing::PointSequenceSequence.
Smells like this issue had always been present, and would have caused bad memory
access when accessing the non-css::drawing::PolyPolygonBezierCoords object in
XMLShapeExport::ImpExportPolygonShape, and only now throws an exception since
0d7c5823124696f80583ac2a5f0e28f329f6f786 "New o3tl::try/doGet to obtain value
from Any".
Change-Id: Ica31a114e5beac97bac2a1c509eb1a85f8354d5e
Reviewed-on: https://gerrit.libreoffice.org/35825
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
Diffstat (limited to 'svx/source/unodraw/unoshap2.cxx')
-rw-r--r-- | svx/source/unodraw/unoshap2.cxx | 22 |
1 files changed, 19 insertions, 3 deletions
diff --git a/svx/source/unodraw/unoshap2.cxx b/svx/source/unodraw/unoshap2.cxx index bf964ff653db..201b245b0017 100644 --- a/svx/source/unodraw/unoshap2.cxx +++ b/svx/source/unodraw/unoshap2.cxx @@ -1123,9 +1123,25 @@ bool SvxShapePolyPolygon::getPropertyValueImpl( const OUString& rName, const Sfx if(mpObj.is()) mpObj->TRGetBaseGeometry(aNewHomogenMatrix, aNewPolyPolygon); - drawing::PointSequenceSequence aRetval(aNewPolyPolygon.count()); - B2DPolyPolygonToSvxPointSequenceSequence(aNewPolyPolygon, aRetval); - rValue <<= aRetval; + switch (getShapeKind()) { + case OBJ_PATHLINE: + case OBJ_PATHFILL: + { + drawing::PolyPolygonBezierCoords aRetval; + basegfx::unotools::b2DPolyPolygonToPolyPolygonBezier( + aNewPolyPolygon, aRetval); + rValue <<= aRetval; + break; + } + default: + { + drawing::PointSequenceSequence aRetval(aNewPolyPolygon.count()); + B2DPolyPolygonToSvxPointSequenceSequence( + aNewPolyPolygon, aRetval); + rValue <<= aRetval; + break; + } + } break; } case OWN_ATTR_VALUE_POLYGON: |