[gnome-screensaver] floaters: Use new gtk3 draw signal



commit 84a3a2ad08fb6f621f75f8752ee931dda8ebba45
Author: Ray Strode <rstrode redhat com>
Date:   Wed Sep 29 23:51:11 2010 -0400

    floaters: Use new gtk3 draw signal
    
    expose-event has gone the way of the dodo. This
    commit makes the floaters conform to the rules of
    today.

 savers/floaters.c |   35 +++++++----------------------------
 1 files changed, 7 insertions(+), 28 deletions(-)
---
diff --git a/savers/floaters.c b/savers/floaters.c
index e3be5e9..2daee4a 100644
--- a/savers/floaters.c
+++ b/savers/floaters.c
@@ -271,8 +271,8 @@ static void screen_saver_create_floaters (ScreenSaver *screen_saver);
 static void screen_saver_destroy_floaters (ScreenSaver *screen_saver);
 static void screen_saver_on_size_allocate (ScreenSaver   *screen_saver,
                                            GtkAllocation *allocation);
-static void screen_saver_on_expose_event (ScreenSaver    *screen_saver,
-                                          GdkEventExpose *event);
+static void screen_saver_on_draw_request (ScreenSaver    *screen_saver,
+                                          cairo_t        *context);
 static gboolean do_print_screen_saver_stats (ScreenSaver *screen_saver);
 static GdkPixbuf *gamma_correct (const GdkPixbuf *input_pixbuf);
 
@@ -846,8 +846,8 @@ screen_saver_new (GtkDrawingArea  *drawing_area,
                             G_CALLBACK (screen_saver_on_size_allocate),
                             screen_saver);
 
-  g_signal_connect_swapped (G_OBJECT (drawing_area), "expose-event",
-                            G_CALLBACK (screen_saver_on_expose_event),
+  g_signal_connect_swapped (G_OBJECT (drawing_area), "draw",
+                            G_CALLBACK (screen_saver_on_draw_request),
                             screen_saver);
 
   screen_saver->first_update_time = 0.0;
@@ -997,45 +997,26 @@ compare_floaters (ScreenSaverFloater *a,
 }
 
 static void
-screen_saver_on_expose_event (ScreenSaver    *screen_saver,
-                              GdkEventExpose *event)
+screen_saver_on_draw_request (ScreenSaver    *screen_saver,
+                              cairo_t        *context)
 {
   GList *tmp;
-  cairo_t *context;
 
   if (screen_saver->floaters == NULL)
     screen_saver_create_floaters (screen_saver);
 
-  context = gdk_cairo_create (gtk_widget_get_window (screen_saver->drawing_area));
-
-  cairo_rectangle (context,
-                   (double) event->area.x,
-                   (double) event->area.y,
-                   (double) event->area.width,
-                   (double) event->area.height);
-  cairo_clip (context);
-
   screen_saver->floaters = g_list_sort (screen_saver->floaters,
                                         (GCompareFunc)compare_floaters);
 
   for (tmp = screen_saver->floaters; tmp != NULL; tmp = tmp->next)
     {
       ScreenSaverFloater *floater;
-      cairo_rectangle_int_t rect;
       gint size;
 
       floater = (ScreenSaverFloater *) tmp->data;
 
       size = CLAMP ((int) (FLOATER_MAX_SIZE * floater->scale),
-		    FLOATER_MIN_SIZE, FLOATER_MAX_SIZE);
-
-      rect.x = (int) (floater->position.x - .5 * G_SQRT2 * size);
-      rect.y = (int) (floater->position.y - .5 * G_SQRT2 * size);
-      rect.width = G_SQRT2 * size;
-      rect.height = G_SQRT2 * size;
-
-      if (!cairo_region_contains_rectangle (event->region, &rect))
-        continue;
+                    FLOATER_MIN_SIZE, FLOATER_MAX_SIZE);
 
       if (!screen_saver_floater_do_draw (screen_saver, floater, context))
         {
@@ -1044,8 +1025,6 @@ screen_saver_on_expose_event (ScreenSaver    *screen_saver,
         }
     }
 
-  cairo_destroy (context);
-
   screen_saver->draw_ops_pending = TRUE;
   screen_saver->frame_count++;
 }



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