std/colors

    Dark Mode
Search:
Source   Edit  

This module implements color handling for Nim, namely color mixing and parsing the CSS color names.

Types

Color = distinct int
A color stored as RGB, e.g. 0xff00cc. Source   Edit  

Consts

colAliceBlue = 15792383
Source   Edit  
colAntiqueWhite = 16444375
Source   Edit  
colAqua = 65535
Source   Edit  
colAquamarine = 8388564
Source   Edit  
colAzure = 15794175
Source   Edit  
colBeige = 16119260
Source   Edit  
colBisque = 16770244
Source   Edit  
colBlack = 0
Source   Edit  
colBlanchedAlmond = 16772045
Source   Edit  
colBlue = 255
Source   Edit  
colBlueViolet = 9055202
Source   Edit  
colBrown = 10824234
Source   Edit  
colBurlyWood = 14596231
Source   Edit  
colCadetBlue = 6266528
Source   Edit  
colChartreuse = 8388352
Source   Edit  
colChocolate = 13789470
Source   Edit  
colCoral = 16744272
Source   Edit  
colCornflowerBlue = 6591981
Source   Edit  
colCornsilk = 16775388
Source   Edit  
colCrimson = 14423100
Source   Edit  
colCyan = 65535
Source   Edit  
colDarkBlue = 139
Source   Edit  
colDarkCyan = 35723
Source   Edit  
colDarkGoldenRod = 12092939
Source   Edit  
colDarkGray = 11119017
Source   Edit  
colDarkGreen = 25600
Source   Edit  
colDarkGrey = 11119017
Source   Edit  
colDarkKhaki = 12433259
Source   Edit  
colDarkMagenta = 9109643
Source   Edit  
colDarkOliveGreen = 5597999
Source   Edit  
colDarkorange = 16747520
Source   Edit  
colDarkOrchid = 10040012
Source   Edit  
colDarkRed = 9109504
Source   Edit  
colDarkSalmon = 15308410
Source   Edit  
colDarkSeaGreen = 9419919
Source   Edit  
colDarkSlateBlue = 4734347
Source   Edit  
colDarkSlateGray = 3100495
Source   Edit  
colDarkSlateGrey = 3100495
Source   Edit  
colDarkTurquoise = 52945
Source   Edit  
colDarkViolet = 9699539
Source   Edit  
colDeepPink = 16716947
Source   Edit  
colDeepSkyBlue = 49151
Source   Edit  
colDimGray = 6908265
Source   Edit  
colDimGrey = 6908265
Source   Edit  
colDodgerBlue = 2003199
Source   Edit  
colFireBrick = 11674146
Source   Edit  
colFloralWhite = 16775920
Source   Edit  
colForestGreen = 2263842
Source   Edit  
colFuchsia = 16711935
Source   Edit  
colGainsboro = 14474460
Source   Edit  
colGhostWhite = 16316671
Source   Edit  
colGold = 16766720
Source   Edit  
colGoldenRod = 14329120
Source   Edit  
colGray = 8421504
Source   Edit  
colGreen = 32768
Source   Edit  
colGreenYellow = 11403055
Source   Edit  
colGrey = 8421504
Source   Edit  
colHoneyDew = 15794160
Source   Edit  
colHotPink = 16738740
Source   Edit  
colIndianRed = 13458524
Source   Edit  
colIndigo = 4915330
Source   Edit  
colIvory = 16777200
Source   Edit  
colKhaki = 15787660
Source   Edit  
colLavender = 15132410
Source   Edit  
colLavenderBlush = 16773365
Source   Edit  
colLawnGreen = 8190976
Source   Edit  
colLemonChiffon = 16775885
Source   Edit  
colLightBlue = 11393254
Source   Edit  
colLightCoral = 15761536
Source   Edit  
colLightCyan = 14745599
Source   Edit  
colLightGoldenRodYellow = 16448210
Source   Edit  
colLightGray = 13882323
Source   Edit  
colLightGreen = 9498256
Source   Edit  
colLightGrey = 13882323
Source   Edit  
colLightPink = 16758465
Source   Edit  
colLightSalmon = 16752762
Source   Edit  
colLightSeaGreen = 2142890
Source   Edit  
colLightSkyBlue = 8900346
Source   Edit  
colLightSlateGray = 7833753
Source   Edit  
colLightSlateGrey = 7833753
Source   Edit  
colLightSteelBlue = 11584734
Source   Edit  
colLightYellow = 16777184
Source   Edit  
colLime = 65280
Source   Edit  
colLimeGreen = 3329330
Source   Edit  
colLinen = 16445670
Source   Edit  
colMagenta = 16711935
Source   Edit  
colMaroon = 8388608
Source   Edit  
colMediumAquaMarine = 6737322
Source   Edit  
colMediumBlue = 205
Source   Edit  
colMediumOrchid = 12211667
Source   Edit  
colMediumPurple = 9662683
Source   Edit  
colMediumSeaGreen = 3978097
Source   Edit  
colMediumSlateBlue = 8087790
Source   Edit  
colMediumSpringGreen = 64154
Source   Edit  
colMediumTurquoise = 4772300
Source   Edit  
colMediumVioletRed = 13047173
Source   Edit  
colMidnightBlue = 1644912
Source   Edit  
colMintCream = 16121850
Source   Edit  
colMistyRose = 16770273
Source   Edit  
colMoccasin = 16770229
Source   Edit  
colNavajoWhite = 16768685
Source   Edit  
colNavy = 128
Source   Edit  
colOldLace = 16643558
Source   Edit  
colOlive = 8421376
Source   Edit  
colOliveDrab = 7048739
Source   Edit  
colOrange = 16753920
Source   Edit  
colOrangeRed = 16729344
Source   Edit  
colOrchid = 14315734
Source   Edit  
colPaleGoldenRod = 15657130
Source   Edit  
colPaleGreen = 10025880
Source   Edit  
colPaleTurquoise = 11529966
Source   Edit  
colPaleVioletRed = 14381203
Source   Edit  
colPapayaWhip = 16773077
Source   Edit  
colPeachPuff = 16767673
Source   Edit  
colPeru = 13468991
Source   Edit  
colPink = 16761035
Source   Edit  
colPlum = 14524637
Source   Edit  
colPowderBlue = 11591910
Source   Edit  
colPurple = 8388736
Source   Edit  
colRebeccaPurple = 6697881
Source   Edit  
colRed = 16711680
Source   Edit  
colRosyBrown = 12357519
Source   Edit  
colRoyalBlue = 4286945
Source   Edit  
colSaddleBrown = 9127187
Source   Edit  
colSalmon = 16416882
Source   Edit  
colSandyBrown = 16032864
Source   Edit  
colSeaGreen = 3050327
Source   Edit  
colSeaShell = 16774638
Source   Edit  
colSienna = 10506797
Source   Edit  
colSilver = 12632256
Source   Edit  
colSkyBlue = 8900331
Source   Edit  
colSlateBlue = 6970061
Source   Edit  
colSlateGray = 7372944
Source   Edit  
colSlateGrey = 7372944
Source   Edit  
colSnow = 16775930
Source   Edit  
colSpringGreen = 65407
Source   Edit  
colSteelBlue = 4620980
Source   Edit  
colTan = 13808780
Source   Edit  
colTeal = 32896
Source   Edit  
colThistle = 14204888
Source   Edit  
colTomato = 16737095
Source   Edit  
colTurquoise = 4251856
Source   Edit  
colViolet = 15631086
Source   Edit  
colWheat = 16113331
Source   Edit  
colWhite = 16777215
Source   Edit  
colWhiteSmoke = 16119285
Source   Edit  
colYellow = 16776960
Source   Edit  
colYellowGreen = 10145074
Source   Edit  

