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 }