summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPovilas Kanapickas <povilas@radix.lt>2020-10-10 02:51:32 +0300
committerPeter Hutterer <peter.hutterer@who-t.net>2020-11-25 04:20:21 +0000
commit5b0c5344b7131f0812bcbf070194adaa2175d150 (patch)
tree22aa0fa0359f2bdf9db41e1cf48d28d9a3b25b20
parentacd819ac07bf66165f5d44af4a224f68c31bc30d (diff)
dix: Extract CopySprite() utility
-rw-r--r--dix/inpututils.c26
-rw-r--r--dix/touch.c17
-rw-r--r--include/inpututils.h3
3 files changed, 30 insertions, 16 deletions
diff --git a/dix/inpututils.c b/dix/inpututils.c
index a36d88503..e7e1ce815 100644
--- a/dix/inpututils.c
+++ b/dix/inpututils.c
@@ -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;
+}
+
diff --git a/dix/touch.c b/dix/touch.c
index 337674ddb..193931294 100644
--- a/dix/touch.c
+++ b/dix/touch.c
@@ -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);
}
/**
diff --git a/include/inpututils.h b/include/inpututils.h
index 48c95c4c1..2dfe122c9 100644
--- a/include/inpututils.h
+++ b/include/inpututils.h
@@ -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