diff options
Diffstat (limited to 'gtk2_ardour/utils.cc')
-rw-r--r-- | gtk2_ardour/utils.cc | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/gtk2_ardour/utils.cc b/gtk2_ardour/utils.cc index d4228781de..fc43b4cde7 100644 --- a/gtk2_ardour/utils.cc +++ b/gtk2_ardour/utils.cc @@ -789,3 +789,30 @@ convert_bgra_to_rgba (guint8 const* src, src_pixel += 4; } } + +Glib::RefPtr<Gdk::Pixbuf> +pixbuf_from_ustring(const ustring& name, Pango::FontDescription* font, int clip_width, int clip_height) +{ + + Glib::RefPtr<Gdk::Pixbuf> buf = Gdk::Pixbuf::create(Gdk::COLORSPACE_RGB, true, 8, clip_width, clip_height); + cairo_surface_t* surface = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, clip_width, clip_height); + cairo_t *cr = cairo_create (surface); + cairo_text_extents_t te; + unsigned char* src = cairo_image_surface_get_data (surface); + + cairo_set_source_rgba (cr, 0.0, 0.0, 0.0, 1.0); + cairo_select_font_face (cr, font->get_family().c_str(), + CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_NORMAL); + cairo_set_font_size (cr, font->get_size() / Pango::SCALE); + cairo_text_extents (cr, name.c_str(), &te); + + cairo_move_to (cr, 0.5, 0.5 - te.height / 2 - te.y_bearing + clip_height / 2); + cairo_show_text (cr, name.c_str()); + + convert_bgra_to_rgba(src, buf->get_pixels(), clip_width, clip_height); + + delete [] src; + cairo_destroy(cr); + + return buf; +} |