From 2ee3bde1cf15a39a891bf130c118f93222cd6583 Mon Sep 17 00:00:00 2001
From: jenglish <jenglish@flightlab.com>
Date: Sun, 27 Jan 2008 16:44:11 +0000
Subject: Fix [Bug 835848]. Use FcTypeDouble for XFT_SIZE attribute.

---
 ChangeLog          | 10 ++++++++++
 unix/tkUnixRFont.c | 23 ++++++++++++++---------
 2 files changed, 24 insertions(+), 9 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index eb77365..775d4fc 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+2008-01-27  Joe English  <jenglish@users.sourceforge.net>
+
+	* unix/tkUnixRFont.c: Merged common code from InitFont()
+	and TkpGetFontAttrsForChar(), factored into GetTkFontAttributes()
+	and GetTkFontMetrics().  Removed write-only struct UnixFtFont
+	member 'drawable'.  Removed unneeded double-pointer indirections.
+	Ensure that TkFontAttributes.family member is a Tk_Uid, as
+	specified.  Use FcTypeDouble for XFT_SIZE attribute.
+	Finally: fix [Bug 835848].
+
 2008-01-25  Don Porter  <dgp@users.sourceforge.net>
 
 	* changes:	Updates for 8.5.1 release.
diff --git a/unix/tkUnixRFont.c b/unix/tkUnixRFont.c
index f14ba40..b6739ba 100644
--- a/unix/tkUnixRFont.c
+++ b/unix/tkUnixRFont.c
@@ -8,7 +8,7 @@
  * See the file "license.terms" for information on usage and redistribution of
  * this file, and for a DISCLAIMER OF ALL WARRANTIES.
  *
- * RCS: @(#) $Id: tkUnixRFont.c,v 1.21 2008/01/27 16:40:24 jenglish Exp $
+ * RCS: @(#) $Id: tkUnixRFont.c,v 1.22 2008/01/27 16:44:12 jenglish Exp $
  */
 
 #include "tkUnixInt.h"
@@ -101,16 +101,21 @@ GetTkFontAttributes(
     TkFontAttributes *faPtr)
 {
     char *family;
-    int weight, slant;
-    double size;
+    int weight, slant, size, pxsize;
+    double ptsize;
 
     if (XftPatternGetString(ftFont->pattern, XFT_FAMILY, 0,
 	    &family) != XftResultMatch) {
 	family = "Unknown";
     }
     if (XftPatternGetDouble(ftFont->pattern, XFT_SIZE, 0,
-	    &size) != XftResultMatch) {
-	size = 12.0;
+	    &ptsize) == XftResultMatch) {
+	size = (int)ptsize;
+    } else if (XftPatternGetInteger(ftFont->pattern, XFT_PIXEL_SIZE, 0,
+	    &pxsize) == XftResultMatch) {
+	size = -pxsize;
+    } else {
+	size = 12;
     }
     if (XftPatternGetInteger(ftFont->pattern, XFT_WEIGHT, 0,
 	    &weight) != XftResultMatch) {
@@ -122,12 +127,12 @@ GetTkFontAttributes(
     }
 
 #if DEBUG_FONTSEL
-    printf("family %s size %g weight %d slant %d\n",
+    printf("family %s size %d weight %d slant %d\n",
 	    family, size, weight, slant);
 #endif /* DEBUG_FONTSEL */
 
     faPtr->family = Tk_GetUid(family);
-    faPtr->size = (int) size;
+    faPtr->size = size;
     faPtr->weight = (weight > XFT_WEIGHT_MEDIUM) ? TK_FW_BOLD : TK_FW_NORMAL;
     faPtr->slant = (slant > XFT_SLANT_ROMAN) ? TK_FS_ITALIC : TK_FS_ROMAN;
     faPtr->underline = 0;
@@ -330,11 +335,11 @@ TkpGetFontFromAttributes(
 	XftPatternAddString(pattern, XFT_FAMILY, faPtr->family);
     }
     if (faPtr->size > 0) {
-	XftPatternAddInteger(pattern, XFT_SIZE, faPtr->size);
+	XftPatternAddDouble(pattern, XFT_SIZE, (double)faPtr->size);
     } else if (faPtr->size < 0) {
 	XftPatternAddInteger(pattern, XFT_PIXEL_SIZE, -faPtr->size);
     } else {
-	XftPatternAddInteger(pattern, XFT_SIZE, 12);
+	XftPatternAddDouble(pattern, XFT_SIZE, 12.0);
     }
     switch (faPtr->weight) {
     case TK_FW_NORMAL:
-- 
cgit v0.12