diff options
author | Jeremy Huddleston <jeremyhu@freedesktop.org> | 2010-01-31 01:38:53 -0800 |
---|---|---|
committer | Jeremy Huddleston <jeremyhu@apple.com> | 2010-03-29 15:27:48 -0700 |
commit | d585d5c980bac7e91c0adee4c69872054a27c348 (patch) | |
tree | 4adc216b300ea6b2c39e99bf75b205f0b4bd0769 | |
parent | a7f60537227c2c667a9075b6fab308a5de996903 (diff) |
fb: Revert fb changes that broke XQuartz
http://bugs.freedesktop.org/show_bug.cgi?id=26124
Revert "Fix source pictures getting random transforms after 2d6a8f668342a5190cdf43b5."
Revert "fb: backport fb changes from master for src window operations."
This reverts commit 66b6e2fd49fdc650703e56aa176a902e4921251c.
This reverts commit 2d6a8f668342a5190cdf43b5d385f592d10f5900.
Signed-off-by: Jeremy Huddleston <jeremyhu@freedesktop.org>
-rw-r--r-- | fb/fb.h | 76 | ||||
-rw-r--r-- | fb/fbpict.c | 86 | ||||
-rw-r--r-- | fb/fbtrap.c | 6 | ||||
-rw-r--r-- | fb/wfbrename.h | 1 |
4 files changed, 60 insertions, 109 deletions
@@ -700,41 +700,38 @@ typedef struct { #define __fbPixOffXPix(pPix) (__fbPixDrawableX(pPix)) #define __fbPixOffYPix(pPix) (__fbPixDrawableY(pPix)) -#define fbGetDrawablePixmap(pDrawable, pixmap, xoff, yoff) { \ - if ((pDrawable)->type != DRAWABLE_PIXMAP) { \ - (pixmap) = fbGetWindowPixmap(pDrawable); \ - (xoff) = __fbPixOffXWin(pixmap); \ - (yoff) = __fbPixOffYWin(pixmap); \ - } else { \ - (pixmap) = (PixmapPtr) (pDrawable); \ - (xoff) = __fbPixOffXPix(pixmap); \ - (yoff) = __fbPixOffYPix(pixmap); \ - } \ - fbPrepareAccess(pDrawable); \ -} - -#define fbGetPixmapBitsData(pixmap, pointer, stride, bpp) { \ - (pointer) = (FbBits *) (pixmap)->devPrivate.ptr; \ - (stride) = ((int) (pixmap)->devKind) / sizeof (FbBits); (void)(stride); \ - (bpp) = (pixmap)->drawable.bitsPerPixel; (void)(bpp); \ -} - -#define fbGetPixmapStipData(pixmap, pointer, stride, bpp) { \ - (pointer) = (FbStip *) (pixmap)->devPrivate.ptr; \ - (stride) = ((int) (pixmap)->devKind) / sizeof (FbStip); (void)(stride); \ - (bpp) = (pixmap)->drawable.bitsPerPixel; (void)(bpp); \ -} - -#define fbGetDrawable(pDrawable, pointer, stride, bpp, xoff, yoff) { \ - PixmapPtr _pPix; \ - fbGetDrawablePixmap(pDrawable, _pPix, xoff, yoff); \ - fbGetPixmapBitsData(_pPix, pointer, stride, bpp); \ +#define fbGetDrawable(pDrawable, pointer, stride, bpp, xoff, yoff) { \ + PixmapPtr _pPix; \ + if ((pDrawable)->type != DRAWABLE_PIXMAP) { \ + _pPix = fbGetWindowPixmap(pDrawable); \ + (xoff) = __fbPixOffXWin(_pPix); \ + (yoff) = __fbPixOffYWin(_pPix); \ + } else { \ + _pPix = (PixmapPtr) (pDrawable); \ + (xoff) = __fbPixOffXPix(_pPix); \ + (yoff) = __fbPixOffYPix(_pPix); \ + } \ + fbPrepareAccess(pDrawable); \ + (pointer) = (FbBits *) _pPix->devPrivate.ptr; \ + (stride) = ((int) _pPix->devKind) / sizeof (FbBits); (void)(stride); \ + (bpp) = _pPix->drawable.bitsPerPixel; (void)(bpp); \ } -#define fbGetStipDrawable(pDrawable, pointer, stride, bpp, xoff, yoff) { \ - PixmapPtr _pPix; \ - fbGetDrawablePixmap(pDrawable, _pPix, xoff, yoff); \ - fbGetPixmapStipData(_pPix, pointer, stride, bpp); \ +#define fbGetStipDrawable(pDrawable, pointer, stride, bpp, xoff, yoff) { \ + PixmapPtr _pPix; \ + if ((pDrawable)->type != DRAWABLE_PIXMAP) { \ + _pPix = fbGetWindowPixmap(pDrawable); \ + (xoff) = __fbPixOffXWin(_pPix); \ + (yoff) = __fbPixOffYWin(_pPix); \ + } else { \ + _pPix = (PixmapPtr) (pDrawable); \ + (xoff) = __fbPixOffXPix(_pPix); \ + (yoff) = __fbPixOffYPix(_pPix); \ + } \ + fbPrepareAccess(pDrawable); \ + (pointer) = (FbStip *) _pPix->devPrivate.ptr; \ + (stride) = ((int) _pPix->devKind) / sizeof (FbStip); (void)(stride); \ + (bpp) = _pPix->drawable.bitsPerPixel; (void)(bpp); \ } /* @@ -2082,16 +2079,9 @@ fbFillRegionSolid (DrawablePtr pDrawable, FbBits xor); extern _X_EXPORT pixman_image_t * -image_from_pict (PicturePtr pict, - Bool has_clip, - Bool is_src); - -extern _X_EXPORT pixman_image_t * -image_from_pict_18 (PicturePtr pict, - Bool has_clip, - int *xoff, - int *yoff); - +image_from_pict (PicturePtr pict, + Bool has_clip, + Bool is_src); extern _X_EXPORT void free_pixman_pict (PicturePtr, pixman_image_t *); #endif /* _FB_H_ */ diff --git a/fb/fbpict.c b/fb/fbpict.c index c046baeb4..8fdaa584e 100644 --- a/fb/fbpict.c +++ b/fb/fbpict.c @@ -158,24 +158,19 @@ fbComposite (CARD8 op, CARD16 height) { pixman_image_t *src, *mask, *dest; - int src_xoff, src_yoff; - int msk_xoff, msk_yoff; - int dst_xoff, dst_yoff; - miCompositeSourceValidate (pSrc, xSrc - xDst, ySrc - yDst, width, height); + miCompositeSourceValidate (pSrc, xSrc, ySrc, width, height); if (pMask) - miCompositeSourceValidate (pMask, xMask - xDst, yMask - yDst, width, height); + miCompositeSourceValidate (pMask, xMask, yMask, width, height); - src = image_from_pict_18 (pSrc, FALSE, &src_xoff, &src_yoff); - mask = image_from_pict_18 (pMask, FALSE, &msk_xoff, &msk_yoff); - dest = image_from_pict_18 (pDst, TRUE, &dst_xoff, &dst_yoff); + src = image_from_pict (pSrc, TRUE, TRUE); + mask = image_from_pict (pMask, TRUE, TRUE); + dest = image_from_pict (pDst, TRUE, FALSE); if (src && dest && !(pMask && !mask)) { pixman_image_composite (op, src, mask, dest, - xSrc + src_xoff, ySrc + src_yoff, - xMask + msk_xoff, yMask + msk_yoff, - xDst + dst_xoff, yDst + dst_yoff, + xSrc, ySrc, xMask, yMask, xDst, yDst, width, height); } @@ -275,22 +270,22 @@ create_conical_gradient_image (PictGradient *gradient) static pixman_image_t * create_bits_picture (PicturePtr pict, - Bool has_clip, - int *xoff, - int *yoff) + Bool has_clip) { - PixmapPtr pixmap; FbBits *bits; FbStride stride; - int bpp; + int bpp, xoff, yoff; pixman_image_t *image; - fbGetDrawablePixmap (pict->pDrawable, pixmap, *xoff, *yoff); - fbGetPixmapBitsData(pixmap, bits, stride, bpp); + fbGetDrawable (pict->pDrawable, bits, stride, bpp, xoff, yoff); + + bits = (FbBits*)((CARD8*)bits + + (pict->pDrawable->y + yoff) * stride * sizeof(FbBits) + + (pict->pDrawable->x + xoff) * (bpp / 8)); image = pixman_image_create_bits ( pict->format, - pixmap->drawable.width, pixmap->drawable.height, + pict->pDrawable->width, pict->pDrawable->height, (uint32_t *)bits, stride * sizeof (FbStride)); @@ -316,52 +311,30 @@ create_bits_picture (PicturePtr pict, if (pict->clientClipType != CT_NONE) pixman_image_set_has_client_clip (image, TRUE); - if (*xoff || *yoff) - pixman_region_translate (pict->pCompositeClip, *xoff, *yoff); + pixman_region_translate (pict->pCompositeClip, - pict->pDrawable->x, - pict->pDrawable->y); pixman_image_set_clip_region (image, pict->pCompositeClip); - if (*xoff || *yoff) - pixman_region_translate (pict->pCompositeClip, -*xoff, -*yoff); + pixman_region_translate (pict->pCompositeClip, pict->pDrawable->x, pict->pDrawable->y); } /* Indexed table */ if (pict->pFormat->index.devPrivate) pixman_image_set_indexed (image, pict->pFormat->index.devPrivate); - /* Add in drawable origin to position within the image */ - *xoff += pict->pDrawable->x; - *yoff += pict->pDrawable->y; - return image; } static void -set_image_properties (pixman_image_t *image, PicturePtr pict, Bool has_clip, int *xoff, int *yoff) +set_image_properties (pixman_image_t *image, PicturePtr pict) { pixman_repeat_t repeat; pixman_filter_t filter; if (pict->transform) { - /* For source images, adjust the transform to account - * for the drawable offset within the pixman image, - * then set the offset to 0 as it will be used - * to compute positions within the transformed image. - */ - if (!has_clip) { - struct pixman_transform adjusted; - - adjusted = *pict->transform; - pixman_transform_translate(&adjusted, - NULL, - pixman_int_to_fixed(*xoff), - pixman_int_to_fixed(*yoff)); - pixman_image_set_transform (image, &adjusted); - *xoff = 0; - *yoff = 0; - } else - pixman_image_set_transform (image, pict->transform); + pixman_image_set_transform ( + image, (pixman_transform_t *)pict->transform); } switch (pict->repeatType) @@ -388,8 +361,7 @@ set_image_properties (pixman_image_t *image, PicturePtr pict, Bool has_clip, int if (pict->alphaMap) { - int alpha_xoff, alpha_yoff; - pixman_image_t *alpha_map = image_from_pict_18 (pict->alphaMap, FALSE, &alpha_xoff, &alpha_yoff); + pixman_image_t *alpha_map = image_from_pict (pict->alphaMap, TRUE, TRUE); pixman_image_set_alpha_map ( image, alpha_map, pict->alphaOrigin.x, pict->alphaOrigin.y); @@ -421,9 +393,10 @@ set_image_properties (pixman_image_t *image, PicturePtr pict, Bool has_clip, int pixman_image_set_source_clipping (image, TRUE); } - pixman_image_t * -image_from_pict_18 (PicturePtr pict, Bool has_clip, int *xoff, int *yoff) +image_from_pict (PicturePtr pict, + Bool has_clip, + Bool is_src) { pixman_image_t *image = NULL; @@ -432,7 +405,7 @@ image_from_pict_18 (PicturePtr pict, Bool has_clip, int *xoff, int *yoff) if (pict->pDrawable) { - image = create_bits_picture (pict, has_clip, xoff, yoff); + image = create_bits_picture (pict, has_clip); } else if (pict->pSourcePict) { @@ -453,22 +426,14 @@ image_from_pict_18 (PicturePtr pict, Bool has_clip, int *xoff, int *yoff) else if (sp->type == SourcePictTypeConical) image = create_conical_gradient_image (gradient); } - *xoff = *yoff = 0; } if (image) - set_image_properties (image, pict, has_clip, xoff, yoff); + set_image_properties (image, pict); return image; } -pixman_image_t * -image_from_pict (PicturePtr pict, Bool has_clip, Bool is_src) -{ - int xoff = 0, yoff = 0; - return image_from_pict_18(pict, has_clip, &xoff, &yoff); -} - void free_pixman_pict (PicturePtr pict, pixman_image_t *image) { @@ -498,4 +463,3 @@ fbPictureInit (ScreenPtr pScreen, PictFormatPtr formats, int nformats) return TRUE; } - diff --git a/fb/fbtrap.c b/fb/fbtrap.c index 5b5aeaedd..b1e1eff4a 100644 --- a/fb/fbtrap.c +++ b/fb/fbtrap.c @@ -40,8 +40,7 @@ fbAddTraps (PicturePtr pPicture, int ntrap, xTrap *traps) { - int image_xoff, image_yoff; - pixman_image_t *image = image_from_pict_18 (pPicture, FALSE, &image_xoff, &image_yoff); + pixman_image_t *image = image_from_pict (pPicture, FALSE, FALSE); if (!image) return; @@ -57,8 +56,7 @@ fbRasterizeTrapezoid (PicturePtr pPicture, int x_off, int y_off) { - int mask_xoff, mask_yoff; - pixman_image_t *image = image_from_pict_18 (pPicture, FALSE, &mask_xoff, &mask_yoff); + pixman_image_t *image = image_from_pict (pPicture, FALSE, FALSE); if (!image) return; diff --git a/fb/wfbrename.h b/fb/wfbrename.h index e9cdca8bb..73ee510b9 100644 --- a/fb/wfbrename.h +++ b/fb/wfbrename.h @@ -187,5 +187,4 @@ #define fbZeroSegment wfbZeroSegment #define free_pixman_pict wfb_free_pixman_pict #define image_from_pict wfb_image_from_pict -#define image_from_pict_18 wfb_image_from_pict_18 #define composeFunctions wfbComposeFunctions |