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