diff options
author | Lars Knoll <lars@trolltech.com> | 2005-07-01 10:04:51 +0000 |
---|---|---|
committer | Lars Knoll <lars@trolltech.com> | 2005-07-01 10:04:51 +0000 |
commit | 9359b40d8c41901844924060a864a854dac4adbf (patch) | |
tree | 7d9845d7c4a0ad78c2bb7d2e60052a012b56cf20 /src | |
parent | 60cc17fd8fac9b28363e0979d6b0443be6838613 (diff) |
Add support for gradients and solid fills to Render.
Diffstat (limited to 'src')
-rw-r--r-- | src/Picture.c | 123 |
1 files changed, 123 insertions, 0 deletions
diff --git a/src/Picture.c b/src/Picture.c index f5c5a2a..5b08bf3 100644 --- a/src/Picture.c +++ b/src/Picture.c @@ -241,3 +241,126 @@ XRenderFreePicture (Display *dpy, UnlockDisplay(dpy); SyncHandle(); } + + +Picture XRenderCreateSolidFill(Display *dpy, + const XRenderColor *color) +{ + XRenderExtDisplayInfo *info = XRenderFindDisplay (dpy); + Picture pid; + xRenderCreateSolidFillReq *req; + + RenderCheckExtension (dpy, info, 0); + LockDisplay(dpy); + GetReq(RenderCreateSolidFill, req); + req->reqType = info->codes->major_opcode; + req->renderReqType = X_RenderCreateSolidFill; + + req->pid = pid = XAllocID(dpy); + req->color.red = color->red; + req->color.green = color->green; + req->color.blue = color->blue; + req->color.alpha = color->alpha; + + UnlockDisplay(dpy); + SyncHandle(); + return pid; +} + + +Picture XRenderCreateLinearGradient(Display *dpy, + const XLinearGradient *gradient, + const XFixed *stops, + const XRenderColor *colors, + int nStops) +{ + XRenderExtDisplayInfo *info = XRenderFindDisplay (dpy); + Picture pid; + xRenderCreateLinearGradientReq *req; + + RenderCheckExtension (dpy, info, 0); + LockDisplay(dpy); + GetReq(RenderCreateLinearGradient, req); + req->reqType = info->codes->major_opcode; + req->renderReqType = X_RenderCreateLinearGradient; + + req->pid = pid = XAllocID(dpy); + req->p1.x = gradient->p1.x; + req->p1.y = gradient->p1.y; + req->p2.x = gradient->p2.x; + req->p2.y = gradient->p2.y; + + req->nStops = nStops; + DataInt32(dpy, stops, nStops * 4); + Data16(dpy, colors, nStops * 8); + req->length += nStops*3; + + UnlockDisplay(dpy); + SyncHandle(); + return pid; +} + +Picture XRenderCreateRadialGradient(Display *dpy, + const XRadialGradient *gradient, + const XFixed *stops, + const XRenderColor *colors, + int nStops) +{ + XRenderExtDisplayInfo *info = XRenderFindDisplay (dpy); + Picture pid; + xRenderCreateRadialGradientReq *req; + + RenderCheckExtension (dpy, info, 0); + LockDisplay(dpy); + GetReq(RenderCreateRadialGradient, req); + req->reqType = info->codes->major_opcode; + req->renderReqType = X_RenderCreateRadialGradient; + + req->pid = pid = XAllocID(dpy); + req->inner.x = gradient->inner.x; + req->inner.y = gradient->inner.y; + req->outer.x = gradient->outer.x; + req->outer.y = gradient->outer.y; + req->inner_radius = gradient->inner.radius; + req->outer_radius = gradient->outer.radius; + + req->nStops = nStops; + DataInt32(dpy, stops, nStops * 4); + Data16(dpy, colors, nStops * 8); + req->length += nStops*3; + + UnlockDisplay(dpy); + SyncHandle(); + return pid; +} + +Picture XRenderCreateConicalGradient(Display *dpy, + const XConicalGradient *gradient, + const XFixed *stops, + const XRenderColor *colors, + int nStops) +{ + XRenderExtDisplayInfo *info = XRenderFindDisplay (dpy); + Picture pid; + xRenderCreateConicalGradientReq *req; + + RenderCheckExtension (dpy, info, 0); + LockDisplay(dpy); + GetReq(RenderCreateConicalGradient, req); + req->reqType = info->codes->major_opcode; + req->renderReqType = X_RenderCreateConicalGradient; + + req->pid = pid = XAllocID(dpy); + req->center.x = gradient->center.x; + req->center.y = gradient->center.y; + req->angle = gradient->angle; + + req->nStops = nStops; + DataInt32(dpy, stops, nStops * 4); + Data16(dpy, colors, nStops * 8); + req->length += nStops*3; + + UnlockDisplay(dpy); + SyncHandle(); + return pid; +} |