X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/48d011c8968d3cbbba6e0cd1c616949789fde0be..b35191eb54e6f307de8406f4f246d8f386fac7bf:/src/gtk/dcclient.cpp?ds=sidebyside diff --git a/src/gtk/dcclient.cpp b/src/gtk/dcclient.cpp index c673890cba..8a33377614 100644 --- a/src/gtk/dcclient.cpp +++ b/src/gtk/dcclient.cpp @@ -332,6 +332,10 @@ wxWindowDC::wxWindowDC( wxWindow *window ) #ifdef __WXGTK20__ m_context = gtk_widget_get_pango_context( widget ); + // Always take Xft context to get matching fonts + // for display and printing. + // m_context = pango_xft_get_context (GDK_DISPLAY (), DefaultScreen (GDK_DISPLAY ())); + m_fontdesc = widget->style->font_desc; #endif @@ -1422,13 +1426,19 @@ void wxWindowDC::DoDrawText( const wxString &text, wxCoord x, wxCoord y ) x = XLOG2DEV(x); y = YLOG2DEV(y); -#if defined(__WXGTK20__) && wxUSE_WCHAR_T +#if defined(__WXGTK20__) // TODO: the layout engine should be abstracted at a higher level! PangoLayout *layout = pango_layout_new(m_context); pango_layout_set_font_description(layout, m_fontdesc); { +#if wxUSE_UNICODE const wxCharBuffer data = wxConvUTF8.cWC2MB( text ); pango_layout_set_text(layout, (const char*) data, strlen( (const char*) data )); +#else + const wxWCharBuffer wdata = wxConvLocal.cMB2WC( text ); + const wxCharBuffer data = wxConvUTF8.cWC2MB( wdata ); + pango_layout_set_text(layout, (const char*) data, strlen( (const char*) data )); +#endif } PangoLayoutLine *line = (PangoLayoutLine *)pango_layout_get_lines(layout)->data; PangoRectangle rect; @@ -1459,7 +1469,7 @@ void wxWindowDC::DoDrawText( const wxString &text, wxCoord x, wxCoord y ) } #endif // GTK+ 2.0/1.x -#if defined(__WXGTK20__) && wxUSE_WCHAR_T +#if defined(__WXGTK20__) g_object_unref( G_OBJECT( layout ) ); #endif @@ -1599,18 +1609,22 @@ void wxWindowDC::DoGetTextExtent(const wxString &string, PangoFontDescription *desc = fontToUse.GetNativeFontInfo()->description; PangoLayout *layout = pango_layout_new(m_context); pango_layout_set_font_description(layout, desc); - { +#if wxUSE_UNICODE const wxCharBuffer data = wxConvUTF8.cWC2MB( string ); pango_layout_set_text(layout, (const char*) data, strlen( (const char*) data )); - } +#else + const wxWCharBuffer wdata = wxConvLocal.cMB2WC( string ); + const wxCharBuffer data = wxConvUTF8.cWC2MB( wdata ); + pango_layout_set_text(layout, (const char*) data, strlen( (const char*) data )); +#endif PangoLayoutLine *line = (PangoLayoutLine *)pango_layout_get_lines(layout)->data; PangoRectangle rect; pango_layout_line_get_extents(line, NULL, &rect); - if (width) (*width) = (wxCoord) rect.width; - if (height) (*height) = (wxCoord) rect.height; + if (width) (*width) = (wxCoord) (rect.width / PANGO_SCALE); + if (height) (*height) = (wxCoord) (rect.height / PANGO_SCALE); if (descent) { // Do something about metrics here