changeset 2611:ed2c4a503666

Android: Implement button release and motion notify events. Motion notify events will always have an associate touch on Android so button will always be masked. I currently mask button 1 for motion notify to match the behavior I implemented on iOS. However since long touches get interpreted as button 2, if you hold the touch long enough while moving it could potentially be interpreted as button 2... Not sure if we should always mask button 1 like I am doing now, or let it become button 2 after the long touch time has passed. Whatever the behavior it should match iOS.
author bsmith@81767d24-ef19-dc11-ae90-00e081727c95
date Sun, 18 Jul 2021 15:56:12 +0000
parents da51be036599
children 4628c8c34125
files android/DWindows.kt
diffstat 1 files changed, 11 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/android/DWindows.kt	Sun Jul 18 08:54:12 2021 +0000
+++ b/android/DWindows.kt	Sun Jul 18 15:56:12 2021 +0000
@@ -245,6 +245,7 @@
     var fontsize: Float? = null
     var evx: Float = 0f
     var evy: Float = 0f
+    var button: Int = 1
 
     override fun onSizeChanged(width: Int, height: Int, oldWidth: Int, oldHeight: Int) {
         super.onSizeChanged(width, height, oldWidth, oldHeight)
@@ -2881,10 +2882,18 @@
                         MotionEvent.ACTION_DOWN -> {
                             render!!.evx = event.x
                             render!!.evy = event.y
+                            // Event will be generated in the onClickListener or
+                            // onLongClickListener below, just save the location
                         }
                         MotionEvent.ACTION_UP -> {
                             render!!.evx = event.x
                             render!!.evy = event.y
+                            eventHandlerInt(render!!, 4, event.x.toInt(), event.y.toInt(), render!!.button, 0)
+                        }
+                        MotionEvent.ACTION_MOVE -> {
+                            render!!.evx = event.x
+                            render!!.evy = event.y
+                            eventHandlerInt(render!!, 5, event.x.toInt(), event.y.toInt(), 1, 0)
                         }
                     }
                     return false
@@ -2892,18 +2901,18 @@
             })
             render!!.setOnLongClickListener{
                 // Long click functions as button 2
+                render!!.button = 2
                 eventHandlerInt(render!!, 3, render!!.evx.toInt(), render!!.evy.toInt(), 2, 0)
                 true
             }
             render!!.setOnClickListener{
                 // Normal click functions as button 1
+                render!!.button = 1
                 eventHandlerInt(render!!, 3, render!!.evx.toInt(), render!!.evy.toInt(), 1, 0)
-                true
             }
             render!!.setOnKeyListener(View.OnKeyListener { v, keyCode, event ->
                 if (event.action == KeyEvent.ACTION_DOWN) {
                     eventHandlerKey(render!!, 2, keyCode, event.unicodeChar, event.modifiers, event.characters)
-                    true
                 }
                 false
             })