[gnumeric] Implement wrapping of rotated text. [#394]



commit 9c6a3d0c69b3698d3ac38abfe2988876835ebef4
Author: Jean Brefort <jean brefort normalesup org>
Date:   Thu Sep 19 08:30:40 2019 +0200

    Implement wrapping of rotated text. [#394]

 ChangeLog       |  5 +++++
 NEWS            |  1 +
 src/cell-draw.c | 10 ++++++++++
 3 files changed, 16 insertions(+)
---
diff --git a/ChangeLog b/ChangeLog
index 884dc3f7a..b4412130e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2019-09-19  Jean Brefort  <jean brefort normalesup org>
+
+       * src/cell-draw.c (cell_calc_layout): implement wrapping of rotated text.
+       Fixes #394.
+
 2019-09-16  Jean Brefort  <jean brefort normalesup org>
 
        * src/graph.c (gnm_go_data_vector_get_str): load strings from arrays.
diff --git a/NEWS b/NEWS
index 288a7f865..6f29514f1 100644
--- a/NEWS
+++ b/NEWS
@@ -6,6 +6,7 @@ Andreas:
 Jean:
        * Fix charts size in XLS format. [#414]
        * Fix loading string from arrays in charts. [#416]
+       * Implement wrapping of rotated text. [#394]
 
 Morten:
        * Fix over-eager guessing of dates in csv.  [#401]
diff --git a/src/cell-draw.c b/src/cell-draw.c
index 9ca0d5608..bb26aa09d 100644
--- a/src/cell-draw.c
+++ b/src/cell-draw.c
@@ -133,6 +133,16 @@ cell_calc_layout (G_GNUC_UNUSED GnmCell const *cell, GnmRenderedValue *rv, int y
 
        if (rv->rotation && !rv->noborders) {
                GnmRenderedRotatedValue const *rrv = (GnmRenderedRotatedValue *)rv;
+               if (rv->wrap_text) {
+                       /* quick fix for #394, may be not perfect */
+                       double rot = rv->rotation / 180. * M_PI, actual_width;
+                       actual_width = MAX (0, width - indent) * cos (rot) + height * fabs (sin (rot));
+                       if (actual_width > pango_layout_get_width (layout)) {
+                               pango_layout_set_wrap (layout, PANGO_WRAP_WORD_CHAR);
+                               pango_layout_set_width (layout, actual_width);
+                               gnm_rendered_value_remeasure (rv);
+                       }
+               }
                if (rrv->sin_a_neg) {
                        hoffset += (width - indent) - rv->layout_natural_width;
                }


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