Mercurial > dwindows
diff android/DWindows.kt @ 2531:f45ebd96ebe5
Android: First attempts at implementing drawing functions
author | bsmith@81767d24-ef19-dc11-ae90-00e081727c95 |
---|---|
date | Tue, 11 May 2021 00:51:20 +0000 |
parents | b9923432cb1f |
children | d862d9e4069b |
line wrap: on
line diff
--- a/android/DWindows.kt Mon May 10 22:34:52 2021 +0000 +++ b/android/DWindows.kt Tue May 11 00:51:20 2021 +0000 @@ -11,9 +11,7 @@ import android.content.DialogInterface import android.content.pm.ActivityInfo import android.content.res.Configuration -import android.graphics.Bitmap -import android.graphics.BitmapFactory -import android.graphics.Canvas +import android.graphics.* import android.graphics.drawable.BitmapDrawable import android.graphics.drawable.Drawable import android.graphics.drawable.GradientDrawable @@ -405,6 +403,7 @@ var threadLock = ReentrantLock() var threadCond = threadLock.newCondition() var notificationID: Int = 0 + private var paint = Paint() // Our version of runOnUiThread that waits for execution fun waitOnUiThread(runnable: Runnable) @@ -1838,6 +1837,110 @@ render.invalidate() } + fun pixmapBitBlt(dstr: DWRender?, dstp: Bitmap?, dstx: Int, dsty: Int, dstw: Int, dsth: Int, + srcr: DWRender?, srcp: Bitmap?, srcy: Int, srcx: Int, srcw: Int, srch: Int): Int + { + val dst = Rect(dstx, dsty, dstx + dstw, dsty + dsth) + var src = Rect(srcx, srcy, srcx + srcw, srcy + srch) + var retval: Int = 1 + + if(srcw == -1) { + src.right = srcx + dstw + } + if(srch == -1) { + src.bottom = srcy + dsth + } + + waitOnUiThread { + var canvas: Canvas? = null + var bitmap: Bitmap? = null + + if(dstr != null) { + canvas = dstr.cachedCanvas + } else if(dstp != null) { + canvas = Canvas(dstp) + } + + if(srcp != null) { + bitmap = srcp + } else if(srcr != null) { + bitmap = Bitmap.createBitmap(srcr.layoutParams.width, + srcr.layoutParams.height, Bitmap.Config.ARGB_8888) + val c = Canvas(bitmap) + srcr.layout(srcr.left, srcr.top, srcr.right, srcr.bottom) + srcr.draw(c) + } + + if(canvas != null && bitmap != null) { + canvas.drawBitmap(bitmap, src, dst, null) + retval = 0 + } + } + return retval + } + + fun drawPoint(render: DWRender?, bitmap: Bitmap?, x: Int, y: Int) + { + waitOnUiThread { + var canvas: Canvas? = null + + if(render != null) { + canvas = render.cachedCanvas + } else if(bitmap != null) { + canvas = Canvas(bitmap) + } + + if(canvas != null) { + canvas.drawPoint(x.toFloat(), y.toFloat(), Paint()) + } + } + } + + fun drawLine(render: DWRender?, bitmap: Bitmap?, x1: Int, y1: Int, x2: Int, y2: Int) + { + waitOnUiThread { + var canvas: Canvas? = null + + if(render != null) { + canvas = render.cachedCanvas + } else if(bitmap != null) { + canvas = Canvas(bitmap) + } + + if(canvas != null) { + canvas.drawLine(x1.toFloat(), y1.toFloat(), x2.toFloat(), y2.toFloat(), paint) + } + } + } + + fun drawRect(render: DWRender?, bitmap: Bitmap?, x: Int, y: Int, width: Int, height: Int) + { + waitOnUiThread { + var canvas: Canvas? = null + + if(render != null) { + canvas = render.cachedCanvas + } else if(bitmap != null) { + canvas = Canvas(bitmap) + } + + if(canvas != null) { + canvas.drawRect(x.toFloat(), y.toFloat(), x.toFloat() + width.toFloat(), y.toFloat() + height.toFloat(), paint) + } + } + } + + fun colorSet(alpha: Int, red: Int, green: Int, blue: Int) + { + waitOnUiThread { + if(alpha != 0) { + paint.color = Color.argb(alpha, red, green, blue) + } else { + paint.color = Color.rgb(red, green, blue) + } + } + } + fun timerConnect(interval: Long, sigfunc: Long, data: Long): Timer { // creating timer task, timer