blob: 47837d7a5d0d9aac21082e1c752eaebf25bddef8 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
Index: qt-2.3.10/src/kernel/qwsmouse_qws.cpp
===================================================================
--- qt-2.3.10.orig/src/kernel/qwsmouse_qws.cpp 2005-02-16 00:53:53.090339898 +0100
+++ qt-2.3.10/src/kernel/qwsmouse_qws.cpp 2005-02-16 00:54:43.059069292 +0100
@@ -1878,30 +1878,33 @@
*/
void QTSLibHandlerPrivate::interpolateSample() {
#ifdef QT_QWS_TSLIB
- static struct ts_sample samples[25];
- int index = -1;
+#define TSLIB_MAX_SAMPLES 25
+ static struct ts_sample samples[TSLIB_MAX_SAMPLES];
+ int index = 0;
+ int read_samples = 0;
int ret;
do {
- /* fill only the last sample again */
- if ( index >= 25 )
- index = 24;
-
+ /* do not access negative arrays */
+ if ( index < 0 )
+ index = 0;
+
/* we're opened non-blocking */
- if((ret= ts_read_raw(m_ts, &samples[index], 1 ) ) != 1 ) {
+ if((ret= ts_read_raw(m_ts, &samples[index], 1 ) ) != 1 )
/* no event yet, so try again */
- if (ret==-1 ) {
- index--;
+ if (ret==-1 )
continue;
- }
- }
- }while (samples[index++].pressure != 0);
+
+ read_samples++;
+ index = (index+1)%TSLIB_MAX_SAMPLES;
+ }while (samples[index == 0 ? (TSLIB_MAX_SAMPLES-1) : index-1].pressure != 0);
/*
- * index is maximal 25 and we at least one sample
+ * If we've wrapped around each sample is used otherwise
+ * we will use the index
*/
- if( index >= 25 )
- index = 24;
+ index = read_samples >= TSLIB_MAX_SAMPLES ?
+ (TSLIB_MAX_SAMPLES-1 ) : index;
int x, y;
/*
|