Anybody familiar with that SvxShape stuff? I see there is both
SvxShapePolyPolygon and SvxShapePolyPolygonBezier classes in
include/svx/unoshape.hxx, and wonder whether it's plausible that an
originally straight-line polygon remains an SvxShapePolyPolygon when one
of its edges is manipulated with "Convert to Curve"? If it should
instead become an SvxShapePolyPolygonBezier then, then the proper fix
for <https://bugs.documentfoundation.org/show_bug.cgi?id=106792> "Error
when saving a polygon with points converted to curve" would probably
need to be done elsewhere.
On 03/29/2017 10:11 AM, Stephan Bergmann wrote:
commit 26909d9de4c6e7165fc8f5d938ee6ef55b87cc5c
Author: Stephan Bergmann <sbergman@redhat.com>
Date: Wed Mar 29 09:15:48 2017 +0200
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>
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:
Context
- Re: [Libreoffice-commits] core.git: tdf#106792: Fix "Geometry" property of changed-to-bezier SvxShapePolyPolygon · Stephan Bergmann
Privacy Policy |
Impressum (Legal Info) |
Copyright information: Unless otherwise specified, all text and images
on this website are licensed under the
Creative Commons Attribution-Share Alike 3.0 License.
This does not include the source code of LibreOffice, which is
licensed under the Mozilla Public License (
MPLv2).
"LibreOffice" and "The Document Foundation" are
registered trademarks of their corresponding registered owners or are
in actual use as trademarks in one or more countries. Their respective
logos and icons are also subject to international copyright laws. Use
thereof is explained in our
trademark policy.