static gint
render_label (cairo_t *context, PangoLayout *layout, GitgRef *ref, gint x, gint y, gint height, gboolean use_state)
{
	gint w;
	gint h;
	gchar *smaller = g_strdup_printf("<span size='smaller'>%s</span>", 
	                                 gitg_ref_get_shortname(ref));

	pango_layout_set_markup(layout, smaller, -1);
	pango_layout_get_pixel_size(layout, &w, &h);

	// draw rounded rectangle
	gitg_utils_rounded_rectangle (context, x + 0.5,
	                              y + MARGIN + 0.5,
	                              w + PADDING * 2,
	                              height - MARGIN * 2,
	                              5);

	set_source_for_ref_type(context, ref, use_state);
	cairo_fill_preserve(context);

	cairo_set_source_rgb(context, 0, 0, 0);
	cairo_stroke(context);

	cairo_save(context);
	cairo_translate(context, x + PADDING, y + (height - h) / 2.0 + 0.5);
	pango_cairo_show_layout(context, layout);
	cairo_restore(context);

	g_free(smaller);
	return w;
}
Exemple #2
0
void
gitg_label_renderer_draw(GtkWidget *widget, PangoFontDescription *font, cairo_t *context, GSList *labels, GdkRectangle *area)
{
    GSList *item;
    double pos = MARGIN + 0.5;

    cairo_save(context);
    cairo_set_line_width(context, 1.0);

    PangoContext *ctx = gtk_widget_get_pango_context(widget);
    PangoLayout *layout = pango_layout_new(ctx);
    pango_layout_set_font_description(layout, font);

    for (item = labels; item; item = item->next)
    {
        GitgRef *ref = (GitgRef *)item->data;
        gint w;
        gint h;
        gchar *smaller = g_strdup_printf("<span size='smaller'>%s</span>", ref->shortname);

        pango_layout_set_markup(layout, smaller, -1);
        pango_layout_get_pixel_size(layout, &w, &h);

        // draw rounded rectangle
        rounded_rectangle(context, pos + 0.5, area->y + MARGIN + 0.5, w + PADDING * 2, area->height - MARGIN * 2, 5);


        set_source_for_ref_type(context, ref->type);
        cairo_fill_preserve(context);

        cairo_set_source_rgb(context, 0, 0, 0);
        cairo_stroke(context);

        cairo_save(context);
        cairo_translate(context, pos + PADDING, area->y + (area->height - h) / 2.0 + 0.5);
        pango_cairo_show_layout(context, layout);
        cairo_restore(context);

        pos += w + PADDING * 2 + MARGIN;
        g_free(smaller);
    }

    g_object_unref(layout);
    cairo_restore(context);
}