summaryrefslogtreecommitdiff
path: root/gtk/gtkmenuitem.c
diff options
context:
space:
mode:
authorBenjamin Otte <otte@redhat.com>2010-09-07 22:10:15 +0200
committerBenjamin Otte <otte@redhat.com>2010-09-26 15:11:38 +0200
commit475f96216dc1bd95a4f5c8f162457736a90eb044 (patch)
tree89592c2aabed25760ef40934faae7d9780138c00 /gtk/gtkmenuitem.c
parente6d1c8aeabe33c92b21e01c09d28d212e4799288 (diff)
downloadgtk+-475f96216dc1bd95a4f5c8f162457736a90eb044.tar.gz
menuitem: Port to draw vfunc
Diffstat (limited to 'gtk/gtkmenuitem.c')
-rw-r--r--gtk/gtkmenuitem.c63
1 files changed, 31 insertions, 32 deletions
diff --git a/gtk/gtkmenuitem.c b/gtk/gtkmenuitem.c
index 7950c419e0..dec347bfc3 100644
--- a/gtk/gtkmenuitem.c
+++ b/gtk/gtkmenuitem.c
@@ -90,8 +90,8 @@ static gboolean gtk_menu_item_enter (GtkWidget *widget,
GdkEventCrossing *event);
static gboolean gtk_menu_item_leave (GtkWidget *widget,
GdkEventCrossing *event);
-static gint gtk_menu_item_expose (GtkWidget *widget,
- GdkEventExpose *event);
+static gboolean gtk_menu_item_draw (GtkWidget *widget,
+ cairo_t *cr);
static void gtk_menu_item_parent_set (GtkWidget *widget,
GtkWidget *previous_parent);
@@ -192,7 +192,7 @@ gtk_menu_item_class_init (GtkMenuItemClass *klass)
object_class->destroy = gtk_menu_item_destroy;
widget_class->size_allocate = gtk_menu_item_size_allocate;
- widget_class->expose_event = gtk_menu_item_expose;
+ widget_class->draw = gtk_menu_item_draw;
widget_class->realize = gtk_menu_item_realize;
widget_class->unrealize = gtk_menu_item_unrealize;
widget_class->map = gtk_menu_item_map;
@@ -1506,33 +1506,32 @@ gtk_menu_item_leave (GtkWidget *widget,
}
static gboolean
-gtk_menu_item_expose (GtkWidget *widget,
- GdkEventExpose *event)
+gtk_menu_item_draw (GtkWidget *widget,
+ cairo_t *cr)
{
- GtkAllocation allocation;
GtkMenuItem *menu_item;
GtkStateType state_type;
GtkShadowType shadow_type, selected_shadow_type;
GtkStyle *style;
GtkWidget *child;
GdkWindow *window;
- gint width, height;
- gint x, y;
+ gint x, y, w, h, width, height;
guint border_width = gtk_container_get_border_width (GTK_CONTAINER (widget));
if (gtk_widget_is_drawable (widget))
{
menu_item = GTK_MENU_ITEM (widget);
- gtk_widget_get_allocation (widget, &allocation);
state_type = gtk_widget_get_state (widget);
style = gtk_widget_get_style (widget);
window = gtk_widget_get_window (widget);
+ width = gtk_widget_get_allocated_width (widget);
+ height = gtk_widget_get_allocated_height (widget);
- x = allocation.x + border_width;
- y = allocation.y + border_width;
- width = allocation.width - border_width * 2;
- height = allocation.height - border_width * 2;
+ x = border_width;
+ y = border_width;
+ w = width - border_width * 2;
+ h = height - border_width * 2;
child = gtk_bin_get_child (GTK_BIN (menu_item));
@@ -1541,12 +1540,12 @@ gtk_menu_item_expose (GtkWidget *widget,
gtk_widget_style_get (widget,
"selected-shadow-type", &selected_shadow_type,
NULL);
- gtk_paint_box (style,
- window,
+ gtk_cairo_paint_box (style,
+ cr,
GTK_STATE_PRELIGHT,
selected_shadow_type,
- &event->area, widget, "menuitem",
- x, y, width, height);
+ widget, "menuitem",
+ x, y, w, h);
}
if (menu_item->submenu && menu_item->show_submenu_indicator)
@@ -1571,7 +1570,7 @@ gtk_menu_item_expose (GtkWidget *widget,
if (direction == GTK_TEXT_DIR_LTR)
{
- arrow_x = x + width - horizontal_padding - arrow_size;
+ arrow_x = x + w - horizontal_padding - arrow_size;
arrow_type = GTK_ARROW_RIGHT;
}
else
@@ -1580,11 +1579,11 @@ gtk_menu_item_expose (GtkWidget *widget,
arrow_type = GTK_ARROW_LEFT;
}
- arrow_y = y + (height - arrow_size) / 2;
+ arrow_y = y + (h - arrow_size) / 2;
- gtk_paint_arrow (style, window,
+ gtk_cairo_paint_arrow (style, cr,
state_type, shadow_type,
- &event->area, widget, "menuitem",
+ widget, "menuitem",
arrow_type, TRUE,
arrow_x, arrow_y,
arrow_size, arrow_size);
@@ -1602,22 +1601,22 @@ gtk_menu_item_expose (GtkWidget *widget,
NULL);
if (wide_separators)
- gtk_paint_box (style, window,
+ gtk_cairo_paint_box (style, cr,
GTK_STATE_NORMAL, GTK_SHADOW_ETCHED_OUT,
- &event->area, widget, "hseparator",
- allocation.x + horizontal_padding + style->xthickness,
- allocation.y + (allocation.height - separator_height - style->ythickness) / 2,
- allocation.width - 2 * (horizontal_padding + style->xthickness),
+ widget, "hseparator",
+ horizontal_padding + style->xthickness,
+ (height - separator_height - style->ythickness) / 2,
+ width - 2 * (horizontal_padding + style->xthickness),
separator_height);
else
- gtk_paint_hline (style, window,
- GTK_STATE_NORMAL, &event->area, widget, "menuitem",
- allocation.x + horizontal_padding + style->xthickness,
- allocation.x + allocation.width - horizontal_padding - style->xthickness - 1,
- allocation.y + (allocation.height - style->ythickness) / 2);
+ gtk_cairo_paint_hline (style, cr,
+ GTK_STATE_NORMAL, widget, "menuitem",
+ horizontal_padding + style->xthickness,
+ width - horizontal_padding - style->xthickness - 1,
+ (height - style->ythickness) / 2);
}
- GTK_WIDGET_CLASS (gtk_menu_item_parent_class)->expose_event (widget, event);
+ GTK_WIDGET_CLASS (gtk_menu_item_parent_class)->draw (widget, cr);
}
return FALSE;