dix: don't pass the index for a tracker around, pass the tracker
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> Reviewed-by: Daniel Stone <daniel@fooishbar.org> Reviewed-by: Jamey Sharp <jamey@minilop.net> Reviewed-by: Simon Thum <simon.thum@gmx.de>
This commit is contained in:
		
							parent
							
								
									9e8645cacf
								
							
						
					
					
						commit
						6b3a4cc6af
					
				| 
						 | 
					@ -546,6 +546,7 @@ GetDirection(int dx, int dy){
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* convert offset (age) to array index */
 | 
					/* convert offset (age) to array index */
 | 
				
			||||||
#define TRACKER_INDEX(s, d) (((s)->num_tracker + (s)->cur_tracker - (d)) % (s)->num_tracker)
 | 
					#define TRACKER_INDEX(s, d) (((s)->num_tracker + (s)->cur_tracker - (d)) % (s)->num_tracker)
 | 
				
			||||||
 | 
					#define TRACKER(s, d) &(s)->tracker[TRACKER_INDEX(s,d)]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static inline void
 | 
					static inline void
 | 
				
			||||||
FeedTrackers(DeviceVelocityPtr vel, int dx, int dy, int cur_t)
 | 
					FeedTrackers(DeviceVelocityPtr vel, int dx, int dy, int cur_t)
 | 
				
			||||||
| 
						 | 
					@ -589,15 +590,15 @@ CalcTracker(const MotionTracker *tracker, int cur_t){
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
static float
 | 
					static float
 | 
				
			||||||
QueryTrackers(DeviceVelocityPtr vel, int cur_t){
 | 
					QueryTrackers(DeviceVelocityPtr vel, int cur_t){
 | 
				
			||||||
    int n, offset, dir = UNDEFINED, i = -1, age_ms;
 | 
					    int offset, dir = UNDEFINED, i = -1, age_ms;
 | 
				
			||||||
    /* initial velocity: a low-offset, valid velocity */
 | 
					    /* initial velocity: a low-offset, valid velocity */
 | 
				
			||||||
    float iveloc = 0, res = 0, tmp, vdiff;
 | 
					    float iveloc = 0, res = 0, tmp, vdiff;
 | 
				
			||||||
    float vfac =  vel->corr_mul * vel->const_acceleration; /* premultiply */
 | 
					    float vfac =  vel->corr_mul * vel->const_acceleration; /* premultiply */
 | 
				
			||||||
    /* loop from current to older data */
 | 
					    /* loop from current to older data */
 | 
				
			||||||
    for(offset = 1; offset < vel->num_tracker; offset++){
 | 
					    for(offset = 1; offset < vel->num_tracker; offset++){
 | 
				
			||||||
	n = TRACKER_INDEX(vel, offset);
 | 
						MotionTracker *tracker = TRACKER(vel, offset);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	age_ms = cur_t - vel->tracker[n].time;
 | 
						age_ms = cur_t - tracker->time;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* bail out if data is too old and protect from overrun */
 | 
						/* bail out if data is too old and protect from overrun */
 | 
				
			||||||
	if (age_ms >= vel->reset_time || age_ms < 0) {
 | 
						if (age_ms >= vel->reset_time || age_ms < 0) {
 | 
				
			||||||
| 
						 | 
					@ -611,7 +612,7 @@ QueryTrackers(DeviceVelocityPtr vel, int cur_t){
 | 
				
			||||||
	 * even more precision we could subdivide as a final step, so possible
 | 
						 * even more precision we could subdivide as a final step, so possible
 | 
				
			||||||
	 * non-linearities are accounted for.
 | 
						 * non-linearities are accounted for.
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	dir &= vel->tracker[n].dir;
 | 
						dir &= tracker->dir;
 | 
				
			||||||
	if(dir == 0){
 | 
						if(dir == 0){
 | 
				
			||||||
	    DebugAccelF("(dix prtacc) query: no longer linear\n");
 | 
						    DebugAccelF("(dix prtacc) query: no longer linear\n");
 | 
				
			||||||
	    /* instead of breaking it we might also inspect the partition after,
 | 
						    /* instead of breaking it we might also inspect the partition after,
 | 
				
			||||||
| 
						 | 
					@ -619,7 +620,7 @@ QueryTrackers(DeviceVelocityPtr vel, int cur_t){
 | 
				
			||||||
	    break;
 | 
						    break;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	tmp = CalcTracker(&vel->tracker[n], cur_t) * vfac;
 | 
						tmp = CalcTracker(tracker, cur_t) * vfac;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if ((iveloc == 0 || offset <= vel->initial_range) && tmp != 0) {
 | 
						if ((iveloc == 0 || offset <= vel->initial_range) && tmp != 0) {
 | 
				
			||||||
	    /* set initial velocity and result */
 | 
						    /* set initial velocity and result */
 | 
				
			||||||
| 
						 | 
					@ -647,18 +648,18 @@ QueryTrackers(DeviceVelocityPtr vel, int cur_t){
 | 
				
			||||||
	DebugAccelF("(dix prtacc) query: last tracker in effect\n");
 | 
						DebugAccelF("(dix prtacc) query: last tracker in effect\n");
 | 
				
			||||||
	i = vel->num_tracker-1;
 | 
						i = vel->num_tracker-1;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					#ifdef PTRACCEL_DEBUGGING
 | 
				
			||||||
    if(i>=0){
 | 
					    if(i>=0){
 | 
				
			||||||
        n = TRACKER_INDEX(vel, i);
 | 
						MotionTracker *tracker = TRACKER(vel, i);
 | 
				
			||||||
	DebugAccelF("(dix prtacc) result: offset %i [dx: %i dy: %i diff: %i]\n",
 | 
						DebugAccelF("(dix prtacc) result: offset %i [dx: %i dy: %i diff: %i]\n",
 | 
				
			||||||
	            i,
 | 
						            i, tracker->dx, tracker->dy, cur_t - tracker->time);
 | 
				
			||||||
	            vel->tracker[n].dx,
 | 
					 | 
				
			||||||
	            vel->tracker[n].dy,
 | 
					 | 
				
			||||||
	            cur_t - vel->tracker[n].time);
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
    return res;
 | 
					    return res;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#undef TRACKER_INDEX
 | 
					#undef TRACKER_INDEX
 | 
				
			||||||
 | 
					#undef TRACKER
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Perform velocity approximation based on 2D 'mickeys' (mouse motion delta).
 | 
					 * Perform velocity approximation based on 2D 'mickeys' (mouse motion delta).
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue