dix: Extract CopySprite() utility

This commit is contained in:
Povilas Kanapickas 2020-10-10 02:51:32 +03:00 committed by Peter Hutterer
parent acd819ac07
commit 5b0c5344b7
3 changed files with 30 additions and 16 deletions

View File

@ -1220,3 +1220,29 @@ xi2mask_get_one_mask(const XI2Mask *mask, int deviceid)
return mask->masks[deviceid];
}
/**
* Copies a sprite data from src to dst sprites.
*
* Returns FALSE on error.
*/
Bool
CopySprite(SpritePtr src, SpritePtr dst)
{
WindowPtr *trace;
if (src->spriteTraceGood > dst->spriteTraceSize) {
trace = reallocarray(dst->spriteTrace,
src->spriteTraceSize, sizeof(*trace));
if (!trace) {
dst->spriteTraceGood = 0;
return FALSE;
}
dst->spriteTrace = trace;
dst->spriteTraceSize = src->spriteTraceGood;
}
memcpy(dst->spriteTrace, src->spriteTrace,
src->spriteTraceGood * sizeof(*trace));
dst->spriteTraceGood = src->spriteTraceGood;
return TRUE;
}

View File

@ -500,7 +500,6 @@ TouchBuildDependentSpriteTrace(DeviceIntPtr dev, SpritePtr sprite)
{
int i;
TouchClassPtr t = dev->touch;
WindowPtr *trace;
SpritePtr srcsprite;
/* All touches should have the same sprite trace, so find and reuse an
@ -516,21 +515,7 @@ TouchBuildDependentSpriteTrace(DeviceIntPtr dev, SpritePtr sprite)
else
return FALSE;
if (srcsprite->spriteTraceGood > sprite->spriteTraceSize) {
trace = reallocarray(sprite->spriteTrace,
srcsprite->spriteTraceSize, sizeof(*trace));
if (!trace) {
sprite->spriteTraceGood = 0;
return FALSE;
}
sprite->spriteTrace = trace;
sprite->spriteTraceSize = srcsprite->spriteTraceGood;
}
memcpy(sprite->spriteTrace, srcsprite->spriteTrace,
srcsprite->spriteTraceGood * sizeof(*trace));
sprite->spriteTraceGood = srcsprite->spriteTraceGood;
return TRUE;
return CopySprite(srcsprite, sprite);
}
/**

View File

@ -70,4 +70,7 @@ size_t xi2mask_mask_size(const XI2Mask *mask);
void xi2mask_set_one_mask(XI2Mask *xi2mask, int deviceid,
const unsigned char *mask, size_t mask_size);
const unsigned char *xi2mask_get_one_mask(const XI2Mask *xi2mask, int deviceid);
Bool CopySprite(SpritePtr src, SpritePtr dst);
#endif