[gnumeric] xls: import more arrow shapes.
- From: Morten Welinder <mortenw src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [gnumeric] xls: import more arrow shapes.
- Date: Thu, 15 Oct 2009 16:42:32 +0000 (UTC)
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]