# HG changeset patch # User Jason Rumney # Date 1180992363 0 # Node ID 523a5c7f67ea5936fcf37a9161a52722727b9aef # Parent 246f918205d52fa903ad76c1997ad2e1c85961ac (w32font_open): Don't set font_idx. (w32font_text_extents): Try GetTextExtentPoint32W before defaulting to font settings. (w32font_draw): Fill background explicitly. diff -r 246f918205d5 -r 523a5c7f67ea src/w32font.c --- 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);