package reading.component.style import scala.util.Try import scalacss.internal.{ ValueT, Color => ScalaCssColor } case class Color(red: Int, green: Int, blue: Int, alpha: Double = 1.0) { val value: ValueT[ValueT.Color] = ScalaCssColor.rgba(red, green, blue, alpha) def lighten(pct: Int): Color = ratio(1.0 + pct / 100.0) def darken(pct: Int): Color = ratio(1.0 - pct / 100.0) private def ratio(r: Double): Color = Color( red = Color.bound(red * r), green = Color.bound(green * r), blue = Color.bound(blue * r), alpha = alpha ) } // http://chir.ag/projects/name-that-color object Color { val black = Color.fromHex("#000000") val mickado = Color.fromHex("#2D2510") val white = Color.fromHex("#FFFFFF") val gray = Color.fromHex("#808080") val eastBay = Color.fromHex("#505080") val congoBrown = Color.fromHex("#57363E") val stiletto = Color.fromHex("#9C3336") val englishWalnut = Color.fromHex("#3F2626") def fromHex(hex: String, alpha: Double = 1.0) = Color( red = Try(Integer.parseInt(hex.slice(1, 3), 16)).getOrElse(0), green = Try(Integer.parseInt(hex.slice(3, 5), 16)).getOrElse(0), blue = Try(Integer.parseInt(hex.slice(5, 7), 16)).getOrElse(0), alpha = alpha ) def bound(n: Int): Int = Math.max(0, Math.min(255, n)) def bound(d: Double): Int = bound(d.toInt) }