mirror of
https://github.com/oxen-io/session-android.git
synced 2024-11-28 04:25:18 +00:00
58 lines
1.5 KiB
Kotlin
58 lines
1.5 KiB
Kotlin
|
package org.thoughtcrime.securesms.loki.identicon
|
||
|
|
||
|
import android.graphics.Bitmap
|
||
|
import android.graphics.Canvas
|
||
|
import android.graphics.ColorFilter
|
||
|
import android.graphics.Paint
|
||
|
import android.graphics.Rect
|
||
|
import android.graphics.drawable.Drawable
|
||
|
|
||
|
/**
|
||
|
* Basically a [Bitmap] wrapper, the [Bitmap] size must be known when instantiating it
|
||
|
* but when drawing it will draw the [Bitmap] to fit the canvas.
|
||
|
*/
|
||
|
abstract class IdenticonDrawable(
|
||
|
width: Int,
|
||
|
height: Int,
|
||
|
hash: Long
|
||
|
) : Drawable() {
|
||
|
|
||
|
private val bitmapRect: Rect = Rect(0, 0, width, height)
|
||
|
private val destinationRect: Rect = Rect(0, 0, width, height)
|
||
|
private val bitmap: Bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888)
|
||
|
private val canvas: Canvas = Canvas(bitmap)
|
||
|
private val bitmapPaint = Paint(Paint.ANTI_ALIAS_FLAG)
|
||
|
|
||
|
var hash: Long = hash
|
||
|
set(value) {
|
||
|
field = value
|
||
|
onSetHash(value)
|
||
|
invalidateBitmap()
|
||
|
}
|
||
|
|
||
|
protected fun invalidateBitmap() {
|
||
|
drawBitmap(canvas)
|
||
|
invalidateSelf()
|
||
|
}
|
||
|
|
||
|
protected abstract fun drawBitmap(canvas: Canvas)
|
||
|
|
||
|
protected open fun onSetHash(newHash: Long) = Unit
|
||
|
|
||
|
override fun draw(canvas: Canvas) {
|
||
|
destinationRect.set(0, 0, canvas.width, canvas.height)
|
||
|
canvas.drawBitmap(bitmap, bitmapRect, destinationRect, bitmapPaint)
|
||
|
}
|
||
|
|
||
|
override fun setAlpha(i: Int) {
|
||
|
bitmapPaint.alpha = i
|
||
|
}
|
||
|
|
||
|
override fun setColorFilter(colorFilter: ColorFilter?) {
|
||
|
bitmapPaint.colorFilter = colorFilter
|
||
|
}
|
||
|
|
||
|
override fun getOpacity(): Int {
|
||
|
return bitmapPaint.alpha
|
||
|
}
|
||
|
}
|