From b1f0abe45eb527ed765be19440329ede84b6e35e Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Sun, 19 Sep 2004 10:55:51 +0000 Subject: [PATCH] don't crash under GTK1 if we failed to get GdkFont in GetTextExtent() git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@29217 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- src/gtk/dcclient.cpp | 29 ++++++++++++++++++++--------- src/gtk1/dcclient.cpp | 29 ++++++++++++++++++++--------- 2 files changed, 40 insertions(+), 18 deletions(-) diff --git a/src/gtk/dcclient.cpp b/src/gtk/dcclient.cpp index 0a9ae2ffd8..e38f88b998 100644 --- a/src/gtk/dcclient.cpp +++ b/src/gtk/dcclient.cpp @@ -1711,10 +1711,17 @@ void wxWindowDC::DoGetTextExtent(const wxString &string, wxCoord *descent, wxCoord *externalLeading, wxFont *theFont) const { + if ( width ) + *width = 0; + if ( height ) + *height = 0; + if ( descent ) + *descent = 0; + if ( externalLeading ) + *externalLeading = 0; + if (string.IsEmpty()) { - if (width) (*width) = 0; - if (height) (*height) = 0; return; } @@ -1761,21 +1768,25 @@ void wxWindowDC::DoGetTextExtent(const wxString &string, pango_layout_iter_free(iter); *descent = h - PANGO_PIXELS(baseline); } - if (externalLeading) - *externalLeading = 0; // ?? // Reset old font description if (theFont) pango_layout_set_font_description( m_layout, m_fontdesc ); #else // GTK+ 1.x wxFont fontToUse = m_font; - if (theFont) fontToUse = *theFont; + if (theFont) + fontToUse = *theFont; GdkFont *font = fontToUse.GetInternalFont( m_scaleY ); - if (width) (*width) = wxCoord(gdk_string_width( font, string.mbc_str() ) / m_scaleX); - if (height) (*height) = wxCoord((font->ascent + font->descent) / m_scaleY); - if (descent) (*descent) = wxCoord(font->descent / m_scaleY); - if (externalLeading) (*externalLeading) = 0; // ?? + if ( !font ) + return; + + if (width) + *width = wxCoord(gdk_string_width( font, string.mbc_str() ) / m_scaleX); + if (height) + *height = wxCoord((font->ascent + font->descent) / m_scaleY); + if (descent) + *descent = wxCoord(font->descent / m_scaleY); #endif // GTK+ 2/1 } diff --git a/src/gtk1/dcclient.cpp b/src/gtk1/dcclient.cpp index 0a9ae2ffd8..e38f88b998 100644 --- a/src/gtk1/dcclient.cpp +++ b/src/gtk1/dcclient.cpp @@ -1711,10 +1711,17 @@ void wxWindowDC::DoGetTextExtent(const wxString &string, wxCoord *descent, wxCoord *externalLeading, wxFont *theFont) const { + if ( width ) + *width = 0; + if ( height ) + *height = 0; + if ( descent ) + *descent = 0; + if ( externalLeading ) + *externalLeading = 0; + if (string.IsEmpty()) { - if (width) (*width) = 0; - if (height) (*height) = 0; return; } @@ -1761,21 +1768,25 @@ void wxWindowDC::DoGetTextExtent(const wxString &string, pango_layout_iter_free(iter); *descent = h - PANGO_PIXELS(baseline); } - if (externalLeading) - *externalLeading = 0; // ?? // Reset old font description if (theFont) pango_layout_set_font_description( m_layout, m_fontdesc ); #else // GTK+ 1.x wxFont fontToUse = m_font; - if (theFont) fontToUse = *theFont; + if (theFont) + fontToUse = *theFont; GdkFont *font = fontToUse.GetInternalFont( m_scaleY ); - if (width) (*width) = wxCoord(gdk_string_width( font, string.mbc_str() ) / m_scaleX); - if (height) (*height) = wxCoord((font->ascent + font->descent) / m_scaleY); - if (descent) (*descent) = wxCoord(font->descent / m_scaleY); - if (externalLeading) (*externalLeading) = 0; // ?? + if ( !font ) + return; + + if (width) + *width = wxCoord(gdk_string_width( font, string.mbc_str() ) / m_scaleX); + if (height) + *height = wxCoord((font->ascent + font->descent) / m_scaleY); + if (descent) + *descent = wxCoord(font->descent / m_scaleY); #endif // GTK+ 2/1 }