X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Finput%2Fgesturedetector.cpp;h=145262a762ce438d03bb777ca1ed06fc325c7607;hb=ab03781d9d893bb50a1947cbef6ef2c35ae10d16;hp=aecfa81bb3b7ab88fb4602956f6ca11368a74634;hpb=9580908b4c206675f912c0639d8f450bc42c504b;p=libs%2Fgui.git diff --git a/source/input/gesturedetector.cpp b/source/input/gesturedetector.cpp index aecfa81..145262a 100644 --- a/source/input/gesturedetector.cpp +++ b/source/input/gesturedetector.cpp @@ -1,3 +1,4 @@ +#define _USE_MATH_DEFINES #include #include #include "gesturedetector.h" @@ -12,6 +13,7 @@ GestureDetector::GestureDetector(Touchscreen &ts): touchscreen(ts), current_gesture(GESTURE_NONE), active_points(0), + pending_tap(GESTURE_NONE), invalid_gesture(false) { name = "Gesture"; @@ -26,7 +28,11 @@ GestureDetector::GestureDetector(Touchscreen &ts): string GestureDetector::get_button_name(unsigned btn) const { - if(btn==GESTURE_DRAG) + if(btn==GESTURE_TAP) + return "Tap"; + else if(btn==GESTURE_TAP_2) + return "Two-finger tap"; + else if(btn==GESTURE_DRAG) return "Drag"; else if(btn==GESTURE_DRAG_2) return "Two-finger drag"; @@ -45,7 +51,9 @@ string GestureDetector::get_axis_name(unsigned axis) const else if(axis==1) return "Y"; else if(axis==2) - return "Progress"; + return "Delta X"; + else if(axis==3) + return "Delta Y"; else return Device::get_axis_name(axis); } @@ -62,6 +70,14 @@ void GestureDetector::touch_down(unsigned btn) p.x = 0; p.y = 0; p.threshold_exceeded = false; + + if(current_gesture==GESTURE_NONE && !invalid_gesture) + { + if(btn==0) + pending_tap = GESTURE_TAP; + else if(btn==1) + pending_tap = GESTURE_TAP_2; + } } void GestureDetector::touch_up(unsigned btn) @@ -83,6 +99,16 @@ void GestureDetector::touch_up(unsigned btn) invalid_gesture = false; for(unsigned i=0; (i((pending_tap-GESTURE_TAP)+1, MAX_POINTS); + set_gesture_location((1<=1) + { p.threshold_exceeded = true; + pending_tap = GESTURE_NONE; + } if(current_gesture==GESTURE_NONE && !invalid_gesture) start_gesture(); @@ -148,28 +177,42 @@ void GestureDetector::start_gesture() current_gesture = GESTURE_DRAG_2; if(current_gesture!=GESTURE_NONE) - { active_points = 3; - set_axis_value(0, (p.down_x+p2.down_x)/2, true); - set_axis_value(1, (p.down_y+p2.down_y)/2, true); - } } else { current_gesture = GESTURE_DRAG; active_points = 1; - set_axis_value(0, p.down_x, true); - set_axis_value(1, p.down_y, true); } - update_progress(); if(current_gesture!=GESTURE_NONE) + { + set_gesture_location(active_points); + update_progress(); set_button_state(current_gesture, true, true); + } else invalid_gesture = true; } +void GestureDetector::set_gesture_location(unsigned mask) +{ + float x = 0; + float y = 0; + unsigned count = 0; + for(unsigned i=0; i