Esempio n. 1
0
static int
ProcDamageSubtract (ClientPtr client)
{
    REQUEST(xDamageSubtractReq);
    DamageExtPtr    pDamageExt;
    RegionPtr	    pRepair;
    RegionPtr	    pParts;

    REQUEST_SIZE_MATCH(xDamageSubtractReq);
    VERIFY_DAMAGEEXT(pDamageExt, stuff->damage, client, SecurityWriteAccess);
    VERIFY_REGION_OR_NONE(pRepair, stuff->repair, client, SecurityWriteAccess);
    VERIFY_REGION_OR_NONE(pParts, stuff->parts, client, SecurityWriteAccess);

    if (pDamageExt->level != DamageReportRawRegion)
    {
        DamagePtr   pDamage = pDamageExt->pDamage;
        if (pRepair)
        {
            if (pParts)
                REGION_INTERSECT (prScreen, pParts, DamageRegion (pDamage), pRepair);
            if (DamageSubtract (pDamage, pRepair))
                DamageExtReport (pDamage, DamageRegion (pDamage), (void *) pDamageExt);
        }
        else
        {
            if (pParts)
                REGION_COPY (prScreen, pParts, DamageRegion (pDamage));
            DamageEmpty (pDamage);
        }
    }
    return (client->noClientException);
}
Esempio n. 2
0
static int
ProcDamageSubtract (ClientPtr client)
{
    REQUEST(xDamageSubtractReq);
    DamageExtPtr    pDamageExt;
    RegionPtr	    pRepair;
    RegionPtr	    pParts;

    REQUEST_SIZE_MATCH(xDamageSubtractReq);
    VERIFY_DAMAGEEXT(pDamageExt, stuff->damage, client, DixWriteAccess);
    VERIFY_REGION_OR_NONE(pRepair, stuff->repair, client, DixWriteAccess);
    VERIFY_REGION_OR_NONE(pParts, stuff->parts, client, DixWriteAccess);

    if (pDamageExt->level != DamageReportRawRegion)
    {
	DamagePtr   pDamage = pDamageExt->pDamage;
	if (pRepair)
	{
	    if (pParts)
		RegionIntersect(pParts, DamageRegion (pDamage), pRepair);
	    if (DamageSubtract (pDamage, pRepair))
		DamageExtReport (pDamage, DamageRegion (pDamage), (void *) pDamageExt);
	}
	else
	{
	    if (pParts)
		RegionCopy(pParts, DamageRegion (pDamage));
	    DamageEmpty (pDamage);
	}
    }
    return Success;
}