...

Source file src/github.com/gdamore/tcell/v2/color.go

Documentation: github.com/gdamore/tcell/v2

     1  // Copyright 2020 The TCell Authors
     2  //
     3  // Licensed under the Apache License, Version 2.0 (the "License");
     4  // you may not use file except in compliance with the License.
     5  // You may obtain a copy of the license at
     6  //
     7  //    http://www.apache.org/licenses/LICENSE-2.0
     8  //
     9  // Unless required by applicable law or agreed to in writing, software
    10  // distributed under the License is distributed on an "AS IS" BASIS,
    11  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    12  // See the License for the specific language governing permissions and
    13  // limitations under the License.
    14  
    15  package tcell
    16  
    17  import (
    18  	ic "image/color"
    19  	"strconv"
    20  )
    21  
    22  // Color represents a color.  The low numeric values are the same as used
    23  // by ECMA-48, and beyond that XTerm.  A 24-bit RGB value may be used by
    24  // adding in the ColorIsRGB flag.  For Color names we use the W3C approved
    25  // color names.
    26  //
    27  // We use a 64-bit integer to allow future expansion if we want to add an
    28  // 8-bit alpha, while still leaving us some room for extra options.
    29  //
    30  // Note that on various terminals colors may be approximated however, or
    31  // not supported at all.  If no suitable representation for a color is known,
    32  // the library will simply not set any color, deferring to whatever default
    33  // attributes the terminal uses.
    34  type Color uint64
    35  
    36  const (
    37  	// ColorDefault is used to leave the Color unchanged from whatever
    38  	// system or terminal default may exist.  It's also the zero value.
    39  	ColorDefault Color = 0
    40  
    41  	// ColorValid is used to indicate the color value is actually
    42  	// valid (initialized).  This is useful to permit the zero value
    43  	// to be treated as the default.
    44  	ColorValid Color = 1 << 32
    45  
    46  	// ColorIsRGB is used to indicate that the numeric value is not
    47  	// a known color constant, but rather an RGB value.  The lower
    48  	// order 3 bytes are RGB.
    49  	ColorIsRGB Color = 1 << 33
    50  
    51  	// ColorSpecial is a flag used to indicate that the values have
    52  	// special meaning, and live outside of the color space(s).
    53  	ColorSpecial Color = 1 << 34
    54  )
    55  
    56  // Note that the order of these options is important -- it follows the
    57  // definitions used by ECMA and XTerm.  Hence any further named colors
    58  // must begin at a value not less than 256.
    59  const (
    60  	ColorBlack = ColorValid + iota
    61  	ColorMaroon
    62  	ColorGreen
    63  	ColorOlive
    64  	ColorNavy
    65  	ColorPurple
    66  	ColorTeal
    67  	ColorSilver
    68  	ColorGray
    69  	ColorRed
    70  	ColorLime
    71  	ColorYellow
    72  	ColorBlue
    73  	ColorFuchsia
    74  	ColorAqua
    75  	ColorWhite
    76  	Color16
    77  	Color17
    78  	Color18
    79  	Color19
    80  	Color20
    81  	Color21
    82  	Color22
    83  	Color23
    84  	Color24
    85  	Color25
    86  	Color26
    87  	Color27
    88  	Color28
    89  	Color29
    90  	Color30
    91  	Color31
    92  	Color32
    93  	Color33
    94  	Color34
    95  	Color35
    96  	Color36
    97  	Color37
    98  	Color38
    99  	Color39
   100  	Color40
   101  	Color41
   102  	Color42
   103  	Color43
   104  	Color44
   105  	Color45
   106  	Color46
   107  	Color47
   108  	Color48
   109  	Color49
   110  	Color50
   111  	Color51
   112  	Color52
   113  	Color53
   114  	Color54
   115  	Color55
   116  	Color56
   117  	Color57
   118  	Color58
   119  	Color59
   120  	Color60
   121  	Color61
   122  	Color62
   123  	Color63
   124  	Color64
   125  	Color65
   126  	Color66
   127  	Color67
   128  	Color68
   129  	Color69
   130  	Color70
   131  	Color71
   132  	Color72
   133  	Color73
   134  	Color74
   135  	Color75
   136  	Color76
   137  	Color77
   138  	Color78
   139  	Color79
   140  	Color80
   141  	Color81
   142  	Color82
   143  	Color83
   144  	Color84
   145  	Color85
   146  	Color86
   147  	Color87
   148  	Color88
   149  	Color89
   150  	Color90
   151  	Color91
   152  	Color92
   153  	Color93
   154  	Color94
   155  	Color95
   156  	Color96
   157  	Color97
   158  	Color98
   159  	Color99
   160  	Color100
   161  	Color101
   162  	Color102
   163  	Color103
   164  	Color104
   165  	Color105
   166  	Color106
   167  	Color107
   168  	Color108
   169  	Color109
   170  	Color110
   171  	Color111
   172  	Color112
   173  	Color113
   174  	Color114
   175  	Color115
   176  	Color116
   177  	Color117
   178  	Color118
   179  	Color119
   180  	Color120
   181  	Color121
   182  	Color122
   183  	Color123
   184  	Color124
   185  	Color125
   186  	Color126
   187  	Color127
   188  	Color128
   189  	Color129
   190  	Color130
   191  	Color131
   192  	Color132
   193  	Color133
   194  	Color134
   195  	Color135
   196  	Color136
   197  	Color137
   198  	Color138
   199  	Color139
   200  	Color140
   201  	Color141
   202  	Color142
   203  	Color143
   204  	Color144
   205  	Color145
   206  	Color146
   207  	Color147
   208  	Color148
   209  	Color149
   210  	Color150
   211  	Color151
   212  	Color152
   213  	Color153
   214  	Color154
   215  	Color155
   216  	Color156
   217  	Color157
   218  	Color158
   219  	Color159
   220  	Color160
   221  	Color161
   222  	Color162
   223  	Color163
   224  	Color164
   225  	Color165
   226  	Color166
   227  	Color167
   228  	Color168
   229  	Color169
   230  	Color170
   231  	Color171
   232  	Color172
   233  	Color173
   234  	Color174
   235  	Color175
   236  	Color176
   237  	Color177
   238  	Color178
   239  	Color179
   240  	Color180
   241  	Color181
   242  	Color182
   243  	Color183
   244  	Color184
   245  	Color185
   246  	Color186
   247  	Color187
   248  	Color188
   249  	Color189
   250  	Color190
   251  	Color191
   252  	Color192
   253  	Color193
   254  	Color194
   255  	Color195
   256  	Color196
   257  	Color197
   258  	Color198
   259  	Color199
   260  	Color200
   261  	Color201
   262  	Color202
   263  	Color203
   264  	Color204
   265  	Color205
   266  	Color206
   267  	Color207
   268  	Color208
   269  	Color209
   270  	Color210
   271  	Color211
   272  	Color212
   273  	Color213
   274  	Color214
   275  	Color215
   276  	Color216
   277  	Color217
   278  	Color218
   279  	Color219
   280  	Color220
   281  	Color221
   282  	Color222
   283  	Color223
   284  	Color224
   285  	Color225
   286  	Color226
   287  	Color227
   288  	Color228
   289  	Color229
   290  	Color230
   291  	Color231
   292  	Color232
   293  	Color233
   294  	Color234
   295  	Color235
   296  	Color236
   297  	Color237
   298  	Color238
   299  	Color239
   300  	Color240
   301  	Color241
   302  	Color242
   303  	Color243
   304  	Color244
   305  	Color245
   306  	Color246
   307  	Color247
   308  	Color248
   309  	Color249
   310  	Color250
   311  	Color251
   312  	Color252
   313  	Color253
   314  	Color254
   315  	Color255
   316  	ColorAliceBlue
   317  	ColorAntiqueWhite
   318  	ColorAquaMarine
   319  	ColorAzure
   320  	ColorBeige
   321  	ColorBisque
   322  	ColorBlanchedAlmond
   323  	ColorBlueViolet
   324  	ColorBrown
   325  	ColorBurlyWood
   326  	ColorCadetBlue
   327  	ColorChartreuse
   328  	ColorChocolate
   329  	ColorCoral
   330  	ColorCornflowerBlue
   331  	ColorCornsilk
   332  	ColorCrimson
   333  	ColorDarkBlue
   334  	ColorDarkCyan
   335  	ColorDarkGoldenrod
   336  	ColorDarkGray
   337  	ColorDarkGreen
   338  	ColorDarkKhaki
   339  	ColorDarkMagenta
   340  	ColorDarkOliveGreen
   341  	ColorDarkOrange
   342  	ColorDarkOrchid
   343  	ColorDarkRed
   344  	ColorDarkSalmon
   345  	ColorDarkSeaGreen
   346  	ColorDarkSlateBlue
   347  	ColorDarkSlateGray
   348  	ColorDarkTurquoise
   349  	ColorDarkViolet
   350  	ColorDeepPink
   351  	ColorDeepSkyBlue
   352  	ColorDimGray
   353  	ColorDodgerBlue
   354  	ColorFireBrick
   355  	ColorFloralWhite
   356  	ColorForestGreen
   357  	ColorGainsboro
   358  	ColorGhostWhite
   359  	ColorGold
   360  	ColorGoldenrod
   361  	ColorGreenYellow
   362  	ColorHoneydew
   363  	ColorHotPink
   364  	ColorIndianRed
   365  	ColorIndigo
   366  	ColorIvory
   367  	ColorKhaki
   368  	ColorLavender
   369  	ColorLavenderBlush
   370  	ColorLawnGreen
   371  	ColorLemonChiffon
   372  	ColorLightBlue
   373  	ColorLightCoral
   374  	ColorLightCyan
   375  	ColorLightGoldenrodYellow
   376  	ColorLightGray
   377  	ColorLightGreen
   378  	ColorLightPink
   379  	ColorLightSalmon
   380  	ColorLightSeaGreen
   381  	ColorLightSkyBlue
   382  	ColorLightSlateGray
   383  	ColorLightSteelBlue
   384  	ColorLightYellow
   385  	ColorLimeGreen
   386  	ColorLinen
   387  	ColorMediumAquamarine
   388  	ColorMediumBlue
   389  	ColorMediumOrchid
   390  	ColorMediumPurple
   391  	ColorMediumSeaGreen
   392  	ColorMediumSlateBlue
   393  	ColorMediumSpringGreen
   394  	ColorMediumTurquoise
   395  	ColorMediumVioletRed
   396  	ColorMidnightBlue
   397  	ColorMintCream
   398  	ColorMistyRose
   399  	ColorMoccasin
   400  	ColorNavajoWhite
   401  	ColorOldLace
   402  	ColorOliveDrab
   403  	ColorOrange
   404  	ColorOrangeRed
   405  	ColorOrchid
   406  	ColorPaleGoldenrod
   407  	ColorPaleGreen
   408  	ColorPaleTurquoise
   409  	ColorPaleVioletRed
   410  	ColorPapayaWhip
   411  	ColorPeachPuff
   412  	ColorPeru
   413  	ColorPink
   414  	ColorPlum
   415  	ColorPowderBlue
   416  	ColorRebeccaPurple
   417  	ColorRosyBrown
   418  	ColorRoyalBlue
   419  	ColorSaddleBrown
   420  	ColorSalmon
   421  	ColorSandyBrown
   422  	ColorSeaGreen
   423  	ColorSeashell
   424  	ColorSienna
   425  	ColorSkyblue
   426  	ColorSlateBlue
   427  	ColorSlateGray
   428  	ColorSnow
   429  	ColorSpringGreen
   430  	ColorSteelBlue
   431  	ColorTan
   432  	ColorThistle
   433  	ColorTomato
   434  	ColorTurquoise
   435  	ColorViolet
   436  	ColorWheat
   437  	ColorWhiteSmoke
   438  	ColorYellowGreen
   439  )
   440  
   441  // These are aliases for the color gray, because some of us spell
   442  // it as grey.
   443  const (
   444  	ColorGrey           = ColorGray
   445  	ColorDimGrey        = ColorDimGray
   446  	ColorDarkGrey       = ColorDarkGray
   447  	ColorDarkSlateGrey  = ColorDarkSlateGray
   448  	ColorLightGrey      = ColorLightGray
   449  	ColorLightSlateGrey = ColorLightSlateGray
   450  	ColorSlateGrey      = ColorSlateGray
   451  )
   452  
   453  // ColorValues maps color constants to their RGB values.
   454  var ColorValues = map[Color]int32{
   455  	ColorBlack:                0x000000,
   456  	ColorMaroon:               0x800000,
   457  	ColorGreen:                0x008000,
   458  	ColorOlive:                0x808000,
   459  	ColorNavy:                 0x000080,
   460  	ColorPurple:               0x800080,
   461  	ColorTeal:                 0x008080,
   462  	ColorSilver:               0xC0C0C0,
   463  	ColorGray:                 0x808080,
   464  	ColorRed:                  0xFF0000,
   465  	ColorLime:                 0x00FF00,
   466  	ColorYellow:               0xFFFF00,
   467  	ColorBlue:                 0x0000FF,
   468  	ColorFuchsia:              0xFF00FF,
   469  	ColorAqua:                 0x00FFFF,
   470  	ColorWhite:                0xFFFFFF,
   471  	Color16:                   0x000000, // black
   472  	Color17:                   0x00005F,
   473  	Color18:                   0x000087,
   474  	Color19:                   0x0000AF,
   475  	Color20:                   0x0000D7,
   476  	Color21:                   0x0000FF, // blue
   477  	Color22:                   0x005F00,
   478  	Color23:                   0x005F5F,
   479  	Color24:                   0x005F87,
   480  	Color25:                   0x005FAF,
   481  	Color26:                   0x005FD7,
   482  	Color27:                   0x005FFF,
   483  	Color28:                   0x008700,
   484  	Color29:                   0x00875F,
   485  	Color30:                   0x008787,
   486  	Color31:                   0x0087Af,
   487  	Color32:                   0x0087D7,
   488  	Color33:                   0x0087FF,
   489  	Color34:                   0x00AF00,
   490  	Color35:                   0x00AF5F,
   491  	Color36:                   0x00AF87,
   492  	Color37:                   0x00AFAF,
   493  	Color38:                   0x00AFD7,
   494  	Color39:                   0x00AFFF,
   495  	Color40:                   0x00D700,
   496  	Color41:                   0x00D75F,
   497  	Color42:                   0x00D787,
   498  	Color43:                   0x00D7AF,
   499  	Color44:                   0x00D7D7,
   500  	Color45:                   0x00D7FF,
   501  	Color46:                   0x00FF00, // lime
   502  	Color47:                   0x00FF5F,
   503  	Color48:                   0x00FF87,
   504  	Color49:                   0x00FFAF,
   505  	Color50:                   0x00FFd7,
   506  	Color51:                   0x00FFFF, // aqua
   507  	Color52:                   0x5F0000,
   508  	Color53:                   0x5F005F,
   509  	Color54:                   0x5F0087,
   510  	Color55:                   0x5F00AF,
   511  	Color56:                   0x5F00D7,
   512  	Color57:                   0x5F00FF,
   513  	Color58:                   0x5F5F00,
   514  	Color59:                   0x5F5F5F,
   515  	Color60:                   0x5F5F87,
   516  	Color61:                   0x5F5FAF,
   517  	Color62:                   0x5F5FD7,
   518  	Color63:                   0x5F5FFF,
   519  	Color64:                   0x5F8700,
   520  	Color65:                   0x5F875F,
   521  	Color66:                   0x5F8787,
   522  	Color67:                   0x5F87AF,
   523  	Color68:                   0x5F87D7,
   524  	Color69:                   0x5F87FF,
   525  	Color70:                   0x5FAF00,
   526  	Color71:                   0x5FAF5F,
   527  	Color72:                   0x5FAF87,
   528  	Color73:                   0x5FAFAF,
   529  	Color74:                   0x5FAFD7,
   530  	Color75:                   0x5FAFFF,
   531  	Color76:                   0x5FD700,
   532  	Color77:                   0x5FD75F,
   533  	Color78:                   0x5FD787,
   534  	Color79:                   0x5FD7AF,
   535  	Color80:                   0x5FD7D7,
   536  	Color81:                   0x5FD7FF,
   537  	Color82:                   0x5FFF00,
   538  	Color83:                   0x5FFF5F,
   539  	Color84:                   0x5FFF87,
   540  	Color85:                   0x5FFFAF,
   541  	Color86:                   0x5FFFD7,
   542  	Color87:                   0x5FFFFF,
   543  	Color88:                   0x870000,
   544  	Color89:                   0x87005F,
   545  	Color90:                   0x870087,
   546  	Color91:                   0x8700AF,
   547  	Color92:                   0x8700D7,
   548  	Color93:                   0x8700FF,
   549  	Color94:                   0x875F00,
   550  	Color95:                   0x875F5F,
   551  	Color96:                   0x875F87,
   552  	Color97:                   0x875FAF,
   553  	Color98:                   0x875FD7,
   554  	Color99:                   0x875FFF,
   555  	Color100:                  0x878700,
   556  	Color101:                  0x87875F,
   557  	Color102:                  0x878787,
   558  	Color103:                  0x8787AF,
   559  	Color104:                  0x8787D7,
   560  	Color105:                  0x8787FF,
   561  	Color106:                  0x87AF00,
   562  	Color107:                  0x87AF5F,
   563  	Color108:                  0x87AF87,
   564  	Color109:                  0x87AFAF,
   565  	Color110:                  0x87AFD7,
   566  	Color111:                  0x87AFFF,
   567  	Color112:                  0x87D700,
   568  	Color113:                  0x87D75F,
   569  	Color114:                  0x87D787,
   570  	Color115:                  0x87D7AF,
   571  	Color116:                  0x87D7D7,
   572  	Color117:                  0x87D7FF,
   573  	Color118:                  0x87FF00,
   574  	Color119:                  0x87FF5F,
   575  	Color120:                  0x87FF87,
   576  	Color121:                  0x87FFAF,
   577  	Color122:                  0x87FFD7,
   578  	Color123:                  0x87FFFF,
   579  	Color124:                  0xAF0000,
   580  	Color125:                  0xAF005F,
   581  	Color126:                  0xAF0087,
   582  	Color127:                  0xAF00AF,
   583  	Color128:                  0xAF00D7,
   584  	Color129:                  0xAF00FF,
   585  	Color130:                  0xAF5F00,
   586  	Color131:                  0xAF5F5F,
   587  	Color132:                  0xAF5F87,
   588  	Color133:                  0xAF5FAF,
   589  	Color134:                  0xAF5FD7,
   590  	Color135:                  0xAF5FFF,
   591  	Color136:                  0xAF8700,
   592  	Color137:                  0xAF875F,
   593  	Color138:                  0xAF8787,
   594  	Color139:                  0xAF87AF,
   595  	Color140:                  0xAF87D7,
   596  	Color141:                  0xAF87FF,
   597  	Color142:                  0xAFAF00,
   598  	Color143:                  0xAFAF5F,
   599  	Color144:                  0xAFAF87,
   600  	Color145:                  0xAFAFAF,
   601  	Color146:                  0xAFAFD7,
   602  	Color147:                  0xAFAFFF,
   603  	Color148:                  0xAFD700,
   604  	Color149:                  0xAFD75F,
   605  	Color150:                  0xAFD787,
   606  	Color151:                  0xAFD7AF,
   607  	Color152:                  0xAFD7D7,
   608  	Color153:                  0xAFD7FF,
   609  	Color154:                  0xAFFF00,
   610  	Color155:                  0xAFFF5F,
   611  	Color156:                  0xAFFF87,
   612  	Color157:                  0xAFFFAF,
   613  	Color158:                  0xAFFFD7,
   614  	Color159:                  0xAFFFFF,
   615  	Color160:                  0xD70000,
   616  	Color161:                  0xD7005F,
   617  	Color162:                  0xD70087,
   618  	Color163:                  0xD700AF,
   619  	Color164:                  0xD700D7,
   620  	Color165:                  0xD700FF,
   621  	Color166:                  0xD75F00,
   622  	Color167:                  0xD75F5F,
   623  	Color168:                  0xD75F87,
   624  	Color169:                  0xD75FAF,
   625  	Color170:                  0xD75FD7,
   626  	Color171:                  0xD75FFF,
   627  	Color172:                  0xD78700,
   628  	Color173:                  0xD7875F,
   629  	Color174:                  0xD78787,
   630  	Color175:                  0xD787AF,
   631  	Color176:                  0xD787D7,
   632  	Color177:                  0xD787FF,
   633  	Color178:                  0xD7AF00,
   634  	Color179:                  0xD7AF5F,
   635  	Color180:                  0xD7AF87,
   636  	Color181:                  0xD7AFAF,
   637  	Color182:                  0xD7AFD7,
   638  	Color183:                  0xD7AFFF,
   639  	Color184:                  0xD7D700,
   640  	Color185:                  0xD7D75F,
   641  	Color186:                  0xD7D787,
   642  	Color187:                  0xD7D7AF,
   643  	Color188:                  0xD7D7D7,
   644  	Color189:                  0xD7D7FF,
   645  	Color190:                  0xD7FF00,
   646  	Color191:                  0xD7FF5F,
   647  	Color192:                  0xD7FF87,
   648  	Color193:                  0xD7FFAF,
   649  	Color194:                  0xD7FFD7,
   650  	Color195:                  0xD7FFFF,
   651  	Color196:                  0xFF0000, // red
   652  	Color197:                  0xFF005F,
   653  	Color198:                  0xFF0087,
   654  	Color199:                  0xFF00AF,
   655  	Color200:                  0xFF00D7,
   656  	Color201:                  0xFF00FF, // fuchsia
   657  	Color202:                  0xFF5F00,
   658  	Color203:                  0xFF5F5F,
   659  	Color204:                  0xFF5F87,
   660  	Color205:                  0xFF5FAF,
   661  	Color206:                  0xFF5FD7,
   662  	Color207:                  0xFF5FFF,
   663  	Color208:                  0xFF8700,
   664  	Color209:                  0xFF875F,
   665  	Color210:                  0xFF8787,
   666  	Color211:                  0xFF87AF,
   667  	Color212:                  0xFF87D7,
   668  	Color213:                  0xFF87FF,
   669  	Color214:                  0xFFAF00,
   670  	Color215:                  0xFFAF5F,
   671  	Color216:                  0xFFAF87,
   672  	Color217:                  0xFFAFAF,
   673  	Color218:                  0xFFAFD7,
   674  	Color219:                  0xFFAFFF,
   675  	Color220:                  0xFFD700,
   676  	Color221:                  0xFFD75F,
   677  	Color222:                  0xFFD787,
   678  	Color223:                  0xFFD7AF,
   679  	Color224:                  0xFFD7D7,
   680  	Color225:                  0xFFD7FF,
   681  	Color226:                  0xFFFF00, // yellow
   682  	Color227:                  0xFFFF5F,
   683  	Color228:                  0xFFFF87,
   684  	Color229:                  0xFFFFAF,
   685  	Color230:                  0xFFFFD7,
   686  	Color231:                  0xFFFFFF, // white
   687  	Color232:                  0x080808,
   688  	Color233:                  0x121212,
   689  	Color234:                  0x1C1C1C,
   690  	Color235:                  0x262626,
   691  	Color236:                  0x303030,
   692  	Color237:                  0x3A3A3A,
   693  	Color238:                  0x444444,
   694  	Color239:                  0x4E4E4E,
   695  	Color240:                  0x585858,
   696  	Color241:                  0x626262,
   697  	Color242:                  0x6C6C6C,
   698  	Color243:                  0x767676,
   699  	Color244:                  0x808080, // grey
   700  	Color245:                  0x8A8A8A,
   701  	Color246:                  0x949494,
   702  	Color247:                  0x9E9E9E,
   703  	Color248:                  0xA8A8A8,
   704  	Color249:                  0xB2B2B2,
   705  	Color250:                  0xBCBCBC,
   706  	Color251:                  0xC6C6C6,
   707  	Color252:                  0xD0D0D0,
   708  	Color253:                  0xDADADA,
   709  	Color254:                  0xE4E4E4,
   710  	Color255:                  0xEEEEEE,
   711  	ColorAliceBlue:            0xF0F8FF,
   712  	ColorAntiqueWhite:         0xFAEBD7,
   713  	ColorAquaMarine:           0x7FFFD4,
   714  	ColorAzure:                0xF0FFFF,
   715  	ColorBeige:                0xF5F5DC,
   716  	ColorBisque:               0xFFE4C4,
   717  	ColorBlanchedAlmond:       0xFFEBCD,
   718  	ColorBlueViolet:           0x8A2BE2,
   719  	ColorBrown:                0xA52A2A,
   720  	ColorBurlyWood:            0xDEB887,
   721  	ColorCadetBlue:            0x5F9EA0,
   722  	ColorChartreuse:           0x7FFF00,
   723  	ColorChocolate:            0xD2691E,
   724  	ColorCoral:                0xFF7F50,
   725  	ColorCornflowerBlue:       0x6495ED,
   726  	ColorCornsilk:             0xFFF8DC,
   727  	ColorCrimson:              0xDC143C,
   728  	ColorDarkBlue:             0x00008B,
   729  	ColorDarkCyan:             0x008B8B,
   730  	ColorDarkGoldenrod:        0xB8860B,
   731  	ColorDarkGray:             0xA9A9A9,
   732  	ColorDarkGreen:            0x006400,
   733  	ColorDarkKhaki:            0xBDB76B,
   734  	ColorDarkMagenta:          0x8B008B,
   735  	ColorDarkOliveGreen:       0x556B2F,
   736  	ColorDarkOrange:           0xFF8C00,
   737  	ColorDarkOrchid:           0x9932CC,
   738  	ColorDarkRed:              0x8B0000,
   739  	ColorDarkSalmon:           0xE9967A,
   740  	ColorDarkSeaGreen:         0x8FBC8F,
   741  	ColorDarkSlateBlue:        0x483D8B,
   742  	ColorDarkSlateGray:        0x2F4F4F,
   743  	ColorDarkTurquoise:        0x00CED1,
   744  	ColorDarkViolet:           0x9400D3,
   745  	ColorDeepPink:             0xFF1493,
   746  	ColorDeepSkyBlue:          0x00BFFF,
   747  	ColorDimGray:              0x696969,
   748  	ColorDodgerBlue:           0x1E90FF,
   749  	ColorFireBrick:            0xB22222,
   750  	ColorFloralWhite:          0xFFFAF0,
   751  	ColorForestGreen:          0x228B22,
   752  	ColorGainsboro:            0xDCDCDC,
   753  	ColorGhostWhite:           0xF8F8FF,
   754  	ColorGold:                 0xFFD700,
   755  	ColorGoldenrod:            0xDAA520,
   756  	ColorGreenYellow:          0xADFF2F,
   757  	ColorHoneydew:             0xF0FFF0,
   758  	ColorHotPink:              0xFF69B4,
   759  	ColorIndianRed:            0xCD5C5C,
   760  	ColorIndigo:               0x4B0082,
   761  	ColorIvory:                0xFFFFF0,
   762  	ColorKhaki:                0xF0E68C,
   763  	ColorLavender:             0xE6E6FA,
   764  	ColorLavenderBlush:        0xFFF0F5,
   765  	ColorLawnGreen:            0x7CFC00,
   766  	ColorLemonChiffon:         0xFFFACD,
   767  	ColorLightBlue:            0xADD8E6,
   768  	ColorLightCoral:           0xF08080,
   769  	ColorLightCyan:            0xE0FFFF,
   770  	ColorLightGoldenrodYellow: 0xFAFAD2,
   771  	ColorLightGray:            0xD3D3D3,
   772  	ColorLightGreen:           0x90EE90,
   773  	ColorLightPink:            0xFFB6C1,
   774  	ColorLightSalmon:          0xFFA07A,
   775  	ColorLightSeaGreen:        0x20B2AA,
   776  	ColorLightSkyBlue:         0x87CEFA,
   777  	ColorLightSlateGray:       0x778899,
   778  	ColorLightSteelBlue:       0xB0C4DE,
   779  	ColorLightYellow:          0xFFFFE0,
   780  	ColorLimeGreen:            0x32CD32,
   781  	ColorLinen:                0xFAF0E6,
   782  	ColorMediumAquamarine:     0x66CDAA,
   783  	ColorMediumBlue:           0x0000CD,
   784  	ColorMediumOrchid:         0xBA55D3,
   785  	ColorMediumPurple:         0x9370DB,
   786  	ColorMediumSeaGreen:       0x3CB371,
   787  	ColorMediumSlateBlue:      0x7B68EE,
   788  	ColorMediumSpringGreen:    0x00FA9A,
   789  	ColorMediumTurquoise:      0x48D1CC,
   790  	ColorMediumVioletRed:      0xC71585,
   791  	ColorMidnightBlue:         0x191970,
   792  	ColorMintCream:            0xF5FFFA,
   793  	ColorMistyRose:            0xFFE4E1,
   794  	ColorMoccasin:             0xFFE4B5,
   795  	ColorNavajoWhite:          0xFFDEAD,
   796  	ColorOldLace:              0xFDF5E6,
   797  	ColorOliveDrab:            0x6B8E23,
   798  	ColorOrange:               0xFFA500,
   799  	ColorOrangeRed:            0xFF4500,
   800  	ColorOrchid:               0xDA70D6,
   801  	ColorPaleGoldenrod:        0xEEE8AA,
   802  	ColorPaleGreen:            0x98FB98,
   803  	ColorPaleTurquoise:        0xAFEEEE,
   804  	ColorPaleVioletRed:        0xDB7093,
   805  	ColorPapayaWhip:           0xFFEFD5,
   806  	ColorPeachPuff:            0xFFDAB9,
   807  	ColorPeru:                 0xCD853F,
   808  	ColorPink:                 0xFFC0CB,
   809  	ColorPlum:                 0xDDA0DD,
   810  	ColorPowderBlue:           0xB0E0E6,
   811  	ColorRebeccaPurple:        0x663399,
   812  	ColorRosyBrown:            0xBC8F8F,
   813  	ColorRoyalBlue:            0x4169E1,
   814  	ColorSaddleBrown:          0x8B4513,
   815  	ColorSalmon:               0xFA8072,
   816  	ColorSandyBrown:           0xF4A460,
   817  	ColorSeaGreen:             0x2E8B57,
   818  	ColorSeashell:             0xFFF5EE,
   819  	ColorSienna:               0xA0522D,
   820  	ColorSkyblue:              0x87CEEB,
   821  	ColorSlateBlue:            0x6A5ACD,
   822  	ColorSlateGray:            0x708090,
   823  	ColorSnow:                 0xFFFAFA,
   824  	ColorSpringGreen:          0x00FF7F,
   825  	ColorSteelBlue:            0x4682B4,
   826  	ColorTan:                  0xD2B48C,
   827  	ColorThistle:              0xD8BFD8,
   828  	ColorTomato:               0xFF6347,
   829  	ColorTurquoise:            0x40E0D0,
   830  	ColorViolet:               0xEE82EE,
   831  	ColorWheat:                0xF5DEB3,
   832  	ColorWhiteSmoke:           0xF5F5F5,
   833  	ColorYellowGreen:          0x9ACD32,
   834  }
   835  
   836  // Special colors.
   837  const (
   838  	// ColorReset is used to indicate that the color should use the
   839  	// vanilla terminal colors.  (Basically go back to the defaults.)
   840  	ColorReset = ColorSpecial | iota
   841  )
   842  
   843  // ColorNames holds the written names of colors. Useful to present a list of
   844  // recognized named colors.
   845  var ColorNames = map[string]Color{
   846  	"black":                ColorBlack,
   847  	"maroon":               ColorMaroon,
   848  	"green":                ColorGreen,
   849  	"olive":                ColorOlive,
   850  	"navy":                 ColorNavy,
   851  	"purple":               ColorPurple,
   852  	"teal":                 ColorTeal,
   853  	"silver":               ColorSilver,
   854  	"gray":                 ColorGray,
   855  	"red":                  ColorRed,
   856  	"lime":                 ColorLime,
   857  	"yellow":               ColorYellow,
   858  	"blue":                 ColorBlue,
   859  	"fuchsia":              ColorFuchsia,
   860  	"aqua":                 ColorAqua,
   861  	"white":                ColorWhite,
   862  	"aliceblue":            ColorAliceBlue,
   863  	"antiquewhite":         ColorAntiqueWhite,
   864  	"aquamarine":           ColorAquaMarine,
   865  	"azure":                ColorAzure,
   866  	"beige":                ColorBeige,
   867  	"bisque":               ColorBisque,
   868  	"blanchedalmond":       ColorBlanchedAlmond,
   869  	"blueviolet":           ColorBlueViolet,
   870  	"brown":                ColorBrown,
   871  	"burlywood":            ColorBurlyWood,
   872  	"cadetblue":            ColorCadetBlue,
   873  	"chartreuse":           ColorChartreuse,
   874  	"chocolate":            ColorChocolate,
   875  	"coral":                ColorCoral,
   876  	"cornflowerblue":       ColorCornflowerBlue,
   877  	"cornsilk":             ColorCornsilk,
   878  	"crimson":              ColorCrimson,
   879  	"darkblue":             ColorDarkBlue,
   880  	"darkcyan":             ColorDarkCyan,
   881  	"darkgoldenrod":        ColorDarkGoldenrod,
   882  	"darkgray":             ColorDarkGray,
   883  	"darkgreen":            ColorDarkGreen,
   884  	"darkkhaki":            ColorDarkKhaki,
   885  	"darkmagenta":          ColorDarkMagenta,
   886  	"darkolivegreen":       ColorDarkOliveGreen,
   887  	"darkorange":           ColorDarkOrange,
   888  	"darkorchid":           ColorDarkOrchid,
   889  	"darkred":              ColorDarkRed,
   890  	"darksalmon":           ColorDarkSalmon,
   891  	"darkseagreen":         ColorDarkSeaGreen,
   892  	"darkslateblue":        ColorDarkSlateBlue,
   893  	"darkslategray":        ColorDarkSlateGray,
   894  	"darkturquoise":        ColorDarkTurquoise,
   895  	"darkviolet":           ColorDarkViolet,
   896  	"deeppink":             ColorDeepPink,
   897  	"deepskyblue":          ColorDeepSkyBlue,
   898  	"dimgray":              ColorDimGray,
   899  	"dodgerblue":           ColorDodgerBlue,
   900  	"firebrick":            ColorFireBrick,
   901  	"floralwhite":          ColorFloralWhite,
   902  	"forestgreen":          ColorForestGreen,
   903  	"gainsboro":            ColorGainsboro,
   904  	"ghostwhite":           ColorGhostWhite,
   905  	"gold":                 ColorGold,
   906  	"goldenrod":            ColorGoldenrod,
   907  	"greenyellow":          ColorGreenYellow,
   908  	"honeydew":             ColorHoneydew,
   909  	"hotpink":              ColorHotPink,
   910  	"indianred":            ColorIndianRed,
   911  	"indigo":               ColorIndigo,
   912  	"ivory":                ColorIvory,
   913  	"khaki":                ColorKhaki,
   914  	"lavender":             ColorLavender,
   915  	"lavenderblush":        ColorLavenderBlush,
   916  	"lawngreen":            ColorLawnGreen,
   917  	"lemonchiffon":         ColorLemonChiffon,
   918  	"lightblue":            ColorLightBlue,
   919  	"lightcoral":           ColorLightCoral,
   920  	"lightcyan":            ColorLightCyan,
   921  	"lightgoldenrodyellow": ColorLightGoldenrodYellow,
   922  	"lightgray":            ColorLightGray,
   923  	"lightgreen":           ColorLightGreen,
   924  	"lightpink":            ColorLightPink,
   925  	"lightsalmon":          ColorLightSalmon,
   926  	"lightseagreen":        ColorLightSeaGreen,
   927  	"lightskyblue":         ColorLightSkyBlue,
   928  	"lightslategray":       ColorLightSlateGray,
   929  	"lightsteelblue":       ColorLightSteelBlue,
   930  	"lightyellow":          ColorLightYellow,
   931  	"limegreen":            ColorLimeGreen,
   932  	"linen":                ColorLinen,
   933  	"mediumaquamarine":     ColorMediumAquamarine,
   934  	"mediumblue":           ColorMediumBlue,
   935  	"mediumorchid":         ColorMediumOrchid,
   936  	"mediumpurple":         ColorMediumPurple,
   937  	"mediumseagreen":       ColorMediumSeaGreen,
   938  	"mediumslateblue":      ColorMediumSlateBlue,
   939  	"mediumspringgreen":    ColorMediumSpringGreen,
   940  	"mediumturquoise":      ColorMediumTurquoise,
   941  	"mediumvioletred":      ColorMediumVioletRed,
   942  	"midnightblue":         ColorMidnightBlue,
   943  	"mintcream":            ColorMintCream,
   944  	"mistyrose":            ColorMistyRose,
   945  	"moccasin":             ColorMoccasin,
   946  	"navajowhite":          ColorNavajoWhite,
   947  	"oldlace":              ColorOldLace,
   948  	"olivedrab":            ColorOliveDrab,
   949  	"orange":               ColorOrange,
   950  	"orangered":            ColorOrangeRed,
   951  	"orchid":               ColorOrchid,
   952  	"palegoldenrod":        ColorPaleGoldenrod,
   953  	"palegreen":            ColorPaleGreen,
   954  	"paleturquoise":        ColorPaleTurquoise,
   955  	"palevioletred":        ColorPaleVioletRed,
   956  	"papayawhip":           ColorPapayaWhip,
   957  	"peachpuff":            ColorPeachPuff,
   958  	"peru":                 ColorPeru,
   959  	"pink":                 ColorPink,
   960  	"plum":                 ColorPlum,
   961  	"powderblue":           ColorPowderBlue,
   962  	"rebeccapurple":        ColorRebeccaPurple,
   963  	"rosybrown":            ColorRosyBrown,
   964  	"royalblue":            ColorRoyalBlue,
   965  	"saddlebrown":          ColorSaddleBrown,
   966  	"salmon":               ColorSalmon,
   967  	"sandybrown":           ColorSandyBrown,
   968  	"seagreen":             ColorSeaGreen,
   969  	"seashell":             ColorSeashell,
   970  	"sienna":               ColorSienna,
   971  	"skyblue":              ColorSkyblue,
   972  	"slateblue":            ColorSlateBlue,
   973  	"slategray":            ColorSlateGray,
   974  	"snow":                 ColorSnow,
   975  	"springgreen":          ColorSpringGreen,
   976  	"steelblue":            ColorSteelBlue,
   977  	"tan":                  ColorTan,
   978  	"thistle":              ColorThistle,
   979  	"tomato":               ColorTomato,
   980  	"turquoise":            ColorTurquoise,
   981  	"violet":               ColorViolet,
   982  	"wheat":                ColorWheat,
   983  	"whitesmoke":           ColorWhiteSmoke,
   984  	"yellowgreen":          ColorYellowGreen,
   985  	"grey":                 ColorGray,
   986  	"dimgrey":              ColorDimGray,
   987  	"darkgrey":             ColorDarkGray,
   988  	"darkslategrey":        ColorDarkSlateGray,
   989  	"lightgrey":            ColorLightGray,
   990  	"lightslategrey":       ColorLightSlateGray,
   991  	"slategrey":            ColorSlateGray,
   992  }
   993  
   994  // Valid indicates the color is a valid value (has been set).
   995  func (c Color) Valid() bool {
   996  	return c&ColorValid != 0
   997  }
   998  
   999  // IsRGB is true if the color is an RGB specific value.
  1000  func (c Color) IsRGB() bool {
  1001  	return c&(ColorValid|ColorIsRGB) == (ColorValid | ColorIsRGB)
  1002  }
  1003  
  1004  // Hex returns the color's hexadecimal RGB 24-bit value with each component
  1005  // consisting of a single byte, R << 16 | G << 8 | B.  If the color
  1006  // is unknown or unset, -1 is returned.
  1007  func (c Color) Hex() int32 {
  1008  	if !c.Valid() {
  1009  		return -1
  1010  	}
  1011  	if c&ColorIsRGB != 0 {
  1012  		return int32(c & 0xffffff)
  1013  	}
  1014  	if v, ok := ColorValues[c]; ok {
  1015  		return v
  1016  	}
  1017  	return -1
  1018  }
  1019  
  1020  // RGB returns the red, green, and blue components of the color, with
  1021  // each component represented as a value 0-255.  In the event that the
  1022  // color cannot be broken up (not set usually), -1 is returned for each value.
  1023  func (c Color) RGB() (int32, int32, int32) {
  1024  	v := c.Hex()
  1025  	if v < 0 {
  1026  		return -1, -1, -1
  1027  	}
  1028  	return (v >> 16) & 0xff, (v >> 8) & 0xff, v & 0xff
  1029  }
  1030  
  1031  // TrueColor returns the true color (RGB) version of the provided color.
  1032  // This is useful for ensuring color accuracy when using named colors.
  1033  // This will override terminal theme colors.
  1034  func (c Color) TrueColor() Color {
  1035  	if !c.Valid() {
  1036  		return ColorDefault
  1037  	}
  1038  	if c&ColorIsRGB != 0 {
  1039  		return c | ColorValid
  1040  	}
  1041  	return Color(c.Hex()) | ColorIsRGB | ColorValid
  1042  }
  1043  
  1044  // NewRGBColor returns a new color with the given red, green, and blue values.
  1045  // Each value must be represented in the range 0-255.
  1046  func NewRGBColor(r, g, b int32) Color {
  1047  	return NewHexColor(((r & 0xff) << 16) | ((g & 0xff) << 8) | (b & 0xff))
  1048  }
  1049  
  1050  // NewHexColor returns a color using the given 24-bit RGB value.
  1051  func NewHexColor(v int32) Color {
  1052  	return ColorIsRGB | Color(v) | ColorValid
  1053  }
  1054  
  1055  // GetColor creates a Color from a color name (W3C name). A hex value may
  1056  // be supplied as a string in the format "#ffffff".
  1057  func GetColor(name string) Color {
  1058  	if c, ok := ColorNames[name]; ok {
  1059  		return c
  1060  	}
  1061  	if len(name) == 7 && name[0] == '#' {
  1062  		if v, e := strconv.ParseInt(name[1:], 16, 32); e == nil {
  1063  			return NewHexColor(int32(v))
  1064  		}
  1065  	}
  1066  	return ColorDefault
  1067  }
  1068  
  1069  // PaletteColor creates a color based on the palette index.
  1070  func PaletteColor(index int) Color {
  1071  	return Color(index) | ColorValid
  1072  }
  1073  
  1074  // FromImageColor converts an image/color.Color into tcell.Color.
  1075  // The alpha value is dropped, so it should be tracked separately if it is
  1076  // needed.
  1077  func FromImageColor(imageColor ic.Color) Color {
  1078  	r, g, b, _ := imageColor.RGBA()
  1079  	// NOTE image/color.Color RGB values range is [0, 0xFFFF] as uint32
  1080  	return NewRGBColor(int32(r>>8), int32(g>>8), int32(b>>8))
  1081  }
  1082  

View as plain text