fixed hysteretic scroll
This commit is contained in:
parent
82b316027b
commit
7f561019d7
|
@ -23,27 +23,29 @@ Scroller::Scroller(void) {
|
||||||
state = HIHI;
|
state = HIHI;
|
||||||
lohif = false;
|
lohif = false;
|
||||||
hilof = false;
|
hilof = false;
|
||||||
lowA = 50;
|
lowA = 1023;
|
||||||
highA = 150;
|
highA = 0;
|
||||||
lowB = 50;
|
lowB = 1023;
|
||||||
highB = 150;
|
highB = 0;
|
||||||
calculateThreshold(lowA, lowB);
|
scrollThresholdA = 0;
|
||||||
|
scrollThresholdB = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int Scroller::scroll(int curA, int curB) {
|
int Scroller::scroll(int curA, int curB) {
|
||||||
calculateThreshold(curA, curB);
|
calculateThresholdA(curA);
|
||||||
|
calculateThresholdB(curB);
|
||||||
|
|
||||||
bool LO = false;
|
bool LO = false;
|
||||||
bool HI = true;
|
bool HI = true;
|
||||||
bool sA, sB;
|
bool sA, sB;
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
|
||||||
if (curA < scrollThreshold)
|
if (curA < scrollThresholdA)
|
||||||
sA = LO;
|
sA = LO;
|
||||||
else
|
else
|
||||||
sA = HI;
|
sA = HI;
|
||||||
|
|
||||||
if (curB < scrollThreshold)
|
if (curB < scrollThresholdB)
|
||||||
sB = LO;
|
sB = LO;
|
||||||
else
|
else
|
||||||
sB = HI;
|
sB = HI;
|
||||||
|
@ -107,23 +109,36 @@ int Scroller::scroll(int curA, int curB) {
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
int Scroller::getScrollThreshold(void) {
|
int Scroller::getScrollThresholdA(void) {
|
||||||
return scrollThreshold;
|
return scrollThresholdA;
|
||||||
}
|
}
|
||||||
|
|
||||||
int Scroller::calculateThreshold(int curA, int curB) {
|
int Scroller::al(void) {
|
||||||
|
return lowA;
|
||||||
|
}
|
||||||
|
|
||||||
|
int Scroller::ah(void) {
|
||||||
|
return highA;
|
||||||
|
}
|
||||||
|
|
||||||
|
int Scroller::getScrollThresholdB(void) {
|
||||||
|
return scrollThresholdB;
|
||||||
|
}
|
||||||
|
|
||||||
|
int Scroller::calculateThresholdA(int curA) {
|
||||||
if (curA < lowA)
|
if (curA < lowA)
|
||||||
lowA = curA;
|
lowA = curA;
|
||||||
else if (curA > highA)
|
else if (curA > highA)
|
||||||
highA = curA;
|
highA = curA;
|
||||||
|
|
||||||
|
scrollThresholdA = ((highA - lowA) / 3) + lowA;
|
||||||
|
}
|
||||||
|
|
||||||
|
int Scroller::calculateThresholdB(int curB) {
|
||||||
if (curB < lowB)
|
if (curB < lowB)
|
||||||
lowB = curB;
|
lowB = curB;
|
||||||
else if (curB > highB)
|
else if (curB > highB)
|
||||||
highB = curB;
|
highB = curB;
|
||||||
|
|
||||||
int avgA = ((highA - lowA) / 3) + lowA;
|
scrollThresholdB = ((highB - lowB) / 3) + lowB;
|
||||||
int avgB = ((highB - lowB) / 3) + lowB;
|
|
||||||
|
|
||||||
scrollThreshold = (avgA + avgB) / 2;
|
|
||||||
}
|
}
|
|
@ -30,12 +30,17 @@ class Scroller {
|
||||||
int highA;
|
int highA;
|
||||||
int lowB;
|
int lowB;
|
||||||
int highB;
|
int highB;
|
||||||
int scrollThreshold;
|
int scrollThresholdA;
|
||||||
int calculateThreshold(int, int);
|
int scrollThresholdB;
|
||||||
|
int calculateThresholdA(int);
|
||||||
|
int calculateThresholdB(int);
|
||||||
public:
|
public:
|
||||||
Scroller(void);
|
Scroller(void);
|
||||||
int scroll(int, int);
|
int scroll(int, int);
|
||||||
int getScrollThreshold(void);
|
int getScrollThresholdA(void);
|
||||||
|
int getScrollThresholdB(void);
|
||||||
|
int al(void);
|
||||||
|
int ah(void);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
Loading…
Reference in New Issue