in gdscript/src/main/kotlin/gdscript/lineMarker/GdColorProvider.kt [72:119]
override fun setColorTo(element: PsiElement, color: Color) {
if (element !is GdCallEx) return
val text = element.expr.text
val toReplace = PsiTreeUtil.getChildOfType(element, GdArgList::class.java)
val exprValue = when (text) {
"Color" -> {
if (color == Color.BLACK) {
toReplace?.delete()
return
}
val alpha = if (color.alpha == 255) "" else ", ${color.alpha / 255f}"
"Color(${color.red / 255f}, ${color.green / 255f}, ${color.blue / 255f}$alpha)"
}
"Color8" -> {
val alpha = if (color.alpha == 255) "" else ", ${color.alpha}"
"Color(${color.red}, ${color.green}, ${color.blue}$alpha)"
}
"html", "html_is_valid", "hex" -> {
if (GdClassMemberUtil.calledUpon(element)?.text == "Color") {
val value = if (text == "hex") {
// Color.hex(0xbbefd2a4)
"0x${Integer.toHexString(color.rgb).trimStart('#')}"
} else {
// Required manually as color.rgb puts alpha at first instead of last
var hex = Integer.toHexString((color.red shl 24) + (color.green shl 16) + (color.blue shl 8) + color.alpha)
if (hex.length % 2 == 1) hex = "0$hex"
"\"#$hex\""
}
"Color.$text($value)"
} else null
}
else -> null
} ?: return
val arguments = PsiTreeUtil.findChildOfType(
GdElementFactory.callExpr(element.project, exprValue), GdArgList::class.java
) ?: return
if (toReplace != null) {
toReplace.replace(arguments)
return
}
element.addBefore(arguments, element.lastChild)
}