diff options
author | David Reveman <davidr@novell.com> | 2008-05-27 12:40:13 -0400 |
---|---|---|
committer | David Reveman <davidr@novell.com> | 2008-10-30 03:36:40 -0400 |
commit | 90483541ad00efd829d2f35f19fb7854c944a31b (patch) | |
tree | a82c9ac02a5f51a95133f00eab96e45115230625 /render | |
parent | d829f478029c27eacf8c19d9688d2c28d3ed1228 (diff) |
Panoramix fixes for RENDER extension.
Diffstat (limited to 'render')
-rw-r--r-- | render/render.c | 128 |
1 files changed, 128 insertions, 0 deletions
diff --git a/render/render.c b/render/render.c index 7cb93bd18..42f55abf8 100644 --- a/render/render.c +++ b/render/render.c @@ -3265,6 +3265,130 @@ PanoramiXRenderAddTraps (ClientPtr client) return result; } +static int +PanoramiXRenderCreateSolidFill (ClientPtr client) +{ + REQUEST(xRenderCreateSolidFillReq); + PanoramiXRes *newPict; + int result = Success, j; + + REQUEST_AT_LEAST_SIZE(xRenderCreateSolidFillReq); + if (!(newPict = (PanoramiXRes *) xalloc (sizeof (PanoramiXRes)))) + return BadAlloc; + + newPict->type = XRT_PICTURE; + newPict->info[0].id = stuff->pid; + + for (j = 1; j < PanoramiXNumScreens; j++) + newPict->info[j].id = FakeClientID (client->index); + + FOR_NSCREENS_BACKWARD(j) { + stuff->pid = newPict->info[j].id; + result = (*PanoramiXSaveRenderVector[X_RenderCreateSolidFill]) (client); + if (result != Success) break; + } + + if (result == Success) + AddResource (newPict->info[0].id, XRT_PICTURE, newPict); + else + xfree (newPict); + + return result; +} + +static int +PanoramiXRenderCreateLinearGradient (ClientPtr client) +{ + REQUEST(xRenderCreateLinearGradientReq); + PanoramiXRes *newPict; + int result = Success, j; + + REQUEST_AT_LEAST_SIZE(xRenderCreateLinearGradientReq); + if (!(newPict = (PanoramiXRes *) xalloc (sizeof (PanoramiXRes)))) + return BadAlloc; + + newPict->type = XRT_PICTURE; + newPict->info[0].id = stuff->pid; + + for (j = 1; j < PanoramiXNumScreens; j++) + newPict->info[j].id = FakeClientID (client->index); + + FOR_NSCREENS_BACKWARD(j) { + stuff->pid = newPict->info[j].id; + result = (*PanoramiXSaveRenderVector[X_RenderCreateLinearGradient]) (client); + if (result != Success) break; + } + + if (result == Success) + AddResource (newPict->info[0].id, XRT_PICTURE, newPict); + else + xfree (newPict); + + return result; +} + +static int +PanoramiXRenderCreateRadialGradient (ClientPtr client) +{ + REQUEST(xRenderCreateRadialGradientReq); + PanoramiXRes *newPict; + int result = Success, j; + + REQUEST_AT_LEAST_SIZE(xRenderCreateRadialGradientReq); + if (!(newPict = (PanoramiXRes *) xalloc (sizeof (PanoramiXRes)))) + return BadAlloc; + + newPict->type = XRT_PICTURE; + newPict->info[0].id = stuff->pid; + + for (j = 1; j < PanoramiXNumScreens; j++) + newPict->info[j].id = FakeClientID (client->index); + + FOR_NSCREENS_BACKWARD(j) { + stuff->pid = newPict->info[j].id; + result = (*PanoramiXSaveRenderVector[X_RenderCreateRadialGradient]) (client); + if (result != Success) break; + } + + if (result == Success) + AddResource (newPict->info[0].id, XRT_PICTURE, newPict); + else + xfree (newPict); + + return result; +} + +static int +PanoramiXRenderCreateConicalGradient (ClientPtr client) +{ + REQUEST(xRenderCreateConicalGradientReq); + PanoramiXRes *newPict; + int result = Success, j; + + REQUEST_AT_LEAST_SIZE(xRenderCreateConicalGradientReq); + if (!(newPict = (PanoramiXRes *) xalloc (sizeof (PanoramiXRes)))) + return BadAlloc; + + newPict->type = XRT_PICTURE; + newPict->info[0].id = stuff->pid; + + for (j = 1; j < PanoramiXNumScreens; j++) + newPict->info[j].id = FakeClientID (client->index); + + FOR_NSCREENS_BACKWARD(j) { + stuff->pid = newPict->info[j].id; + result = (*PanoramiXSaveRenderVector[X_RenderCreateConicalGradient]) (client); + if (result != Success) break; + } + + if (result == Success) + AddResource (newPict->info[0].id, XRT_PICTURE, newPict); + else + xfree (newPict); + + return result; +} + void PanoramiXRenderInit (void) { @@ -3293,6 +3417,10 @@ PanoramiXRenderInit (void) ProcRenderVector[X_RenderTriStrip] = PanoramiXRenderTriStrip; ProcRenderVector[X_RenderTriFan] = PanoramiXRenderTriFan; ProcRenderVector[X_RenderAddTraps] = PanoramiXRenderAddTraps; + ProcRenderVector[X_RenderCreateSolidFill] = PanoramiXRenderCreateSolidFill; + ProcRenderVector[X_RenderCreateLinearGradient] = PanoramiXRenderCreateLinearGradient; + ProcRenderVector[X_RenderCreateRadialGradient] = PanoramiXRenderCreateRadialGradient; + ProcRenderVector[X_RenderCreateConicalGradient] = PanoramiXRenderCreateConicalGradient; } void |