changeset 2608:a11522c30345

Android: Add initial code to handle button presses and long clicks on DWRender. Android Studio seems to think there is something wrong with the setOnTouchListener() code but it seems to work.
author bsmith@81767d24-ef19-dc11-ae90-00e081727c95
date Fri, 16 Jul 2021 18:55:05 +0000
parents 3b9bbd69bb9c
children 1ee59f231f6c
files android/DWindows.kt android/dw.cpp
diffstat 2 files changed, 30 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/android/DWindows.kt	Fri Jul 16 02:58:43 2021 +0000
+++ b/android/DWindows.kt	Fri Jul 16 18:55:05 2021 +0000
@@ -1,6 +1,7 @@
 package org.dbsoft.dwindows
 
 import android.R
+import android.annotation.SuppressLint
 import android.app.Activity
 import android.app.Dialog
 import android.app.NotificationChannel
@@ -242,6 +243,8 @@
     var cachedCanvas: Canvas? = null
     var typeface: Typeface? = null
     var fontsize: Float? = null
+    var evx: Float = 0f
+    var evy: Float = 0f
 
     override fun onSizeChanged(width: Int, height: Int, oldWidth: Int, oldHeight: Int) {
         super.onSizeChanged(width, height, oldWidth, oldHeight)
@@ -2871,6 +2874,32 @@
             render = DWRender(this)
             render!!.tag = dataArrayMap
             render!!.id = cid
+            render!!.setOnTouchListener(object : View.OnTouchListener {
+                @SuppressLint("ClickableViewAccessibility")
+                override fun onTouch(v: View, event: MotionEvent): Boolean {
+                    when (event.action) {
+                        MotionEvent.ACTION_DOWN -> {
+                            render!!.evx = event.x
+                            render!!.evy = event.y
+                        }
+                        MotionEvent.ACTION_UP -> {
+                            render!!.evx = event.x
+                            render!!.evy = event.y
+                        }
+                    }
+                    return false
+                }
+            })
+            render!!.setOnLongClickListener{
+                // Long click functions as button 2
+                eventHandlerInt(render!!, 3, render!!.evx.toInt(), render!!.evy.toInt(), 2, 0)
+                true
+            }
+            render!!.setOnClickListener{
+                // Normal click functions as 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)
--- a/android/dw.cpp	Fri Jul 16 02:58:43 2021 +0000
+++ b/android/dw.cpp	Fri Jul 16 18:55:05 2021 +0000
@@ -311,7 +311,7 @@
             case 4:
             {
                 int (* API buttonfunc)(HWND, int, int, int, void *) = (int (* API)(HWND, int, int, int, void *))handler->signalfunction;
-                int button = 1;
+                int button = params[5] ? DW_POINTER_TO_INT(params[5]) : 1;
 
                 retval = buttonfunc(handler->window, DW_POINTER_TO_INT(params[3]), DW_POINTER_TO_INT(params[4]), button, handler->data);
                 break;