st/wgl: Implement wglUseFontBitmaps.

wglUseFontBitmaps is currently a noop.
This patch implements this function for Windows.
Misc code clean-ups by Brian.

Signed-off-by: Olivier Lauffenburger <o.lauffenburger@topsolid.com>
Reviewed-by: Brian Paul <brianp@vmware.com>
This commit is contained in:
Olivier Lauffenburger
2017-07-06 09:27:00 -06:00
committed by Brian Paul
parent 80c6598cdb
commit 43dea65ad2

View File

@@ -214,14 +214,7 @@ wglUseFontBitmapsA(
DWORD count,
DWORD listBase )
{
(void) hdc;
(void) first;
(void) count;
(void) listBase;
assert( 0 );
return FALSE;
return wglUseFontBitmapsW(hdc, first, count, listBase);
}
WINGDIAPI BOOL APIENTRY
@@ -240,14 +233,54 @@ wglUseFontBitmapsW(
DWORD count,
DWORD listBase )
{
(void) hdc;
(void) first;
(void) count;
(void) listBase;
GLYPHMETRICS gm;
MAT2 tra;
FIXED one, minus_one, zero;
void *buffer = NULL;
BOOL result = TRUE;
assert( 0 );
one.value = 1;
one.fract = 0;
minus_one.value = -1;
minus_one.fract = 0;
zero.value = 0;
zero.fract = 0;
return FALSE;
tra.eM11 = one;
tra.eM22 = minus_one;
tra.eM12 = tra.eM21 = zero;
for (int i = 0; i < count; i++) {
DWORD size = GetGlyphOutline(hdc, first + i, GGO_BITMAP, &gm, 0,
NULL, &tra);
glNewList(listBase + i, GL_COMPILE);
if (size != GDI_ERROR) {
if (size == 0) {
glBitmap(0, 0, -gm.gmptGlyphOrigin.x, gm.gmptGlyphOrigin.y,
gm.gmCellIncX, gm.gmCellIncY, NULL);
}
else {
buffer = realloc(buffer, size);
size = GetGlyphOutline(hdc, first + i, GGO_BITMAP, &gm,
size, buffer, &tra);
glBitmap(gm.gmBlackBoxX, gm.gmBlackBoxY,
-gm.gmptGlyphOrigin.x, gm.gmptGlyphOrigin.y,
gm.gmCellIncX, gm.gmCellIncY, buffer);
}
}
else {
result = FALSE;
}
glEndList();
}
free(buffer);
return result;
}
WINGDIAPI BOOL APIENTRY