[gnumeric] xls: simplify code.



commit 3d3ef68c786a6931f3574cd1438c1992dccb2cae
Author: Morten Welinder <terra gnome org>
Date:   Thu Oct 8 12:42:46 2009 -0400

    xls: simplify code.

 plugins/excel/ChangeLog        |    7 +++++++
 plugins/excel/ms-escher.c      |   16 ++++++++++++++++
 plugins/excel/ms-escher.h      |   10 +++++++++-
 plugins/excel/ms-excel-write.c |   26 ++++++++++----------------
 4 files changed, 42 insertions(+), 17 deletions(-)
---
diff --git a/plugins/excel/ChangeLog b/plugins/excel/ChangeLog
index 5e4d77c..bed5e15 100644
--- a/plugins/excel/ChangeLog
+++ b/plugins/excel/ChangeLog
@@ -1,3 +1,10 @@
+2009-10-08  Morten Welinder  <terra gnome org>
+
+	* ms-escher.c (ms_escher_opt_add_bool): New function.
+
+	* ms-excel-write.c (excel_write_line_v8): Simplify using
+	ms_escher_opt_add_bool.
+
 2009-10-07  Morten Welinder  <terra gnome org>
 
 	* ms-excel-write.c (excel_write_textbox_v8): Export
diff --git a/plugins/excel/ms-escher.c b/plugins/excel/ms-escher.c
index 2f7c7b0..fe70b9b 100644
--- a/plugins/excel/ms-escher.c
+++ b/plugins/excel/ms-escher.c
@@ -2260,6 +2260,22 @@ ms_escher_opt_add_simple (GString *buf, gsize marker, guint16 pid, gint32 val)
 }
 
 void
