On Wed, 2007-11-21 at 09:21 +0100, Murray Cumming wrote: > On Wed, 2007-11-21 at 06:22 +0000, Dale Mellor wrote: > > On Fri, 2007-11-16 at 11:15 -0600, Jonathon Jongsma wrote: > > > On Wed, 2007-11-14 at 05:35 +0000, Dale Mellor wrote: > > > > I'm trying to use pango to write text into a PNG file. I have a > > > > Cairo::Context on a Cairo::ImageSurface which works perfectly well with > > > > graphics, but when I do Pango::Layout::create from this I get a NULL > > > > object. > > > > > > > > I have seen in the cairofontmap.h header file that the wrapping around > > > > pango_cairo_font_map_get_default is commented out, so I can't use that > > > > from which to create a Pango::Context. > > > > > > > > Ideas anybody? > > > > Thanks in advance. > > > > > > If you could provide a minimal test case to illustrate the issue, that might help people respond more easily. > > > > Here you go. > > > > =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= > > #include <cairomm/cairomm.h> > > #include <pangomm.h> > > > > int main () > > { > > Cairo::RefPtr<Cairo::ImageSurface> surface > > = Cairo::ImageSurface::create (Cairo::FORMAT_ARGB32, 750, > > 600); > > > > Cairo::RefPtr<Cairo::Context> cairo = Cairo::Context::create > > (surface); > > > > Glib::RefPtr <Pango::Layout> pango = Pango::Layout::create (cairo); > > > > return 0; > > } > > This produces these warnings. I know they are cryptic, but you can't > just ignore them: > > (process:8207): glibmm-CRITICAL **: Glib::ObjectBase* > Glib::wrap_create_new_wrapper(GObject*): assertion `wrap_func_table != > 0' failed > > (process:8207): glibmm-WARNING **: failed to wrap type of 'PangoLayout' > > It works if you initialize pangomm. In the attached corrected example I > have done that by instantiating Gtk::Main. If you don't want to use > gtkmm then you can use Pango::init() instead, I believe. Bingo, thank you very much. I wasn't ignoring the warning, I just thought it was telling me that Pango::Layout::create wasn't working. Guess I could not see through the cryptopgraphy :) I used Pango::init() in the end, but I had to include pangomm/init.h as well as the generic pangomm.h. This isn't really very C++ is it? Can't you put a singleton somewhere which makes sure pango is initialized the first time it is used? Just a thought. Thanks again for your help. Dale
Attachment:
signature.asc
Description: This is a digitally signed message part