colors

    Dark Mode
Search:

This module implements color handling for Nim.

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
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
colDarkTurquoise = 52945
  Source Edit
colDarkViolet = 9699539
  Source Edit
colDeepPink = 16716947
  Source Edit
colDeepSkyBlue = 49151
  Source Edit
colDimGray = 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
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
colLightGrey = 13882323
  Source Edit
colLightGreen = 9498256
  Source Edit
colLightPink = 16758465
  Source Edit
colLightSalmon = 16752762
  Source Edit
colLightSeaGreen = 2142890
  Source Edit
colLightSkyBlue = 8900346
  Source Edit
colLightSlateGray = 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 = 9662680
  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 = 14184595
  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
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
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 `==`(a, b: Color): bool {...}{.borrow.}
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 `+`(a, b: Color): Color {...}{.raises: [], tags: [].}

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: [].}

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 extractRGB(a: Color): tuple[r, g, b: range[0 .. 255]] {...}{.raises: [],
    tags: [].}
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: [].}
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 `$`(c: Color): string {...}{.raises: [], tags: [].}
Converts a color into its textual representation.

Example:

assert $colFuchsia == "#FF00FF"
  Source Edit
proc parseColor(name: string): Color {...}{.raises: [ValueError], tags: [].}

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 isColor(name: string): bool {...}{.raises: [], tags: [].}
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 rgb(r, g, b: range[0 .. 255]): Color {...}{.raises: [], tags: [].}
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