diff options
Diffstat (limited to 'Xext')
-rw-r--r-- | Xext/xvdix.h | 2 | ||||
-rw-r--r-- | Xext/xvmain.c | 31 |
2 files changed, 33 insertions, 0 deletions
diff --git a/Xext/xvdix.h b/Xext/xvdix.h index 534e7d3f8..828f67cd1 100644 --- a/Xext/xvdix.h +++ b/Xext/xvdix.h @@ -233,6 +233,8 @@ extern _X_EXPORT int XvScreenInit(ScreenPtr); extern _X_EXPORT DevPrivateKey XvGetScreenKey(void); extern _X_EXPORT unsigned long XvGetRTPort(void); extern _X_EXPORT void XvFreeAdaptor(XvAdaptorPtr pAdaptor); +extern void _X_EXPORT XvFillColorKey(DrawablePtr pDraw, CARD32 key, + RegionPtr region); extern _X_EXPORT int XvdiSendPortNotify(XvPortPtr, Atom, INT32); extern _X_EXPORT int XvdiPutVideo(ClientPtr, DrawablePtr, XvPortPtr, GCPtr, diff --git a/Xext/xvmain.c b/Xext/xvmain.c index 4a439e32c..d932dfdfc 100644 --- a/Xext/xvmain.c +++ b/Xext/xvmain.c @@ -1082,3 +1082,34 @@ XvFreeAdaptor(XvAdaptorPtr pAdaptor) free(pAdaptor->devPriv.ptr); pAdaptor->devPriv.ptr = NULL; } + +void +XvFillColorKey(DrawablePtr pDraw, CARD32 key, RegionPtr region) +{ + ScreenPtr pScreen = pDraw->pScreen; + ChangeGCVal pval[2]; + BoxPtr pbox = RegionRects(region); + int i, nbox = RegionNumRects(region); + xRectangle *rects; + GCPtr gc; + + gc = GetScratchGC(pDraw->depth, pScreen); + pval[0].val = key; + pval[1].val = IncludeInferiors; + (void) ChangeGC(NullClient, gc, GCForeground | GCSubwindowMode, pval); + ValidateGC(pDraw, gc); + + rects = malloc(nbox * sizeof(xRectangle)); + + for (i = 0; i < nbox; i++, pbox++) { + rects[i].x = pbox->x1 - pDraw->x; + rects[i].y = pbox->y1 - pDraw->y; + rects[i].width = pbox->x2 - pbox->x1; + rects[i].height = pbox->y2 - pbox->y1; + } + + (*gc->ops->PolyFillRect) (pDraw, gc, nbox, rects); + + free(rects); + FreeScratchGC(gc); +} |