From 5f4d18209157a5ce671f101ec25734ac075a79f9 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Sat, 21 Apr 2007 18:32:29 +0000 Subject: [PATCH] added safe check for Pango version and use it to avoid underline hack in wxDC::DrawText() (modified patch 1702301) git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@45564 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/gtk/private.h | 10 ++++++++++ src/gtk/dcclient.cpp | 10 +++++----- src/gtk/utilsgtk.cpp | 22 ++++++++++++++++++++++ 3 files changed, 37 insertions(+), 5 deletions(-) diff --git a/include/wx/gtk/private.h b/include/wx/gtk/private.h index f21f5e98dd..d19eed94ea 100644 --- a/include/wx/gtk/private.h +++ b/include/wx/gtk/private.h @@ -23,6 +23,16 @@ #define GTK_CHECK_VERSION(a, b, c) 0 #endif +// pango_version_check symbol is quite recent ATM (4/2007)... so we +// use our own wrapper which implements a smart trick. +// Use this function as you'd use pango_version_check: +// +// if (!wx_pango_version_check(1,18,0)) +// ... call to a function available only in pango >= 1.18 ... +// +// and use it only to test for pango versions >= 1.16.0 +extern const gchar *wx_pango_version_check(int major, int minor, int micro); + #if wxUSE_UNICODE #define wxGTK_CONV(s) wxConvUTF8.cWX2MB((s)) #define wxGTK_CONV_ENC(s, enc) wxGTK_CONV((s)) diff --git a/src/gtk/dcclient.cpp b/src/gtk/dcclient.cpp index 81eaf12861..52a36301f1 100644 --- a/src/gtk/dcclient.cpp +++ b/src/gtk/dcclient.cpp @@ -1472,11 +1472,11 @@ void wxWindowDC::DoDrawText( const wxString &text, wxCoord x, wxCoord y ) return; size_t datalen = strlen(data); - // TODO: as soon as Pango provides a function to check at runtime its - // version, we can use it to disable the underline hack for - // Pango >= 1.16 as the "underline of leading/trailing spaces" - // has been fixed there - bool needshack = underlined; + // in Pango >= 1.16 the "underline of leading/trailing spaces" bug + // has been fixed and thus the hack implemented below should never be used + static bool pangoOk = !wx_pango_version_check(1, 16, 0); + + bool needshack = underlined && !pangoOk; char *hackstring = NULL; if (needshack) diff --git a/src/gtk/utilsgtk.cpp b/src/gtk/utilsgtk.cpp index f5af22987d..2ce48b8fb1 100644 --- a/src/gtk/utilsgtk.cpp +++ b/src/gtk/utilsgtk.cpp @@ -224,6 +224,28 @@ wxCharBuffer wxConvertFromGTK(const wxString& s, wxFontEncoding enc) #endif // !wxUSE_UNICODE +// Returns false if version is certainly greater or equal than major.minor.micro +// Returns true if version is lower than major.minor.micro OR it cannot be +// determined and one should not rely on the availability of pango version +// major.minor.micro, nor the non-availability +const gchar *wx_pango_version_check (int major, int minor, int micro) +{ +#ifdef PANGO_VERSION_MAJOR + if (!gtk_check_version (2,11,0)) + { + // GTK+ 2.11 requires Pango >= 1.15.3 and pango_version_check + // was added in Pango 1.15.2 thus we know for sure the pango lib we're + // using has the pango_version_check function: + return pango_version_check (major, minor, micro); + } + + return "can't check"; +#else // !PANGO_VERSION_MAJOR + return "too old headers"; +#endif +} + + // ---------------------------------------------------------------------------- // subprocess routines // ---------------------------------------------------------------------------- -- 2.47.2