changeset 90908:523a5c7f67ea

(w32font_open): Don't set font_idx. (w32font_text_extents): Try GetTextExtentPoint32W before defaulting to font settings. (w32font_draw): Fill background explicitly.
author Jason Rumney <jasonr@gnu.org>
date Mon, 04 Jun 2007 21:26:03 +0000
parents 246f918205d5
children b9a3c82a96e0
files src/w32font.c
diffstat 1 files changed, 19 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/src/w32font.c	Sat Jun 02 23:42:41 2007 +0000
+++ b/src/w32font.c	Mon Jun 04 21:26:03 2007 +0000
@@ -273,7 +273,6 @@
   bcopy (&w32_font->metrics,  &compat_w32_font->tm, sizeof (TEXTMETRIC));
   compat_w32_font->hfont = hfont;
 
-  font->font.font_idx = 0;
   len = strlen (logfont.lfFaceName);
   font->font.name = (char *) xmalloc (len + 1);
   bcopy (logfont.lfFaceName, font->font.name, len);
@@ -425,6 +424,16 @@
               metrics[i].ascent = -gm.gmptGlyphOrigin.y;
               metrics[i].descent = gm.gmBlackBoxY + gm.gmptGlyphOrigin.y;
             }
+          else if (GetTextExtentPoint32W (dc, wcode + i, 1, &size)
+                   != GDI_ERROR)
+            {
+              metrics[i].lbearing = 0;
+              metrics[i].rbearing = size.cx
+                + ((struct w32font_info *) font)->metrics.tmOverhang;
+              metrics[i].width = size.cx;
+              metrics[i].ascent = font->ascent;
+              metrics[i].descent = font->descent;
+            }
           else
             {
               metrics[i].lbearing = 0;
@@ -486,8 +495,15 @@
 
   if (with_background)
     {
-      options = ETO_OPAQUE;
-      SetBkColor (s->hdc, s->gc->background);
+      HBRUSH brush;
+      RECT rect;
+
+      brush = CreateSolidBrush (s->gc->background);
+      rect.left = x;
+      rect.top = y - ((struct font *) (s->font_info->font))->ascent;
+      rect.right = x + s->width;
+      rect.bottom = y + ((struct font *) (s->font_info->font))->descent;
+      FillRect (s->hdc, &rect, brush);
     }
   else
     SetBkMode (s->hdc, TRANSPARENT);