Mercurial > dwindows
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;