Bimba.git

ref: 3dc642a878cddf6ffa50a59e992a3f0945447d84

app/src/main/java/xyz/apiote/bimba/czwek/repo/Colour.kt


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
// SPDX-FileCopyrightText: Adam Evyčędo
//
// SPDX-License-Identifier: GPL-3.0-or-later

package xyz.apiote.bimba.czwek.repo

import android.content.Context
import android.content.res.TypedArray
import android.os.Parcelable
import kotlinx.parcelize.Parcelize
import xyz.apiote.bimba.czwek.R
import xyz.apiote.bimba.czwek.api.ColourV1

@Parcelize
data class Colour(val R: UByte, val G: UByte, val B: UByte): Parcelable {
	constructor(c: ColourV1) : this(c.R, c.G, c.B)

	fun toInt(): Int {
		var rgb = 0xff
		rgb = (rgb shl 8) + R.toInt()
		rgb = (rgb shl 8) + G.toInt()
		rgb = (rgb shl 8) + B.toInt()
		return rgb
	}

	companion object {
		fun fromHex(hex: String?): Colour {
			if (hex == null) return Colour(255u, 255u, 255u)
			return hex.removePrefix("#").let {
				if (it.isEmpty()) {
					Colour(255u, 255u, 255u)
				} else {
					val r = it.substring(0 until 2).toUByte(16)
					val g = it.substring(2 until 4).toUByte(16)
					val b = it.substring(4 until 6).toUByte(16)
					Colour(r, g, b)
				}
			}
		}

		fun getThemeColour(resource: Int, context: Context): Int {
			val a: TypedArray = context.theme.obtainStyledAttributes(
				R.style.Theme_Bimba, intArrayOf(resource)
			)
			val intColor = a.getColor(0, 0)
			a.recycle()
			return intColor
		}
	}
}