From c4c67dafeb9165f394c1bae25604f97921a8ae7a Mon Sep 17 00:00:00 2001
From: rathnor <rathnor>
Date: Sat, 28 Aug 2004 18:10:19 +0000
Subject: fix a issue with fonts coming up blank

---
 ChangeLog              |  2 ++
 src/FbTk/Font.cc       |  6 +++---
 src/FbTk/XmbFontImp.cc | 32 +++++++++++++++++++++++++++-----
 3 files changed, 32 insertions(+), 8 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 73c8280..36432d5 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,6 +1,8 @@
 (Format: Year/Month/Day)
 Changes for 0.9.10:
 *04/08/28:
+  * Fix some blank fonts problem for i18n (I think)  (Simon)
+    FbTk/Font.cc FbTk/XmbFontImp.cc
   * Fix menu render bug with previously highlighted items (Simon)
     FbTk/Menu.cc
 *04/08/27:
diff --git a/src/FbTk/Font.cc b/src/FbTk/Font.cc
index 7cacbd5..40da222 100644
--- a/src/FbTk/Font.cc
+++ b/src/FbTk/Font.cc
@@ -19,7 +19,7 @@
 // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 // DEALINGS IN THE SOFTWARE.
 
-//$Id: Font.cc,v 1.12 2004/08/25 10:03:09 akir Exp $
+//$Id: Font.cc,v 1.13 2004/08/28 18:10:19 rathnor Exp $
 
 
 #include "StringUtil.hh"
@@ -356,7 +356,7 @@ bool Font::load(const std::string &name) {
 }
 
 unsigned int Font::textWidth(const char * const text, unsigned int size) const {
-    if (isAntialias() && m_iconv != (iconv_t)(-1)) {
+    if (m_iconv != (iconv_t)(-1)) {
         char* rtext  = recode(m_iconv, text, size);
         if (rtext != 0)
             size = strlen(rtext);
@@ -392,7 +392,7 @@ void Font::drawText(Drawable w, int screen, GC gc,
     // so we don't end up in a loop with m_shadow
     static bool first_run = true; 
 
-    if (isAntialias() && m_iconv != (iconv_t)(-1) && first_run) {
+    if (m_iconv != (iconv_t)(-1) && first_run) {
         rtext = recode(m_iconv, text, len);
         if (rtext != 0) {
             len = strlen(rtext);
diff --git a/src/FbTk/XmbFontImp.cc b/src/FbTk/XmbFontImp.cc
index d06f05d..b6f8941 100644
--- a/src/FbTk/XmbFontImp.cc
+++ b/src/FbTk/XmbFontImp.cc
@@ -19,7 +19,7 @@
 // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 // DEALINGS IN THE SOFTWARE.
 
-// $Id: XmbFontImp.cc,v 1.8 2004/08/10 11:57:35 fluxgen Exp $
+// $Id: XmbFontImp.cc,v 1.9 2004/08/28 18:10:19 rathnor Exp $
 
 #include "XmbFontImp.hh"
 
@@ -116,17 +116,31 @@ const char *getFontElement(const char *pattern, char *buf, int bufsiz, ...) {
     return 0;
 }
 
-XFontSet createFontSet(const char *fontname) {
+XFontSet createFontSet(const char *fontname, bool utf8mode) {
     Display *display = FbTk::App::instance()->display();
     XFontSet fs;
     const int FONT_ELEMENT_SIZE=50;
     char **missing, *def = "-";
     int nmissing, pixel_size = 0, buf_size = 0;
     char weight[FONT_ELEMENT_SIZE], slant[FONT_ELEMENT_SIZE];
+    char * orig_locale = "";
 
+#ifdef HAVE_SETLOCALE
+    if (utf8mode) {
+        orig_locale = setlocale(LC_CTYPE, NULL);
+        setlocale(LC_CTYPE, "UTF-8");
+    }
+#endif // HAVE_SETLOCALE
     fs = XCreateFontSet(display,
                         fontname, &missing, &nmissing, &def);
-    if (fs && (! nmissing)) return fs;
+
+    if (fs && (! nmissing)) {
+#ifdef HAVE_SETLOCALE
+        if (utf8mode)
+            setlocale(LC_CTYPE, orig_locale);
+#endif // HAVE_SETLOCALE
+        return fs;
+    }
 
 #ifdef HAVE_SETLOCALE
     if (! fs) {
@@ -135,7 +149,7 @@ XFontSet createFontSet(const char *fontname) {
         setlocale(LC_CTYPE, "C");
         fs = XCreateFontSet(display, fontname,
                             &missing, &nmissing, &def);
-        setlocale(LC_CTYPE, "");
+        setlocale(LC_CTYPE, orig_locale);
     }
 #endif // HAVE_SETLOCALE
 
@@ -179,6 +193,11 @@ XFontSet createFontSet(const char *fontname) {
                         &missing, &nmissing, &def);
     delete [] pattern2;
 
+#ifdef HAVE_SETLOCALE
+    if (utf8mode)
+        setlocale(LC_CTYPE, orig_locale);
+#endif // HAVE_SETLOCALE
+
     return fs;
 }
 
@@ -198,11 +217,14 @@ XmbFontImp::~XmbFontImp() {
 bool XmbFontImp::load(const std::string &fontname) {
     if (fontname.size() == 0)
         return false;
-    XFontSet set = createFontSet(fontname.c_str());
+
+    XFontSet set = createFontSet(fontname.c_str(), m_utf8mode);
     if (set == 0)
         return false;
+
     if (m_fontset != 0)
         XFreeFontSet(App::instance()->display(), m_fontset);
+
     m_fontset = set;
     m_setextents = XExtentsOfFontSet(m_fontset);
 
-- 
cgit v0.11.2