mirror of
https://github.com/X11Libre/xserver.git
synced 2026-04-14 17:18:09 +00:00
Xinerama: lambda-esque macro for walking Xinerama screens
Move the walking loops on Xinerama screens into lambda-esque macros: the callers look quite like we've been using lambda functions and closures, but actually are just fancy macro trickery. Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
This commit is contained in:
committed by
Enrico Weigelt
parent
e3d9f4c3ef
commit
eb17b34362
102
render/render.c
102
render/render.c
@@ -2561,14 +2561,13 @@ PanoramiXRenderCreatePicture(ClientPtr client)
|
||||
else
|
||||
newPict->u.pict.root = FALSE;
|
||||
|
||||
int walkScreenIdx;
|
||||
FOR_NSCREENS_BACKWARD(walkScreenIdx) {
|
||||
XINERAMA_FOR_EACH_SCREEN_BACKWARD({
|
||||
stuff->pid = newPict->info[walkScreenIdx].id;
|
||||
stuff->drawable = refDraw->info[walkScreenIdx].id;
|
||||
result = ProcRenderCreatePicture(client);
|
||||
if (result != Success)
|
||||
break;
|
||||
}
|
||||
});
|
||||
|
||||
if (result == Success)
|
||||
AddResource(newPict->info[0].id, XRT_PICTURE, newPict);
|
||||
@@ -2590,13 +2589,12 @@ PanoramiXRenderChangePicture(ClientPtr client)
|
||||
|
||||
VERIFY_XIN_PICTURE(pict, stuff->picture, client, DixWriteAccess);
|
||||
|
||||
int walkScreenIdx;
|
||||
FOR_NSCREENS_BACKWARD(walkScreenIdx) {
|
||||
XINERAMA_FOR_EACH_SCREEN_BACKWARD({
|
||||
stuff->picture = pict->info[walkScreenIdx].id;
|
||||
result = ProcRenderChangePicture(client);
|
||||
if (result != Success)
|
||||
break;
|
||||
}
|
||||
});
|
||||
|
||||
return result;
|
||||
}
|
||||
@@ -2612,13 +2610,12 @@ PanoramiXRenderSetPictureClipRectangles(ClientPtr client)
|
||||
|
||||
VERIFY_XIN_PICTURE(pict, stuff->picture, client, DixWriteAccess);
|
||||
|
||||
int walkScreenIdx;
|
||||
FOR_NSCREENS_BACKWARD(walkScreenIdx) {
|
||||
XINERAMA_FOR_EACH_SCREEN_BACKWARD({
|
||||
stuff->picture = pict->info[walkScreenIdx].id;
|
||||
result = ProcRenderSetPictureClipRectangles(client);
|
||||
if (result != Success)
|
||||
break;
|
||||
}
|
||||
});
|
||||
|
||||
return result;
|
||||
}
|
||||
@@ -2634,13 +2631,12 @@ PanoramiXRenderSetPictureTransform(ClientPtr client)
|
||||
|
||||
VERIFY_XIN_PICTURE(pict, stuff->picture, client, DixWriteAccess);
|
||||
|
||||
int walkScreenIdx;
|
||||
FOR_NSCREENS_BACKWARD(walkScreenIdx) {
|
||||
XINERAMA_FOR_EACH_SCREEN_BACKWARD({
|
||||
stuff->picture = pict->info[walkScreenIdx].id;
|
||||
result = ProcRenderSetPictureTransform(client);
|
||||
if (result != Success)
|
||||
break;
|
||||
}
|
||||
});
|
||||
|
||||
return result;
|
||||
}
|
||||
@@ -2656,13 +2652,12 @@ PanoramiXRenderSetPictureFilter(ClientPtr client)
|
||||
|
||||
VERIFY_XIN_PICTURE(pict, stuff->picture, client, DixWriteAccess);
|
||||
|
||||
int walkScreenIdx;
|
||||
FOR_NSCREENS_BACKWARD(walkScreenIdx) {
|
||||
XINERAMA_FOR_EACH_SCREEN_BACKWARD({
|
||||
stuff->picture = pict->info[walkScreenIdx].id;
|
||||
result = ProcRenderSetPictureFilter(client);
|
||||
if (result != Success)
|
||||
break;
|
||||
}
|
||||
});
|
||||
|
||||
return result;
|
||||
}
|
||||
@@ -2681,13 +2676,12 @@ PanoramiXRenderFreePicture(ClientPtr client)
|
||||
|
||||
VERIFY_XIN_PICTURE(pict, stuff->picture, client, DixDestroyAccess);
|
||||
|
||||
int walkScreenIdx;
|
||||
FOR_NSCREENS_BACKWARD(walkScreenIdx) {
|
||||
XINERAMA_FOR_EACH_SCREEN_BACKWARD({
|
||||
stuff->picture = pict->info[walkScreenIdx].id;
|
||||
result = ProcRenderFreePicture(client);
|
||||
if (result != Success)
|
||||
break;
|
||||
}
|
||||
});
|
||||
|
||||
/* Since ProcRenderFreePicture is using FreeResource, it will free
|
||||
our resource for us on the last pass through the loop above */
|
||||
@@ -2712,9 +2706,7 @@ PanoramiXRenderComposite(ClientPtr client)
|
||||
|
||||
orig = *stuff;
|
||||
|
||||
unsigned int walkScreenIdx;
|
||||
FOR_NSCREENS_FORWARD(walkScreenIdx) {
|
||||
ScreenPtr walkScreen = screenInfo.screens[walkScreenIdx];
|
||||
XINERAMA_FOR_EACH_SCREEN_FORWARD({
|
||||
stuff->src = src->info[walkScreenIdx].id;
|
||||
if (src->u.pict.root) {
|
||||
stuff->xSrc = orig.xSrc - walkScreen->x;
|
||||
@@ -2735,7 +2727,7 @@ PanoramiXRenderComposite(ClientPtr client)
|
||||
result = ProcRenderComposite(client);
|
||||
if (result != Success)
|
||||
break;
|
||||
}
|
||||
});
|
||||
|
||||
return result;
|
||||
}
|
||||
@@ -2760,9 +2752,8 @@ PanoramiXRenderCompositeGlyphs(ClientPtr client)
|
||||
origElt = *elt;
|
||||
xSrc = stuff->xSrc;
|
||||
ySrc = stuff->ySrc;
|
||||
unsigned int walkScreenIdx;
|
||||
FOR_NSCREENS_FORWARD(walkScreenIdx) {
|
||||
ScreenPtr walkScreen = screenInfo.screens[walkScreenIdx];
|
||||
|
||||
XINERAMA_FOR_EACH_SCREEN_FORWARD({
|
||||
stuff->src = src->info[walkScreenIdx].id;
|
||||
if (src->u.pict.root) {
|
||||
stuff->xSrc = xSrc - walkScreen->x;
|
||||
@@ -2776,7 +2767,7 @@ PanoramiXRenderCompositeGlyphs(ClientPtr client)
|
||||
result = ProcRenderCompositeGlyphs(client);
|
||||
if (result != Success)
|
||||
break;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
return result;
|
||||
@@ -2797,9 +2788,8 @@ PanoramiXRenderFillRectangles(ClientPtr client)
|
||||
extra_len = (client->req_len << 2) - sizeof(xRenderFillRectanglesReq);
|
||||
if (extra_len && (extra = calloc(1, extra_len))) {
|
||||
memcpy(extra, stuff + 1, extra_len);
|
||||
unsigned int walkScreenIdx;
|
||||
FOR_NSCREENS_FORWARD(walkScreenIdx) {
|
||||
ScreenPtr walkScreen = screenInfo.screens[walkScreenIdx];
|
||||
|
||||
XINERAMA_FOR_EACH_SCREEN_FORWARD({
|
||||
if (walkScreenIdx) /* skip screen #0 */
|
||||
memcpy(stuff + 1, extra, extra_len);
|
||||
if (dst->u.pict.root) {
|
||||
@@ -2821,7 +2811,8 @@ PanoramiXRenderFillRectangles(ClientPtr client)
|
||||
result = ProcRenderFillRectangles(client);
|
||||
if (result != Success)
|
||||
break;
|
||||
}
|
||||
});
|
||||
|
||||
free(extra);
|
||||
}
|
||||
|
||||
@@ -2848,9 +2839,7 @@ PanoramiXRenderTrapezoids(ClientPtr client)
|
||||
if (extra_len && (extra = calloc(1, extra_len))) {
|
||||
memcpy(extra, stuff + 1, extra_len);
|
||||
|
||||
unsigned int walkScreenIdx;
|
||||
FOR_NSCREENS_FORWARD(walkScreenIdx) {
|
||||
ScreenPtr walkScreen = screenInfo.screens[walkScreenIdx];
|
||||
XINERAMA_FOR_EACH_SCREEN_FORWARD({
|
||||
if (walkScreenIdx) /* skip screen #0 */
|
||||
memcpy(stuff + 1, extra, extra_len);
|
||||
if (dst->u.pict.root) {
|
||||
@@ -2883,7 +2872,7 @@ PanoramiXRenderTrapezoids(ClientPtr client)
|
||||
|
||||
if (result != Success)
|
||||
break;
|
||||
}
|
||||
});
|
||||
|
||||
free(extra);
|
||||
}
|
||||
@@ -2911,9 +2900,7 @@ PanoramiXRenderTriangles(ClientPtr client)
|
||||
if (extra_len && (extra = calloc(1, extra_len))) {
|
||||
memcpy(extra, stuff + 1, extra_len);
|
||||
|
||||
unsigned int walkScreenIdx;
|
||||
FOR_NSCREENS_FORWARD(walkScreenIdx) {
|
||||
ScreenPtr walkScreen = screenInfo.screens[walkScreenIdx];
|
||||
XINERAMA_FOR_EACH_SCREEN_FORWARD({
|
||||
if (walkScreenIdx) /* skip screen #0 */
|
||||
memcpy(stuff + 1, extra, extra_len);
|
||||
if (dst->u.pict.root) {
|
||||
@@ -2942,7 +2929,7 @@ PanoramiXRenderTriangles(ClientPtr client)
|
||||
|
||||
if (result != Success)
|
||||
break;
|
||||
}
|
||||
});
|
||||
|
||||
free(extra);
|
||||
}
|
||||
@@ -2970,9 +2957,7 @@ PanoramiXRenderTriStrip(ClientPtr client)
|
||||
if (extra_len && (extra = calloc(1, extra_len))) {
|
||||
memcpy(extra, stuff + 1, extra_len);
|
||||
|
||||
unsigned int walkScreenIdx;
|
||||
FOR_NSCREENS_FORWARD(walkScreenIdx) {
|
||||
ScreenPtr walkScreen = screenInfo.screens[walkScreenIdx];
|
||||
XINERAMA_FOR_EACH_SCREEN_FORWARD({
|
||||
if (walkScreenIdx) /* skip screen #0 */
|
||||
memcpy(stuff + 1, extra, extra_len);
|
||||
if (dst->u.pict.root) {
|
||||
@@ -2997,7 +2982,7 @@ PanoramiXRenderTriStrip(ClientPtr client)
|
||||
|
||||
if (result != Success)
|
||||
break;
|
||||
}
|
||||
});
|
||||
|
||||
free(extra);
|
||||
}
|
||||
@@ -3025,9 +3010,7 @@ PanoramiXRenderTriFan(ClientPtr client)
|
||||
if (extra_len && (extra = calloc(1, extra_len))) {
|
||||
memcpy(extra, stuff + 1, extra_len);
|
||||
|
||||
unsigned int walkScreenIdx;
|
||||
FOR_NSCREENS_FORWARD(walkScreenIdx) {
|
||||
ScreenPtr walkScreen = screenInfo.screens[walkScreenIdx];
|
||||
XINERAMA_FOR_EACH_SCREEN_FORWARD({
|
||||
if (walkScreenIdx) /* skip screen #0 */
|
||||
memcpy(stuff + 1, extra, extra_len);
|
||||
if (dst->u.pict.root) {
|
||||
@@ -3052,7 +3035,7 @@ PanoramiXRenderTriFan(ClientPtr client)
|
||||
|
||||
if (result != Success)
|
||||
break;
|
||||
}
|
||||
});
|
||||
|
||||
free(extra);
|
||||
}
|
||||
@@ -3079,9 +3062,7 @@ PanoramiXRenderAddTraps(ClientPtr client)
|
||||
x_off = stuff->xOff;
|
||||
y_off = stuff->yOff;
|
||||
|
||||
unsigned int walkScreenIdx;
|
||||
FOR_NSCREENS_FORWARD(walkScreenIdx) {
|
||||
ScreenPtr walkScreen = screenInfo.screens[walkScreenIdx];
|
||||
XINERAMA_FOR_EACH_SCREEN_FORWARD({
|
||||
if (walkScreenIdx) /* skip screen #0 */
|
||||
memcpy(stuff + 1, extra, extra_len);
|
||||
stuff->picture = picture->info[walkScreenIdx].id;
|
||||
@@ -3093,7 +3074,8 @@ PanoramiXRenderAddTraps(ClientPtr client)
|
||||
result = ProcRenderAddTraps(client);
|
||||
if (result != Success)
|
||||
break;
|
||||
}
|
||||
});
|
||||
|
||||
free(extra);
|
||||
}
|
||||
|
||||
@@ -3116,13 +3098,12 @@ PanoramiXRenderCreateSolidFill(ClientPtr client)
|
||||
panoramix_setup_ids(newPict, client, stuff->pid);
|
||||
newPict->u.pict.root = FALSE;
|
||||
|
||||
int walkScreenIdx;
|
||||
FOR_NSCREENS_BACKWARD(walkScreenIdx) {
|
||||
XINERAMA_FOR_EACH_SCREEN_BACKWARD({
|
||||
stuff->pid = newPict->info[walkScreenIdx].id;
|
||||
result = ProcRenderCreateSolidFill(client);
|
||||
if (result != Success)
|
||||
break;
|
||||
}
|
||||
});
|
||||
|
||||
if (result == Success)
|
||||
AddResource(newPict->info[0].id, XRT_PICTURE, newPict);
|
||||
@@ -3148,13 +3129,12 @@ PanoramiXRenderCreateLinearGradient(ClientPtr client)
|
||||
panoramix_setup_ids(newPict, client, stuff->pid);
|
||||
newPict->u.pict.root = FALSE;
|
||||
|
||||
int walkScreenIdx;
|
||||
FOR_NSCREENS_BACKWARD(walkScreenIdx) {
|
||||
XINERAMA_FOR_EACH_SCREEN_BACKWARD({
|
||||
stuff->pid = newPict->info[walkScreenIdx].id;
|
||||
result = ProcRenderCreateLinearGradient(client);
|
||||
if (result != Success)
|
||||
break;
|
||||
}
|
||||
});
|
||||
|
||||
if (result == Success)
|
||||
AddResource(newPict->info[0].id, XRT_PICTURE, newPict);
|
||||
@@ -3180,13 +3160,12 @@ PanoramiXRenderCreateRadialGradient(ClientPtr client)
|
||||
panoramix_setup_ids(newPict, client, stuff->pid);
|
||||
newPict->u.pict.root = FALSE;
|
||||
|
||||
int walkScreenIdx;
|
||||
FOR_NSCREENS_BACKWARD(walkScreenIdx) {
|
||||
XINERAMA_FOR_EACH_SCREEN_BACKWARD({
|
||||
stuff->pid = newPict->info[walkScreenIdx].id;
|
||||
result = ProcRenderCreateRadialGradient(client);
|
||||
if (result != Success)
|
||||
break;
|
||||
}
|
||||
});
|
||||
|
||||
if (result == Success)
|
||||
AddResource(newPict->info[0].id, XRT_PICTURE, newPict);
|
||||
@@ -3212,13 +3191,12 @@ PanoramiXRenderCreateConicalGradient(ClientPtr client)
|
||||
panoramix_setup_ids(newPict, client, stuff->pid);
|
||||
newPict->u.pict.root = FALSE;
|
||||
|
||||
int walkScreenIdx;
|
||||
FOR_NSCREENS_BACKWARD(walkScreenIdx) {
|
||||
XINERAMA_FOR_EACH_SCREEN_BACKWARD({
|
||||
stuff->pid = newPict->info[walkScreenIdx].id;
|
||||
result = ProcRenderCreateConicalGradient(client);
|
||||
if (result != Success)
|
||||
break;
|
||||
}
|
||||
});
|
||||
|
||||
if (result == Success)
|
||||
AddResource(newPict->info[0].id, XRT_PICTURE, newPict);
|
||||
|
||||
Reference in New Issue
Block a user