aboutsummaryrefslogtreecommitdiff
path: root/xorg-server/fb/fbimage.c
diff options
context:
space:
mode:
Diffstat (limited to 'xorg-server/fb/fbimage.c')
-rw-r--r--xorg-server/fb/fbimage.c492
1 files changed, 203 insertions, 289 deletions
diff --git a/xorg-server/fb/fbimage.c b/xorg-server/fb/fbimage.c
index 63978cc3b..59daa21bb 100644
--- a/xorg-server/fb/fbimage.c
+++ b/xorg-server/fb/fbimage.c
@@ -29,336 +29,250 @@
#include "fb.h"
void
-fbPutImage (DrawablePtr pDrawable,
- GCPtr pGC,
- int depth,
- int x,
- int y,
- int w,
- int h,
- int leftPad,
- int format,
- char *pImage)
+fbPutImage(DrawablePtr pDrawable,
+ GCPtr pGC,
+ int depth,
+ int x, int y, int w, int h, int leftPad, int format, char *pImage)
{
- FbGCPrivPtr pPriv = fbGetGCPrivate(pGC);
- unsigned long i;
- FbStride srcStride;
- FbStip *src = (FbStip *) pImage;
-
+ FbGCPrivPtr pPriv = fbGetGCPrivate(pGC);
+ unsigned long i;
+ FbStride srcStride;
+ FbStip *src = (FbStip *) pImage;
+
x += pDrawable->x;
y += pDrawable->y;
-
- switch (format)
- {
+
+ switch (format) {
case XYBitmap:
- srcStride = BitmapBytePad(w + leftPad) / sizeof (FbStip);
- fbPutXYImage (pDrawable,
- fbGetCompositeClip(pGC),
- pPriv->fg,
- pPriv->bg,
- pPriv->pm,
- pGC->alu,
- TRUE,
- x, y, w, h,
- src,
- srcStride,
- leftPad);
- break;
+ srcStride = BitmapBytePad(w + leftPad) / sizeof(FbStip);
+ fbPutXYImage(pDrawable,
+ fbGetCompositeClip(pGC),
+ pPriv->fg,
+ pPriv->bg,
+ pPriv->pm,
+ pGC->alu, TRUE, x, y, w, h, src, srcStride, leftPad);
+ break;
case XYPixmap:
- srcStride = BitmapBytePad(w + leftPad) / sizeof (FbStip);
- for (i = (unsigned long)1 << (pDrawable->depth - 1); i; i >>= 1)
- {
- if (i & pGC->planemask)
- {
- fbPutXYImage (pDrawable,
- fbGetCompositeClip(pGC),
- FB_ALLONES,
- 0,
- fbReplicatePixel (i, pDrawable->bitsPerPixel),
- pGC->alu,
- TRUE,
- x, y, w, h,
- src,
- srcStride,
- leftPad);
- src += srcStride * h;
- }
- }
- break;
+ srcStride = BitmapBytePad(w + leftPad) / sizeof(FbStip);
+ for (i = (unsigned long) 1 << (pDrawable->depth - 1); i; i >>= 1) {
+ if (i & pGC->planemask) {
+ fbPutXYImage(pDrawable,
+ fbGetCompositeClip(pGC),
+ FB_ALLONES,
+ 0,
+ fbReplicatePixel(i, pDrawable->bitsPerPixel),
+ pGC->alu,
+ TRUE, x, y, w, h, src, srcStride, leftPad);
+ src += srcStride * h;
+ }
+ }
+ break;
case ZPixmap:
- if (pDrawable->bitsPerPixel != BitsPerPixel(pDrawable->depth))
- {
- srcStride = PixmapBytePad(w, pDrawable->depth);
- fb24_32PutZImage (pDrawable,
- fbGetCompositeClip(pGC),
- pGC->alu,
- (FbBits) pGC->planemask,
- x, y, w, h,
- (CARD8 *) pImage,
- srcStride);
- }
- else
- {
- srcStride = PixmapBytePad(w, pDrawable->depth) / sizeof (FbStip);
- fbPutZImage (pDrawable,
- fbGetCompositeClip(pGC),
- pGC->alu,
- pPriv->pm,
- x, y, w, h,
- src, srcStride);
- }
+ if (pDrawable->bitsPerPixel != BitsPerPixel(pDrawable->depth)) {
+ srcStride = PixmapBytePad(w, pDrawable->depth);
+ fb24_32PutZImage(pDrawable,
+ fbGetCompositeClip(pGC),
+ pGC->alu,
+ (FbBits) pGC->planemask,
+ x, y, w, h, (CARD8 *) pImage, srcStride);
+ }
+ else {
+ srcStride = PixmapBytePad(w, pDrawable->depth) / sizeof(FbStip);
+ fbPutZImage(pDrawable,
+ fbGetCompositeClip(pGC),
+ pGC->alu, pPriv->pm, x, y, w, h, src, srcStride);
+ }
}
}
void
-fbPutZImage (DrawablePtr pDrawable,
- RegionPtr pClip,
- int alu,
- FbBits pm,
- int x,
- int y,
- int width,
- int height,
- FbStip *src,
- FbStride srcStride)
+fbPutZImage(DrawablePtr pDrawable,
+ RegionPtr pClip,
+ int alu,
+ FbBits pm,
+ int x,
+ int y, int width, int height, FbStip * src, FbStride srcStride)
{
- FbStip *dst;
- FbStride dstStride;
- int dstBpp;
- int dstXoff, dstYoff;
- int nbox;
- BoxPtr pbox;
- int x1, y1, x2, y2;
-
- fbGetStipDrawable (pDrawable, dst, dstStride, dstBpp, dstXoff, dstYoff);
+ FbStip *dst;
+ FbStride dstStride;
+ int dstBpp;
+ int dstXoff, dstYoff;
+ int nbox;
+ BoxPtr pbox;
+ int x1, y1, x2, y2;
- for (nbox = RegionNumRects (pClip),
- pbox = RegionRects(pClip);
- nbox--;
- pbox++)
- {
- x1 = x;
- y1 = y;
- x2 = x + width;
- y2 = y + height;
- if (x1 < pbox->x1)
- x1 = pbox->x1;
- if (y1 < pbox->y1)
- y1 = pbox->y1;
- if (x2 > pbox->x2)
- x2 = pbox->x2;
- if (y2 > pbox->y2)
- y2 = pbox->y2;
- if (x1 >= x2 || y1 >= y2)
- continue;
- fbBltStip (src + (y1 - y) * srcStride,
- srcStride,
- (x1 - x) * dstBpp,
+ fbGetStipDrawable(pDrawable, dst, dstStride, dstBpp, dstXoff, dstYoff);
- dst + (y1 + dstYoff) * dstStride,
- dstStride,
- (x1 + dstXoff) * dstBpp,
-
- (x2 - x1) * dstBpp,
- (y2 - y1),
-
- alu,
- pm,
- dstBpp);
+ for (nbox = RegionNumRects(pClip),
+ pbox = RegionRects(pClip); nbox--; pbox++) {
+ x1 = x;
+ y1 = y;
+ x2 = x + width;
+ y2 = y + height;
+ if (x1 < pbox->x1)
+ x1 = pbox->x1;
+ if (y1 < pbox->y1)
+ y1 = pbox->y1;
+ if (x2 > pbox->x2)
+ x2 = pbox->x2;
+ if (y2 > pbox->y2)
+ y2 = pbox->y2;
+ if (x1 >= x2 || y1 >= y2)
+ continue;
+ fbBltStip(src + (y1 - y) * srcStride,
+ srcStride,
+ (x1 - x) * dstBpp,
+ dst + (y1 + dstYoff) * dstStride,
+ dstStride,
+ (x1 + dstXoff) * dstBpp,
+ (x2 - x1) * dstBpp, (y2 - y1), alu, pm, dstBpp);
}
- fbFinishAccess (pDrawable);
+ fbFinishAccess(pDrawable);
}
-
-void
-fbPutXYImage (DrawablePtr pDrawable,
- RegionPtr pClip,
- FbBits fg,
- FbBits bg,
- FbBits pm,
- int alu,
- Bool opaque,
-
- int x,
- int y,
- int width,
- int height,
- FbStip *src,
- FbStride srcStride,
- int srcX)
+void
+fbPutXYImage(DrawablePtr pDrawable,
+ RegionPtr pClip,
+ FbBits fg,
+ FbBits bg,
+ FbBits pm,
+ int alu,
+ Bool opaque,
+ int x,
+ int y,
+ int width, int height, FbStip * src, FbStride srcStride, int srcX)
{
- FbBits *dst;
- FbStride dstStride;
- int dstBpp;
- int dstXoff, dstYoff;
- int nbox;
- BoxPtr pbox;
- int x1, y1, x2, y2;
- FbBits fgand = 0, fgxor = 0, bgand = 0, bgxor = 0;
+ FbBits *dst;
+ FbStride dstStride;
+ int dstBpp;
+ int dstXoff, dstYoff;
+ int nbox;
+ BoxPtr pbox;
+ int x1, y1, x2, y2;
+ FbBits fgand = 0, fgxor = 0, bgand = 0, bgxor = 0;
- fbGetDrawable (pDrawable, dst, dstStride, dstBpp, dstXoff, dstYoff);
+ fbGetDrawable(pDrawable, dst, dstStride, dstBpp, dstXoff, dstYoff);
- if (dstBpp == 1)
- {
- if (opaque)
- alu = FbOpaqueStipple1Rop(alu,fg,bg);
- else
- alu = FbStipple1Rop(alu,fg);
+ if (dstBpp == 1) {
+ if (opaque)
+ alu = FbOpaqueStipple1Rop(alu, fg, bg);
+ else
+ alu = FbStipple1Rop(alu, fg);
}
- else
- {
- fgand = fbAnd(alu,fg,pm);
- fgxor = fbXor(alu,fg,pm);
- if (opaque)
- {
- bgand = fbAnd(alu,bg,pm);
- bgxor = fbXor(alu,bg,pm);
- }
- else
- {
- bgand = fbAnd(GXnoop,(FbBits)0,FB_ALLONES);
- bgxor = fbXor(GXnoop,(FbBits)0,FB_ALLONES);
- }
+ else {
+ fgand = fbAnd(alu, fg, pm);
+ fgxor = fbXor(alu, fg, pm);
+ if (opaque) {
+ bgand = fbAnd(alu, bg, pm);
+ bgxor = fbXor(alu, bg, pm);
+ }
+ else {
+ bgand = fbAnd(GXnoop, (FbBits) 0, FB_ALLONES);
+ bgxor = fbXor(GXnoop, (FbBits) 0, FB_ALLONES);
+ }
}
- for (nbox = RegionNumRects (pClip),
- pbox = RegionRects(pClip);
- nbox--;
- pbox++)
- {
- x1 = x;
- y1 = y;
- x2 = x + width;
- y2 = y + height;
- if (x1 < pbox->x1)
- x1 = pbox->x1;
- if (y1 < pbox->y1)
- y1 = pbox->y1;
- if (x2 > pbox->x2)
- x2 = pbox->x2;
- if (y2 > pbox->y2)
- y2 = pbox->y2;
- if (x1 >= x2 || y1 >= y2)
- continue;
- if (dstBpp == 1)
- {
- fbBltStip (src + (y1 - y) * srcStride,
- srcStride,
- (x1 - x) + srcX,
-
- (FbStip *) (dst + (y1 + dstYoff) * dstStride),
- FbBitsStrideToStipStride(dstStride),
- (x1 + dstXoff) * dstBpp,
-
- (x2 - x1) * dstBpp,
- (y2 - y1),
-
- alu,
- pm,
- dstBpp);
- }
- else
- {
- fbBltOne (src + (y1 - y) * srcStride,
- srcStride,
- (x1 - x) + srcX,
-
- dst + (y1 + dstYoff) * dstStride,
- dstStride,
- (x1 + dstXoff) * dstBpp,
- dstBpp,
-
- (x2 - x1) * dstBpp,
- (y2 - y1),
-
- fgand, fgxor, bgand, bgxor);
- }
+ for (nbox = RegionNumRects(pClip),
+ pbox = RegionRects(pClip); nbox--; pbox++) {
+ x1 = x;
+ y1 = y;
+ x2 = x + width;
+ y2 = y + height;
+ if (x1 < pbox->x1)
+ x1 = pbox->x1;
+ if (y1 < pbox->y1)
+ y1 = pbox->y1;
+ if (x2 > pbox->x2)
+ x2 = pbox->x2;
+ if (y2 > pbox->y2)
+ y2 = pbox->y2;
+ if (x1 >= x2 || y1 >= y2)
+ continue;
+ if (dstBpp == 1) {
+ fbBltStip(src + (y1 - y) * srcStride,
+ srcStride,
+ (x1 - x) + srcX,
+ (FbStip *) (dst + (y1 + dstYoff) * dstStride),
+ FbBitsStrideToStipStride(dstStride),
+ (x1 + dstXoff) * dstBpp,
+ (x2 - x1) * dstBpp, (y2 - y1), alu, pm, dstBpp);
+ }
+ else {
+ fbBltOne(src + (y1 - y) * srcStride,
+ srcStride,
+ (x1 - x) + srcX,
+ dst + (y1 + dstYoff) * dstStride,
+ dstStride,
+ (x1 + dstXoff) * dstBpp,
+ dstBpp,
+ (x2 - x1) * dstBpp, (y2 - y1), fgand, fgxor, bgand, bgxor);
+ }
}
- fbFinishAccess (pDrawable);
+ fbFinishAccess(pDrawable);
}
void
-fbGetImage (DrawablePtr pDrawable,
- int x,
- int y,
- int w,
- int h,
- unsigned int format,
- unsigned long planeMask,
- char *d)
+fbGetImage(DrawablePtr pDrawable,
+ int x,
+ int y,
+ int w, int h, unsigned int format, unsigned long planeMask, char *d)
{
- FbBits *src;
- FbStride srcStride;
- int srcBpp;
- int srcXoff, srcYoff;
- FbStip *dst;
- FbStride dstStride;
-
+ FbBits *src;
+ FbStride srcStride;
+ int srcBpp;
+ int srcXoff, srcYoff;
+ FbStip *dst;
+ FbStride dstStride;
+
/*
* XFree86 DDX empties the root borderClip when the VT is
* switched away; this checks for that case
*/
if (!fbDrawableEnabled(pDrawable))
- return;
-
+ return;
+
if (format == ZPixmap &&
- pDrawable->bitsPerPixel != BitsPerPixel (pDrawable->depth))
- {
- fb24_32GetImage (pDrawable, x, y, w, h, format, planeMask, d);
- return;
+ pDrawable->bitsPerPixel != BitsPerPixel(pDrawable->depth)) {
+ fb24_32GetImage(pDrawable, x, y, w, h, format, planeMask, d);
+ return;
}
-
- fbGetDrawable (pDrawable, src, srcStride, srcBpp, srcXoff, srcYoff);
-
+
+ fbGetDrawable(pDrawable, src, srcStride, srcBpp, srcXoff, srcYoff);
+
x += pDrawable->x;
y += pDrawable->y;
-
- dst = (FbStip *) d;
- if (format == ZPixmap || srcBpp == 1)
- {
- FbBits pm;
- pm = fbReplicatePixel (planeMask, srcBpp);
- dstStride = PixmapBytePad(w, pDrawable->depth);
- if (pm != FB_ALLONES)
- memset (d, 0, dstStride * h);
- dstStride /= sizeof (FbStip);
- fbBltStip ((FbStip *) (src + (y + srcYoff) * srcStride),
- FbBitsStrideToStipStride(srcStride),
- (x + srcXoff) * srcBpp,
-
- dst,
- dstStride,
- 0,
-
- w * srcBpp, h,
+ dst = (FbStip *) d;
+ if (format == ZPixmap || srcBpp == 1) {
+ FbBits pm;
- GXcopy,
- pm,
- srcBpp);
+ pm = fbReplicatePixel(planeMask, srcBpp);
+ dstStride = PixmapBytePad(w, pDrawable->depth);
+ if (pm != FB_ALLONES)
+ memset(d, 0, dstStride * h);
+ dstStride /= sizeof(FbStip);
+ fbBltStip((FbStip *) (src + (y + srcYoff) * srcStride),
+ FbBitsStrideToStipStride(srcStride),
+ (x + srcXoff) * srcBpp,
+ dst, dstStride, 0, w * srcBpp, h, GXcopy, pm, srcBpp);
}
- else
- {
- dstStride = BitmapBytePad(w) / sizeof (FbStip);
- fbBltPlane (src + (y + srcYoff) * srcStride,
- srcStride,
- (x + srcXoff) * srcBpp,
- srcBpp,
-
- dst,
- dstStride,
- 0,
-
- w * srcBpp, h,
-
- fbAndStip(GXcopy,FB_STIP_ALLONES,FB_STIP_ALLONES),
- fbXorStip(GXcopy,FB_STIP_ALLONES,FB_STIP_ALLONES),
- fbAndStip(GXcopy,0,FB_STIP_ALLONES),
- fbXorStip(GXcopy,0,FB_STIP_ALLONES),
- planeMask);
+ else {
+ dstStride = BitmapBytePad(w) / sizeof(FbStip);
+ fbBltPlane(src + (y + srcYoff) * srcStride,
+ srcStride,
+ (x + srcXoff) * srcBpp,
+ srcBpp,
+ dst,
+ dstStride,
+ 0,
+ w * srcBpp, h,
+ fbAndStip(GXcopy, FB_STIP_ALLONES, FB_STIP_ALLONES),
+ fbXorStip(GXcopy, FB_STIP_ALLONES, FB_STIP_ALLONES),
+ fbAndStip(GXcopy, 0, FB_STIP_ALLONES),
+ fbXorStip(GXcopy, 0, FB_STIP_ALLONES), planeMask);
}
- fbFinishAccess (pDrawable);
+ fbFinishAccess(pDrawable);
}