comparison android/DWindows.kt @ 2576:db097ec28c90

Android: Fix drawArc() FULL option and refactor to reduce calculations.
author bsmith@81767d24-ef19-dc11-ae90-00e081727c95
date Sat, 22 May 2021 00:19:46 +0000
parents 5beaaa4e9b03
children a36448beb7f7
comparison
equal deleted inserted replaced
2575:5beaaa4e9b03 2576:db097ec28c90
3043 } else if(bitmap != null) { 3043 } else if(bitmap != null) {
3044 canvas = Canvas(bitmap) 3044 canvas = Canvas(bitmap)
3045 } 3045 }
3046 3046
3047 if(canvas != null) { 3047 if(canvas != null) {
3048 var a1: Double = Math.atan2((y1 - yorigin).toDouble(), (x1 - xorigin).toDouble())
3049 var a2: Double = Math.atan2((y2 - yorigin).toDouble(), (x2 - xorigin).toDouble())
3050 val dx = (xorigin - x1).toDouble()
3051 val dy = (yorigin - y1).toDouble()
3052 val r: Double = Math.sqrt(dx * dx + dy * dy)
3053 val left = (xorigin-r).toFloat()
3054 val top = (yorigin-r).toFloat()
3055 val rect = RectF(left, top, (left + (r*2)).toFloat(), (top + (r*2)).toFloat())
3056
3057 // Convert to degrees
3058 a1 *= 180.0 / Math.PI
3059 a2 *= 180.0 / Math.PI
3060 val sweep = Math.abs(a1 - a2)
3061
3062 colorsSet(fgColor, bgColor) 3048 colorsSet(fgColor, bgColor)
3063 3049
3064 // Handle the DW_DRAW_NOAA flag 3050 // Handle the DW_DRAW_NOAA flag
3065 if((flags and (1 shl 2)) == 0) { 3051 if((flags and (1 shl 2)) == 0) {
3066 paint.flags = Paint.ANTI_ALIAS_FLAG 3052 paint.flags = Paint.ANTI_ALIAS_FLAG
3073 } else { 3059 } else {
3074 paint.style = Paint.Style.STROKE 3060 paint.style = Paint.Style.STROKE
3075 } 3061 }
3076 // Handle the DW_DRAW_FULL flag 3062 // Handle the DW_DRAW_FULL flag
3077 if((flags and (1 shl 1)) != 0) { 3063 if((flags and (1 shl 1)) != 0) {
3078 canvas.drawOval(rect, paint) 3064 var left: Float = x1.toFloat()
3065 var top: Float = y1.toFloat()
3066 var right: Float = x2.toFloat()
3067 var bottom: Float = y2.toFloat()
3068
3069 if(x2 < x1) {
3070 left = x2.toFloat()
3071 right = x1.toFloat()
3072 }
3073 if(y2 < y1) {
3074 top = y2.toFloat()
3075 bottom = y1.toFloat()
3076 }
3077
3078 val width: Float = Math.abs((x1-x2)).toFloat()
3079 val height: Float = Math.abs((y1-y2)).toFloat()
3080 canvas.drawOval(left, top, right, bottom, paint)
3079 } else { 3081 } else {
3082 var a1: Double = Math.atan2((y1 - yorigin).toDouble(), (x1 - xorigin).toDouble())
3083 var a2: Double = Math.atan2((y2 - yorigin).toDouble(), (x2 - xorigin).toDouble())
3084 val dx = (xorigin - x1).toDouble()
3085 val dy = (yorigin - y1).toDouble()
3086 val r: Double = Math.sqrt(dx * dx + dy * dy)
3087 val left = (xorigin-r).toFloat()
3088 val top = (yorigin-r).toFloat()
3089 val rect = RectF(left, top, (left + (r*2)).toFloat(), (top + (r*2)).toFloat())
3090
3091 // Convert to degrees
3092 a1 *= 180.0 / Math.PI
3093 a2 *= 180.0 / Math.PI
3094 val sweep = Math.abs(a1 - a2)
3095
3080 canvas.drawArc(rect, a1.toFloat(), sweep.toFloat(), false, paint) 3096 canvas.drawArc(rect, a1.toFloat(), sweep.toFloat(), false, paint)
3081 } 3097 }
3082 } 3098 }
3083 } 3099 }
3084 } 3100 }