diff options
Diffstat (limited to 'hw/xfree86/xaa/xaaTEText.c')
-rw-r--r-- | hw/xfree86/xaa/xaaTEText.c | 338 |
1 files changed, 161 insertions, 177 deletions
diff --git a/hw/xfree86/xaa/xaaTEText.c b/hw/xfree86/xaa/xaaTEText.c index 41c0ebcfd..a5ef44768 100644 --- a/hw/xfree86/xaa/xaaTEText.c +++ b/hw/xfree86/xaa/xaaTEText.c @@ -14,7 +14,6 @@ v1.0 - Mark Vojkovich (mvojkovi@ucsd.edu) - ********************************************************************/ #ifdef HAVE_XORG_CONFIG_H @@ -35,12 +34,12 @@ #include "gcstruct.h" #include "pixmapstr.h" - static void XAAGlyphBltTEColorExpansion(ScrnInfoPtr pScrn, int xInit, - int yInit, FontPtr font, int fg, int bg, int rop, - unsigned int planemask, RegionPtr cclip, int nglyph, - unsigned char* gBase, CharInfoPtr *ppci); - + int yInit, FontPtr font, int fg, int bg, + int rop, unsigned int planemask, + RegionPtr cclip, int nglyph, + unsigned char *gBase, + CharInfoPtr * ppci); /******************************************************************** @@ -49,107 +48,97 @@ static void XAAGlyphBltTEColorExpansion(ScrnInfoPtr pScrn, int xInit, ********************************************************************/ - int -XAAPolyText8TEColorExpansion( - DrawablePtr pDraw, - GCPtr pGC, - int x, int y, - int count, - char *chars ) +XAAPolyText8TEColorExpansion(DrawablePtr pDraw, + GCPtr pGC, int x, int y, int count, char *chars) { XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_GC(pGC); unsigned long n; - (*pGC->font->get_glyphs)(pGC->font, (unsigned long)count, - (unsigned char *)chars, Linear8Bit, &n, infoRec->CharInfo); + (*pGC->font->get_glyphs) (pGC->font, (unsigned long) count, + (unsigned char *) chars, Linear8Bit, &n, + infoRec->CharInfo); /* we have divorced XAAGlyphBltTEColorExpansion from the drawable */ - if(n) XAAGlyphBltTEColorExpansion( - infoRec->pScrn, x + pDraw->x, y + pDraw->y, - pGC->font, pGC->fgPixel, -1, pGC->alu, pGC->planemask, - pGC->pCompositeClip, n, FONTGLYPHS(pGC->font), infoRec->CharInfo); + if (n) + XAAGlyphBltTEColorExpansion(infoRec->pScrn, x + pDraw->x, y + pDraw->y, + pGC->font, pGC->fgPixel, -1, pGC->alu, + pGC->planemask, pGC->pCompositeClip, n, + FONTGLYPHS(pGC->font), infoRec->CharInfo); return (x + (n * FONTMAXBOUNDS(pGC->font, characterWidth))); } - int -XAAPolyText16TEColorExpansion( - DrawablePtr pDraw, - GCPtr pGC, - int x, int y, - int count, - unsigned short *chars ) +XAAPolyText16TEColorExpansion(DrawablePtr pDraw, + GCPtr pGC, + int x, int y, int count, unsigned short *chars) { XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_GC(pGC); unsigned long n; - (*pGC->font->get_glyphs)( - pGC->font, (unsigned long)count, (unsigned char *)chars, - (FONTLASTROW(pGC->font) == 0) ? Linear16Bit : TwoD16Bit, - &n, infoRec->CharInfo); + (*pGC->font->get_glyphs) (pGC->font, (unsigned long) count, + (unsigned char *) chars, + (FONTLASTROW(pGC->font) == + 0) ? Linear16Bit : TwoD16Bit, &n, + infoRec->CharInfo); - if(n) XAAGlyphBltTEColorExpansion( - infoRec->pScrn, x + pDraw->x, y + pDraw->y, - pGC->font, pGC->fgPixel, -1, pGC->alu, pGC->planemask, - pGC->pCompositeClip, n, FONTGLYPHS(pGC->font), infoRec->CharInfo); + if (n) + XAAGlyphBltTEColorExpansion(infoRec->pScrn, x + pDraw->x, y + pDraw->y, + pGC->font, pGC->fgPixel, -1, pGC->alu, + pGC->planemask, pGC->pCompositeClip, n, + FONTGLYPHS(pGC->font), infoRec->CharInfo); return (x + (n * FONTMAXBOUNDS(pGC->font, characterWidth))); } - void -XAAImageText8TEColorExpansion( - DrawablePtr pDraw, - GCPtr pGC, - int x, int y, - int count, - char *chars ) +XAAImageText8TEColorExpansion(DrawablePtr pDraw, + GCPtr pGC, int x, int y, int count, char *chars) { XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_GC(pGC); unsigned long n; - if(!RegionNumRects(pGC->pCompositeClip)) - return; + if (!RegionNumRects(pGC->pCompositeClip)) + return; - (*pGC->font->get_glyphs)(pGC->font, (unsigned long)count, - (unsigned char *)chars, Linear8Bit, &n, infoRec->CharInfo); + (*pGC->font->get_glyphs) (pGC->font, (unsigned long) count, + (unsigned char *) chars, Linear8Bit, &n, + infoRec->CharInfo); - if(n) XAAGlyphBltTEColorExpansion( - infoRec->pScrn, x + pDraw->x, y + pDraw->y, - pGC->font, pGC->fgPixel, pGC->bgPixel, GXcopy, pGC->planemask, - pGC->pCompositeClip, n, FONTGLYPHS(pGC->font), infoRec->CharInfo); + if (n) + XAAGlyphBltTEColorExpansion(infoRec->pScrn, x + pDraw->x, y + pDraw->y, + pGC->font, pGC->fgPixel, pGC->bgPixel, + GXcopy, pGC->planemask, pGC->pCompositeClip, + n, FONTGLYPHS(pGC->font), + infoRec->CharInfo); } - void -XAAImageText16TEColorExpansion( - DrawablePtr pDraw, - GCPtr pGC, - int x, int y, - int count, - unsigned short *chars ) +XAAImageText16TEColorExpansion(DrawablePtr pDraw, + GCPtr pGC, + int x, int y, int count, unsigned short *chars) { XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_GC(pGC); unsigned long n; - if(!RegionNumRects(pGC->pCompositeClip)) - return; - - (*pGC->font->get_glyphs)( - pGC->font, (unsigned long)count, (unsigned char *)chars, - (FONTLASTROW(pGC->font) == 0) ? Linear16Bit : TwoD16Bit, - &n, infoRec->CharInfo); - - if(n) XAAGlyphBltTEColorExpansion( - infoRec->pScrn, x + pDraw->x, y + pDraw->y, - pGC->font, pGC->fgPixel, pGC->bgPixel, GXcopy, pGC->planemask, - pGC->pCompositeClip, n, FONTGLYPHS(pGC->font), infoRec->CharInfo); + if (!RegionNumRects(pGC->pCompositeClip)) + return; + + (*pGC->font->get_glyphs) (pGC->font, (unsigned long) count, + (unsigned char *) chars, + (FONTLASTROW(pGC->font) == + 0) ? Linear16Bit : TwoD16Bit, &n, + infoRec->CharInfo); + + if (n) + XAAGlyphBltTEColorExpansion(infoRec->pScrn, x + pDraw->x, y + pDraw->y, + pGC->font, pGC->fgPixel, pGC->bgPixel, + GXcopy, pGC->planemask, pGC->pCompositeClip, + n, FONTGLYPHS(pGC->font), + infoRec->CharInfo); } - - /******************************************************************** GC level replacements for ImageGlyphBlt and PolyGlyphBlt for @@ -157,50 +146,44 @@ XAAImageText16TEColorExpansion( ********************************************************************/ - void -XAAImageGlyphBltTEColorExpansion( - DrawablePtr pDrawable, - GCPtr pGC, - int xInit, int yInit, - unsigned int nglyph, - CharInfoPtr *ppci, - pointer pglyphBase ) +XAAImageGlyphBltTEColorExpansion(DrawablePtr pDrawable, + GCPtr pGC, + int xInit, int yInit, + unsigned int nglyph, + CharInfoPtr * ppci, pointer pglyphBase) { XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_GC(pGC); - if(!RegionNumRects(pGC->pCompositeClip)) - return; + if (!RegionNumRects(pGC->pCompositeClip)) + return; - XAAGlyphBltTEColorExpansion( - infoRec->pScrn, xInit + pDrawable->x, yInit + pDrawable->y, - pGC->font, pGC->fgPixel, pGC->bgPixel, GXcopy, pGC->planemask, - pGC->pCompositeClip, nglyph, (unsigned char*)pglyphBase, ppci); + XAAGlyphBltTEColorExpansion(infoRec->pScrn, xInit + pDrawable->x, + yInit + pDrawable->y, pGC->font, pGC->fgPixel, + pGC->bgPixel, GXcopy, pGC->planemask, + pGC->pCompositeClip, nglyph, + (unsigned char *) pglyphBase, ppci); } void -XAAPolyGlyphBltTEColorExpansion( - DrawablePtr pDrawable, - GCPtr pGC, - int xInit, int yInit, - unsigned int nglyph, - CharInfoPtr *ppci, - pointer pglyphBase ) +XAAPolyGlyphBltTEColorExpansion(DrawablePtr pDrawable, + GCPtr pGC, + int xInit, int yInit, + unsigned int nglyph, + CharInfoPtr * ppci, pointer pglyphBase) { XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_GC(pGC); - if(!RegionNumRects(pGC->pCompositeClip)) - return; + if (!RegionNumRects(pGC->pCompositeClip)) + return; - XAAGlyphBltTEColorExpansion( - infoRec->pScrn, xInit + pDrawable->x, yInit + pDrawable->y, - pGC->font, pGC->fgPixel, -1, pGC->alu, pGC->planemask, - pGC->pCompositeClip, nglyph, (unsigned char*)pglyphBase, ppci); + XAAGlyphBltTEColorExpansion(infoRec->pScrn, xInit + pDrawable->x, + yInit + pDrawable->y, pGC->font, pGC->fgPixel, + -1, pGC->alu, pGC->planemask, + pGC->pCompositeClip, nglyph, + (unsigned char *) pglyphBase, ppci); } - - - /******************************************************************** XAAGlyphBltTEColorExpansion - @@ -211,19 +194,16 @@ XAAPolyGlyphBltTEColorExpansion( ********************************************************************/ - static void -XAAGlyphBltTEColorExpansion( - ScrnInfoPtr pScrn, - int xInit, int yInit, - FontPtr font, - int fg, int bg, - int rop, - unsigned int planemask, - RegionPtr cclip, - int nglyph, - unsigned char* gBase, - CharInfoPtr *ppci ) +XAAGlyphBltTEColorExpansion(ScrnInfoPtr pScrn, + int xInit, int yInit, + FontPtr font, + int fg, int bg, + int rop, + unsigned int planemask, + RegionPtr cclip, + int nglyph, + unsigned char *gBase, CharInfoPtr * ppci) { XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_SCRNINFOPTR(pScrn); int skippix, skipglyphs; @@ -231,81 +211,85 @@ XAAGlyphBltTEColorExpansion( int LeftEdge, RightEdge, ytop, ybot; int nbox = RegionNumRects(cclip); BoxPtr pbox = RegionRects(cclip); - unsigned int **glyphs = NULL; + unsigned int **glyphs = NULL; int glyphWidth = FONTMAXBOUNDS(font, characterWidth); /* find the size of the box */ Left = xInit; Right = Left + (glyphWidth * nglyph); Top = yInit - FONTASCENT(font); - Bottom = yInit + FONTDESCENT(font); + Bottom = yInit + FONTDESCENT(font); /* get into the first band that may contain part of our string */ - while(nbox && (Top >= pbox->y2)) { - pbox++; nbox--; + while (nbox && (Top >= pbox->y2)) { + pbox++; + nbox--; } /* stop when the lower edge of the box is beyond our string */ - while(nbox && (Bottom > pbox->y1)) { - LeftEdge = max(Left, pbox->x1); - RightEdge = min(Right, pbox->x2); - - if(RightEdge > LeftEdge) { /* we have something to draw */ - unsigned int *fallbackBits = NULL; - ytop = max(Top, pbox->y1); - ybot = min(Bottom, pbox->y2); - - if((skippix = LeftEdge - Left)) { - skipglyphs = skippix/glyphWidth; - skippix %= glyphWidth; - } else skipglyphs = 0; - - if(!glyphs) { - int count; - glyphs = (unsigned int**)(infoRec->PreAllocMem); - - for(count = 0; count < nglyph; count++) { - glyphs[count] = (unsigned int*) - FONTGLYPHBITS(gBase,*ppci++); - if (!glyphs[count]) { - /* Glyphs with NULL bits do exist in the wild. - Replace with blank bits in that case */ - - if (!fallbackBits) { - int fontHeight = Bottom - Top + 1; - fallbackBits = calloc(glyphWidth * fontHeight, 1); - if (!fallbackBits) - return; - } - glyphs[count] = fallbackBits; - } - } - - /* our new unrolled TE code only writes DWORDS at a time - so it can read up to 6 characters past the last one - we're displaying */ - glyphs[count + 0] = glyphs[0]; - glyphs[count + 1] = glyphs[0]; - glyphs[count + 2] = glyphs[0]; - glyphs[count + 3] = glyphs[0]; - glyphs[count + 4] = glyphs[0]; - glyphs[count + 5] = glyphs[0]; - } - - /* x, y, w, h, skipleft, skiptop, glyphp, glyphWidth, fg, bg, rop, pm */ - - (*infoRec->TEGlyphRenderer)( pScrn, - LeftEdge, ytop, RightEdge - LeftEdge, ybot - ytop, - skippix, ytop - Top, glyphs + skipglyphs, glyphWidth, - fg, bg, rop, planemask); - - free(fallbackBits); - } - - nbox--; pbox++; + while (nbox && (Bottom > pbox->y1)) { + LeftEdge = max(Left, pbox->x1); + RightEdge = min(Right, pbox->x2); + + if (RightEdge > LeftEdge) { /* we have something to draw */ + unsigned int *fallbackBits = NULL; + + ytop = max(Top, pbox->y1); + ybot = min(Bottom, pbox->y2); + + if ((skippix = LeftEdge - Left)) { + skipglyphs = skippix / glyphWidth; + skippix %= glyphWidth; + } + else + skipglyphs = 0; + + if (!glyphs) { + int count; + + glyphs = (unsigned int **) (infoRec->PreAllocMem); + + for (count = 0; count < nglyph; count++) { + glyphs[count] = (unsigned int *) + FONTGLYPHBITS(gBase, *ppci++); + if (!glyphs[count]) { + /* Glyphs with NULL bits do exist in the wild. + Replace with blank bits in that case */ + + if (!fallbackBits) { + int fontHeight = Bottom - Top + 1; + + fallbackBits = calloc(glyphWidth * fontHeight, 1); + if (!fallbackBits) + return; + } + glyphs[count] = fallbackBits; + } + } + + /* our new unrolled TE code only writes DWORDS at a time + so it can read up to 6 characters past the last one + we're displaying */ + glyphs[count + 0] = glyphs[0]; + glyphs[count + 1] = glyphs[0]; + glyphs[count + 2] = glyphs[0]; + glyphs[count + 3] = glyphs[0]; + glyphs[count + 4] = glyphs[0]; + glyphs[count + 5] = glyphs[0]; + } + + /* x, y, w, h, skipleft, skiptop, glyphp, glyphWidth, fg, bg, rop, pm */ + + (*infoRec->TEGlyphRenderer) (pScrn, + LeftEdge, ytop, RightEdge - LeftEdge, + ybot - ytop, skippix, ytop - Top, + glyphs + skipglyphs, glyphWidth, fg, + bg, rop, planemask); + + free(fallbackBits); + } + + nbox--; + pbox++; } } - - - - |