[gnumeric] xls: import more arrow shapes.



commit b1e1c1503a8dad609e65fe823b30351f26e36162
Author: Morten Welinder <terra gnome org>
Date:   Thu Oct 15 12:42:16 2009 -0400

    xls: import more arrow shapes.

 plugins/excel/ms-escher.c     |   12 ++++++++----
 plugins/excel/ms-excel-read.c |   41 ++++++++++++++++++++++++++++++++++++-----
 plugins/excel/ms-obj.h        |    4 ++++
 3 files changed, 48 insertions(+), 9 deletions(-)
---
diff --git a/plugins/excel/ms-escher.c b/plugins/excel/ms-escher.c
index b8c698d..bd5981b 100644
--- a/plugins/excel/ms-escher.c
+++ b/plugins/excel/ms-escher.c
@@ -1632,13 +1632,17 @@ ms_escher_read_OPT (MSEscherState *state, MSEscherHeader *h)
 			   name = "LineEndStyle lineEndArrowhead";
 			   break;
 		/* MediumWidthArrow : Arrow at start */
-		case 466 : name = "ArrowWidth lineStartArrowWidth"; break;
+		case 466 : id = MS_OBJ_ATTR_ARROW_START_WIDTH;
+			   name = "ArrowWidth lineStartArrowWidth"; break;
 		/* MediumLenArrow : Arrow at end */
-		case 467 : name = "ArrowLength lineStartArrowLength"; break;
+		case 467 : id = MS_OBJ_ATTR_ARROW_START_LENGTH;
+			   name = "ArrowLength lineStartArrowLength"; break;
 		/* MediumWidthArrow : Arrow at start */
-		case 468 : name = "ArrowWidth lineEndArrowWidth"; break;
+		case 468 : id = MS_OBJ_ATTR_ARROW_END_WIDTH;
+			   name = "ArrowWidth lineEndArrowWidth"; break;
 		/* MediumLenArrow : Arrow at end */
-		case 469 : name = "ArrowLength lineEndArrowLength"; break;
+		case 469 : id = MS_OBJ_ATTR_ARROW_END_LENGTH;
+			   name = "ArrowLength lineEndArrowLength"; break;
 		/* JoinRound : How to join lines */
 		case 470 : name = "LineJoin lineJoinStyle"; break;
 		/* EndCapFlat : How to end lines */
diff --git a/plugins/excel/ms-excel-read.c b/plugins/excel/ms-excel-read.c
index ff51bdf..806234c 100644
--- a/plugins/excel/ms-excel-read.c
+++ b/plugins/excel/ms-excel-read.c
@@ -441,10 +441,13 @@ ms_sheet_obj_anchor_to_pos (Sheet const * sheet, MsBiffVersion const ver,
 
 static void
 handle_arrow_head (SheetObject *so, const char *prop_name,
-		   MSObjAttrBag *attrs, MSObjAttrID typid)
+		   MSObjAttrBag *attrs, MSObjAttrID typid,
+		   MSObjAttrID wid, MSObjAttrID lid)
 {
 	GOArrow arrow;
 	GOColor col = GO_COLOR_BLACK;
+	int w = ms_obj_attr_get_int (attrs, wid, 1);
+	int l = ms_obj_attr_get_int (attrs, lid, 1);
 
 	int typ = ms_obj_attr_get_int (attrs, typid, 0);
 	switch (typ) {
@@ -452,9 +455,33 @@ handle_arrow_head (SheetObject *so, const char *prop_name,
 		go_arrow_clear (&arrow);
 		break;
 	default:
-	case 1:
+	case 1: /* Regular */
 		go_arrow_init (&arrow, GO_ARROW_TRIANGLE, col,
-			       8., 10., 3.);
+			       3.5 * (l + 1),
+			       3.5 * (l + 1),
+			       2.5 * (w + 1));
+		break;
+	case 2: /* Stealth */
+		go_arrow_init (&arrow, GO_ARROW_TRIANGLE, col,
+			       2.5 * (l + 1),
+			       4.0 * (l + 1),
+			       2.0 * (w + 1));
+		break;
+	case 3: /* Diamond */
+		go_arrow_init (&arrow, GO_ARROW_TRIANGLE, col,
+			       5 * (l + 1),
+			       2.5 * (l + 1),
+			       2.5 * (w + 1));
+		break;
+	case 4: /* Oval */
+		go_arrow_init (&arrow, GO_ARROW_OVAL, col,
+			       (l + 1) * 2.5, (w + 1) * 2.5, 0);
+		break;
+	case 5: /* Open -- Approximation! */
+		go_arrow_init (&arrow, GO_ARROW_TRIANGLE, col,
+			       1.0 * (l + 1),
+			       2.5 * (l + 1),
+			       1.5 * (w + 1));
 		break;
 	}
 
@@ -570,10 +597,14 @@ ms_sheet_realize_obj (MSContainer *container, MSObj *obj)
 
 		handle_arrow_head (so, "start-arrow",
 				   obj->attrs,
-				   MS_OBJ_ATTR_ARROW_START);
+				   MS_OBJ_ATTR_ARROW_START,
+				   MS_OBJ_ATTR_ARROW_START_WIDTH,
+				   MS_OBJ_ATTR_ARROW_START_LENGTH);
 		handle_arrow_head (so, "end-arrow",
 				   obj->attrs,
-				   MS_OBJ_ATTR_ARROW_END);
+				   MS_OBJ_ATTR_ARROW_END,
+				   MS_OBJ_ATTR_ARROW_END_WIDTH,
+				   MS_OBJ_ATTR_ARROW_END_LENGTH);
 		break;
 
 	case MSOT_POLYGON:
diff --git a/plugins/excel/ms-obj.h b/plugins/excel/ms-obj.h
index cf4d307..07a0a37 100644
--- a/plugins/excel/ms-obj.h
+++ b/plugins/excel/ms-obj.h
@@ -78,7 +78,11 @@ typedef enum {
 	MS_OBJ_ATTR_BLIP_CROP_LEFT,
 	MS_OBJ_ATTR_BLIP_CROP_RIGHT,
 	MS_OBJ_ATTR_ARROW_START,
+	MS_OBJ_ATTR_ARROW_START_WIDTH,
+	MS_OBJ_ATTR_ARROW_START_LENGTH,
 	MS_OBJ_ATTR_ARROW_END,
+	MS_OBJ_ATTR_ARROW_END_WIDTH,
+	MS_OBJ_ATTR_ARROW_END_LENGTH,
 
     /* Ptrs */
 	MS_OBJ_ATTR_IS_PTR_MASK = 0x2000,



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