[dia] Bezier*: fix save of BezPoint with type BEZ_LINE_TO



commit 195eb75c0894815624013ccdf9b3f8b77ca63763
Author: Hans Breuer <hans breuer org>
Date:   Tue Oct 2 22:58:08 2012 +0200

    Bezier*: fix save of BezPoint with type BEZ_LINE_TO
    
    These can not be created by the user interface, but might come
    in through importers or PyDia code. The bug was probably hidden
    by initializing p2 and p3 also for line-to. But it is just with
    the limited serialization.

 lib/bezier_conn.c |   11 +++++++++--
 lib/beziershape.c |   13 ++++++++++---
 2 files changed, 19 insertions(+), 5 deletions(-)
---
diff --git a/lib/bezier_conn.c b/lib/bezier_conn.c
index 557b9c8..3b4b6ed 100644
--- a/lib/bezier_conn.c
+++ b/lib/bezier_conn.c
@@ -897,8 +897,15 @@ bezierconn_save (BezierConn *bezier,
     if (BEZ_MOVE_TO == bezier->bezier.points[i].type)
       g_warning("only first BezPoint can be a BEZ_MOVE_TO");
     data_add_point(attr, &bezier->bezier.points[i].p1);
-    data_add_point(attr, &bezier->bezier.points[i].p2);
-    data_add_point(attr, &bezier->bezier.points[i].p3);
+    if (BEZ_LINE_TO == bezier->bezier.points[i].type) {
+      data_add_point(attr, &bezier->bezier.points[i].p1);
+      if (i < bezier->bezier.num_points - 1)
+        data_add_point(attr, &bezier->bezier.points[i].p1);
+    } else {
+      data_add_point(attr, &bezier->bezier.points[i].p2);
+      if (i < bezier->bezier.num_points - 1)
+        data_add_point(attr, &bezier->bezier.points[i].p3);
+    }
   }
 
   attr = new_attribute(obj_node, "corner_types");
diff --git a/lib/beziershape.c b/lib/beziershape.c
index 03dcf98..89c3d11 100644
--- a/lib/beziershape.c
+++ b/lib/beziershape.c
@@ -968,9 +968,16 @@ beziershape_save (BezierShape *bezier,
     if (BEZ_MOVE_TO == bezier->bezier.points[i].type)
       g_warning("only first BezPoint can be a BEZ_MOVE_TO");
     data_add_point(attr, &bezier->bezier.points[i].p1);
-    data_add_point(attr, &bezier->bezier.points[i].p2);
-    if (i < bezier->bezier.num_points - 1)
-      data_add_point(attr, &bezier->bezier.points[i].p3);
+
+    if (BEZ_LINE_TO == bezier->bezier.points[i].type) {
+      data_add_point(attr, &bezier->bezier.points[i].p1);
+      if (i < bezier->bezier.num_points - 1)
+        data_add_point(attr, &bezier->bezier.points[i].p1);
+    } else {
+      data_add_point(attr, &bezier->bezier.points[i].p2);
+      if (i < bezier->bezier.num_points - 1)
+        data_add_point(attr, &bezier->bezier.points[i].p3);
+    }
   }
 
   attr = new_attribute(obj_node, "corner_types");



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]