[gnumeric] Arrays: normalize cell ranges consistently.



commit fa01e2381465d5e27e05c9871af30f3c6c9b0d4f
Author: Morten Welinder <terra gnome org>
Date:   Sun Jun 28 16:16:02 2015 -0400

    Arrays: normalize cell ranges consistently.
    
    This makes a difference for certain inverted semi-absolute ranges.

 ChangeLog         |    3 +++
 NEWS              |    2 +-
 src/value-sheet.c |   35 ++++++++++++-----------------------
 3 files changed, 16 insertions(+), 24 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index 77ca527..da890f7 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,8 @@
 2015-06-28  Morten Welinder  <terra gnome org>
 
+       * src/value-sheet.c (value_area_get_width, value_area_get_height):
+       Use the same normalization as value_area_foreach.  Fixes #751390.
+
        * src/stf.c (clear_stray_NULs): Also truncate invalid UTF-8.
        Fixes #751577.
 
diff --git a/NEWS b/NEWS
index 099f247..853c607 100644
--- a/NEWS
+++ b/NEWS
@@ -30,7 +30,7 @@ Morten:
          [#749424] [#749917] [#749919] [#750043] [#750044] [#750046]
          [#750811] [#750810] [#750857] [#750864] [#750862] [#750858]
          [#751126] [#751254] [#751253] [#750851] [#751258] [#751259]
-         [#751502]
+         [#751502] [#751390]
        * Make solver check linearity of model.
        * Fix xls saving of marker style.  [#749185]
        * Make compilation with clang work again.  [#749138]
diff --git a/src/value-sheet.c b/src/value-sheet.c
index b2536a4..dc179f0 100644
--- a/src/value-sheet.c
+++ b/src/value-sheet.c
@@ -91,17 +91,12 @@ value_area_get_width (GnmValue const *v, GnmEvalPos const *ep)
        g_return_val_if_fail (v, 0);
 
        if (VALUE_IS_CELLRANGE (v)) {
-               GnmRangeRef const *r = &v->v_range.cell;
-               int ans = r->b.col - r->a.col;
-
-               if (r->a.col_relative) {
-                       if (!r->b.col_relative)
-                               ans -= ep->eval.col;
-               } else if (r->b.col_relative)
-                       ans += ep->eval.col;
-               if (ans < 0)
-                       ans = -ans;
-               return ans + 1;
+               GnmRange r;
+               Sheet *start_sheet, *end_sheet;
+
+               g_return_val_if_fail (ep, 0);
+               gnm_rangeref_normalize (&v->v_range.cell, ep, &start_sheet, &end_sheet, &r);
+               return range_width (&r);
        } else if (VALUE_IS_ARRAY (v))
                return v->v_array.x;
        return 1;
@@ -113,18 +108,12 @@ value_area_get_height (GnmValue const *v, GnmEvalPos const *ep)
        g_return_val_if_fail (v, 0);
 
        if (VALUE_IS_CELLRANGE (v)) {
-               GnmRangeRef const *r = &v->v_range.cell;
-               int ans = r->b.row - r->a.row;
-
-               if (r->a.row_relative) {
-                       if (!r->b.row_relative)
-                               ans -= ep->eval.row;
-               } else if (r->b.row_relative)
-                       ans += ep->eval.row;
-
-               if (ans < 0)
-                       ans = -ans;
-               return ans + 1;
+               GnmRange r;
+               Sheet *start_sheet, *end_sheet;
+
+               g_return_val_if_fail (ep, 0);
+               gnm_rangeref_normalize (&v->v_range.cell, ep, &start_sheet, &end_sheet, &r);
+               return range_height (&r);
        } else if (VALUE_IS_ARRAY (v))
                return v->v_array.y;
        return 1;


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