summaryrefslogtreecommitdiff
path: root/render
diff options
context:
space:
mode:
authorDavid Reveman <davidr@novell.com>2008-05-27 12:40:13 -0400
committerDavid Reveman <davidr@novell.com>2008-10-30 03:36:40 -0400
commit90483541ad00efd829d2f35f19fb7854c944a31b (patch)
treea82c9ac02a5f51a95133f00eab96e45115230625 /render
parentd829f478029c27eacf8c19d9688d2c28d3ed1228 (diff)
Panoramix fixes for RENDER extension.
Diffstat (limited to 'render')
-rw-r--r--render/render.c128
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