Color: Better methods of brightening and darkening colors (#13611)

* better brighten and darken

* fix not returning new color

* update method descriptions
This commit is contained in:
Md. Touhidur Rahman 2025-07-15 14:51:49 +06:00 committed by GitHub
parent 29108d0adc
commit bee216aa3d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -42,6 +42,7 @@ import com.unciv.ui.components.input.onChange
import com.unciv.ui.images.IconCircleGroup import com.unciv.ui.images.IconCircleGroup
import com.unciv.ui.images.ImageGetter import com.unciv.ui.images.ImageGetter
import com.unciv.ui.screens.basescreen.BaseScreen import com.unciv.ui.screens.basescreen.BaseScreen
import kotlin.math.max
/** /**
* Collection of extension functions mostly for libGdx widgets * Collection of extension functions mostly for libGdx widgets
@ -93,12 +94,16 @@ fun colorFromHex(hexColor: Int): Color {
fun colorFromRGB(r: Int, g: Int, b: Int) = Color(r / 255f, g / 255f, b / 255f, 1f) fun colorFromRGB(r: Int, g: Int, b: Int) = Color(r / 255f, g / 255f, b / 255f, 1f)
/** Create a new [Color] instance from r/g/b given as Integers in the range 0..255 in the form of a 3-element List [rgb] */ /** Create a new [Color] instance from r/g/b given as Integers in the range 0..255 in the form of a 3-element List [rgb] */
fun colorFromRGB(rgb: List<Int>) = colorFromRGB(rgb[0], rgb[1], rgb[2]) fun colorFromRGB(rgb: List<Int>) = colorFromRGB(rgb[0], rgb[1], rgb[2])
/** Linearly interpolates between this [Color] and [BLACK][ImageGetter.CHARCOAL] by [t] which is in the range [[0,1]]. /** Linearly interpolates between this [Color] and [BLACK][ImageGetter.CHARCOAL] by [t] which is in the range [[0,1]],
* The result is returned as a new instance. */ * preserving color ratio in RGB. The result is returned as a new instance. */
fun Color.darken(t: Float): Color = Color(this).lerp(Color.BLACK, t) fun Color.darken(t: Float): Color = Color(this).mul(t)
/** Linearly interpolates between this [Color] and [WHITE][Color.WHITE] by [t] which is in the range [[0,1]]. /** Linearly interpolates between this [Color] and [WHITE][Color.WHITE] by [t] which is in the range [[0,1]],
* The result is returned as a new instance. */ * preserving color ratio in RGB. The result is returned as a new instance. */
fun Color.brighten(t: Float): Color = Color(this).lerp(Color.WHITE, t) fun Color.brighten(t: Float): Color = Color(this).let {
val lightness = max(r, max(g, b))
val targetRatio = (lightness + t * (1 - lightness)) / lightness
return it.mul(targetRatio)
}
fun Actor.centerX(parent: Actor) { x = parent.width / 2 - width / 2 } fun Actor.centerX(parent: Actor) { x = parent.width / 2 - width / 2 }