[gnumeric] Fix charts size in XLS format. [#414]



commit 1a183db49f4eae1460ede72439ae8f03fea9c57f
Author: Jean Brefort <jean brefort normalesup org>
Date:   Mon Sep 2 18:20:41 2019 +0200

    Fix charts size in XLS format. [#414]

 plugins/excel/ChangeLog        |  5 +++++
 plugins/excel/ms-excel-read.c  |  6 ++++++
 plugins/excel/ms-excel-write.c | 12 +++++++++++-
 3 files changed, 22 insertions(+), 1 deletion(-)
---
diff --git a/plugins/excel/ChangeLog b/plugins/excel/ChangeLog
index 071f2f72e..934e87d0d 100644
--- a/plugins/excel/ChangeLog
+++ b/plugins/excel/ChangeLog
@@ -1,3 +1,8 @@
+2019-09-02  Jean Brefort  <jean brefort normalesup org>
+
+       * ms-excel-read.c (ms_sheet_realize_obj): fix charts position. [#414]
+       * ms-excel-write.c (excel_write_chart_v8): ditto.
+
 2019-07-20  Morten Welinder  <terra gnome org>
 
        * xlsx-write.c (xlsx_write_style): Wrote cell protection too.
diff --git a/plugins/excel/ms-excel-read.c b/plugins/excel/ms-excel-read.c
index c712b6148..4a9cdd77f 100644
--- a/plugins/excel/ms-excel-read.c
+++ b/plugins/excel/ms-excel-read.c
@@ -540,6 +540,12 @@ ms_sheet_realize_obj (MSContainer *container, MSObj *obj)
                        ((flip_v == NULL) ? GOD_ANCHOR_DIR_DOWN : 0);
 
                sheet_object_anchor_init (&anchor, &range, offsets, direction, GNM_SO_ANCHOR_TWO_CELLS);
+               if (mode != GNM_SO_ANCHOR_TWO_CELLS) {
+                       double pts[4];
+                       sheet_object_anchor_to_pts (&anchor, esheet->sheet, pts);
+                       anchor.mode = mode;
+                       sheet_object_pts_to_anchor (&anchor, esheet->sheet, pts);
+               }
                sheet_object_set_anchor (so, &anchor);
        }
        sheet_object_set_sheet (so, esheet->sheet);
diff --git a/plugins/excel/ms-excel-write.c b/plugins/excel/ms-excel-write.c
index 2013d7ef7..6e7cc829e 100644
--- a/plugins/excel/ms-excel-write.c
+++ b/plugins/excel/ms-excel-write.c
@@ -4310,6 +4310,8 @@ excel_write_chart_v8 (ExcelWriteSheet *esheet, SheetObject *so)
        guint8 zero[4] = { 0, 0, 0, 0 };
        gsize draw_len = 0;
        guint16 shape = 0x92;
+       SheetObjectAnchor const *real_anchor = sheet_object_get_anchor (so);
+       SheetObjectAnchor anchor = *real_anchor;
 
        g_object_get (so,
                      "name", &name,
@@ -4337,7 +4339,15 @@ excel_write_chart_v8 (ExcelWriteSheet *esheet, SheetObject *so)
        ms_escher_opt_end (escher, optmark);
        g_string_free (extra, TRUE);
 
-       ms_escher_clientanchor (escher, sheet_object_get_anchor (so));
+       if (anchor.mode != GNM_SO_ANCHOR_TWO_CELLS) {
+               double pts[4];
+               GnmSOAnchorMode mode = anchor.mode;
+               sheet_object_anchor_to_pts (&anchor, esheet->gnum_sheet, pts);
+               anchor.mode = GNM_SO_ANCHOR_TWO_CELLS;
+               sheet_object_pts_to_anchor (&anchor, esheet->gnum_sheet, pts);
+               anchor.mode = mode; /* this anchor is not valid for gnumeric but is what we need there */
+       }
+       ms_escher_clientanchor (escher, &anchor);
 
        ms_escher_clientdata (escher);
 


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