[gtk+] menu: Port to draw vfunc



commit 0d6461714b4474432a456224dc8b4ca167115a02
Author: Benjamin Otte <otte redhat com>
Date:   Mon Sep 6 17:32:30 2010 +0200

    menu: Port to draw vfunc

 gtk/gtkmenu.c |   85 +++++++++++++++++++++++++++------------------------------
 1 files changed, 40 insertions(+), 45 deletions(-)
---
diff --git a/gtk/gtkmenu.c b/gtk/gtkmenu.c
index 70e3145..a5c3b3f 100644
--- a/gtk/gtkmenu.c
+++ b/gtk/gtkmenu.c
@@ -177,11 +177,9 @@ static void     gtk_menu_realize           (GtkWidget        *widget);
 static void     gtk_menu_unrealize         (GtkWidget        *widget);
 static void     gtk_menu_size_allocate     (GtkWidget        *widget,
 					    GtkAllocation    *allocation);
-static void     gtk_menu_paint             (GtkWidget        *widget,
-					    GdkEventExpose   *expose);
 static void     gtk_menu_show              (GtkWidget        *widget);
-static gboolean gtk_menu_expose            (GtkWidget        *widget,
-					    GdkEventExpose   *event);
+static gboolean gtk_menu_draw              (GtkWidget        *widget,
+                                            cairo_t          *cr);
 static gboolean gtk_menu_key_press         (GtkWidget        *widget,
 					    GdkEventKey      *event);
 static gboolean gtk_menu_scroll            (GtkWidget        *widget,
@@ -480,7 +478,7 @@ gtk_menu_class_init (GtkMenuClass *class)
   widget_class->unrealize = gtk_menu_unrealize;
   widget_class->size_allocate = gtk_menu_size_allocate;
   widget_class->show = gtk_menu_show;
-  widget_class->expose_event = gtk_menu_expose;
+  widget_class->draw = gtk_menu_draw;
   widget_class->scroll_event = gtk_menu_scroll;
   widget_class->key_press_event = gtk_menu_key_press;
   widget_class->button_press_event = gtk_menu_button_press;
@@ -2904,9 +2902,9 @@ get_arrows_visible_area (GtkMenu      *menu,
   *arrow_space = scroll_arrow_height - 2 * style->ythickness;
 }
 
-static void
-gtk_menu_paint (GtkWidget      *widget,
-		GdkEventExpose *event)
+static gboolean
+gtk_menu_draw (GtkWidget *widget,
+	       cairo_t   *cr)
 {
   GtkMenu *menu;
   GtkMenuPrivate *priv;
@@ -2917,8 +2915,6 @@ gtk_menu_paint (GtkWidget      *widget,
   GdkWindow *window;
   gint arrow_space;
   
-  g_return_if_fail (GTK_IS_MENU (widget));
-
   menu = GTK_MENU (widget);
   priv = gtk_menu_get_private (menu);
 
@@ -2927,7 +2923,7 @@ gtk_menu_paint (GtkWidget      *widget,
 
   get_arrows_visible_area (menu, &border, &upper, &lower, &arrow_space);
 
-  if (event->window == window)
+  if (gtk_cairo_should_draw_window (cr, gtk_widget_get_window (widget)))
     {
       gfloat arrow_scaling;
       gint arrow_size;
@@ -2935,30 +2931,32 @@ gtk_menu_paint (GtkWidget      *widget,
       gtk_widget_style_get (widget, "arrow-scaling", &arrow_scaling, NULL);
       arrow_size = arrow_scaling * arrow_space;
 
-      gtk_paint_box (style,
-                     window,
+      gtk_cairo_paint_box (style,
+		     cr,
 		     GTK_STATE_NORMAL,
 		     GTK_SHADOW_OUT,
-		     &event->area, widget, "menu",
-		     0, 0, -1, -1);
+		     widget, "menu",
+		     0, 0,
+                     gtk_widget_get_allocated_width (widget),
+                     gtk_widget_get_allocated_height (widget));
 
       if (menu->upper_arrow_visible && !menu->tearoff_active)
 	{
-          gtk_paint_box (style,
-                         window,
+	  gtk_cairo_paint_box (style,
+			 cr,
 			 priv->upper_arrow_state,
                          GTK_SHADOW_OUT,
-			 &event->area, widget, "menu_scroll_arrow_up",
+			 widget, "menu_scroll_arrow_up",
                          upper.x,
                          upper.y,
                          upper.width,
                          upper.height);
 
-          gtk_paint_arrow (style,
-                           window,
+	  gtk_cairo_paint_arrow (style,
+			   cr,
 			   priv->upper_arrow_state,
 			   GTK_SHADOW_OUT,
-			   &event->area, widget, "menu_scroll_arrow_up",
+			   widget, "menu_scroll_arrow_up",
 			   GTK_ARROW_UP,
 			   TRUE,
                            upper.x + (upper.width - arrow_size) / 2,
@@ -2968,21 +2966,21 @@ gtk_menu_paint (GtkWidget      *widget,
 
       if (menu->lower_arrow_visible && !menu->tearoff_active)
 	{
-          gtk_paint_box (style,
-                         window,
+	  gtk_cairo_paint_box (style,
+			 cr,
 			 priv->lower_arrow_state,
                          GTK_SHADOW_OUT,
-			 &event->area, widget, "menu_scroll_arrow_down",
+			 widget, "menu_scroll_arrow_down",
                          lower.x,
                          lower.y,
                          lower.width,
                          lower.height);
 
-          gtk_paint_arrow (style,
-                           window,
+	  gtk_cairo_paint_arrow (style,
+			   cr,
 			   priv->lower_arrow_state,
 			   GTK_SHADOW_OUT,
-			   &event->area, widget, "menu_scroll_arrow_down",
+			   widget, "menu_scroll_arrow_down",
 			   GTK_ARROW_DOWN,
 			   TRUE,
                            lower.x + (lower.width - arrow_size) / 2,
@@ -2990,9 +2988,17 @@ gtk_menu_paint (GtkWidget      *widget,
 			   arrow_size, arrow_size);
 	}
     }
-  else if (event->window == menu->bin_window)
+  
+  if (gtk_cairo_should_draw_window (cr, menu->bin_window))
     {
+      int xoff, yoff;
       gint y = -border.y + menu->scroll_offset;
+      
+      cairo_save (cr);
+      gdk_window_get_position (menu->view_window, &xoff, &yoff);
+      cairo_translate (cr, xoff, yoff);
+      gdk_window_get_position (menu->bin_window, &xoff, &yoff);
+      cairo_translate (cr, xoff, yoff);
 
       if (!menu->tearoff_active)
         {
@@ -3002,30 +3008,19 @@ gtk_menu_paint (GtkWidget      *widget,
           y -= arrow_border.top;
         }
 
-      gtk_paint_box (style,
-		     menu->bin_window,
+      gtk_cairo_paint_box (style,
+		     cr,
 		     GTK_STATE_NORMAL,
 		     GTK_SHADOW_OUT,
-		     &event->area, widget, "menu",
+		     widget, "menu",
 		     - border.x, y,
 		     border.width, border.height);
-    }
-}
 
-static gboolean
-gtk_menu_expose (GtkWidget	*widget,
-		 GdkEventExpose *event)
-{
-  g_return_val_if_fail (GTK_IS_MENU (widget), FALSE);
-  g_return_val_if_fail (event != NULL, FALSE);
+      cairo_restore (cr);
+    }
 
-  if (gtk_widget_is_drawable (widget))
-    {
-      gtk_menu_paint (widget, event);
+  GTK_WIDGET_CLASS (gtk_menu_parent_class)->draw (widget, cr);
 
-      GTK_WIDGET_CLASS (gtk_menu_parent_class)->expose_event (widget, event);
-    }
-  
   return FALSE;
 }
 



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