Bimba.git

commit 9c36169de2028b25d2ff12182c57699ab1baed12

Author: Adam <git@apiote.xyz>

fix drawing squircle with line type

 app/src/main/java/ml/adamsprogs/bimba/api/Structs.kt | 47 ++++++++++---


diff --git a/app/src/main/java/ml/adamsprogs/bimba/api/Structs.kt b/app/src/main/java/ml/adamsprogs/bimba/api/Structs.kt
index afa8914e6904f3a2179502fd69572a4f08a9679b..dc1bae961eb42ae229d5e6d66a7935b31f1db9bd 100644
--- a/app/src/main/java/ml/adamsprogs/bimba/api/Structs.kt
+++ b/app/src/main/java/ml/adamsprogs/bimba/api/Structs.kt
@@ -2,8 +2,7 @@ package ml.adamsprogs.bimba.api
 
 import android.content.Context
 import android.graphics.*
-import android.util.Log
-import androidx.annotation.ColorInt
+import android.util.DisplayMetrics
 import androidx.appcompat.content.res.AppCompatResources
 import androidx.core.graphics.drawable.toBitmap
 import ml.adamsprogs.bimba.R
@@ -11,6 +10,7 @@ import xyz.apiote.fruchtfleisch.Reader
 import java.io.InputStream
 import kotlin.math.abs
 import kotlin.math.pow
+import kotlin.math.roundToInt
 
 data class Alert(
 	val header: String,
@@ -211,17 +211,33 @@ 			((part + 0.055) / 1.055).pow(2.4)
 		}
 	}
 
+	private fun dpToPixel(dp: Float, context: Context): Float {
+		val metrics: DisplayMetrics = context.resources.displayMetrics
+		return dp * (metrics.densityDpi / 160f)
+	}
+
+	private fun dpToPixelI(dp: Float, context: Context): Int = dpToPixel(dp, context).roundToInt()
+
 	fun icon(context: Context, type: LineType, colour: Colour): Bitmap {
-		// fixme dimensions
 		val drawingBitmap = Bitmap.createBitmap(
-			2400,
-			2400,
+			dpToPixelI(24f, context),
+			dpToPixelI(24f, context),
 			Bitmap.Config.ARGB_8888
 		)
 		val canvas = Canvas(drawingBitmap)
 
-		canvas.drawPath(getSquirclePath(80, 80, 1120), Paint().apply { color = textColour(colour) })
-		canvas.drawPath(getSquirclePath(160, 160, 1040), Paint().apply { color = colour.toInt() })
+		canvas.drawPath(
+			getSquirclePath(
+				dpToPixel(.8f, context),
+				dpToPixel(.8f, context),
+				dpToPixelI(11.2f, context)
+			), Paint().apply { color = textColour(colour) })
+		canvas.drawPath(
+			getSquirclePath(
+				dpToPixel(1.6f, context),
+				dpToPixel(1.6f, context),
+				dpToPixelI(10.4f, context)
+			), Paint().apply { color = colour.toInt() })
 		val iconID = when (type) {
 			LineType.BUS -> R.drawable.ic_bus_black_24dp
 			LineType.TRAM -> R.drawable.ic_tram_black_24dp
@@ -230,12 +246,21 @@ 		}
 		val icon = AppCompatResources.getDrawable(context, iconID)?.mutate()
 			?.apply {
 				setTint(textColour(colour))
-			}?.toBitmap(1920, 1920, Bitmap.Config.ARGB_8888)
-		canvas.drawBitmap(icon!!, 240f, 240f, Paint())
+			}?.toBitmap(dpToPixelI(19.2f, context), dpToPixelI(19.2f, context), Bitmap.Config.ARGB_8888)
+		canvas.drawBitmap(
+			icon!!,
+			dpToPixel(2.4f, context),
+			dpToPixel(2.4f, context),
+			Paint()
+		)
 		return drawingBitmap
 	}
 
-	private fun getSquirclePath(left: Int, top: Int, radius: Int): Path {  // fixme draws beyond canvas
+	private fun getSquirclePath(
+		left: Float,
+		top: Float,
+		radius: Int
+	): Path {
 		val radiusToPow = (radius * radius * radius).toDouble()
 		val path = Path()
 		path.moveTo(-radius.toFloat(), 0f)
@@ -249,7 +274,7 @@ 			-Math.cbrt(radiusToPow - abs(x * x * x)).toFloat()
 		)
 		path.close()
 		val matrix = Matrix()
-		matrix.postTranslate((left + radius).toFloat(), (top + radius).toFloat())
+		matrix.postTranslate((left + radius), (top + radius))
 		path.transform(matrix)
 		return path
 	}