X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;ds=sidebyside;f=source%2Finput%2Fgesturedetector.cpp;fp=source%2Finput%2Fgesturedetector.cpp;h=62ac3f050d09c9c849b7e0c6c62ecf8e3185a3bf;hb=301e09d687a1217130fbb2240b7a80f1a00aacdc;hp=26968c03c988a16d1b0035c652a0bc6b991c64a6;hpb=598786409491a119ba761eca53c5eb2d94a4d9e8;p=libs%2Fgui.git diff --git a/source/input/gesturedetector.cpp b/source/input/gesturedetector.cpp index 26968c0..62ac3f0 100644 --- a/source/input/gesturedetector.cpp +++ b/source/input/gesturedetector.cpp @@ -31,10 +31,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 +80,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; } } @@ -153,7 +159,21 @@ void GestureDetector::start_gesture() return; invalid_gesture = false; - if(points[1].down) + if(points[2].down) + { + bool same_direction = true; + for(unsigned i=0; (same_direction && i<2); ++i) + for(unsigned j=i+1; (same_direction && j<3); ++j) + { + TouchPoint &pi = points[i]; + TouchPoint &pj = points[j]; + same_direction = ((pi.x*pj.x+pi.y*pj.y)>2*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 +237,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) {