/** * ppg_cairo_add_color_stop: * @pattern: (in): A #cairo_pattern_t. * @offset: (in): The offset for the color. * @color: (in): A #GdkColor. * * Adds a color stop for a gradient using a #GdkColor. * * Returns: None. * Side effects: None. */ void ppg_cairo_add_color_stop (cairo_pattern_t *pattern, gdouble offset, const GdkColor *color) { g_return_if_fail(pattern != NULL); g_return_if_fail(color != NULL); cairo_pattern_add_color_stop_rgb(pattern, offset, TO_CAIRO_RGB(*color)); }
static gboolean ppg_header_expose_event (GtkWidget *widget, GdkEventExpose *expose) { PpgHeader *header = (PpgHeader *)widget; PpgHeaderPrivate *priv; GtkStateType state = GTK_STATE_NORMAL; GtkAllocation alloc; GtkStyle *style; GdkColor begin; GdkColor end; GdkColor line; GdkColor v_begin; GdkColor v_end; cairo_pattern_t *p; cairo_t *cr; g_return_val_if_fail(PPG_IS_HEADER(header), FALSE); priv = header->priv; gtk_widget_get_allocation(widget, &alloc); style = gtk_widget_get_style(widget); begin = style->light[state]; end = style->mid[state]; line = style->dark[state]; v_begin = style->mid[state]; v_end = style->dark[state]; cr = gdk_cairo_create(expose->window); p = cairo_pattern_create_linear(0, 0, 0, alloc.height); cairo_pattern_add_color_stop_rgb(p, 0.0, TO_CAIRO_RGB(begin)); cairo_pattern_add_color_stop_rgb(p, 1.0, TO_CAIRO_RGB(end)); cairo_set_source(cr, p); cairo_rectangle(cr, 0, 0, alloc.width, alloc.height); cairo_fill(cr); cairo_pattern_destroy(p); if (priv->bottom_separator) { cairo_set_source_rgb(cr, TO_CAIRO_RGB(line)); cairo_set_line_width(cr, 1.0); cairo_move_to(cr, 0, alloc.height - 0.5); cairo_line_to(cr, alloc.width, alloc.height - 0.5); cairo_stroke(cr); } if (priv->right_separator) { p = cairo_pattern_create_linear(0, 0, 0, alloc.height); cairo_pattern_add_color_stop_rgb(p, 0.0, TO_CAIRO_RGB(v_begin)); cairo_pattern_add_color_stop_rgb(p, 1.0, TO_CAIRO_RGB(v_end)); cairo_set_source(cr, p); cairo_set_line_width(cr, 1.0); cairo_move_to(cr, alloc.width - 0.5, 0); cairo_line_to(cr, alloc.width - 0.5, alloc.height); cairo_stroke(cr); cairo_pattern_destroy(p); } cairo_destroy(cr); return FALSE; }