Date: prev next · Thread: first prev next last
2017 Archives by date, by thread · List index


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


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.