Procs

proc `$`(c: Color): string {....raises: [], tags: [], forbids: [].}
Converts a color into its textual representation.

Example:

assert $colFuchsia == "#FF00FF"
Source   Edit  
proc `+`(a, b: Color): Color {....raises: [], tags: [], forbids: [].}

Adds two colors.

This uses saturated arithmetic, so that each color component cannot overflow (255 is used as a maximum).

Example:

var
  a = Color(0xaa_00_ff)
  b = Color(0x11_cc_cc)
assert a + b == Color(0xbb_cc_ff)
Source   Edit  
proc `-`(a, b: Color): Color {....raises: [], tags: [], forbids: [].}

Subtracts two colors.

This uses saturated arithmetic, so that each color component cannot underflow (0 is used as a minimum).

Example:

var
  a = Color(0xff_33_ff)
  b = Color(0x11_ff_cc)
assert a - b == Color(0xee_00_33)
Source   Edit  
proc `==`(a, b: Color): bool {.borrow, ...raises: [], tags: [], forbids: [].}
Compares two colors.
var
  a = Color(0xff_00_ff)
  b = colFuchsia
  c = Color(0x00_ff_cc)
assert a == b
assert not a == c
Source   Edit  
proc extractRGB(a: Color): tuple[r, g, b: range[0 .. 255]] {....raises: [],
    tags: [], forbids: [].}
