dix: Extract CopySprite() utility
This commit is contained in:
parent
acd819ac07
commit
5b0c5344b7
|
@ -1220,3 +1220,29 @@ xi2mask_get_one_mask(const XI2Mask *mask, int deviceid)
|
||||||
|
|
||||||
return mask->masks[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;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
17
dix/touch.c
17
dix/touch.c
|
@ -500,7 +500,6 @@ TouchBuildDependentSpriteTrace(DeviceIntPtr dev, SpritePtr sprite)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
TouchClassPtr t = dev->touch;
|
TouchClassPtr t = dev->touch;
|
||||||
WindowPtr *trace;
|
|
||||||
SpritePtr srcsprite;
|
SpritePtr srcsprite;
|
||||||
|
|
||||||
/* All touches should have the same sprite trace, so find and reuse an
|
/* All touches should have the same sprite trace, so find and reuse an
|
||||||
|
@ -516,21 +515,7 @@ TouchBuildDependentSpriteTrace(DeviceIntPtr dev, SpritePtr sprite)
|
||||||
else
|
else
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
if (srcsprite->spriteTraceGood > sprite->spriteTraceSize) {
|
return CopySprite(srcsprite, sprite);
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -70,4 +70,7 @@ size_t xi2mask_mask_size(const XI2Mask *mask);
|
||||||
void xi2mask_set_one_mask(XI2Mask *xi2mask, int deviceid,
|
void xi2mask_set_one_mask(XI2Mask *xi2mask, int deviceid,
|
||||||
const unsigned char *mask, size_t mask_size);
|
const unsigned char *mask, size_t mask_size);
|
||||||
const unsigned char *xi2mask_get_one_mask(const XI2Mask *xi2mask, int deviceid);
|
const unsigned char *xi2mask_get_one_mask(const XI2Mask *xi2mask, int deviceid);
|
||||||
|
|
||||||
|
Bool CopySprite(SpritePtr src, SpritePtr dst);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue
Block a user