in gdscript/src/main/kotlin/gdscript/lineMarker/GdColorProvider.kt [16:70]
override fun getColorFrom(element: PsiElement): Color? {
if (element !is GdCallEx) return null
try {
val text = element.expr.text
val parameters = element.argList?.argExprList ?: emptyList()
parameters.forEach {
if (it.expr !is GdLiteralEx) return null
}
if (text == "Color") {
// Empty constructor defaults to Color.BLACK Color(0, 0, 0, 1)
if (parameters.isEmpty()) return Color.BLACK
if (parameters.first().returnType == GdKeywords.FLOAT) {
if (parameters.size <= 2) return null
return Color(
parameters[0].text.toFloat(),
parameters[1].text.toFloat(),
parameters[2].text.toFloat(),
parameters.getOrNull(3)?.text?.toFloat() ?: 1f,
)
}
} else if (text == "Color8") {
if (parameters.size <= 2) return null
return Color(
parameters[0].text.toInt(),
parameters[1].text.toInt(),
parameters[2].text.toInt(),
parameters.getOrNull(3)?.text?.toInt() ?: 255,
)
} else if ((text == "html" || text == "html_is_valid" || text == "hex") && GdClassMemberUtil.calledUpon(element)?.text == "Color") {
var value = parameters.firstOrNull()?.text ?: "000"
var alpha = "ff"
if (text.startsWith("html")) {
value = value.trim('"').removePrefix("#")
if (value.length > 6) {
alpha = value.substring(6)
value = value.substring(0, 6)
}
} else {
value = value.removePrefix("0x")
if (value.length > 6) {
alpha = value.substring(0, 2)
value = value.substring(2)
}
}
val intVal = Integer.decode("#$value")
return Color(intVal shr 16 and 0xFF, intVal shr 8 and 0xFF, intVal and 0xFF, Integer.decode("#$alpha") and 0xFF)
}
} catch (e: Exception) {
return null
}
return null
}