Extracts the red/green/blue components of the color a.

Example:

var
  a = Color(0xff_00_ff)
  b = Color(0x00_ff_cc)
type
  Col = range[0..255]
# assert extractRGB(a) == (r: 255.Col, g: 0.Col, b: 255.Col)
# assert extractRGB(b) == (r: 0.Col, g: 255.Col, b: 204.Col)
echo extractRGB(a)
echo typeof(extractRGB(a))
echo extractRGB(b)
echo typeof(extractRGB(b))
Source   Edit  
proc intensity(a: Color; f: float): Color {....raises: [], tags: [], forbids: [].}
Returns a with intensity f. f should be a float from 0.0 (completely dark) to 1.0 (full color intensity).

Example:

var
  a = Color(0xff_00_ff)
  b = Color(0x00_42_cc)
assert a.intensity(0.5) == Color(0x80_00_80)
assert b.intensity(0.5) == Color(0x00_21_66)
Source   Edit  
proc isColor(name: string): bool {....raises: [], tags: [], forbids: [].}
Returns true if name is a known color name or a hexadecimal color prefixed with #. Case insensitive.

Example:

var
  a = "silver"
  b = "#0179fc"
  c = "#zzmmtt"
assert a.isColor
assert b.isColor
assert not c.isColor
Source   Edit  
proc parseColor(name: string): Color {....raises: [ValueError], tags: [],
                                       forbids: [].}

Parses name to a color value.

If no valid color could be parsed ValueError is raised. Case insensitive.

Example:

var
  a = "silver"
  b = "#0179fc"
  c = "#zzmmtt"
assert parseColor(a) == Color(0xc0_c0_c0)
assert parseColor(b) == Color(0x01_79_fc)
doAssertRaises(ValueError): discard parseColor(c)
Source   Edit  
proc rgb(r, g, b: range[0 .. 255]): Color {....raises: [], tags: [], forbids: [].}
Constructs a color from RGB values.

Example:

assert rgb(0, 255, 128) == Color(0x00_ff_80)
Source   Edit  

Templates

template mix(a, b: Color; fn: untyped): untyped

Uses fn to mix the colors a and b.

fn is invoked for each component R, G, and B. If fn's result is not in the range[0..255], it will be saturated to be so.

Example:

var
  a = Color(0x0a2814)
  b = Color(0x050a03)

proc myMix(x, y: int): int =
  2 * x - 3 * y

assert mix(a, b, myMix) == Color(0x05_32_1f)
Source   Edit