diff options
| author | Jeremy Huddleston Sequoia <jeremyhu@apple.com> | 2012-12-18 01:03:38 -0800 |
|---|---|---|
| committer | Jeremy Huddleston Sequoia <jeremyhu@apple.com> | 2014-05-17 00:51:59 -0700 |
| commit | 88f6a15f61ec0c7c519f40c1017b2ddb879c0f23 (patch) | |
| tree | 2f5cf2f97bd3c45d35dd8b6df40cbdd74d531bf9 | |
| parent | 290c4d71806f857acd234d29652daeb6e579fe50 (diff) | |
fb: Revert fb changes that broke XQuartz
http://bugs.freedesktop.org/show_bug.cgi?id=26124
Revert "Use new pixman_glyph_cache_t API that will be in pixman 0.28.0"
This reverts commit 9cbcb5bd6a5360a128d15b77a02d8d3351f74366.
| -rw-r--r-- | configure.ac | 2 | ||||
| -rw-r--r-- | fb/fb.h | 3 | ||||
| -rw-r--r-- | fb/fbpict.c | 153 | ||||
| -rw-r--r-- | fb/fbscreen.c | 1 |
4 files changed, 2 insertions, 157 deletions
diff --git a/configure.ac b/configure.ac index 9f4e60a61..f075a824b 100644 --- a/configure.ac +++ b/configure.ac @@ -811,7 +811,7 @@ LIBPCIACCESS="pciaccess >= 0.12.901" LIBUDEV="libudev >= 143" LIBSELINUX="libselinux >= 2.0.86" LIBDBUS="dbus-1 >= 1.0" -LIBPIXMAN="pixman-1 >= 0.27.2" +LIBPIXMAN="pixman-1 >= 0.21.8" dnl Pixman is always required, but we separate it out so we can link dnl specific modules against it @@ -1344,9 +1344,6 @@ extern _X_EXPORT void extern _X_EXPORT Bool fbPictureInit(ScreenPtr pScreen, PictFormatPtr formats, int nformats); -extern _X_EXPORT void -fbDestroyGlyphCache(void); - /* * fbpixmap.c */ diff --git a/fb/fbpict.c b/fb/fbpict.c index 80c2a91bb..dc0ca3c6c 100644 --- a/fb/fbpict.c +++ b/fb/fbpict.c @@ -65,156 +65,6 @@ fbComposite(CARD8 op, free_pixman_pict(pDst, dest); } -static pixman_glyph_cache_t *glyphCache; - -void -fbDestroyGlyphCache(void) -{ - if (glyphCache) - { - pixman_glyph_cache_destroy (glyphCache); - glyphCache = NULL; - } -} - -static void -fbUnrealizeGlyph(ScreenPtr pScreen, - GlyphPtr pGlyph) -{ - if (glyphCache) - pixman_glyph_cache_remove (glyphCache, pGlyph, NULL); -} - -static void -fbGlyphs(CARD8 op, - PicturePtr pSrc, - PicturePtr pDst, - PictFormatPtr maskFormat, - INT16 xSrc, - INT16 ySrc, int nlist, - GlyphListPtr list, - GlyphPtr *glyphs) -{ -#define N_STACK_GLYPHS 512 - ScreenPtr pScreen = pDst->pDrawable->pScreen; - pixman_glyph_t stack_glyphs[N_STACK_GLYPHS]; - pixman_glyph_t *pglyphs = stack_glyphs; - pixman_image_t *srcImage, *dstImage; - int srcXoff, srcYoff, dstXoff, dstYoff; - GlyphPtr glyph; - int n_glyphs; - int x, y; - int i, n; - int xDst = list->xOff, yDst = list->yOff; - - miCompositeSourceValidate(pSrc); - - n_glyphs = 0; - for (i = 0; i < nlist; ++i) - n_glyphs += list[i].len; - - if (!glyphCache) - glyphCache = pixman_glyph_cache_create(); - - pixman_glyph_cache_freeze (glyphCache); - - if (n_glyphs > N_STACK_GLYPHS) { - if (!(pglyphs = malloc (n_glyphs * sizeof (pixman_glyph_t)))) - goto out; - } - - i = 0; - x = y = 0; - while (nlist--) { - x += list->xOff; - y += list->yOff; - n = list->len; - while (n--) { - const void *g; - - glyph = *glyphs++; - - if (!(g = pixman_glyph_cache_lookup (glyphCache, glyph, NULL))) { - pixman_image_t *glyphImage; - PicturePtr pPicture; - int xoff, yoff; - - pPicture = GetGlyphPicture(glyph, pScreen); - if (!pPicture) { - n_glyphs--; - goto next; - } - - if (!(glyphImage = image_from_pict(pPicture, FALSE, &xoff, &yoff))) - goto out; - - g = pixman_glyph_cache_insert(glyphCache, glyph, NULL, - glyph->info.x, - glyph->info.y, - glyphImage); - - free_pixman_pict(pPicture, glyphImage); - - if (!g) - goto out; - } - - pglyphs[i].x = x; - pglyphs[i].y = y; - pglyphs[i].glyph = g; - i++; - - next: - x += glyph->info.xOff; - y += glyph->info.yOff; - } - list++; - } - - if (!(srcImage = image_from_pict(pSrc, FALSE, &srcXoff, &srcYoff))) - goto out; - - if (!(dstImage = image_from_pict(pDst, TRUE, &dstXoff, &dstYoff))) - goto out_free_src; - - if (maskFormat) { - pixman_format_code_t format; - pixman_box32_t extents; - int x, y; - - format = maskFormat->format | (maskFormat->depth << 24); - - pixman_glyph_get_extents(glyphCache, n_glyphs, pglyphs, &extents); - - x = extents.x1; - y = extents.y1; - - pixman_composite_glyphs(op, srcImage, dstImage, format, - xSrc + srcXoff + xDst, ySrc + srcYoff + yDst, - x, y, - x + dstXoff, y + dstYoff, - extents.x2 - extents.x1, - extents.y2 - extents.y1, - glyphCache, n_glyphs, pglyphs); - } - else { - pixman_composite_glyphs_no_mask(op, srcImage, dstImage, - xSrc + srcXoff - xDst, ySrc + srcYoff - yDst, - dstXoff, dstYoff, - glyphCache, n_glyphs, pglyphs); - } - - free_pixman_pict(pDst, dstImage); - -out_free_src: - free_pixman_pict(pSrc, srcImage); - -out: - pixman_glyph_cache_thaw(glyphCache); - if (pglyphs != stack_glyphs) - free(pglyphs); -} - static pixman_image_t * create_solid_fill_image(PicturePtr pict) { @@ -473,8 +323,7 @@ fbPictureInit(ScreenPtr pScreen, PictFormatPtr formats, int nformats) return FALSE; ps = GetPictureScreen(pScreen); ps->Composite = fbComposite; - ps->Glyphs = fbGlyphs; - ps->UnrealizeGlyph = fbUnrealizeGlyph; + ps->Glyphs = miGlyphs; ps->CompositeRects = miCompositeRects; ps->RasterizeTrapezoid = fbRasterizeTrapezoid; ps->Trapezoids = fbTrapezoids; diff --git a/fb/fbscreen.c b/fb/fbscreen.c index f9080a445..7c7d6560e 100644 --- a/fb/fbscreen.c +++ b/fb/fbscreen.c @@ -32,7 +32,6 @@ fbCloseScreen(ScreenPtr pScreen) int d; DepthPtr depths = pScreen->allowedDepths; - fbDestroyGlyphCache(); for (d = 0; d < pScreen->numDepths; d++) free(depths[d].vids); free(depths); |
