summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
2d8e497)
This makes them more versatile for different kinds of control schemes.
Directional swipes can still be approximated through the Control
interface. Capturing swipe gestures is no longer easily possible, but
the capture interface is due for a rewrite to support activator controls
anyway.
string GestureDetector::get_button_name(unsigned btn) const
{
string GestureDetector::get_button_name(unsigned btn) const
{
- if(btn==GESTURE_SWIPE_DOWN)
- return "Swipe down";
- else if(btn==GESTURE_SWIPE_UP)
- return "Swipe up";
- else if(btn==GESTURE_SWIPE_LEFT)
- return "Swipe left";
- else if(btn==GESTURE_SWIPE_RIGHT)
- return "Swipe right";
+ if(btn==GESTURE_DRAG)
+ return "Drag";
else if(btn==GESTURE_PINCH)
return "Pinch";
else
else if(btn==GESTURE_PINCH)
return "Pinch";
else
- // Allow a maximum deviation of about 26° to recognize a swipe gesture.
- if(abs(p.x)>2*abs(p.y))
- current_gesture = (p.x>0 ? GESTURE_SWIPE_RIGHT : GESTURE_SWIPE_LEFT);
- else if(abs(p.y)>2*abs(p.x))
- current_gesture = (p.y>0 ? GESTURE_SWIPE_UP : GESTURE_SWIPE_DOWN);
- else
- invalid_gesture = true;
-
- if(current_gesture!=GESTURE_NONE)
- {
- active_points = 1;
- set_axis_value(0, p.down_x, true);
- set_axis_value(1, p.down_y, true);
- }
+ current_gesture = GESTURE_DRAG;
+ active_points = 1;
+ set_axis_value(0, p.down_x, true);
+ set_axis_value(1, p.down_y, true);
{
TouchPoint &p = points[0];
{
TouchPoint &p = points[0];
- if(current_gesture==GESTURE_SWIPE_DOWN)
- set_axis_value(2, -p.y, true);
- else if(current_gesture==GESTURE_SWIPE_UP)
- set_axis_value(2, p.y, true);
- else if(current_gesture==GESTURE_SWIPE_LEFT)
- set_axis_value(2, -p.x, true);
- else if(current_gesture==GESTURE_SWIPE_RIGHT)
+ if(current_gesture==GESTURE_DRAG)
+ {
set_axis_value(2, p.x, true);
set_axis_value(2, p.x, true);
+ set_axis_value(3, p.y, true);
+ }
else if(current_gesture==GESTURE_PINCH)
{
TouchPoint &p2 = points[1];
else if(current_gesture==GESTURE_PINCH)
{
TouchPoint &p2 = points[1];
float dx = ddx+p.x-p2.x;
float dy = ddy+p.y-p2.y;
set_axis_value(2, sqrt(dx*dx+dy*dy)/sqrt(ddx*ddx+ddy*ddy)-1, true);
float dx = ddx+p.x-p2.x;
float dy = ddy+p.y-p2.y;
set_axis_value(2, sqrt(dx*dx+dy*dy)/sqrt(ddx*ddx+ddy*ddy)-1, true);
+ set_axis_value(3, 0, true);
enum Gesture
{
GESTURE_NONE,
enum Gesture
{
GESTURE_NONE,
- GESTURE_SWIPE_DOWN,
- GESTURE_SWIPE_UP,
- GESTURE_SWIPE_LEFT,
- GESTURE_SWIPE_RIGHT,
GESTURE_PINCH
};
/**
Interprets events from a Touchscreen as high-level gestures. One button is
provided for each type of gesture. Axes 0 and 1 indicate the starting position
GESTURE_PINCH
};
/**
Interprets events from a Touchscreen as high-level gestures. One button is
provided for each type of gesture. Axes 0 and 1 indicate the starting position
-of the gesture; axis 2 tracks its progress. The progress axis may exhibit
+of the gesture; axes 2 and 3 track its progress. The progress axis may exhibit
absolute values greater than one.
*/
class GestureDetector: public Device
absolute values greater than one.
*/
class GestureDetector: public Device