[gnumeric] Redraw: use the new gnm_range_simplify.



commit 9aa8dd15e6dd8fa637d251e1ba33fac96f45d36d
Author: Morten Welinder <terra gnome org>
Date:   Thu Jul 16 21:35:59 2020 -0400

    Redraw: use the new gnm_range_simplify.

 src/sheet.c | 49 +------------------------------------------------
 1 file changed, 1 insertion(+), 48 deletions(-)
---
diff --git a/src/sheet.c b/src/sheet.c
index d516b73cb..fb7f7684a 100644
--- a/src/sheet.c
+++ b/src/sheet.c
@@ -3289,48 +3289,6 @@ sheet_redraw_range (Sheet const *sheet, GnmRange const *range)
        gnm_app_recalc_finish ();
 }
 
-static gboolean
-merge_ranges (GnmRange *a, GnmRange const *b)
-{
-       if (a->start.row == b->start.row &&
-           a->end.row == b->end.row &&
-           a->end.col + 1 >= b->start.col) {
-               // "a" is just left of "b", possibly with overlap
-               a->end.col = MAX (a->end.col, b->end.col);
-               return TRUE;
-       }
-
-       if (a->start.col == b->start.col &&
-           a->end.col == b->end.col &&
-           a->end.row + 1 >= b->start.row) {
-               // "a" is just on top of "b", possibly with overlap
-               a->end.row = MAX (a->end.row, b->end.row);
-               return TRUE;
-       }
-
-       if (range_contained (b, a)) {
-               // "b" is inside "a"
-               return TRUE;
-       }
-
-       // Punt.
-       return FALSE;
-}
-
-static gboolean
-try_merge_pair (GArray *arr, unsigned ui1, unsigned ui2)
-{
-       GnmRange *ra = &g_array_index (arr, GnmRange, ui1);
-       GnmRange *rb = &g_array_index (arr, GnmRange, ui2);
-
-       if (merge_ranges (ra, rb)) {
-               g_array_remove_index (arr, ui2);
-               return TRUE;
-       } else
-               return FALSE;
-}
-
-
 static gboolean
 cb_pending_redraw_handler (Sheet *sheet)
 {
@@ -3343,12 +3301,7 @@ cb_pending_redraw_handler (Sheet *sheet)
        if (debug_redraw)
                g_printerr ("Entering redraw with %u ranges\n", arr->len);
        if (arr->len >= 2) {
-               g_array_sort (arr, (GCompareFunc) gnm_range_compare);
-               // Two cheap passes through the ranges.
-               for (ui = arr->len - 1; ui > 0; ui--)
-                       try_merge_pair (arr, ui - 1, ui);
-               for (ui = arr->len - 1; ui > 0; ui--)
-                       try_merge_pair (arr, ui - 1, ui);
+               gnm_range_simplify (arr);
                if (debug_redraw)
                        g_printerr ("Down to %u ranges\n", arr->len);
        }


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