diff options
Diffstat (limited to 'widgets/table/e-table-header-utils.c')
-rw-r--r-- | widgets/table/e-table-header-utils.c | 119 |
1 files changed, 61 insertions, 58 deletions
diff --git a/widgets/table/e-table-header-utils.c b/widgets/table/e-table-header-utils.c index 34f93a701b..431009016f 100644 --- a/widgets/table/e-table-header-utils.c +++ b/widgets/table/e-table-header-utils.c @@ -60,6 +60,23 @@ build_header_layout (GtkWidget *widget, return layout; } +static void +get_button_padding (GtkWidget *widget, + GtkBorder *padding) +{ + GtkStyleContext *context; + GtkStateFlags state_flags; + + context = gtk_widget_get_style_context (widget); + state_flags = gtk_widget_get_state_flags (widget); + + gtk_style_context_save (context); + gtk_style_context_add_class (context, GTK_STYLE_CLASS_BUTTON); + gtk_style_context_get_padding (context, state_flags, padding); + + gtk_style_context_restore (context); +} + /** * e_table_header_compute_height: * @ecol: Table column description. @@ -73,15 +90,15 @@ gdouble e_table_header_compute_height (ETableCol *ecol, GtkWidget *widget) { - gint ythick; gint height; PangoLayout *layout; + GtkBorder padding; g_return_val_if_fail (ecol != NULL, -1); g_return_val_if_fail (E_IS_TABLE_COL (ecol), -1); g_return_val_if_fail (GTK_IS_WIDGET (widget), -1); - ythick = gtk_widget_get_style (widget)->ythickness; + get_button_padding (widget, &padding); layout = build_header_layout (widget, ecol->text); @@ -93,8 +110,7 @@ e_table_header_compute_height (ETableCol *ecol, } height = MAX (height, MIN_ARROW_SIZE); - - height += 2 * (ythick + HEADER_PADDING); + height += padding.top + padding.bottom + 2 * HEADER_PADDING; g_object_unref (layout); @@ -102,11 +118,12 @@ e_table_header_compute_height (ETableCol *ecol, } gdouble -e_table_header_width_extras (GtkStyle *style) +e_table_header_width_extras (GtkWidget *widget) { - g_return_val_if_fail (style != NULL, -1); + GtkBorder padding; - return 2 * (style->xthickness + HEADER_PADDING); + get_button_padding (widget, &padding); + return padding.left + padding.right + 2 * HEADER_PADDING; } /* Creates a pixmap that is a composite of a background color and the upper-left @@ -233,8 +250,6 @@ make_composite_pixmap (GdkDrawable *drawable, * e_table_header_draw_button: * @drawable: Destination drawable. * @ecol: Table column for the header information. - * @style: Style to use for drawing the button. - * @state: State of the table widget. * @widget: The table widget. * @x: Leftmost coordinate of the button. * @y: Topmost coordinate of the button. @@ -249,8 +264,6 @@ make_composite_pixmap (GdkDrawable *drawable, void e_table_header_draw_button (cairo_t *cr, ETableCol *ecol, - GtkStyle *style, - GtkStateType state, GtkWidget *widget, gint x, gint y, @@ -260,58 +273,49 @@ e_table_header_draw_button (cairo_t *cr, gint button_height, ETableColArrow arrow) { - gint xthick, ythick; gint inner_x, inner_y; gint inner_width, inner_height; gint arrow_width = 0, arrow_height = 0; PangoLayout *layout; - static gpointer g_label = NULL; + GtkStyleContext *context; + GtkBorder padding; + GtkStateFlags state_flags; g_return_if_fail (cr != NULL); g_return_if_fail (ecol != NULL); g_return_if_fail (E_IS_TABLE_COL (ecol)); - g_return_if_fail (style != NULL); g_return_if_fail (widget != NULL); g_return_if_fail (GTK_IS_WIDGET (widget)); g_return_if_fail (button_width > 0 && button_height > 0); - if (g_label == NULL) { - GtkWidget *button = gtk_button_new_with_label("Hi"); - GtkWidget *window = gtk_window_new (GTK_WINDOW_TOPLEVEL); - gtk_container_add (GTK_CONTAINER (window), button); - gtk_widget_ensure_style (window); - gtk_widget_ensure_style (button); - g_label = gtk_bin_get_child (GTK_BIN (button)); - g_object_add_weak_pointer (G_OBJECT (g_label), &g_label); - gtk_widget_ensure_style (g_label); - gtk_widget_realize (g_label); - } - - cairo_save (cr); - gdk_cairo_set_source_color ( - cr, >k_widget_get_style (GTK_WIDGET (g_label))->fg[state]); + /* Button bevel */ + context = gtk_widget_get_style_context (widget); + state_flags = gtk_widget_get_state_flags (widget); - xthick = style->xthickness; - ythick = style->ythickness; + gtk_style_context_save (context); + gtk_style_context_set_state (context, state_flags); + gtk_style_context_add_class (context, GTK_STYLE_CLASS_BUTTON); - /* Button bevel */ + gtk_style_context_get_padding (context, state_flags, &padding); - gtk_paint_box (style, cr, state, GTK_SHADOW_OUT, - widget, "button", - x, y, button_width, button_height); + gtk_render_background ( + context, cr, x, y, + button_width, button_height); + gtk_render_frame ( + context, cr, x, y, + button_width, button_height); /* Inside area */ - inner_width = button_width - 2 * (xthick + HEADER_PADDING); - inner_height = button_height - 2 * (ythick + HEADER_PADDING); + inner_width = button_width - (padding.left + padding.right + 2 * HEADER_PADDING); + inner_height = button_height - (padding.top + padding.bottom + 2 * HEADER_PADDING); if (inner_width < 1 || inner_height < 1) { - cairo_restore (cr); return; /* nothing fits */ } - inner_x = x + xthick + HEADER_PADDING; - inner_y = y + ythick + HEADER_PADDING; + inner_x = x + padding.left + HEADER_PADDING; + inner_y = y + padding.top + HEADER_PADDING; /* Arrow space */ @@ -328,12 +332,11 @@ e_table_header_draw_button (cairo_t *cr, inner_width -= arrow_width + HEADER_PADDING; break; default: - cairo_restore (cr); g_return_if_reached (); } if (inner_width < 1) { - cairo_restore (cr); + gtk_style_context_restore (context); return; /* nothing else fits */ } @@ -370,18 +373,19 @@ e_table_header_draw_button (cairo_t *cr, layout, (inner_width - (xpos - inner_x)) * PANGO_SCALE); - cairo_move_to (cr, xpos + pwidth + 1, ypos); - pango_cairo_show_layout (cr, layout); + gtk_render_layout ( + context, cr, xpos + pwidth + 1, + ypos, layout); } - gdk_cairo_set_source_pixbuf (cr, ecol->pixbuf, - xpos, inner_y + (inner_height - clip_height) / 2); - cairo_paint (cr); + gtk_render_icon ( + context, cr, ecol->pixbuf, xpos, + inner_y + (inner_height - clip_height) / 2); + } else { pango_layout_set_width (layout, inner_width * PANGO_SCALE); - cairo_move_to (cr, inner_x, inner_y); - pango_cairo_show_layout (cr, layout); + gtk_render_layout (context, cr, inner_x, inner_y, layout); } switch (arrow) { @@ -393,21 +397,20 @@ e_table_header_draw_button (cairo_t *cr, if (ecol->icon_name == NULL) inner_width += arrow_width + HEADER_PADDING; - gtk_paint_arrow (style, cr, state, - GTK_SHADOW_NONE, widget, "header", - (arrow == E_TABLE_COL_ARROW_UP) ? GTK_ARROW_UP : GTK_ARROW_DOWN, - (ecol->icon_name == NULL), - inner_x + inner_width - arrow_width, - inner_y + (inner_height - arrow_height) / 2, - arrow_width, arrow_height); + gtk_render_arrow ( + context, cr, + (arrow == E_TABLE_COL_ARROW_UP) ? 0 : G_PI, + inner_x + inner_width - arrow_width, + inner_y + (inner_height - arrow_height) / 2, + MAX (arrow_width, arrow_height)); + break; } default: - cairo_restore (cr); g_return_if_reached (); } g_object_unref (layout); - cairo_restore (cr); + gtk_style_context_restore (context); } |