]> Pileus Git - ~andy/gtk/commitdiff
Don't queue a draw if the layout has not changed. (#313991, Benjamin Berg)
authorMatthias Clasen <mclasen@redhat.com>
Sat, 20 Aug 2005 05:55:25 +0000 (05:55 +0000)
committerMatthias Clasen <matthiasc@src.gnome.org>
Sat, 20 Aug 2005 05:55:25 +0000 (05:55 +0000)
2005-08-20  Matthias Clasen  <mclasen@redhat.com>

* gtk/gtkrange.c (gtk_range_adjustment_changed)
(gtk_range_adjustment_value_changed):  Don't queue a draw
if the layout has not changed.  (#313991, Benjamin Berg)

ChangeLog
ChangeLog.pre-2-10
ChangeLog.pre-2-8
gtk/gtkrange.c

index 120c7d72665d86f38d9b23f307cecdc4e131083d..f93e4b7c7d5cc614d4b574865eea4ce687ba3313 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2005-08-20  Matthias Clasen  <mclasen@redhat.com>
+
+       * gtk/gtkrange.c (gtk_range_adjustment_changed) 
+       (gtk_range_adjustment_value_changed):  Don't queue a draw
+       if the layout has not changed.  (#313991, Benjamin Berg)
+
 2005-08-19  Matthias Clasen  <mclasen@redhat.com>
 
        * gtk/gtktreeitem.c: Remove duplicate lines.  (#313344,
index 120c7d72665d86f38d9b23f307cecdc4e131083d..f93e4b7c7d5cc614d4b574865eea4ce687ba3313 100644 (file)
@@ -1,3 +1,9 @@
+2005-08-20  Matthias Clasen  <mclasen@redhat.com>
+
+       * gtk/gtkrange.c (gtk_range_adjustment_changed) 
+       (gtk_range_adjustment_value_changed):  Don't queue a draw
+       if the layout has not changed.  (#313991, Benjamin Berg)
+
 2005-08-19  Matthias Clasen  <mclasen@redhat.com>
 
        * gtk/gtktreeitem.c: Remove duplicate lines.  (#313344,
index 120c7d72665d86f38d9b23f307cecdc4e131083d..f93e4b7c7d5cc614d4b574865eea4ce687ba3313 100644 (file)
@@ -1,3 +1,9 @@
+2005-08-20  Matthias Clasen  <mclasen@redhat.com>
+
+       * gtk/gtkrange.c (gtk_range_adjustment_changed) 
+       (gtk_range_adjustment_value_changed):  Don't queue a draw
+       if the layout has not changed.  (#313991, Benjamin Berg)
+
 2005-08-19  Matthias Clasen  <mclasen@redhat.com>
 
        * gtk/gtktreeitem.c: Remove duplicate lines.  (#313344,
index af337cdf31a08613fc4202edbc1f6a00158c6976..424a7a0d8bd52258c33530b5263a47955589f3e8 100644 (file)
@@ -1564,14 +1564,42 @@ gtk_range_state_changed (GtkWidget    *widget,
     stop_scrolling (GTK_RANGE (widget));
 }
 
+#define check_rectangle(rectangle1, rectangle2)              \
+  {                                                          \
+    if (rectangle1.x != rectangle2.x) return TRUE;           \
+    if (rectangle1.y != rectangle2.y) return TRUE;           \
+    if (rectangle1.width  != rectangle2.width)  return TRUE; \
+    if (rectangle1.height != rectangle2.height) return TRUE; \
+  }
+
+static gboolean
+layout_changed (GtkRangeLayout *layout1, 
+               GtkRangeLayout *layout2)
+{
+  check_rectangle (layout1->slider, layout2->slider);
+  check_rectangle (layout1->trough, layout2->trough);
+  check_rectangle (range->layout1->stepper_a, layout2->stepper_a);
+  check_rectangle (range->layout1->stepper_d, layout2->stepper_d);
+  check_rectangle (range->layout1->stepper_b, layout2->stepper_b);
+  check_rectangle (range->layout1->stepper_c, layout2->stepper_c);
+
+  return FALSE;
+}
+
 static void
 gtk_range_adjustment_changed (GtkAdjustment *adjustment,
                              gpointer       data)
 {
   GtkRange *range = GTK_RANGE (data);
+  /* create a copy of the layout */
+  GtkRangeLayout layout = *range->layout;
 
   range->need_recalc = TRUE;
-  gtk_widget_queue_draw (GTK_WIDGET (range));
+  gtk_range_calc_layout (range, range->adjustment->value);
+  
+  /* now check whether the layout changed  */
+  if (layout_changed (range->layout, &layout))
+    gtk_widget_queue_draw (GTK_WIDGET (range));
 
   /* Note that we don't round off to range->round_digits here.
    * that's because it's really broken to change a value
@@ -1587,13 +1615,21 @@ gtk_range_adjustment_value_changed (GtkAdjustment *adjustment,
                                    gpointer       data)
 {
   GtkRange *range = GTK_RANGE (data);
+  /* create a copy of the layout */
+  GtkRangeLayout layout = *range->layout;
 
   range->need_recalc = TRUE;
-
-  gtk_widget_queue_draw (GTK_WIDGET (range));
-  /* This is so we don't lag the widget being scrolled. */
-  if (GTK_WIDGET_REALIZED (range))
-    gdk_window_process_updates (GTK_WIDGET (range)->window, FALSE);
+  gtk_range_calc_layout (range, range->adjustment->value);
+  
+  /* now check whether the layout changed  */
+  if (layout_changed (range->layout, &layout))
+    {
+      gtk_widget_queue_draw (GTK_WIDGET (range));
+      
+      /* This is so we don't lag the widget being scrolled. */
+      if (GTK_WIDGET_REALIZED (range))
+        gdk_window_process_updates (GTK_WIDGET (range)->window, FALSE);
+    }
   
   /* Note that we don't round off to range->round_digits here.
    * that's because it's really broken to change a value