[mutter] ui: Port testgradient example to GTK3



commit d746591894d6de2c334361ddb10de1f4219c3859
Author: Benjamin Otte <otte redhat com>
Date:   Thu Dec 2 15:50:02 2010 +0100

    ui: Port testgradient example to GTK3
    
    https://bugzilla.gnome.org/show_bug.cgi?id=636301

 src/ui/testgradient.c |   87 +++++++++++++++++-------------------------------
 1 files changed, 31 insertions(+), 56 deletions(-)
---
diff --git a/src/ui/testgradient.c b/src/ui/testgradient.c
index 2158984..eb20fa9 100644
--- a/src/ui/testgradient.c
+++ b/src/ui/testgradient.c
@@ -23,19 +23,17 @@
 #include "gradient.h"
 #include <gtk/gtk.h>
 
-typedef void (* RenderGradientFunc) (GdkDrawable *drawable,
-                                     cairo_t     *cr,
+typedef void (* RenderGradientFunc) (cairo_t     *cr,
                                      int          width,
                                      int          height);
 
 static void
-draw_checkerboard (GdkDrawable *drawable,
-                   int          width,
-                   int          height)
+draw_checkerboard (cairo_t *cr,
+                   int      width,
+                   int      height)
 {
   gint i, j, xcount, ycount;
   GdkColor color1, color2;
-  cairo_t *cr;
   
 #define CHECK_SIZE 10
 #define SPACING 2  
@@ -48,8 +46,6 @@ draw_checkerboard (GdkDrawable *drawable,
   color2.green = 50000;
   color2.blue = 50000;
 
-  cr = gdk_cairo_create (drawable);
-
   xcount = 0;
   i = SPACING;
   while (i < width)
@@ -77,13 +73,10 @@ draw_checkerboard (GdkDrawable *drawable,
       i += CHECK_SIZE + SPACING;
       ++xcount;
     }
-  
-  cairo_destroy (cr);
 }
 
 static void
-render_simple (GdkDrawable *drawable,
-               cairo_t     *cr,
+render_simple (cairo_t     *cr,
                int width, int height,
                MetaGradientType type,
                gboolean    with_alpha)
@@ -115,7 +108,7 @@ render_simple (GdkDrawable *drawable,
                                alphas, G_N_ELEMENTS (alphas),
                                META_GRADIENT_HORIZONTAL);
       
-      draw_checkerboard (drawable, width, height);
+      draw_checkerboard (cr , width, height);
     }
     
   gdk_cairo_set_source_pixbuf (cr, pixbuf, 0, 0);
@@ -126,40 +119,35 @@ render_simple (GdkDrawable *drawable,
 }
 
 static void
-render_vertical_func (GdkDrawable *drawable,
-                      cairo_t *cr,
+render_vertical_func (cairo_t *cr,
                       int width, int height)
 {
-  render_simple (drawable, cr, width, height, META_GRADIENT_VERTICAL, FALSE);
+  render_simple (cr, width, height, META_GRADIENT_VERTICAL, FALSE);
 }
 
 static void
-render_horizontal_func (GdkDrawable *drawable,
-                        cairo_t *cr,
+render_horizontal_func (cairo_t *cr,
                         int width, int height)
 {
-  render_simple (drawable, cr, width, height, META_GRADIENT_HORIZONTAL, FALSE);
+  render_simple (cr, width, height, META_GRADIENT_HORIZONTAL, FALSE);
 }
 
 static void
-render_diagonal_func (GdkDrawable *drawable,
-                      cairo_t *cr,
+render_diagonal_func (cairo_t *cr,
                       int width, int height)
 {
-  render_simple (drawable, cr, width, height, META_GRADIENT_DIAGONAL, FALSE);
+  render_simple (cr, width, height, META_GRADIENT_DIAGONAL, FALSE);
 }
 
 static void
-render_diagonal_alpha_func (GdkDrawable *drawable,
-                            cairo_t *cr,
+render_diagonal_alpha_func (cairo_t *cr,
                             int width, int height)
 {
-  render_simple (drawable, cr, width, height, META_GRADIENT_DIAGONAL, TRUE);
+  render_simple (cr, width, height, META_GRADIENT_DIAGONAL, TRUE);
 }
 
 static void
-render_multi (GdkDrawable *drawable,
-              cairo_t     *cr,
+render_multi (cairo_t     *cr,
               int width, int height,
               MetaGradientType type)
 {
@@ -186,32 +174,28 @@ render_multi (GdkDrawable *drawable,
 }
 
 static void
-render_vertical_multi_func (GdkDrawable *drawable,
-                            cairo_t *cr,
+render_vertical_multi_func (cairo_t *cr,
                             int width, int height)
 {
-  render_multi (drawable, cr, width, height, META_GRADIENT_VERTICAL);
+  render_multi (cr, width, height, META_GRADIENT_VERTICAL);
 }
 
 static void
-render_horizontal_multi_func (GdkDrawable *drawable,
-                              cairo_t *cr,
+render_horizontal_multi_func (cairo_t *cr,
                               int width, int height)
 {
-  render_multi (drawable, cr, width, height, META_GRADIENT_HORIZONTAL);
+  render_multi (cr, width, height, META_GRADIENT_HORIZONTAL);
 }
 
 static void
-render_diagonal_multi_func (GdkDrawable *drawable,
-                            cairo_t *cr,
+render_diagonal_multi_func (cairo_t *cr,
                             int width, int height)
 {
-  render_multi (drawable, cr, width, height, META_GRADIENT_DIAGONAL);
+  render_multi (cr, width, height, META_GRADIENT_DIAGONAL);
 }
 
 static void
-render_interwoven_func (GdkDrawable *drawable,
-                        cairo_t     *cr,
+render_interwoven_func (cairo_t *cr,
                         int width, int height)
 {
   GdkPixbuf *pixbuf;
@@ -235,31 +219,22 @@ render_interwoven_func (GdkDrawable *drawable,
 }
 
 static gboolean
-expose_callback (GtkWidget *widget,
-                 GdkEventExpose *event,
-                 gpointer data)
+draw_callback (GtkWidget *widget,
+               cairo_t   *cr,
+               gpointer   data)
 {
   RenderGradientFunc func = data;
-  GdkWindow *window;
-  GtkAllocation allocation;
   GtkStyle *style;
-  cairo_t *cr;
 
   style = gtk_widget_get_style (widget);
-  gtk_widget_get_allocation (widget, &allocation);
 
-  window = gtk_widget_get_window (widget);
-  cr = gdk_cairo_create (window);
   gdk_cairo_set_source_color (cr, &style->fg[gtk_widget_get_state (widget)]);
 
-  (* func) (gtk_widget_get_window (widget),
-            cr,
-            allocation.width,
-            allocation.height);
-
-  cairo_destroy (cr);
+  (* func) (cr,
+            gtk_widget_get_allocated_width (widget),
+            gtk_widget_get_allocated_height (widget));
 
-  return TRUE;
+  return FALSE;
 }
 
 static GtkWidget*
@@ -280,8 +255,8 @@ create_gradient_window (const char *title,
   gtk_window_set_default_size (GTK_WINDOW (window), 175, 175);
   
   g_signal_connect (G_OBJECT (drawing_area),
-                    "expose_event",
-                    G_CALLBACK (expose_callback),
+                    "draw",
+                    G_CALLBACK (draw_callback),
                     func);
 
   gtk_container_add (GTK_CONTAINER (window), drawing_area);



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