dix: refactor scheme init
This makes it possible to init a scheme in one init call, so we get rid of the tightly coupled two-phase init used before. Signed-off-by: Simon Thum <simon.thum@gmx.de> Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net> Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
This commit is contained in:
parent
38ffeec0c8
commit
006157f203
|
@ -1279,10 +1279,11 @@ InitValuatorClassDeviceStruct(DeviceIntPtr dev, int numAxes, Atom *labels,
|
|||
|
||||
/* global list of acceleration schemes */
|
||||
ValuatorAccelerationRec pointerAccelerationScheme[] = {
|
||||
{PtrAccelNoOp, NULL, NULL, NULL},
|
||||
{PtrAccelPredictable, acceleratePointerPredictable, NULL, AccelerationDefaultCleanup},
|
||||
{PtrAccelLightweight, acceleratePointerLightweight, NULL, NULL},
|
||||
{-1, NULL, NULL, NULL} /* terminator */
|
||||
{PtrAccelNoOp, NULL, NULL, NULL, NULL},
|
||||
{PtrAccelPredictable, acceleratePointerPredictable, NULL,
|
||||
InitPredictableAccelerationScheme, AccelerationDefaultCleanup},
|
||||
{PtrAccelLightweight, acceleratePointerLightweight, NULL, NULL, NULL},
|
||||
{-1, NULL, NULL, NULL, NULL} /* terminator */
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -1294,59 +1295,37 @@ InitPointerAccelerationScheme(DeviceIntPtr dev,
|
|||
int scheme)
|
||||
{
|
||||
int x, i = -1;
|
||||
void* data = NULL;
|
||||
ValuatorClassPtr val;
|
||||
|
||||
val = dev->valuator;
|
||||
|
||||
if(!val)
|
||||
if (!val)
|
||||
return FALSE;
|
||||
|
||||
if(IsMaster(dev) && scheme != PtrAccelNoOp)
|
||||
if (IsMaster(dev) && scheme != PtrAccelNoOp)
|
||||
return FALSE;
|
||||
|
||||
for(x = 0; pointerAccelerationScheme[x].number >= 0; x++) {
|
||||
for (x = 0; pointerAccelerationScheme[x].number >= 0; x++) {
|
||||
if(pointerAccelerationScheme[x].number == scheme){
|
||||
i = x;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if(-1 == i)
|
||||
if (-1 == i)
|
||||
return FALSE;
|
||||
|
||||
if (val->accelScheme.AccelCleanupProc)
|
||||
val->accelScheme.AccelCleanupProc(dev);
|
||||
|
||||
/* init scheme-specific data */
|
||||
switch(scheme){
|
||||
case PtrAccelPredictable:
|
||||
{
|
||||
DeviceVelocityPtr s;
|
||||
s = malloc(sizeof(DeviceVelocityRec));
|
||||
if(!s)
|
||||
if (pointerAccelerationScheme[i].AccelInitProc) {
|
||||
if (!pointerAccelerationScheme[i].AccelInitProc(dev,
|
||||
&pointerAccelerationScheme[i])) {
|
||||
return FALSE;
|
||||
InitVelocityData(s);
|
||||
data = s;
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
} else {
|
||||
val->accelScheme = pointerAccelerationScheme[i];
|
||||
val->accelScheme.accelData = data;
|
||||
|
||||
/* post-init scheme */
|
||||
switch(scheme){
|
||||
case PtrAccelPredictable:
|
||||
InitializePredictableAccelerationProperties(dev);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
|
|
@ -67,6 +67,10 @@ SimpleSmoothProfile(DeviceIntPtr dev, DeviceVelocityPtr vel, float velocity,
|
|||
float threshold, float acc);
|
||||
static PointerAccelerationProfileFunc
|
||||
GetAccelerationProfile(DeviceVelocityPtr vel, int profile_num);
|
||||
static BOOL
|
||||
InitializePredictableAccelerationProperties(DeviceIntPtr dev);
|
||||
static BOOL
|
||||
DeletePredictableAccelerationProperties(DeviceIntPtr dev);
|
||||
|
||||
/*#define PTRACCEL_DEBUGGING*/
|
||||
|
||||
|
@ -85,7 +89,7 @@ GetAccelerationProfile(DeviceVelocityPtr vel, int profile_num);
|
|||
|
||||
|
||||
/**
|
||||
* Init struct so it should match the average case
|
||||
* Init DeviceVelocity struct so it should match the average case
|
||||
*/
|
||||
void
|
||||
InitVelocityData(DeviceVelocityPtr vel)
|
||||
|
@ -107,7 +111,7 @@ InitVelocityData(DeviceVelocityPtr vel)
|
|||
|
||||
|
||||
/**
|
||||
* Clean up
|
||||
* Clean up DeviceVelocityRec
|
||||
*/
|
||||
void
|
||||
FreeVelocityData(DeviceVelocityPtr vel){
|
||||
|
@ -116,8 +120,28 @@ FreeVelocityData(DeviceVelocityPtr vel){
|
|||
}
|
||||
|
||||
|
||||
/*
|
||||
* dix uninit helper, called through scheme
|
||||
/**
|
||||
* Init predictable scheme
|
||||
*/
|
||||
Bool
|
||||
InitPredictableAccelerationScheme(DeviceIntPtr dev,
|
||||
ValuatorAccelerationPtr protoScheme) {
|
||||
DeviceVelocityPtr vel;
|
||||
ValuatorAccelerationRec scheme;
|
||||
scheme = *protoScheme;
|
||||
vel = calloc(1, sizeof(DeviceVelocityRec));
|
||||
if (!vel)
|
||||
return FALSE;
|
||||
InitVelocityData(vel);
|
||||
scheme.accelData = vel;
|
||||
dev->valuator->accelScheme = scheme;
|
||||
InitializePredictableAccelerationProperties(dev);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Uninit scheme
|
||||
*/
|
||||
void
|
||||
AccelerationDefaultCleanup(DeviceIntPtr dev)
|
||||
|
@ -1024,12 +1048,10 @@ acceleratePointerPredictable(
|
|||
int *valuators,
|
||||
int evtime)
|
||||
{
|
||||
float mult = 0.0;
|
||||
float fdx, fdy, tmp, mult; /* no need to init */
|
||||
int dx = 0, dy = 0;
|
||||
int *px = NULL, *py = NULL;
|
||||
DeviceVelocityPtr velocitydata =
|
||||
(DeviceVelocityPtr) dev->valuator->accelScheme.accelData;
|
||||
float fdx, fdy, tmp; /* no need to init */
|
||||
DeviceVelocityPtr velocitydata = GetDevicePredictableAccelData(dev);
|
||||
Bool soften = TRUE;
|
||||
|
||||
if (!num_valuators || !valuators || !velocitydata)
|
||||
|
|
|
@ -150,6 +150,11 @@ typedef void (*PointerAccelSchemeProc)(
|
|||
typedef void (*DeviceCallbackProc)(
|
||||
DeviceIntPtr /*pDev*/);
|
||||
|
||||
struct _ValuatorAccelerationRec;
|
||||
typedef Bool (*PointerAccelSchemeInitProc)(
|
||||
DeviceIntPtr /*dev*/,
|
||||
struct _ValuatorAccelerationRec* /*protoScheme*/);
|
||||
|
||||
typedef struct _DeviceRec {
|
||||
pointer devicePrivate;
|
||||
ProcessInputProc processInputProc; /* current */
|
||||
|
|
|
@ -266,6 +266,7 @@ typedef struct _ValuatorAccelerationRec {
|
|||
int number;
|
||||
PointerAccelSchemeProc AccelSchemeProc;
|
||||
void *accelData; /* at disposal of AccelScheme */
|
||||
PointerAccelSchemeInitProc AccelInitProc;
|
||||
DeviceCallbackProc AccelCleanupProc;
|
||||
} ValuatorAccelerationRec, *ValuatorAccelerationPtr;
|
||||
|
||||
|
|
|
@ -110,12 +110,6 @@ BasicComputeAcceleration(DeviceIntPtr dev, DeviceVelocityPtr vel,
|
|||
extern _X_EXPORT void
|
||||
FreeVelocityData(DeviceVelocityPtr vel);
|
||||
|
||||
extern _X_INTERNAL BOOL
|
||||
InitializePredictableAccelerationProperties(DeviceIntPtr dev);
|
||||
|
||||
extern _X_INTERNAL BOOL
|
||||
DeletePredictableAccelerationProperties(DeviceIntPtr dev);
|
||||
|
||||
extern _X_EXPORT int
|
||||
SetAccelerationProfile(DeviceVelocityPtr vel, int profile_num);
|
||||
|
||||
|
@ -129,6 +123,10 @@ SetDeviceSpecificAccelerationProfile(DeviceVelocityPtr vel,
|
|||
extern _X_INTERNAL void
|
||||
AccelerationDefaultCleanup(DeviceIntPtr dev);
|
||||
|
||||
extern _X_INTERNAL Bool
|
||||
InitPredictableAccelerationScheme(DeviceIntPtr dev,
|
||||
struct _ValuatorAccelerationRec* protoScheme);
|
||||
|
||||
extern _X_INTERNAL void
|
||||
acceleratePointerPredictable(DeviceIntPtr dev, int first_valuator,
|
||||
int num_valuators, int *valuators, int evtime);
|
||||
|
|
Loading…
Reference in New Issue