]> git.eshelyaron.com Git - emacs.git/commitdiff
(w32_per_char_metric): Handle non-TrueType fonts.
authorAndrew Innes <andrewi@gnu.org>
Thu, 14 Sep 2000 21:34:22 +0000 (21:34 +0000)
committerAndrew Innes <andrewi@gnu.org>
Thu, 14 Sep 2000 21:34:22 +0000 (21:34 +0000)
src/w32term.c

index f7622568569849d99f55f2f4ce127756b9dea454..cba210ebab54d3519d93c9be910887c7d40d2f50 100644 (file)
@@ -1140,8 +1140,6 @@ w32_per_char_metric (hdc, font, char2b, font_type)
 {
   /* The result metric information.  */
   XCharStruct *pcm;
-  ABC char_widths;
-  SIZE sz;
   BOOL retval;
 
   xassert (font && char2b);
@@ -1161,37 +1159,63 @@ w32_per_char_metric (hdc, font, char2b, font_type)
   if (font->hfont)
     SelectObject (hdc, font->hfont);
 
-  if (font_type == UNICODE_FONT)
-    retval = GetCharABCWidthsW (hdc, *char2b, *char2b, &char_widths);
-  else if (font_type == ANSI_FONT)
-    retval = GetCharABCWidthsA (hdc, *char2b, *char2b, &char_widths);
-
-  if (retval)
+  if ((font->tm.tmPitchAndFamily & TMPF_TRUETYPE) != 0)
     {
-      pcm->width = char_widths.abcA + char_widths.abcB + char_widths.abcC;
-      pcm->lbearing = char_widths.abcA;
-      pcm->rbearing = pcm->width - char_widths.abcC;
+      ABC char_widths;
+
+      if (font_type == UNICODE_FONT)
+       retval = GetCharABCWidthsW (hdc, *char2b, *char2b, &char_widths);
+      else if (font_type == ANSI_FONT)
+       retval = GetCharABCWidthsA (hdc, *char2b, *char2b, &char_widths);
+
+      if (retval)
+       {
+         pcm->width = char_widths.abcA + char_widths.abcB + char_widths.abcC;
+         pcm->lbearing = char_widths.abcA;
+         pcm->rbearing = pcm->width - char_widths.abcC;
+       }
+      else
+       {
+         /* Windows 9x does not implement GetCharABCWidthsW, so if that
+            failed, try GetTextExtentPoint32W, which is implemented and
+            at least gives us some of the info we are after (total
+            character width). */
+         SIZE sz;
+
+         if (font_type == UNICODE_FONT)
+           retval = GetTextExtentPoint32W (hdc, char2b, 1, &sz);
+
+         if (retval)
+           {
+             pcm->width = sz.cx;
+             pcm->rbearing = sz.cx;
+             pcm->lbearing = 0;
+           }
+         else
+           {
+             xfree (pcm);
+             return NULL;
+           }
+       }
     }
   else
     {
-      /* Windows 9x does not implement GetCharABCWidthsW, so if that
-         failed, try GetTextExtentPoint32W, which is implemented and
-         at least gives us some of the info we are after (total
-         character width). */
-      if (font_type == UNICODE_FONT)
-          retval = GetTextExtentPoint32W (hdc, char2b, 1, &sz);
+      /* Do our best to deduce the desired metrics data for non-Truetype
+         fonts (generally, raster fonts).  */
+      INT char_width;
 
+      retval = GetCharWidth (hdc, *char2b, *char2b, &char_width);
       if (retval)
-        {
-          pcm->width = sz.cx;
-          pcm->rbearing = sz.cx;
-          pcm->lbearing = 0;
-        }
+       {
+         pcm->width = char_width;
+         pcm->rbearing = char_width;
+         pcm->lbearing = 0;
+       }
       else
-        {
-          xfree (pcm);
-          return NULL;
-        }
+       {
+         xfree (pcm);
+         return NULL;
+       }
     }
 
   pcm->ascent = FONT_BASE (font);