X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/c70155b8ee6cdf24966de6bf24370b0454a045ab..ad653fa23069c5d9378247084f03c9a718c3ad62:/src/gtk/textmeasure.cpp?ds=sidebyside diff --git a/src/gtk/textmeasure.cpp b/src/gtk/textmeasure.cpp index 8aa2ae2c59..87bc7c90d5 100644 --- a/src/gtk/textmeasure.cpp +++ b/src/gtk/textmeasure.cpp @@ -28,6 +28,7 @@ #include "wx/fontutil.h" #include "wx/gtk/private.h" +#include "wx/gtk/dc.h" #ifndef __WXGTK3__ #include "wx/gtk/dcclient.h" @@ -39,13 +40,24 @@ void wxTextMeasure::Init() { - wxASSERT_MSG( m_font, wxT("wxTextMeasure needs a valid wxFont") ); + m_context = NULL; + m_layout = NULL; #ifndef __WXGTK3__ m_wdc = NULL; + + if ( m_dc ) + { + wxClassInfo* const ci = m_dc->GetImpl()->GetClassInfo(); + + // Currently the code here only works with wxWindowDCImpl and only in + // wxGTK2 as wxGTK3 uses Cairo and not Pango for all its DCs. + if ( ci->IsKindOf(wxCLASSINFO(wxWindowDCImpl))) + { + m_useDCImpl = false; + } + } #endif // GTK+ < 3 - m_context = NULL; - m_layout = NULL; } // Get Gtk needed elements, if we have not them yet. @@ -73,7 +85,7 @@ void wxTextMeasure::BeginMeasuring() if ( m_layout ) { pango_layout_set_font_description(m_layout, - m_font->GetNativeFontInfo()->description); + GetFont().GetNativeFontInfo()->description); } } @@ -104,14 +116,17 @@ void wxTextMeasure::DoGetTextExtent(const wxString& string, { if ( !m_context ) { - *width = - *height = 0; + if ( width ) + *width = 0; + + if ( height ) + *height = 0; return; } // Set layout's text - const wxCharBuffer dataUTF8 = wxGTK_CONV_FONT(string, *m_font); - if ( !dataUTF8 ) + const wxCharBuffer dataUTF8 = wxGTK_CONV_FONT(string, GetFont()); + if ( !dataUTF8 && !string.empty() ) { // hardly ideal, but what else can we do if conversion failed? wxLogLastError(wxT("GetTextExtent")); @@ -150,10 +165,13 @@ void wxTextMeasure::DoGetTextExtent(const wxString& string, bool wxTextMeasure::DoGetPartialTextExtents(const wxString& text, wxArrayInt& widths, - double WXUNUSED(scaleX)) + double scaleX) { + if ( !m_layout ) + return wxTextMeasureBase::DoGetPartialTextExtents(text, widths, scaleX); + // Set layout's text - const wxCharBuffer dataUTF8 = wxGTK_CONV_FONT(text, *m_font); + const wxCharBuffer dataUTF8 = wxGTK_CONV_FONT(text, GetFont()); if ( !dataUTF8 ) { // hardly ideal, but what else can we do if conversion failed?