[gtk+] menu: Port to draw vfunc
- From: Benjamin Otte <otte src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] menu: Port to draw vfunc
- Date: Sun, 26 Sep 2010 13:35:27 +0000 (UTC)
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]