comparison android/DWindows.kt @ 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 a11522c30345
children 72f1141c07aa
comparison
equal deleted inserted replaced
2610:da51be036599 2611:ed2c4a503666
243 var cachedCanvas: Canvas? = null 243 var cachedCanvas: Canvas? = null
244 var typeface: Typeface? = null 244 var typeface: Typeface? = null
245 var fontsize: Float? = null 245 var fontsize: Float? = null
246 var evx: Float = 0f 246 var evx: Float = 0f
247 var evy: Float = 0f 247 var evy: Float = 0f
248 var button: Int = 1
248 249
249 override fun onSizeChanged(width: Int, height: Int, oldWidth: Int, oldHeight: Int) { 250 override fun onSizeChanged(width: Int, height: Int, oldWidth: Int, oldHeight: Int) {
250 super.onSizeChanged(width, height, oldWidth, oldHeight) 251 super.onSizeChanged(width, height, oldWidth, oldHeight)
251 // Send DW_SIGNAL_CONFIGURE 252 // Send DW_SIGNAL_CONFIGURE
252 eventHandlerInt(1, width, height, 0, 0) 253 eventHandlerInt(1, width, height, 0, 0)
2879 override fun onTouch(v: View, event: MotionEvent): Boolean { 2880 override fun onTouch(v: View, event: MotionEvent): Boolean {
2880 when (event.action) { 2881 when (event.action) {
2881 MotionEvent.ACTION_DOWN -> { 2882 MotionEvent.ACTION_DOWN -> {
2882 render!!.evx = event.x 2883 render!!.evx = event.x
2883 render!!.evy = event.y 2884 render!!.evy = event.y
2885 // Event will be generated in the onClickListener or
2886 // onLongClickListener below, just save the location
2884 } 2887 }
2885 MotionEvent.ACTION_UP -> { 2888 MotionEvent.ACTION_UP -> {
2886 render!!.evx = event.x 2889 render!!.evx = event.x
2887 render!!.evy = event.y 2890 render!!.evy = event.y
2891 eventHandlerInt(render!!, 4, event.x.toInt(), event.y.toInt(), render!!.button, 0)
2892 }
2893 MotionEvent.ACTION_MOVE -> {
2894 render!!.evx = event.x
2895 render!!.evy = event.y
2896 eventHandlerInt(render!!, 5, event.x.toInt(), event.y.toInt(), 1, 0)
2888 } 2897 }
2889 } 2898 }
2890 return false 2899 return false
2891 } 2900 }
2892 }) 2901 })
2893 render!!.setOnLongClickListener{ 2902 render!!.setOnLongClickListener{
2894 // Long click functions as button 2 2903 // Long click functions as button 2
2904 render!!.button = 2
2895 eventHandlerInt(render!!, 3, render!!.evx.toInt(), render!!.evy.toInt(), 2, 0) 2905 eventHandlerInt(render!!, 3, render!!.evx.toInt(), render!!.evy.toInt(), 2, 0)
2896 true 2906 true
2897 } 2907 }
2898 render!!.setOnClickListener{ 2908 render!!.setOnClickListener{
2899 // Normal click functions as button 1 2909 // Normal click functions as button 1
2910 render!!.button = 1
2900 eventHandlerInt(render!!, 3, render!!.evx.toInt(), render!!.evy.toInt(), 1, 0) 2911 eventHandlerInt(render!!, 3, render!!.evx.toInt(), render!!.evy.toInt(), 1, 0)
2901 true
2902 } 2912 }
2903 render!!.setOnKeyListener(View.OnKeyListener { v, keyCode, event -> 2913 render!!.setOnKeyListener(View.OnKeyListener { v, keyCode, event ->
2904 if (event.action == KeyEvent.ACTION_DOWN) { 2914 if (event.action == KeyEvent.ACTION_DOWN) {
2905 eventHandlerKey(render!!, 2, keyCode, event.unicodeChar, event.modifiers, event.characters) 2915 eventHandlerKey(render!!, 2, keyCode, event.unicodeChar, event.modifiers, event.characters)
2906 true
2907 } 2916 }
2908 false 2917 false
2909 }) 2918 })
2910 } 2919 }
2911 return render 2920 return render