diff --git a/include/wx/gtk/private/textmeasure.h b/include/wx/gtk/private/textmeasure.h index c7fc712ea7..5027be7b35 100644 --- a/include/wx/gtk/private/textmeasure.h +++ b/include/wx/gtk/private/textmeasure.h @@ -49,7 +49,6 @@ protected: wxArrayInt& widths, double scaleX); - // This class is only used for DC text measuring with GTK+ 2 as GTK+ 3 uses // Cairo and not Pango for this. However it's still used even with GTK+ 3 // for window text measuring, so the context and the layout are still diff --git a/include/wx/private/textmeasure.h b/include/wx/private/textmeasure.h index ebd6a61214..4788c992ed 100644 --- a/include/wx/private/textmeasure.h +++ b/include/wx/private/textmeasure.h @@ -23,7 +23,8 @@ class wxTextMeasureBase { public: // The first ctor argument must be non-NULL, i.e. each object of this class - // is associated with either a valid wxDC or a valid wxWindow. + // is associated with either a valid wxDC or a valid wxWindow. The font can + // be NULL to use the current DC/window font or can be specified explicitly. wxTextMeasureBase(const wxDC *dc, const wxFont *theFont); wxTextMeasureBase(const wxWindow *win, const wxFont *theFont); @@ -123,6 +124,10 @@ protected: wxCoord *descent = NULL, wxCoord *externalLeading = NULL); + // Return a valid font: if one was given to us in the ctor, use this one, + // otherwise use the current font of the associated wxDC or wxWindow. + wxFont GetFont() const; + // Exactly one of m_dc and m_win is non-NULL for any given object of this // class. diff --git a/src/common/textmeasurecmn.cpp b/src/common/textmeasurecmn.cpp index f45de698c1..4db3b892fb 100644 --- a/src/common/textmeasurecmn.cpp +++ b/src/common/textmeasurecmn.cpp @@ -53,6 +53,13 @@ wxTextMeasureBase::wxTextMeasureBase(const wxWindow *win, const wxFont *theFont) m_useDCImpl = false; } +wxFont wxTextMeasureBase::GetFont() const +{ + return m_font ? *m_font + : m_win ? m_win->GetFont() + : m_dc->GetFont(); +} + void wxTextMeasureBase::CallGetTextExtent(const wxString& string, wxCoord *width, wxCoord *height, diff --git a/src/gtk/textmeasure.cpp b/src/gtk/textmeasure.cpp index 2032a45df0..7320111f0e 100644 --- a/src/gtk/textmeasure.cpp +++ b/src/gtk/textmeasure.cpp @@ -40,8 +40,6 @@ void wxTextMeasure::Init() { - wxASSERT_MSG( m_font, wxT("wxTextMeasure needs a valid wxFont") ); - m_context = NULL; m_layout = NULL; @@ -87,7 +85,7 @@ void wxTextMeasure::BeginMeasuring() if ( m_layout ) { pango_layout_set_font_description(m_layout, - m_font->GetNativeFontInfo()->description); + GetFont().GetNativeFontInfo()->description); } } @@ -124,7 +122,7 @@ void wxTextMeasure::DoGetTextExtent(const wxString& string, } // Set layout's text - const wxCharBuffer dataUTF8 = wxGTK_CONV_FONT(string, *m_font); + const wxCharBuffer dataUTF8 = wxGTK_CONV_FONT(string, GetFont()); if ( !dataUTF8 ) { // hardly ideal, but what else can we do if conversion failed? @@ -167,7 +165,7 @@ bool wxTextMeasure::DoGetPartialTextExtents(const wxString& text, double WXUNUSED(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?