+ if ( width )
+ *width = 0;
+ if ( height )
+ *height = 0;
+ if ( descent )
+ *descent = 0;
+ if ( externalLeading )
+ *externalLeading = 0;
+
+ if (string.IsEmpty())
+ {
+ return;
+ }
+
+ // Set new font description
+ if (theFont)
+ pango_layout_set_font_description( m_layout, theFont->GetNativeFontInfo()->description );
+
+ // Set layout's text
+#if wxUSE_UNICODE
+ const wxCharBuffer data = wxConvUTF8.cWC2MB( string );
+ const char *dataUTF8 = (const char *)data;
+#else
+ const wxWCharBuffer wdata = wxConvLocal.cMB2WC( string );
+ if ( !wdata )
+ {
+ if (width) (*width) = 0;
+ if (height) (*height) = 0;
+ return;
+ }
+ const wxCharBuffer data = wxConvUTF8.cWC2MB( wdata );
+ const char *dataUTF8 = (const char *)data;
+#endif
+
+ if ( !dataUTF8 )
+ {
+ // hardly ideal, but what else can we do if conversion failed?
+ return;
+ }
+
+ pango_layout_set_text( m_layout, dataUTF8, strlen(dataUTF8) );
+
+ int w,h;
+ pango_layout_get_pixel_size( m_layout, &w, &h );
+
+ if (width)
+ *width = (wxCoord) w;
+ if (height)
+ *height = (wxCoord) h;
+ if (descent)
+ {
+ PangoLayoutIter *iter = pango_layout_get_iter(m_layout);
+ int baseline = pango_layout_iter_get_baseline(iter);
+ pango_layout_iter_free(iter);
+ *descent = h - PANGO_PIXELS(baseline);
+ }
+
+ // Reset old font description
+ if (theFont)
+ pango_layout_set_font_description( m_layout, m_fontdesc );