comparison 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
comparison
equal deleted inserted replaced
2530:b9923432cb1f 2531:f45ebd96ebe5
9 import android.content.ClipboardManager 9 import android.content.ClipboardManager
10 import android.content.Context 10 import android.content.Context
11 import android.content.DialogInterface 11 import android.content.DialogInterface
12 import android.content.pm.ActivityInfo 12 import android.content.pm.ActivityInfo
13 import android.content.res.Configuration 13 import android.content.res.Configuration
14 import android.graphics.Bitmap 14 import android.graphics.*
15 import android.graphics.BitmapFactory
16 import android.graphics.Canvas
17 import android.graphics.drawable.BitmapDrawable 15 import android.graphics.drawable.BitmapDrawable
18 import android.graphics.drawable.Drawable 16 import android.graphics.drawable.Drawable
19 import android.graphics.drawable.GradientDrawable 17 import android.graphics.drawable.GradientDrawable
20 import android.media.AudioManager 18 import android.media.AudioManager
21 import android.media.ToneGenerator 19 import android.media.ToneGenerator
403 var firstWindow: Boolean = true 401 var firstWindow: Boolean = true
404 var windowLayout: LinearLayout? = null 402 var windowLayout: LinearLayout? = null
405 var threadLock = ReentrantLock() 403 var threadLock = ReentrantLock()
406 var threadCond = threadLock.newCondition() 404 var threadCond = threadLock.newCondition()
407 var notificationID: Int = 0 405 var notificationID: Int = 0
406 private var paint = Paint()
408 407
409 // Our version of runOnUiThread that waits for execution 408 // Our version of runOnUiThread that waits for execution
410 fun waitOnUiThread(runnable: Runnable) 409 fun waitOnUiThread(runnable: Runnable)
411 { 410 {
412 if(Looper.myLooper() == Looper.getMainLooper()) { 411 if(Looper.myLooper() == Looper.getMainLooper()) {
1834 } 1833 }
1835 1834
1836 fun renderRedraw(render: DWRender) 1835 fun renderRedraw(render: DWRender)
1837 { 1836 {
1838 render.invalidate() 1837 render.invalidate()
1838 }
1839
1840 fun pixmapBitBlt(dstr: DWRender?, dstp: Bitmap?, dstx: Int, dsty: Int, dstw: Int, dsth: Int,
1841 srcr: DWRender?, srcp: Bitmap?, srcy: Int, srcx: Int, srcw: Int, srch: Int): Int
1842 {
1843 val dst = Rect(dstx, dsty, dstx + dstw, dsty + dsth)
1844 var src = Rect(srcx, srcy, srcx + srcw, srcy + srch)
1845 var retval: Int = 1
1846
1847 if(srcw == -1) {
1848 src.right = srcx + dstw
1849 }
1850 if(srch == -1) {
1851 src.bottom = srcy + dsth
1852 }
1853
1854 waitOnUiThread {
1855 var canvas: Canvas? = null
1856 var bitmap: Bitmap? = null
1857
1858 if(dstr != null) {
1859 canvas = dstr.cachedCanvas
1860 } else if(dstp != null) {
1861 canvas = Canvas(dstp)
1862 }
1863
1864 if(srcp != null) {
1865 bitmap = srcp
1866 } else if(srcr != null) {
1867 bitmap = Bitmap.createBitmap(srcr.layoutParams.width,
1868 srcr.layoutParams.height, Bitmap.Config.ARGB_8888)
1869 val c = Canvas(bitmap)
1870 srcr.layout(srcr.left, srcr.top, srcr.right, srcr.bottom)
1871 srcr.draw(c)
1872 }
1873
1874 if(canvas != null && bitmap != null) {
1875 canvas.drawBitmap(bitmap, src, dst, null)
1876 retval = 0
1877 }
1878 }
1879 return retval
1880 }
1881
1882 fun drawPoint(render: DWRender?, bitmap: Bitmap?, x: Int, y: Int)
1883 {
1884 waitOnUiThread {
1885 var canvas: Canvas? = null
1886
1887 if(render != null) {
1888 canvas = render.cachedCanvas
1889 } else if(bitmap != null) {
1890 canvas = Canvas(bitmap)
1891 }
1892
1893 if(canvas != null) {
1894 canvas.drawPoint(x.toFloat(), y.toFloat(), Paint())
1895 }
1896 }
1897 }
1898
1899 fun drawLine(render: DWRender?, bitmap: Bitmap?, x1: Int, y1: Int, x2: Int, y2: Int)
1900 {
1901 waitOnUiThread {
1902 var canvas: Canvas? = null
1903
1904 if(render != null) {
1905 canvas = render.cachedCanvas
1906 } else if(bitmap != null) {
1907 canvas = Canvas(bitmap)
1908 }
1909
1910 if(canvas != null) {
1911 canvas.drawLine(x1.toFloat(), y1.toFloat(), x2.toFloat(), y2.toFloat(), paint)
1912 }
1913 }
1914 }
1915
1916 fun drawRect(render: DWRender?, bitmap: Bitmap?, x: Int, y: Int, width: Int, height: Int)
1917 {
1918 waitOnUiThread {
1919 var canvas: Canvas? = null
1920
1921 if(render != null) {
1922 canvas = render.cachedCanvas
1923 } else if(bitmap != null) {
1924 canvas = Canvas(bitmap)
1925 }
1926
1927 if(canvas != null) {
1928 canvas.drawRect(x.toFloat(), y.toFloat(), x.toFloat() + width.toFloat(), y.toFloat() + height.toFloat(), paint)
1929 }
1930 }
1931 }
1932
1933 fun colorSet(alpha: Int, red: Int, green: Int, blue: Int)
1934 {
1935 waitOnUiThread {
1936 if(alpha != 0) {
1937 paint.color = Color.argb(alpha, red, green, blue)
1938 } else {
1939 paint.color = Color.rgb(red, green, blue)
1940 }
1941 }
1839 } 1942 }
1840 1943
1841 fun timerConnect(interval: Long, sigfunc: Long, data: Long): Timer 1944 fun timerConnect(interval: Long, sigfunc: Long, data: Long): Timer
1842 { 1945 {
1843 // creating timer task, timer 1946 // creating timer task, timer