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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
|
package moe.nea.firmament.gui.config
import io.github.notenoughupdates.moulconfig.ChromaColour
import io.github.notenoughupdates.moulconfig.gui.component.ColorSelectComponent
import kotlinx.serialization.KSerializer
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
import kotlinx.serialization.descriptors.SerialDescriptor
import kotlinx.serialization.encoding.Decoder
import kotlinx.serialization.encoding.Encoder
import kotlinx.serialization.json.Json
import kotlinx.serialization.json.JsonElement
class ColourHandler(val config: ManagedConfig) :
ManagedConfig.OptionHandler<ChromaColour> {
@Serializable
data class ChromaDelegate(
@SerialName("h")
val hue: Float,
@SerialName("s")
val saturation: Float,
@SerialName("b")
val brightness: Float,
@SerialName("a")
val alpha: Int,
@SerialName("c")
val timeForFullRotationInMillis: Int,
) {
constructor(delegate: ChromaColour) : this(
delegate.hue,
delegate.saturation,
delegate.brightness,
delegate.alpha,
delegate.timeForFullRotationInMillis
)
fun into(): ChromaColour = ChromaColour(hue, saturation, brightness, alpha, timeForFullRotationInMillis)
}
object ChromaSerializer : KSerializer<ChromaColour> {
override val descriptor: SerialDescriptor
get() = SerialDescriptor("FirmChromaColour", ChromaDelegate.serializer().descriptor)
override fun serialize(
encoder: Encoder,
value: ChromaColour
) {
encoder.encodeSerializableValue(ChromaDelegate.serializer(), ChromaDelegate(value))
}
override fun deserialize(decoder: Decoder): ChromaColour {
return decoder.decodeSerializableValue(ChromaDelegate.serializer()).into()
}
}
override fun toJson(element: ChromaColour): JsonElement? {
return Json.encodeToJsonElement(ChromaSerializer, element)
}
override fun fromJson(element: JsonElement): ChromaColour {
return Json.decodeFromJsonElement(ChromaSerializer, element)
}
override fun emitGuiElements(
opt: ManagedOption<ChromaColour>,
guiAppender: GuiAppender
) {
guiAppender.appendLabeledRow(
opt.labelText,
ColorSelectComponent(
0,
0,
opt.value.toLegacyString(),
{
opt.value = ChromaColour.forLegacyString(it)
config.save()
},
{ }
)
)
}
}
|