android: add `AndroidPointerEvent::just_went_down` for `friendz`
authorAlexis Laferrière <alexis.laf@xymus.net>
Sat, 3 Jan 2015 16:49:07 +0000 (11:49 -0500)
committerAlexis Laferrière <alexis.laf@xymus.net>
Sat, 3 Jan 2015 16:49:07 +0000 (11:49 -0500)
Signed-off-by: Alexis Laferrière <alexis.laf@xymus.net>

contrib/friendz/src/friendz_android.nit
lib/android/input_events.nit

index 94b9d2b..6060be2 100644 (file)
@@ -23,5 +23,5 @@ redef class App
 end
 
 redef class AndroidPointerEvent
-       redef fun is_motion do return not motion_event.just_went_down
+       redef fun is_motion do return not just_went_down
 end
index 48c2d72..c766a16 100644 (file)
@@ -57,6 +57,7 @@ private extern class NativeAndroidMotionEvent `{AInputEvent *`}
                return AMotionEvent_getPointerCount(recv);
        `}
 
+       # Did this motion event just started?
        fun just_went_down: Bool `{
                return (AMotionEvent_getAction(recv) & AMOTION_EVENT_ACTION_MASK) == AMOTION_EVENT_ACTION_DOWN;
        `}
@@ -65,6 +66,7 @@ private extern class NativeAndroidMotionEvent `{AInputEvent *`}
                return AMotionEvent_getEdgeFlags(recv);
        `}
 
+       # Get the non-primary pointer id that just went down (returns -1 or > 0)
        fun index_down_pointer: Int `{
                int a = AMotionEvent_getAction(recv);
                if ((a & AMOTION_EVENT_ACTION_MASK) == AMOTION_EVENT_ACTION_POINTER_DOWN)
@@ -134,8 +136,14 @@ class AndroidMotionEvent
 
        redef fun down_pointer: nullable AndroidPointerEvent
        do
+               if just_went_down then
+                       # The primary pointer went down
+                       return pointers[0]
+               end
+
                var i = native.index_down_pointer
                if i > 0 then
+                       # A secondary pointer went down
                        return pointers[i]
                else
                        return null
@@ -178,6 +186,12 @@ class AndroidPointerEvent
        end
 
        redef fun depressed do return not pressed
+
+       # Does this pointer just began touching the screen?
+       fun just_went_down: Bool
+       do
+               return motion_event.down_pointer == self
+       end
 end
 
 # An hardware key event