aboutsummaryrefslogtreecommitdiff
path: root/xorg-server/glx/xfont.c
diff options
context:
space:
mode:
Diffstat (limited to 'xorg-server/glx/xfont.c')
-rw-r--r--xorg-server/glx/xfont.c151
1 files changed, 78 insertions, 73 deletions
diff --git a/xorg-server/glx/xfont.c b/xorg-server/glx/xfont.c
index dde0d14b5..47ddf8f7c 100644
--- a/xorg-server/glx/xfont.c
+++ b/xorg-server/glx/xfont.c
@@ -52,16 +52,18 @@
/*
** Make a single GL bitmap from a single X glyph
*/
-static int __glXMakeBitmapFromGlyph(FontPtr font, CharInfoPtr pci)
+static int
+__glXMakeBitmapFromGlyph(FontPtr font, CharInfoPtr pci)
{
int i, j;
- int widthPadded; /* width of glyph in bytes, as padded by X */
- int allocBytes; /* bytes to allocate to store bitmap */
- int w; /* width of glyph in bits */
- int h; /* height of glyph */
+ int widthPadded; /* width of glyph in bytes, as padded by X */
+ int allocBytes; /* bytes to allocate to store bitmap */
+ int w; /* width of glyph in bits */
+ int h; /* height of glyph */
register unsigned char *pglyph;
register unsigned char *p;
unsigned char *allocbuf;
+
#define __GL_CHAR_BUF_SIZE 2048
unsigned char buf[__GL_CHAR_BUF_SIZE];
@@ -70,35 +72,36 @@ static int __glXMakeBitmapFromGlyph(FontPtr font, CharInfoPtr pci)
widthPadded = GLYPHWIDTHBYTESPADDED(pci);
/*
- ** Use the local buf if possible, otherwise malloc.
- */
+ ** Use the local buf if possible, otherwise malloc.
+ */
allocBytes = widthPadded * h;
if (allocBytes <= __GL_CHAR_BUF_SIZE) {
- p = buf;
- allocbuf = 0;
- } else {
- p = (unsigned char *) malloc(allocBytes);
- if (!p)
- return BadAlloc;
- allocbuf = p;
+ p = buf;
+ allocbuf = 0;
+ }
+ else {
+ p = (unsigned char *) malloc(allocBytes);
+ if (!p)
+ return BadAlloc;
+ allocbuf = p;
}
/*
- ** We have to reverse the picture, top to bottom
- */
-
- pglyph = FONTGLYPHBITS(FONTGLYPHS(font), pci) + (h-1)*widthPadded;
- for (j=0; j < h; j++) {
- for (i=0; i < widthPadded; i++) {
- p[i] = pglyph[i];
- }
- pglyph -= widthPadded;
- p += widthPadded;
+ ** We have to reverse the picture, top to bottom
+ */
+
+ pglyph = FONTGLYPHBITS(FONTGLYPHS(font), pci) + (h - 1) * widthPadded;
+ for (j = 0; j < h; j++) {
+ for (i = 0; i < widthPadded; i++) {
+ p[i] = pglyph[i];
+ }
+ pglyph -= widthPadded;
+ p += widthPadded;
}
- CALL_Bitmap( GET_DISPATCH(), (w, h, -pci->metrics.leftSideBearing,
- pci->metrics.descent,
- pci->metrics.characterWidth, 0,
- allocbuf ? allocbuf : buf) );
+ CALL_Bitmap(GET_DISPATCH(), (w, h, -pci->metrics.leftSideBearing,
+ pci->metrics.descent,
+ pci->metrics.characterWidth, 0,
+ allocbuf ? allocbuf : buf));
free(allocbuf);
return Success;
@@ -110,46 +113,48 @@ static int __glXMakeBitmapFromGlyph(FontPtr font, CharInfoPtr pci)
** in a display list.
*/
-static int
+static int
MakeBitmapsFromFont(FontPtr pFont, int first, int count, int list_base)
{
- unsigned long i, nglyphs;
- CARD8 chs[2]; /* the font index we are going after */
- CharInfoPtr pci;
- int rv; /* return value */
+ unsigned long i, nglyphs;
+ CARD8 chs[2]; /* the font index we are going after */
+ CharInfoPtr pci;
+ int rv; /* return value */
int encoding = (FONTLASTROW(pFont) == 0) ? Linear16Bit : TwoD16Bit;
-
- CALL_PixelStorei( GET_DISPATCH(), (GL_UNPACK_SWAP_BYTES, FALSE) );
- CALL_PixelStorei( GET_DISPATCH(), (GL_UNPACK_LSB_FIRST, BITMAP_BIT_ORDER == LSBFirst) );
- CALL_PixelStorei( GET_DISPATCH(), (GL_UNPACK_ROW_LENGTH, 0) );
- CALL_PixelStorei( GET_DISPATCH(), (GL_UNPACK_SKIP_ROWS, 0) );
- CALL_PixelStorei( GET_DISPATCH(), (GL_UNPACK_SKIP_PIXELS, 0) );
- CALL_PixelStorei( GET_DISPATCH(), (GL_UNPACK_ALIGNMENT, GLYPHPADBYTES) );
- for (i=0; i < count; i++) {
- chs[0] = (first + i) >> 8; /* high byte is first byte */
- chs[1] = first + i;
-
- (*pFont->get_glyphs)(pFont, 1, chs, (FontEncoding)encoding,
- &nglyphs, &pci);
-
- /*
- ** Define a display list containing just a glBitmap() call.
- */
- CALL_NewList( GET_DISPATCH(), (list_base + i, GL_COMPILE) );
- if (nglyphs ) {
- rv = __glXMakeBitmapFromGlyph(pFont, pci);
- if (rv) {
- return rv;
- }
- }
- CALL_EndList( GET_DISPATCH(), () );
+
+ CALL_PixelStorei(GET_DISPATCH(), (GL_UNPACK_SWAP_BYTES, FALSE));
+ CALL_PixelStorei(GET_DISPATCH(),
+ (GL_UNPACK_LSB_FIRST, BITMAP_BIT_ORDER == LSBFirst));
+ CALL_PixelStorei(GET_DISPATCH(), (GL_UNPACK_ROW_LENGTH, 0));
+ CALL_PixelStorei(GET_DISPATCH(), (GL_UNPACK_SKIP_ROWS, 0));
+ CALL_PixelStorei(GET_DISPATCH(), (GL_UNPACK_SKIP_PIXELS, 0));
+ CALL_PixelStorei(GET_DISPATCH(), (GL_UNPACK_ALIGNMENT, GLYPHPADBYTES));
+ for (i = 0; i < count; i++) {
+ chs[0] = (first + i) >> 8; /* high byte is first byte */
+ chs[1] = first + i;
+
+ (*pFont->get_glyphs) (pFont, 1, chs, (FontEncoding) encoding,
+ &nglyphs, &pci);
+
+ /*
+ ** Define a display list containing just a glBitmap() call.
+ */
+ CALL_NewList(GET_DISPATCH(), (list_base + i, GL_COMPILE));
+ if (nglyphs) {
+ rv = __glXMakeBitmapFromGlyph(pFont, pci);
+ if (rv) {
+ return rv;
+ }
+ }
+ CALL_EndList(GET_DISPATCH(), ());
}
return Success;
}
/************************************************************************/
-int __glXDisp_UseXFont(__GLXclientState *cl, GLbyte *pc)
+int
+__glXDisp_UseXFont(__GLXclientState * cl, GLbyte * pc)
{
ClientPtr client = cl->client;
xGLXUseXFontReq *req;
@@ -163,28 +168,28 @@ int __glXDisp_UseXFont(__GLXclientState *cl, GLbyte *pc)
req = (xGLXUseXFontReq *) pc;
cx = __glXForceCurrent(cl, req->contextTag, &error);
if (!cx) {
- return error;
+ return error;
}
- CALL_GetIntegerv( GET_DISPATCH(), (GL_LIST_INDEX, (GLint*) &currentListIndex) );
+ CALL_GetIntegerv(GET_DISPATCH(),
+ (GL_LIST_INDEX, (GLint *) & currentListIndex));
if (currentListIndex != 0) {
- /*
- ** A display list is currently being made. It is an error
- ** to try to make a font during another lists construction.
- */
- client->errorValue = cx->id;
- return __glXError(GLXBadContextState);
+ /*
+ ** A display list is currently being made. It is an error
+ ** to try to make a font during another lists construction.
+ */
+ client->errorValue = cx->id;
+ return __glXError(GLXBadContextState);
}
/*
- ** Font can actually be either the ID of a font or the ID of a GC
- ** containing a font.
- */
+ ** Font can actually be either the ID of a font or the ID of a GC
+ ** containing a font.
+ */
error = dixLookupFontable(&pFont, req->font, client, DixReadAccess);
if (error != Success)
- return error;
+ return error;
- return MakeBitmapsFromFont(pFont, req->first, req->count,
- req->listBase);
+ return MakeBitmapsFromFont(pFont, req->first, req->count, req->listBase);
}