X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Finput%2Fgesturedetector.cpp;h=08232cf8f0fecf023e98fe43b452d2bf9135ee0e;hb=5658e0f743064cc1c8ca77aed86891b8e803e0d7;hp=26968c03c988a16d1b0035c652a0bc6b991c64a6;hpb=598786409491a119ba761eca53c5eb2d94a4d9e8;p=libs%2Fgui.git diff --git a/source/input/gesturedetector.cpp b/source/input/gesturedetector.cpp index 26968c0..08232cf 100644 --- a/source/input/gesturedetector.cpp +++ b/source/input/gesturedetector.cpp @@ -1,7 +1,7 @@ #define _USE_MATH_DEFINES +#include "gesturedetector.h" #include #include -#include "gesturedetector.h" #include "touchscreen.h" using namespace std; @@ -10,10 +10,8 @@ namespace Msp { namespace Input { GestureDetector::GestureDetector(Touchscreen &ts): - touchscreen(ts), - current_gesture(GESTURE_NONE), - pending_tap(GESTURE_NONE), - invalid_gesture(false) + Device(UNSPECIFIED), + touchscreen(ts) { name = "Gesture"; @@ -31,10 +29,14 @@ string GestureDetector::get_button_name(unsigned btn) const return "Tap"; else if(btn==GESTURE_TAP_2) return "Two-finger tap"; + else if(btn==GESTURE_TAP_3) + return "Three-finger tap"; else if(btn==GESTURE_DRAG) return "Drag"; else if(btn==GESTURE_DRAG_2) return "Two-finger drag"; + else if(btn==GESTURE_DRAG_3) + return "Three-finger drag"; else if(btn==GESTURE_PINCH) return "Pinch"; else if(btn==GESTURE_ROTATE) @@ -76,6 +78,8 @@ void GestureDetector::touch_down(unsigned btn) pending_tap = GESTURE_TAP; else if(btn==1) pending_tap = GESTURE_TAP_2; + else if(btn==2) + pending_tap = GESTURE_TAP_3; } } @@ -144,16 +148,31 @@ void GestureDetector::start_gesture() if(!p.down) return; - /* At least one point needs to have moved more than the threshold to start - the gesture. */ - bool threshold_exceeded = false; - for(unsigned i=0; (i2*abs(pi.x*pj.y-pi.y*pj.x)); + } + + if(same_direction) + current_gesture = GESTURE_DRAG_3; + } + else if(points[1].down) { TouchPoint &p2 = points[1]; float ddx = p.down_x-p2.down_x; @@ -217,7 +236,7 @@ void GestureDetector::set_gesture_delta(unsigned n_points) void GestureDetector::update_progress() { - if(current_gesture>=GESTURE_DRAG && current_gesture<=GESTURE_DRAG_2) + if(current_gesture>=GESTURE_DRAG && current_gesture<=GESTURE_DRAG_3) set_gesture_delta(gesture_points(current_gesture)); else if(current_gesture==GESTURE_PINCH || current_gesture==GESTURE_ROTATE) {