+ms_escher_opt_add_bool (GString *buf, gsize marker,
+			guint16 pid, gboolean b)
+{
+	int N = ms_escher_get_inst (buf, marker);
+	guint16 gid = pid | 0xf;
+	guint8 shift = gid - pid;
+	guint32 val = (b ? 0x00010001 : 0x00010000) << shift;
+
+	if (N > 0 && GSF_LE_GET_GUINT16 (buf->str + buf->len - 6) == gid) {
+		val |= GSF_LE_GET_GUINT32 (buf->str + buf->len - 4);
+		GSF_LE_SET_GUINT32 (buf->str + buf->len - 4, val);
+	} else
+		ms_escher_opt_add_simple (buf, marker, gid, val);
+}
+
+void
 ms_escher_opt_add_color (GString *buf, gsize marker,
 			 guint16 pid, GOColor c)
 {
diff --git a/plugins/excel/ms-escher.h b/plugins/excel/ms-escher.h
index 6139849..7ff8345 100644
--- a/plugins/excel/ms-escher.h
+++ b/plugins/excel/ms-escher.h
@@ -18,12 +18,18 @@
 #include <sheet-object.h>
 
 enum {
+	MESP_AUTOTEXTMARGIN      = 0x00bc,
 	MSEP_SHAPEPATH           = 0x0144,
+	MSEP_FILLOK              = 0x017f,
 	MSEP_FILLCOLOR           = 0x0181,
+	MSEP_FILLED              = 0x01bb,
+	MSEP_NOFILLHITTEST       = 0x01bf,
 	MSEP_LINECOLOR           = 0x01c0,
 	MSEP_LINEWIDTH           = 0x01cb,
 	MSEP_LINEENDARROWHEAD    = 0x01d1,
-	MSEP_NAME                = 0x0380
+	MSEP_ARROWHEADSOK        = 0x01fb,
+	MSEP_NAME                = 0x0380,
+	MSEP_ISBUTTON            = 0x03bc
 };
 
 
@@ -53,6 +59,8 @@ void ms_escher_sp (GString *buf, guint32 spid, guint16 shape, guint32 flags);
 gsize ms_escher_opt_start (GString *buf);
 void ms_escher_opt_add_simple (GString *buf, gsize marker,
 			       guint16 pid, gint32 val);
+void ms_escher_opt_add_bool (GString *buf, gsize marker,
+			     guint16 pid, gboolean b);
 void ms_escher_opt_add_color (GString *buf, gsize marker,
 			      guint16 pid, GOColor c);
 void ms_escher_opt_add_str_wchar (GString *buf, gsize marker, GString *extra,
diff --git a/plugins/excel/ms-excel-write.c b/plugins/excel/ms-excel-write.c
index b092cb2..b03d8cf 100644
--- a/plugins/excel/ms-excel-write.c
+++ b/plugins/excel/ms-excel-write.c
@@ -4429,7 +4429,6 @@ excel_write_line_v8 (ExcelWriteSheet *esheet, SheetObject *so)
 	ExcelWriteState *ewb = esheet->ewb;
 	BiffPut *bp = ewb->bp;
 	guint32 id = excel_write_start_drawing (esheet);
-	SheetObjectAnchor const *anchor = sheet_object_get_anchor (so);
 	gsize draw_len = 0;
 	int type = 1;
 	int shape = 0x14;
@@ -4451,37 +4450,32 @@ excel_write_line_v8 (ExcelWriteSheet *esheet, SheetObject *so)
 
 	optmark = ms_escher_opt_start (escher);
 	extra = g_string_new (NULL);
-	ms_escher_opt_add_simple (escher, optmark,
-				  0x00bf, 0x00080008);
-	ms_escher_opt_add_simple (escher, optmark,
-				  MSEP_SHAPEPATH, 4); /* shapePath */
-	ms_escher_opt_add_simple (escher, optmark,
-				  0x017f, 0x00010000);
-	ms_escher_opt_add_simple (escher, optmark,
-				  0x01bf, 0x00110001);
+	ms_escher_opt_add_bool (escher, optmark, MESP_AUTOTEXTMARGIN, TRUE);
+	ms_escher_opt_add_simple (escher, optmark, MSEP_SHAPEPATH, 4);
+	ms_escher_opt_add_bool (escher, optmark, MSEP_FILLOK, FALSE);
+	ms_escher_opt_add_bool (escher, optmark, MSEP_NOFILLHITTEST, TRUE);
+	ms_escher_opt_add_bool (escher, optmark, MSEP_FILLED, FALSE);
 	ms_escher_opt_add_color (escher, optmark, MSEP_LINECOLOR,
 				 style->line.auto_color
 				 ? GO_COLOR_BLACK
 				 : style->line.color);
 	if (style->line.width > 0) {
-		guint16 w = CLAMP (12700 * style->line.width, 0, 65535);
+		gint32 w = CLAMP (12700 * style->line.width, 0, G_MAXINT32);
 		ms_escher_opt_add_simple (escher, optmark, MSEP_LINEWIDTH, w);
 	}
 	if (is_arrow)
 		ms_escher_opt_add_simple (escher, optmark,
-					  MSEP_LINEENDARROWHEAD, 1);  /* lineEndArrowhead */
-	ms_escher_opt_add_simple (escher, optmark,
-				  0x1ff, 0x00180018);
+					  MSEP_LINEENDARROWHEAD, 1);
+	ms_escher_opt_add_bool (escher, optmark, MSEP_ARROWHEADSOK, is_arrow);
 	if (name)
 		ms_escher_opt_add_str_wchar (escher, optmark, extra,
 					     MSEP_NAME, name);
-	ms_escher_opt_add_simple (escher, optmark,
-				  0x03bf, 0x00080008); /* fPrint */
+	ms_escher_opt_add_bool (escher, optmark, MSEP_ISBUTTON, TRUE);
 	go_string_append_gstring (escher, extra);
 	ms_escher_opt_end (escher, optmark);
 	g_string_free (extra, TRUE);
 
-	ms_escher_clientanchor (escher, anchor);
+	ms_escher_clientanchor (escher, sheet_object_get_anchor (so));
 
 	ms_escher_clientdata (escher, NULL, 0);
 



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