[accounts-dialog] Optimize redraws



commit 6b3a0078053e92b57260c18b2c3bd5e2fc04af74
Author: Matthias Clasen <mclasen redhat com>
Date:   Mon Jan 25 23:51:47 2010 -0500

    Optimize redraws

 src/um-crop-area.c |   24 ++++++++++++++++++++----
 1 files changed, 20 insertions(+), 4 deletions(-)
---
diff --git a/src/um-crop-area.c b/src/um-crop-area.c
index ad45938..0f67695 100644
--- a/src/um-crop-area.c
+++ b/src/um-crop-area.c
@@ -415,11 +415,15 @@ um_crop_area_motion_notify_event (GtkWidget      *widget,
         gint x2, y2;
         gint delta_x, delta_y;
         gint width, height, d;
+        GdkRectangle damage;
+        GdkRectangle damage2;
         UmCropArea *area = UM_CROP_AREA (widget);
 
         if (area->priv->browse_pixbuf == NULL)
                 return FALSE;
 
+        crop_to_widget (area, &damage);
+
         width = gdk_pixbuf_get_width (area->priv->browse_pixbuf);
         height = gdk_pixbuf_get_height (area->priv->browse_pixbuf);
 
@@ -500,8 +504,13 @@ um_crop_area_motion_notify_event (GtkWidget      *widget,
         default: ;
         }
 
+        crop_to_widget (area, &damage2);
+        gdk_rectangle_union (&damage, &damage2, &damage);
+
+        gtk_widget_queue_draw_area (widget,
+                                    damage.x - 1, damage.y - 1,
+                                    damage.width + 2, damage.height + 2);
         update_cursor (area, event->x, event->y);
-        gtk_widget_queue_draw (widget);
 
         return FALSE;
 }
@@ -510,8 +519,8 @@ static gboolean
 um_crop_area_button_press_event (GtkWidget      *widget,
                                  GdkEventButton *event)
 {
-        GdkRectangle crop;
         UmCropArea *area = UM_CROP_AREA (widget);
+        GdkRectangle crop;
 
         if (area->priv->browse_pixbuf == NULL)
                 return FALSE;
@@ -522,7 +531,9 @@ um_crop_area_button_press_event (GtkWidget      *widget,
         area->priv->last_press_y = (event->y - area->priv->image.y) / area->priv->scale;
         area->priv->active_region = find_location (&crop, event->x, event->y);
 
-        gtk_widget_queue_draw (widget);
+        gtk_widget_queue_draw_area (widget,
+                                    crop.x - 1, crop.y - 1,
+                                    crop.width + 2, crop.height + 2);
 
         return FALSE;
 }
@@ -532,15 +543,20 @@ um_crop_area_button_release_event (GtkWidget      *widget,
                                    GdkEventButton *event)
 {
         UmCropArea *area = UM_CROP_AREA (widget);
+        GdkRectangle crop;
 
         if (area->priv->browse_pixbuf == NULL)
                 return FALSE;
 
+        crop_to_widget (area, &crop);
+
         area->priv->last_press_x = -1;
         area->priv->last_press_y = -1;
         area->priv->active_region = OUTSIDE;
 
-        gtk_widget_queue_draw (widget);
+        gtk_widget_queue_draw_area (widget,
+                                    crop.x - 1, crop.y - 1,
+                                    crop.width + 2, crop.height + 2);
 
         return FALSE;
 }



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