static void gm_cell_renderer_expander_render (GtkCellRenderer *cell, GdkWindow *window, GtkWidget *widget, GdkRectangle *background_area, GdkRectangle *cell_area, GdkRectangle *expose_area, G_GNUC_UNUSED GtkCellRendererState flags) { GmCellRendererExpander *expander; GmCellRendererExpanderPriv *priv; GtkExpanderStyle expander_style; gint x_offset, y_offset; guint xpad, ypad; GtkAllocation allocation; expander = (GmCellRendererExpander*) cell; priv = GET_PRIV (expander); g_object_get (G_OBJECT (cell), "xpad", &xpad, "ypad", &ypad, NULL); gtk_widget_get_allocation (widget, &allocation); if (priv->animation_node) { GtkTreePath *path; GdkRectangle rect; /* Not sure if I like this ... */ path = gtk_tree_row_reference_get_path (priv->animation_node); gtk_tree_view_get_background_area (priv->animation_view, path, NULL, &rect); gtk_tree_path_free (path); if (background_area->y == rect.y) expander_style = priv->animation_style; else expander_style = priv->expander_style; } else expander_style = priv->expander_style; gm_cell_renderer_expander_get_size (cell, widget, cell_area, &x_offset, &y_offset, NULL, NULL); gtk_paint_expander (gtk_widget_get_style (widget), window, GTK_STATE_NORMAL, expose_area, widget, "treeview", cell_area->x + x_offset + xpad + priv->expander_size / 2, cell_area->y + y_offset + ypad + priv->expander_size / 2, expander_style); gtk_paint_hline (gtk_widget_get_style (widget), window, GTK_STATE_NORMAL, NULL, widget, NULL, 0, allocation.width, cell_area->y + cell_area->height); }
static void gm_cell_renderer_expander_render (GtkCellRenderer *cell, cairo_t *cr, GtkWidget *widget, G_GNUC_UNUSED const GdkRectangle *background_area, const GdkRectangle *cell_area, GtkCellRendererState flags) { GmCellRendererExpander *expander; GmCellRendererExpanderPriv *priv; gint x_offset, y_offset; guint xpad, ypad; GtkStyleContext *style; GtkStateFlags state; expander = (GmCellRendererExpander *) cell; priv = expander->priv; gm_cell_renderer_expander_get_size (cell, widget, (GdkRectangle *) cell_area, &x_offset, &y_offset, NULL, NULL); g_object_get (cell, "xpad", &xpad, "ypad", &ypad, NULL); style = gtk_widget_get_style_context (widget); gtk_style_context_save (style); gtk_style_context_add_class (style, GTK_STYLE_CLASS_EXPANDER); state = gtk_cell_renderer_get_state (cell, widget, flags); if (priv->expander_style == GTK_EXPANDER_COLLAPSED) state |= GTK_STATE_FLAG_NORMAL; else state |= GTK_STATE_FLAG_ACTIVE; gtk_style_context_set_state (style, state); gtk_render_expander (style, cr, cell_area->x + x_offset + xpad, cell_area->y + y_offset + ypad, priv->expander_size, priv->expander_size); gtk_style_context_restore (style); }