comparison android/DWindows.kt @ 2535:d862d9e4069b

Android: Implement most of the rest of drawing except for fonts... With varying degrees of functionality... more work needed.
author bsmith@81767d24-ef19-dc11-ae90-00e081727c95
date Tue, 11 May 2021 09:03:30 +0000
parents f45ebd96ebe5
children d172ab2eddb6
comparison
equal deleted inserted replaced
2534:c4255630cade 2535:d862d9e4069b
402 var windowLayout: LinearLayout? = null 402 var windowLayout: LinearLayout? = null
403 var threadLock = ReentrantLock() 403 var threadLock = ReentrantLock()
404 var threadCond = threadLock.newCondition() 404 var threadCond = threadLock.newCondition()
405 var notificationID: Int = 0 405 var notificationID: Int = 0
406 private var paint = Paint() 406 private var paint = Paint()
407 private var bgcolor: Int = 0
407 408
408 // Our version of runOnUiThread that waits for execution 409 // Our version of runOnUiThread that waits for execution
409 fun waitOnUiThread(runnable: Runnable) 410 fun waitOnUiThread(runnable: Runnable)
410 { 411 {
411 if(Looper.myLooper() == Looper.getMainLooper()) { 412 if(Looper.myLooper() == Looper.getMainLooper()) {
1906 } else if(bitmap != null) { 1907 } else if(bitmap != null) {
1907 canvas = Canvas(bitmap) 1908 canvas = Canvas(bitmap)
1908 } 1909 }
1909 1910
1910 if(canvas != null) { 1911 if(canvas != null) {
1912 paint.flags = 0
1913 paint.style = Paint.Style.STROKE
1911 canvas.drawLine(x1.toFloat(), y1.toFloat(), x2.toFloat(), y2.toFloat(), paint) 1914 canvas.drawLine(x1.toFloat(), y1.toFloat(), x2.toFloat(), y2.toFloat(), paint)
1912 } 1915 }
1913 } 1916 }
1914 } 1917 }
1915 1918
1916 fun drawRect(render: DWRender?, bitmap: Bitmap?, x: Int, y: Int, width: Int, height: Int) 1919 fun drawText(render: DWRender?, bitmap: Bitmap?, x: Int, y: Int, text:String)
1917 { 1920 {
1918 waitOnUiThread { 1921 waitOnUiThread {
1919 var canvas: Canvas? = null 1922 var canvas: Canvas? = null
1920 1923
1921 if(render != null) { 1924 if(render != null) {
1923 } else if(bitmap != null) { 1926 } else if(bitmap != null) {
1924 canvas = Canvas(bitmap) 1927 canvas = Canvas(bitmap)
1925 } 1928 }
1926 1929
1927 if(canvas != null) { 1930 if(canvas != null) {
1931 // Save the old color for later...
1932 var rect = Rect()
1933 val oldcolor = paint.color
1934 // Prepare to draw the background rect
1935 paint.color = bgcolor
1936 paint.flags = 0
1937 paint.style = Paint.Style.FILL_AND_STROKE
1938 paint.textAlign = Paint.Align.LEFT
1939 paint.getTextBounds(text, 0, text.length, rect)
1940 rect.top += y
1941 rect.bottom += y
1942 rect.left += x
1943 rect.right += x
1944 canvas.drawRect(rect, paint)
1945 // Restore the color and prepare to draw text
1946 paint.color = oldcolor
1947 paint.style = Paint.Style.STROKE
1948 canvas.drawText(text, x.toFloat(), y.toFloat(), paint)
1949 }
1950 }
1951 }
1952
1953 fun drawRect(render: DWRender?, bitmap: Bitmap?, x: Int, y: Int, width: Int, height: Int)
1954 {
1955 waitOnUiThread {
1956 var canvas: Canvas? = null
1957
1958 if(render != null) {
1959 canvas = render.cachedCanvas
1960 } else if(bitmap != null) {
1961 canvas = Canvas(bitmap)
1962 }
1963
1964 if(canvas != null) {
1965 paint.flags = 0
1966 paint.style = Paint.Style.FILL_AND_STROKE
1928 canvas.drawRect(x.toFloat(), y.toFloat(), x.toFloat() + width.toFloat(), y.toFloat() + height.toFloat(), paint) 1967 canvas.drawRect(x.toFloat(), y.toFloat(), x.toFloat() + width.toFloat(), y.toFloat() + height.toFloat(), paint)
1968 }
1969 }
1970 }
1971
1972 fun drawPolygon(render: DWRender?, bitmap: Bitmap?, flags: Int, npoints: Int, x: IntArray, y: IntArray)
1973 {
1974 var points = FloatArray(npoints*2)
1975
1976 // Convert to a single IntArray
1977 for (i in 0 until npoints) {
1978 points[(i*2)] = x[i].toFloat()
1979 points[(i*2)+1] = y[i].toFloat()
1980 }
1981
1982 waitOnUiThread {
1983 var canvas: Canvas? = null
1984
1985 if(render != null) {
1986 canvas = render.cachedCanvas
1987 } else if(bitmap != null) {
1988 canvas = Canvas(bitmap)
1989 }
1990
1991 if(canvas != null) {
1992 // Handle the DW_DRAW_NOAA flag
1993 if((flags and (1 shl 2)) == 0) {
1994 paint.flags = Paint.ANTI_ALIAS_FLAG
1995 } else {
1996 paint.flags = 0
1997 }
1998 // Handle the DW_DRAW_FILL flag
1999 if((flags and 1) == 1) {
2000 paint.style = Paint.Style.FILL_AND_STROKE
2001 } else {
2002 paint.style = Paint.Style.STROKE
2003 }
2004 canvas.drawPoints(points, paint)
2005 }
2006 }
2007 }
2008
2009 fun drawArc(render: DWRender?, bitmap: Bitmap?, flags: Int, xorigin: Int, yorigin: Int,
2010 x1: Int, y1: Int, x2: Int, y2: Int)
2011 {
2012 waitOnUiThread {
2013 var canvas: Canvas? = null
2014
2015 if(render != null) {
2016 canvas = render.cachedCanvas
2017 } else if(bitmap != null) {
2018 canvas = Canvas(bitmap)
2019 }
2020
2021 if(canvas != null) {
2022 var a1: Double = Math.atan2((y1 - yorigin).toDouble(), (x1 - xorigin).toDouble())
2023 var a2: Double = Math.atan2((y2 - yorigin).toDouble(), (x2 - xorigin).toDouble())
2024 val dx = (xorigin - x1).toDouble()
2025 val dy = (yorigin - y1).toDouble()
2026 val r: Double = Math.sqrt(dx * dx + dy * dy)
2027 val left = (xorigin-r).toFloat()
2028 val top = (yorigin-r).toFloat()
2029 val rect = RectF(left, top, (left + (r*2)).toFloat(), (top + (r*2)).toFloat())
2030
2031 /* Convert to degrees */
2032 a1 *= 180.0 / Math.PI
2033 a2 *= 180.0 / Math.PI
2034 val sweep = Math.abs(a1 - a2)
2035
2036 // Handle the DW_DRAW_NOAA flag
2037 if((flags and (1 shl 2)) == 0) {
2038 paint.flags = Paint.ANTI_ALIAS_FLAG
2039 } else {
2040 paint.flags = 0
2041 }
2042 // Handle the DW_DRAW_FILL flag
2043 if((flags and 1) == 1) {
2044 paint.style = Paint.Style.FILL_AND_STROKE
2045 } else {
2046 paint.style = Paint.Style.STROKE
2047 }
2048 canvas.drawArc(rect, a1.toFloat(), sweep.toFloat(), false, paint)
1929 } 2049 }
1930 } 2050 }
1931 } 2051 }
1932 2052
1933 fun colorSet(alpha: Int, red: Int, green: Int, blue: Int) 2053 fun colorSet(alpha: Int, red: Int, green: Int, blue: Int)
1936 if(alpha != 0) { 2056 if(alpha != 0) {
1937 paint.color = Color.argb(alpha, red, green, blue) 2057 paint.color = Color.argb(alpha, red, green, blue)
1938 } else { 2058 } else {
1939 paint.color = Color.rgb(red, green, blue) 2059 paint.color = Color.rgb(red, green, blue)
1940 } 2060 }
2061 }
2062 }
2063
2064 fun bgColorSet(alpha: Int, red: Int, green: Int, blue: Int)
2065 {
2066 if(alpha != 0) {
2067 this.bgcolor = Color.argb(alpha, red, green, blue)
2068 } else {
2069 this.bgcolor = Color.rgb(red, green, blue)
1941 } 2070 }
1942 } 2071 }
1943 2072
1944 fun timerConnect(interval: Long, sigfunc: Long, data: Long): Timer 2073 fun timerConnect(interval: Long, sigfunc: Long, data: Long): Timer
1945 { 2074 {