[PATCH 1/2] render: Move miCompositeRects() into fb as fbCompositeRects().
Søren Sandmann
sandmann at cs.au.dk
Wed Mar 30 09:37:21 PDT 2011
From: Søren Sandmann Pedersen <ssp at redhat.com>
It is not used anywhere else.
Signed-off-by: Soren Sandmann <ssp at redhat.com>
---
fb/fbpict.c | 47 +++++++++++++-
fb/fbpict.h | 7 ++
render/Makefile.am | 1 -
render/mipict.c | 2 +-
render/mipict.h | 7 --
render/mirect.c | 185 ----------------------------------------------------
6 files changed, 54 insertions(+), 195 deletions(-)
delete mode 100644 render/mirect.c
diff --git a/fb/fbpict.c b/fb/fbpict.c
index 133f422..6b7c920 100644
--- a/fb/fbpict.c
+++ b/fb/fbpict.c
@@ -34,6 +34,7 @@
#include "picturestr.h"
#include "mipict.h"
#include "fbpict.h"
+#include "damage.h"
void
fbComposite (CARD8 op,
@@ -76,6 +77,50 @@ fbComposite (CARD8 op,
free_pixman_pict (pDst, dest);
}
+void
+fbCompositeRects (CARD8 op,
+ PicturePtr pDst,
+ xRenderColor *color,
+ int nRect,
+ xRectangle *rects)
+{
+ RegionPtr damage;
+ pixman_image_t *image;
+ int dst_xoff, dst_yoff;
+ int i;
+
+ damage = RegionFromRects (nRect, rects, CT_UNSORTED);
+ RegionIntersect (damage, damage, pDst->pCompositeClip);
+
+ if (RegionBroken (damage))
+ return;
+
+ DamageRegionAppend (pDst->pDrawable, damage);
+
+ image = image_from_pict (pDst, TRUE, &dst_xoff, &dst_yoff);
+
+ for (i = 0; i < nRect; ++i)
+ {
+ rects[i].x += dst_xoff;
+ rects[i].y += dst_yoff;
+ }
+
+ pixman_image_fill_rectangles (
+ op, image, (pixman_color_t *)color, nRect,
+ (const pixman_rectangle16_t *)rects);
+
+ for (i = 0; i < nRect; ++i)
+ {
+ rects[i].x -= dst_xoff;
+ rects[i].y -= dst_yoff;
+ }
+
+ free_pixman_pict (pDst, image);
+
+ DamageRegionProcessPending (pDst->pDrawable);
+ RegionDestroy (damage);
+}
+
static pixman_image_t *
create_solid_fill_image (PicturePtr pict)
{
@@ -362,7 +407,7 @@ fbPictureInit (ScreenPtr pScreen, PictFormatPtr formats, int nformats)
ps = GetPictureScreen(pScreen);
ps->Composite = fbComposite;
ps->Glyphs = miGlyphs;
- ps->CompositeRects = miCompositeRects;
+ ps->CompositeRects = fbCompositeRects;
ps->RasterizeTrapezoid = fbRasterizeTrapezoid;
ps->Trapezoids = fbTrapezoids;
ps->AddTraps = fbAddTraps;
diff --git a/fb/fbpict.h b/fb/fbpict.h
index b880ebb..76c4d44 100644
--- a/fb/fbpict.h
+++ b/fb/fbpict.h
@@ -43,6 +43,13 @@ fbComposite (CARD8 op,
CARD16 width,
CARD16 height);
+extern _X_EXPORT void
+fbCompositeRects (CARD8 op,
+ PicturePtr pDst,
+ xRenderColor *color,
+ int nRect,
+ xRectangle *rects);
+
/* fbtrap.c */
extern _X_EXPORT void
diff --git a/render/Makefile.am b/render/Makefile.am
index d02028b..80c3cb7 100644
--- a/render/Makefile.am
+++ b/render/Makefile.am
@@ -9,7 +9,6 @@ librender_la_SOURCES = \
matrix.c \
miindex.c \
mipict.c \
- mirect.c \
mitrap.c \
mitri.c \
picture.c \
diff --git a/render/mipict.c b/render/mipict.c
index 9decd39..fefca84 100644
--- a/render/mipict.c
+++ b/render/mipict.c
@@ -598,7 +598,7 @@ miPictureInit (ScreenPtr pScreen, PictFormatPtr formats, int nformats)
/* MI rendering routines */
ps->Composite = 0; /* requires DDX support */
ps->Glyphs = miGlyphs;
- ps->CompositeRects = miCompositeRects;
+ ps->CompositeRects = 0;
ps->Trapezoids = 0;
ps->Triangles = 0;
diff --git a/render/mipict.h b/render/mipict.h
index f6d9dee..0767b62 100644
--- a/render/mipict.h
+++ b/render/mipict.h
@@ -133,13 +133,6 @@ extern _X_EXPORT Bool
miIsSolidAlpha (PicturePtr pSrc);
extern _X_EXPORT void
-miCompositeRects (CARD8 op,
- PicturePtr pDst,
- xRenderColor *color,
- int nRect,
- xRectangle *rects);
-
-extern _X_EXPORT void
miTrapezoidBounds (int ntrap, xTrapezoid *traps, BoxPtr box);
extern _X_EXPORT void
diff --git a/render/mirect.c b/render/mirect.c
deleted file mode 100644
index 1f8fd2c..0000000
--- a/render/mirect.c
+++ /dev/null
@@ -1,185 +0,0 @@
-/*
- *
- * Copyright © 2000 Keith Packard, member of The XFree86 Project, Inc.
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Keith Packard makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifdef HAVE_DIX_CONFIG_H
-#include <dix-config.h>
-#endif
-
-#include "scrnintstr.h"
-#include "gcstruct.h"
-#include "pixmapstr.h"
-#include "windowstr.h"
-#include "mi.h"
-#include "picturestr.h"
-#include "mipict.h"
-
-static void
-miColorRects (PicturePtr pDst,
- PicturePtr pClipPict,
- xRenderColor *color,
- int nRect,
- xRectangle *rects,
- int xoff,
- int yoff)
-{
- CARD32 pixel;
- GCPtr pGC;
- ChangeGCVal tmpval[5];
- RegionPtr pClip;
- unsigned long mask;
-
- miRenderColorToPixel (pDst->pFormat, color, &pixel);
-
- pGC = GetScratchGC (pDst->pDrawable->depth, pDst->pDrawable->pScreen);
- if (!pGC)
- return;
- tmpval[0].val = GXcopy;
- tmpval[1].val = pixel;
- tmpval[2].val = pDst->subWindowMode;
- mask = GCFunction | GCForeground | GCSubwindowMode;
- if (pClipPict->clientClipType == CT_REGION)
- {
- tmpval[3].val = pDst->clipOrigin.x - xoff;
- tmpval[4].val = pDst->clipOrigin.y - yoff;
- mask |= GCClipXOrigin|GCClipYOrigin;
-
- pClip = RegionCreate(NULL);
- RegionCopy(pClip,
- (RegionPtr) pClipPict->clientClip);
- (*pGC->funcs->ChangeClip) (pGC, CT_REGION, pClip, 0);
- }
-
- ChangeGC (NullClient, pGC, mask, tmpval);
- ValidateGC (pDst->pDrawable, pGC);
- if (xoff || yoff)
- {
- int i;
- for (i = 0; i < nRect; i++)
- {
- rects[i].x -= xoff;
- rects[i].y -= yoff;
- }
- }
- (*pGC->ops->PolyFillRect) (pDst->pDrawable, pGC, nRect, rects);
- if (xoff || yoff)
- {
- int i;
- for (i = 0; i < nRect; i++)
- {
- rects[i].x += xoff;
- rects[i].y += yoff;
- }
- }
- FreeScratchGC (pGC);
-}
-
-void
-miCompositeRects (CARD8 op,
- PicturePtr pDst,
- xRenderColor *color,
- int nRect,
- xRectangle *rects)
-{
- ScreenPtr pScreen = pDst->pDrawable->pScreen;
-
- if (color->alpha == 0xffff)
- {
- if (op == PictOpOver)
- op = PictOpSrc;
- }
- if (op == PictOpClear)
- color->red = color->green = color->blue = color->alpha = 0;
-
- if (op == PictOpSrc || op == PictOpClear)
- {
- miColorRects (pDst, pDst, color, nRect, rects, 0, 0);
- if (pDst->alphaMap)
- miColorRects (pDst->alphaMap, pDst,
- color, nRect, rects,
- pDst->alphaOrigin.x,
- pDst->alphaOrigin.y);
- }
- else
- {
- PictFormatPtr rgbaFormat;
- PixmapPtr pPixmap;
- PicturePtr pSrc;
- xRectangle one;
- int error;
- Pixel pixel;
- GCPtr pGC;
- ChangeGCVal gcvals[2];
- XID tmpval[1];
-
- rgbaFormat = PictureMatchFormat (pScreen, 32, PICT_a8r8g8b8);
- if (!rgbaFormat)
- goto bail1;
-
- pPixmap = (*pScreen->CreatePixmap) (pScreen, 1, 1, rgbaFormat->depth,
- CREATE_PIXMAP_USAGE_SCRATCH);
- if (!pPixmap)
- goto bail2;
-
- miRenderColorToPixel (rgbaFormat, color, &pixel);
-
- pGC = GetScratchGC (rgbaFormat->depth, pScreen);
- if (!pGC)
- goto bail3;
- gcvals[0].val = GXcopy;
- gcvals[1].val = pixel;
-
- ChangeGC (NullClient, pGC, GCFunction | GCForeground, gcvals);
- ValidateGC (&pPixmap->drawable, pGC);
- one.x = 0;
- one.y = 0;
- one.width = 1;
- one.height = 1;
- (*pGC->ops->PolyFillRect) (&pPixmap->drawable, pGC, 1, &one);
-
- tmpval[0] = xTrue;
- pSrc = CreatePicture (0, &pPixmap->drawable, rgbaFormat,
- CPRepeat, tmpval, serverClient, &error);
-
- if (!pSrc)
- goto bail4;
-
- while (nRect--)
- {
- CompositePicture (op, pSrc, 0, pDst, 0, 0, 0, 0,
- rects->x,
- rects->y,
- rects->width,
- rects->height);
- rects++;
- }
-
- FreePicture ((pointer) pSrc, 0);
-bail4:
- FreeScratchGC (pGC);
-bail3:
- (*pScreen->DestroyPixmap) (pPixmap);
-bail2:
-bail1:
- ;
- }
-}
--
1.7.4
More information about the xorg-devel
mailing list