color.cpp

Engine/source/core/color.cpp

More...

Public Defines

Public Typedefs

typeColorFToNameHash 
typeColorIToNameHash 
typeNameToColorFHash 
typeNameToColorIHash 

Public Functions

DefineEngineFunction(getStockColorCount , S32 , () , "@brief Gets <a href="/coding/file/pointer_8h/#pointer_8h_1aeeddce917cf130d62c370b8f216026dd">a</a> <a href="/coding/file/cmdgram_8cpp/#cmdgram_8cpp_1ad43c3812e6d13e0518d9f8b8f463ffcf">count</a> of available stock <a href="/coding/file/cmdscan_8cpp/#cmdscan_8cpp_1aeab71244afb687f16d8c4f5ee9d6ef0e">colors.\n</a>" "@return A <a href="/coding/file/cmdgram_8cpp/#cmdgram_8cpp_1ad43c3812e6d13e0518d9f8b8f463ffcf">count</a> of available stock colors." )
DefineEngineFunction(getStockColorF , LinearColorF , (const char *stockColorName) , "@brief Gets <a href="/coding/file/pointer_8h/#pointer_8h_1aeeddce917cf130d62c370b8f216026dd">a</a> floating-point-based stock color by <a href="/coding/file/cmdscan_8cpp/#cmdscan_8cpp_1aeab71244afb687f16d8c4f5ee9d6ef0e">name.\n</a>" "@param stockColorName - The stock color name <a href="/coding/file/cmdgram_8cpp/#cmdgram_8cpp_1a5bafda9519252aa2d0fd038153f77dca">to</a> <a href="/coding/file/cmdscan_8cpp/#cmdscan_8cpp_1aeab71244afb687f16d8c4f5ee9d6ef0e">retrieve.\n</a>" "@return The stock color that matches the specified color name. Returns nothing <a href="/coding/file/tsmeshintrinsics_8cpp/#tsmeshintrinsics_8cpp_1a4e4fa7e3399708e0777b5308db01278c">if</a> the color name is not <a href="/coding/file/cmdscan_8cpp/#cmdscan_8cpp_1aeab71244afb687f16d8c4f5ee9d6ef0e">found.\n</a>" )
DefineEngineFunction(getStockColorI , ColorI , (const char *stockColorName) , "@brief Gets <a href="/coding/file/pointer_8h/#pointer_8h_1aeeddce917cf130d62c370b8f216026dd">a</a> byte-based stock color by <a href="/coding/file/cmdscan_8cpp/#cmdscan_8cpp_1aeab71244afb687f16d8c4f5ee9d6ef0e">name.\n</a>" "@param stockColorName - The stock color name <a href="/coding/file/cmdgram_8cpp/#cmdgram_8cpp_1a5bafda9519252aa2d0fd038153f77dca">to</a> <a href="/coding/file/cmdscan_8cpp/#cmdscan_8cpp_1aeab71244afb687f16d8c4f5ee9d6ef0e">retrieve.\n</a>" "@return The stock color that matches the specified color name. Returns nothing <a href="/coding/file/tsmeshintrinsics_8cpp/#tsmeshintrinsics_8cpp_1a4e4fa7e3399708e0777b5308db01278c">if</a> the color name is not <a href="/coding/file/cmdscan_8cpp/#cmdscan_8cpp_1aeab71244afb687f16d8c4f5ee9d6ef0e">found.\n</a>" )
DefineEngineFunction(getStockColorName , const char * , (S32 stockColorIndex) , "@brief Gets the stock color name at the specified <a href="/coding/file/cmdscan_8cpp/#cmdscan_8cpp_1aeab71244afb687f16d8c4f5ee9d6ef0e">index.\n</a>" "@param stockColorIndex The zero-based index of the stock color name <a href="/coding/file/cmdgram_8cpp/#cmdgram_8cpp_1a5bafda9519252aa2d0fd038153f77dca">to</a> <a href="/coding/file/cmdscan_8cpp/#cmdscan_8cpp_1aeab71244afb687f16d8c4f5ee9d6ef0e">retrieve.\n</a>" "@return The stock color name at the specified index or nothing <a href="/coding/file/tsmeshintrinsics_8cpp/#tsmeshintrinsics_8cpp_1a4e4fa7e3399708e0777b5308db01278c">if</a> the string is invalid." )
DefineEngineFunction(isStockColor , bool , (const char *stockColorName) , "@brief Gets whether the specified name is <a href="/coding/file/pointer_8h/#pointer_8h_1aeeddce917cf130d62c370b8f216026dd">a</a> stock color or <a href="/coding/file/cmdscan_8cpp/#cmdscan_8cpp_1aeab71244afb687f16d8c4f5ee9d6ef0e">not.\n</a>" "@param stockColorName - The stock color name <a href="/coding/file/cmdgram_8cpp/#cmdgram_8cpp_1a5bafda9519252aa2d0fd038153f77dca">to</a> test <a href="/coding/file/cmdscan_8cpp/#cmdscan_8cpp_1aeab71244afb687f16d8c4f5ee9d6ef0e">for.\n</a>" "@return Whether the specified name is <a href="/coding/file/pointer_8h/#pointer_8h_1aeeddce917cf130d62c370b8f216026dd">a</a> stock color or <a href="/coding/file/cmdscan_8cpp/#cmdscan_8cpp_1aeab71244afb687f16d8c4f5ee9d6ef0e">not.\n</a>" )

Detailed Description

Public Defines

DEFAULT_UNKNOWN_STOCK_COLOR_NAME() "White"

Public Typedefs

typedef HashTable< LinearColorF, StringTableEntry > typeColorFToNameHash 
typedef HashTable< ColorI, StringTableEntry > typeColorIToNameHash 
typedef HashTable< StringTableEntry, LinearColorF > typeNameToColorFHash 
typedef HashTable< StringTableEntry, ColorI > typeNameToColorIHash 

Public Variables

typeColorFToNameHash mColorFToName 
typeColorIToNameHash mColorIToName 
typeNameToColorFHash mNameToColorF 
typeNameToColorIHash mNameToColorI 
 MODULE_END 
 MODULE_INIT 
 MODULE_SHUTDOWN 
bool stockColorsCreated 
StockColorItem StockColorTable []

Public Functions

DefineEngineFunction(getStockColorCount , S32 , () , "@brief Gets <a href="/coding/file/pointer_8h/#pointer_8h_1aeeddce917cf130d62c370b8f216026dd">a</a> <a href="/coding/file/cmdgram_8cpp/#cmdgram_8cpp_1ad43c3812e6d13e0518d9f8b8f463ffcf">count</a> of available stock <a href="/coding/file/cmdscan_8cpp/#cmdscan_8cpp_1aeab71244afb687f16d8c4f5ee9d6ef0e">colors.\n</a>" "@return A <a href="/coding/file/cmdgram_8cpp/#cmdgram_8cpp_1ad43c3812e6d13e0518d9f8b8f463ffcf">count</a> of available stock colors." )

DefineEngineFunction(getStockColorF , LinearColorF , (const char *stockColorName) , "@brief Gets <a href="/coding/file/pointer_8h/#pointer_8h_1aeeddce917cf130d62c370b8f216026dd">a</a> floating-point-based stock color by <a href="/coding/file/cmdscan_8cpp/#cmdscan_8cpp_1aeab71244afb687f16d8c4f5ee9d6ef0e">name.\n</a>" "@param stockColorName - The stock color name <a href="/coding/file/cmdgram_8cpp/#cmdgram_8cpp_1a5bafda9519252aa2d0fd038153f77dca">to</a> <a href="/coding/file/cmdscan_8cpp/#cmdscan_8cpp_1aeab71244afb687f16d8c4f5ee9d6ef0e">retrieve.\n</a>" "@return The stock color that matches the specified color name. Returns nothing <a href="/coding/file/tsmeshintrinsics_8cpp/#tsmeshintrinsics_8cpp_1a4e4fa7e3399708e0777b5308db01278c">if</a> the color name is not <a href="/coding/file/cmdscan_8cpp/#cmdscan_8cpp_1aeab71244afb687f16d8c4f5ee9d6ef0e">found.\n</a>" )

DefineEngineFunction(getStockColorI , ColorI , (const char *stockColorName) , "@brief Gets <a href="/coding/file/pointer_8h/#pointer_8h_1aeeddce917cf130d62c370b8f216026dd">a</a> byte-based stock color by <a href="/coding/file/cmdscan_8cpp/#cmdscan_8cpp_1aeab71244afb687f16d8c4f5ee9d6ef0e">name.\n</a>" "@param stockColorName - The stock color name <a href="/coding/file/cmdgram_8cpp/#cmdgram_8cpp_1a5bafda9519252aa2d0fd038153f77dca">to</a> <a href="/coding/file/cmdscan_8cpp/#cmdscan_8cpp_1aeab71244afb687f16d8c4f5ee9d6ef0e">retrieve.\n</a>" "@return The stock color that matches the specified color name. Returns nothing <a href="/coding/file/tsmeshintrinsics_8cpp/#tsmeshintrinsics_8cpp_1a4e4fa7e3399708e0777b5308db01278c">if</a> the color name is not <a href="/coding/file/cmdscan_8cpp/#cmdscan_8cpp_1aeab71244afb687f16d8c4f5ee9d6ef0e">found.\n</a>" )

DefineEngineFunction(getStockColorName , const char * , (S32 stockColorIndex) , "@brief Gets the stock color name at the specified <a href="/coding/file/cmdscan_8cpp/#cmdscan_8cpp_1aeab71244afb687f16d8c4f5ee9d6ef0e">index.\n</a>" "@param stockColorIndex The zero-based index of the stock color name <a href="/coding/file/cmdgram_8cpp/#cmdgram_8cpp_1a5bafda9519252aa2d0fd038153f77dca">to</a> <a href="/coding/file/cmdscan_8cpp/#cmdscan_8cpp_1aeab71244afb687f16d8c4f5ee9d6ef0e">retrieve.\n</a>" "@return The stock color name at the specified index or nothing <a href="/coding/file/tsmeshintrinsics_8cpp/#tsmeshintrinsics_8cpp_1a4e4fa7e3399708e0777b5308db01278c">if</a> the string is invalid." )

DefineEngineFunction(isStockColor , bool , (const char *stockColorName) , "@brief Gets whether the specified name is <a href="/coding/file/pointer_8h/#pointer_8h_1aeeddce917cf130d62c370b8f216026dd">a</a> stock color or <a href="/coding/file/cmdscan_8cpp/#cmdscan_8cpp_1aeab71244afb687f16d8c4f5ee9d6ef0e">not.\n</a>" "@param stockColorName - The stock color name <a href="/coding/file/cmdgram_8cpp/#cmdgram_8cpp_1a5bafda9519252aa2d0fd038153f77dca">to</a> test <a href="/coding/file/cmdscan_8cpp/#cmdscan_8cpp_1aeab71244afb687f16d8c4f5ee9d6ef0e">for.\n</a>" "@return Whether the specified name is <a href="/coding/file/pointer_8h/#pointer_8h_1aeeddce917cf130d62c370b8f216026dd">a</a> stock color or <a href="/coding/file/cmdscan_8cpp/#cmdscan_8cpp_1aeab71244afb687f16d8c4f5ee9d6ef0e">not.\n</a>" )

  1
  2//-----------------------------------------------------------------------------
  3// Copyright (c) 2012 GarageGames, LLC
  4//
  5// Permission is hereby granted, free of charge, to any person obtaining a copy
  6// of this software and associated documentation files (the "Software"), to
  7// deal in the Software without restriction, including without limitation the
  8// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
  9// sell copies of the Software, and to permit persons to whom the Software is
 10// furnished to do so, subject to the following conditions:
 11//
 12// The above copyright notice and this permission notice shall be included in
 13// all copies or substantial portions of the Software.
 14//
 15// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 16// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 17// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 18// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 19// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 20// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
 21// IN THE SOFTWARE.
 22//-----------------------------------------------------------------------------
 23
 24#include "platform/platform.h"
 25#include "core/color.h"
 26
 27const LinearColorF LinearColorF::ZERO( 0, 0, 0, 0 );
 28const LinearColorF LinearColorF::ONE( 1, 1, 1, 1 );
 29const LinearColorF LinearColorF::WHITE( 1, 1, 1 );
 30const LinearColorF LinearColorF::BLACK( 0, 0, 0 );
 31const LinearColorF LinearColorF::RED( 1, 0, 0 );
 32const LinearColorF LinearColorF::GREEN( 0, 1, 0 );
 33const LinearColorF LinearColorF::BLUE( 0, 0, 1 );
 34
 35const ColorI ColorI::ZERO( 0, 0, 0, 0 );
 36const ColorI ColorI::ONE( 255, 255, 255, 255 );
 37const ColorI ColorI::WHITE( 255, 255, 255 );
 38const ColorI ColorI::BLACK( 0, 0, 0 );
 39const ColorI ColorI::RED( 255, 0, 0 );
 40const ColorI ColorI::GREEN( 0, 255, 0 );
 41const ColorI ColorI::BLUE( 0, 0, 255 );
 42
 43#include "console/console.h"
 44#include "console/consoleTypes.h"
 45
 46#ifndef _STRINGUNIT_H_
 47#include "core/strings/stringUnit.h"
 48#endif
 49
 50#ifndef _TDICTIONARY_H_
 51#include "core/util/tDictionary.h"
 52#endif
 53
 54#include "console/consoleInternal.h"
 55
 56//-----------------------------------------------------------------------------
 57
 58typedef HashTable<StringTableEntry, LinearColorF> typeNameToColorFHash;
 59typedef HashTable<StringTableEntry, ColorI> typeNameToColorIHash;
 60typedef HashTable<LinearColorF, StringTableEntry> typeColorFToNameHash;
 61typedef HashTable<ColorI, StringTableEntry> typeColorIToNameHash;
 62
 63static typeNameToColorFHash    mNameToColorF;
 64static typeNameToColorIHash    mNameToColorI;
 65static typeColorFToNameHash    mColorFToName;
 66static typeColorIToNameHash    mColorIToName;
 67
 68#define DEFAULT_UNKNOWN_STOCK_COLOR_NAME    "White"
 69
 70MODULE_BEGIN( StockColors )
 71
 72   MODULE_INIT_AFTER( GFX )
 73
 74   MODULE_INIT
 75   {
 76      // Create the stock colors.
 77      StockColor::create();
 78   }
 79
 80   MODULE_SHUTDOWN
 81   {
 82      // Destroy the stock colors.
 83      StockColor::destroy();
 84   }
 85
 86MODULE_END;
 87
 88//-----------------------------------------------------------------------------
 89
 90StockColorItem StockColorTable[] =
 91{
 92   StockColorItem( "InvisibleBlack", 0, 0, 0, 0 ),
 93   StockColorItem( "TransparentWhite", 255, 255, 255, 0 ),
 94   StockColorItem( "AliceBlue", 240, 248, 255 ),
 95   StockColorItem( "AntiqueWhite", 250, 235, 215 ),
 96   StockColorItem( "Aqua", 0, 255, 255 ),
 97   StockColorItem( "Aquamarine", 127, 255, 212 ),
 98   StockColorItem( "Azure", 240, 255, 255 ),
 99   StockColorItem( "Beige", 245, 245, 220 ),
100   StockColorItem( "Bisque", 255, 228, 196 ),
101   StockColorItem( "Black", 0, 0, 0, 255 ),
102   StockColorItem( "BlanchedAlmond", 255, 235, 205, 255 ),
103   StockColorItem( "Blue", 0, 0, 255 ),
104   StockColorItem( "BlueViolet", 138, 43, 226 ),
105   StockColorItem( "Brown", 165, 42, 42, 255 ),
106   StockColorItem( "BurlyWood", 222, 184, 135 ),
107   StockColorItem( "CadetBlue", 95, 158, 160 ),
108   StockColorItem( "Chartreuse", 127, 255, 0 ),
109   StockColorItem( "Chocolate", 210, 105, 30 ),
110   StockColorItem( "Coral", 255, 127, 80 ),
111   StockColorItem( "CornflowerBlue", 100, 149, 237 ),
112   StockColorItem( "Cornsilk", 255, 248, 220 ),
113   StockColorItem( "Crimson", 220, 20, 60 ),
114   StockColorItem( "Cyan", 0, 255, 255 ),
115   StockColorItem( "DarkBlue", 0, 0, 139 ),
116   StockColorItem( "DarkCyan", 0, 139, 139 ),
117   StockColorItem( "DarkGoldenrod", 184, 134, 11 ),
118   StockColorItem( "DarkGray", 169, 169, 169),
119   StockColorItem( "DarkGreen", 0, 100, 0 ),
120   StockColorItem( "DarkKhaki", 189, 183, 107 ),
121   StockColorItem( "DarkMagenta", 139, 0, 139 ),
122   StockColorItem( "DarkOliveGreen", 85, 107, 47 ),
123   StockColorItem( "DarkOrange", 255, 140, 0 ),
124   StockColorItem( "DarkOrchid", 153, 50, 204 ),
125   StockColorItem( "DarkRed", 139, 0, 0 ),
126   StockColorItem( "DarkSalmon", 233, 150, 122 ),
127   StockColorItem( "DarkSeaGreen", 143, 188, 139 ),
128   StockColorItem( "DarkSlateBlue", 72, 61, 139 ),
129   StockColorItem( "DarkSlateGray", 47, 79, 79 ),
130   StockColorItem( "DarkTurquoise", 0, 206, 209 ),
131   StockColorItem( "DarkViolet", 148, 0, 211 ),
132   StockColorItem( "DeepPink", 255, 20, 147 ),
133   StockColorItem( "DeepSkyBlue", 0, 191, 255 ),
134   StockColorItem( "DimGray", 105, 105, 105 ),
135   StockColorItem( "DodgerBlue", 30, 144, 255 ),
136   StockColorItem( "Firebrick", 178, 34, 34 ),
137   StockColorItem( "FloralWhite", 255, 250, 240 ),
138   StockColorItem( "ForestGreen", 34, 139, 34 ),
139   StockColorItem( "Fuchsia", 255, 0, 255 ),
140   StockColorItem( "Gainsboro", 220, 220, 220 ),
141   StockColorItem( "GhostWhite", 248, 248, 255 ),
142   StockColorItem( "Gold", 255, 215, 0 ),
143   StockColorItem( "Goldenrod", 218, 165, 32 ),
144   StockColorItem( "Gray", 128, 128, 128 ),
145   StockColorItem( "Green", 0, 128, 0 ),
146   StockColorItem( "GreenYellow", 173, 255, 47 ),
147   StockColorItem( "Honeydew", 240, 255, 24 ),
148   StockColorItem( "HotPink", 255, 105, 180 ),
149   StockColorItem( "IndianRed", 205, 92, 92 ),
150   StockColorItem( "Indigo", 75, 0, 130 ),
151   StockColorItem( "Ivory", 255, 255, 240 ),
152   StockColorItem( "Khaki", 240, 230, 140 ),
153   StockColorItem( "Lavender", 230, 230, 250 ),
154   StockColorItem( "LavenderBlush", 255, 240, 245 ),
155   StockColorItem( "LawnGreen", 124, 252, 0 ),
156   StockColorItem( "LemonChiffon", 255, 250, 205 ),
157   StockColorItem( "LightBlue", 173, 216, 230 ),
158   StockColorItem( "LightCoral", 240, 128, 128 ),
159   StockColorItem( "LightCyan", 224, 255, 255),
160   StockColorItem( "LightGoldenrodYellow", 250, 250, 210 ),
161   StockColorItem( "LightGray", 211, 211, 211),
162   StockColorItem( "LightGreen", 144, 238, 144 ),
163   StockColorItem( "LightPink", 255, 182, 193 ),
164   StockColorItem( "LightSalmon", 255, 160, 122 ),
165   StockColorItem( "LightSeaGreen", 32, 178, 170 ),
166   StockColorItem( "LightSkyBlue",135, 206, 250 ),
167   StockColorItem( "LightSlateGray", 119, 136, 153 ),
168   StockColorItem( "LightSteelBlue", 176, 196, 222 ),
169   StockColorItem( "LightYellow", 255, 255, 224 ),
170   StockColorItem( "Lime", 0, 255, 0 ),
171   StockColorItem( "LimeGreen", 50, 205, 50 ),
172   StockColorItem( "Linen", 250, 240, 230 ),
173   StockColorItem( "Magenta", 255, 0, 255 ),
174   StockColorItem( "Maroon", 128, 0, 0 ),
175   StockColorItem( "MediumAquamarine", 102, 205, 170 ),
176   StockColorItem( "MediumBlue", 0, 0, 205 ),
177   StockColorItem( "MediumOrchid", 186, 85, 211 ),
178   StockColorItem( "MediumPurple", 147, 112, 219 ),
179   StockColorItem( "MediumSeaGreen", 60, 179, 113 ),
180   StockColorItem( "MediumSlateBlue", 123, 104, 238 ),
181   StockColorItem( "MediumSpringGreen", 0, 250, 154 ),
182   StockColorItem( "MediumTurquoise", 72, 209, 204 ),
183   StockColorItem( "MediumVioletRed", 199, 21, 133 ),
184   StockColorItem( "MidnightBlue", 25, 25, 112 ),
185   StockColorItem( "MintCream", 245, 255, 250 ),
186   StockColorItem( "MistyRose", 255, 228, 225 ),
187   StockColorItem( "Moccasin", 255, 228, 181 ),
188   StockColorItem( "NavajoWhite", 255, 222, 173 ),
189   StockColorItem( "Navy", 0, 0, 128 ),
190   StockColorItem( "OldLace", 253, 245, 230 ),
191   StockColorItem( "Olive", 128, 128, 0 ),
192   StockColorItem( "OliveDrab", 107, 142, 35 ),
193   StockColorItem( "Orange", 255, 165, 0 ),
194   StockColorItem( "OrangeRed", 255, 69, 0 ),
195   StockColorItem( "Orchid", 218, 112, 214 ),
196   StockColorItem( "PaleGoldenrod", 238, 232, 170 ),
197   StockColorItem( "PaleGreen", 152, 251, 152 ),
198   StockColorItem( "PaleTurquoise", 175, 238, 238 ),
199   StockColorItem( "PaleVioletRed", 219, 112, 147 ),
200   StockColorItem( "PapayaWhip", 255, 239, 213 ),
201   StockColorItem( "PeachPuff", 255, 218, 185 ),
202   StockColorItem( "Peru", 205, 133, 63 ),
203   StockColorItem( "Pink", 55, 192, 203 ),
204   StockColorItem( "Plum", 221, 160, 221 ),
205   StockColorItem( "PowderBlue", 176, 224, 230 ),
206   StockColorItem( "Purple", 128, 0, 128 ),
207   StockColorItem( "Red", 255, 0, 0 ),
208   StockColorItem( "RosyBrown", 188, 143, 143 ),
209   StockColorItem( "RoyalBlue", 65, 105, 225 ),
210   StockColorItem( "SaddleBrown", 139, 69, 19 ),
211   StockColorItem( "Salmon", 250, 128, 114 ),
212   StockColorItem( "SandyBrown", 244, 164, 96 ),
213   StockColorItem( "SeaGreen", 46, 139, 87 ),
214   StockColorItem( "SeaShell", 255, 245, 238 ),
215   StockColorItem( "Sienna", 160, 82, 45 ),
216   StockColorItem( "Silver", 192, 192, 192 ),
217   StockColorItem( "SkyBlue", 135, 206, 235 ),
218   StockColorItem( "SlateBlue", 106, 90, 205 ),
219   StockColorItem( "SlateGray", 112, 128, 144 ),
220   StockColorItem( "Snow", 255, 250, 250 ),
221   StockColorItem( "SpringGreen", 0, 255, 127 ),
222   StockColorItem( "SteelBlue", 70, 130, 180 ),
223   StockColorItem( "Tan", 210, 180, 140 ),
224   StockColorItem( "Teal", 0, 128, 128 ),
225   StockColorItem( "Thistle", 216, 191, 216 ),
226   StockColorItem( "Tomato", 255, 99, 71 ),
227   StockColorItem( "Turquoise", 64, 224, 208 ),
228   StockColorItem( "Violet", 238, 130, 238 ),
229   StockColorItem( "Wheat", 245, 222, 179 ),
230   StockColorItem( "White", 255, 255, 255 ),
231   StockColorItem( "WhiteSmoke", 245, 245, 245 ),
232   StockColorItem( "Yellow", 255, 255, 0 ),
233   StockColorItem( "YellowGreen", 154, 205, 50 )
234};
235
236//-----------------------------------------------------------------------------
237
238static bool stockColorsCreated = false;
239
240void StockColor::create( void )
241{
242   // Finish if already created.
243   if ( stockColorsCreated )
244      return;
245
246   // Fetch stock color count.
247   const S32 stockColorCount = sizeof(StockColorTable) / sizeof(StockColorItem);
248
249   // Insert all stock colors.
250   for( S32 index = 0; index < stockColorCount; ++index )
251   {
252      // Fetch stock color item.
253      StockColorItem& stockColor = StockColorTable[index];
254
255      // Fetch stock color item.
256      StringTableEntry colorName = StringTable->insert( stockColor.mColorName );
257
258      // Insert stock color mappings.
259      mNameToColorF.insertUnique(colorName, stockColor.mColorF);
260      mNameToColorI.insertUnique(colorName, stockColor.mColorI);
261      mColorFToName.insertUnique(stockColor.mColorF, colorName);
262      mColorIToName.insertUnique(stockColor.mColorI, colorName);
263   }
264
265   // Flag as created.
266   stockColorsCreated = true;
267}
268
269//-----------------------------------------------------------------------------
270
271void StockColor::destroy( void )
272{
273   // Finish if not created.
274   if ( !stockColorsCreated )
275      return;
276
277   // Clear stock color mappings.
278   mNameToColorF.clear();
279   mNameToColorI.clear();
280   mColorFToName.clear();
281   mColorIToName.clear();
282
283   // Flag as not created.
284   stockColorsCreated = false;
285}
286
287//-----------------------------------------------------------------------------
288
289bool StockColor::isColor( const char* pStockColorName )
290{
291   // Sanity!
292   AssertFatal( pStockColorName != NULL, "Cannot fetch a NULL stock color name." );
293
294   // Fetch color name.
295   StringTableEntry colorName = StringTable->insert( pStockColorName );
296
297   // Find if color name exists or not.
298   return mNameToColorF.find( colorName ) != mNameToColorF.end();
299}
300
301//-----------------------------------------------------------------------------
302
303const LinearColorF& StockColor::colorF( const char* pStockColorName )
304{
305   // Sanity!
306   AssertFatal( pStockColorName != NULL, "Cannot fetch a NULL stock color name." );
307
308   // Fetch color name.
309   StringTableEntry colorName = StringTable->insert( pStockColorName );
310
311   // Find stock color.
312   typeNameToColorFHash::Iterator colorItr = mNameToColorF.find( colorName );
313
314   // Return color if found.
315   if ( colorItr != mNameToColorF.end() )
316      return colorItr->value;
317
318   // Warn.
319   Con::warnf( "Could not find stock color name '%s'.", pStockColorName );
320
321   // Return default stock color.
322   return mNameToColorF.find( DEFAULT_UNKNOWN_STOCK_COLOR_NAME )->value;          
323}
324
325//-----------------------------------------------------------------------------
326
327const ColorI& StockColor::colorI( const char* pStockColorName )
328{
329   // Sanity!
330   AssertFatal( pStockColorName != NULL, "Cannot fetch a NULL stock color name." );
331
332   // Fetch color name.
333   StringTableEntry colorName = StringTable->insert( pStockColorName );
334
335   // Find stock color.
336   typeNameToColorIHash::Iterator colorItr = mNameToColorI.find( colorName );
337
338   // Return color if found.
339   if ( colorItr != mNameToColorI.end() )
340      return colorItr->value;
341
342   // Warn.
343   Con::warnf( "Could not find stock color name '%s'.", colorName );
344
345   // Return default stock color.
346   return mNameToColorI.find( DEFAULT_UNKNOWN_STOCK_COLOR_NAME )->value; 
347}
348
349//-----------------------------------------------------------------------------
350
351StringTableEntry StockColor::name( const LinearColorF& color )
352{
353   // Find stock color name.
354   typeColorFToNameHash::Iterator colorNameItr = mColorFToName.find( color );
355
356   // Return name if found.
357   if ( colorNameItr != mColorFToName.end() )
358      return colorNameItr->value;
359
360   // Return empty string.
361   return StringTable->EmptyString();
362}
363
364//-----------------------------------------------------------------------------
365
366StringTableEntry StockColor::name( const ColorI& color )
367{
368   // Find stock color name.
369   typeColorIToNameHash::Iterator colorNameItr = mColorIToName.find( color );
370
371   // Return name if found.
372   if ( colorNameItr != mColorIToName.end() )
373      return colorNameItr->value;
374
375   // Return empty string.
376   return StringTable->EmptyString();
377}
378
379//-----------------------------------------------------------------------------
380
381S32 StockColor::getCount( void )
382{
383   return sizeof(StockColorTable) / sizeof(StockColorItem);
384}
385
386//-----------------------------------------------------------------------------
387
388const StockColorItem* StockColor::getColorItem( const S32 index )
389{
390   // Fetch stock color count.
391   const S32 stockColorCount = StockColor::getCount();
392
393   // Is the stock color index in range?
394   if ( index < 0 || index >= stockColorCount )
395   {
396      // No, so warn.
397      Con::warnf("StockColor::getName() - Specified color index '%d' is out of range.  Range is 0 to %d.", index, stockColorCount-1 );
398      return NULL;
399   }
400
401   // Return color name.
402   return &(StockColorTable[index]);
403}
404
405//-----------------------------------------------------------------------------
406
407LinearColorF::LinearColorF( const char* pStockColorName )
408{
409   // Set stock color.
410   *this = StockColor::colorF( pStockColorName );
411}
412
413//-----------------------------------------------------------------------------
414
415void LinearColorF::set( const char* pStockColorName )
416{
417   // Set stock color.
418   *this = StockColor::colorF( pStockColorName );
419}
420
421//-----------------------------------------------------------------------------
422
423const LinearColorF& LinearColorF::StockColor( const char* pStockColorName )
424{
425   return StockColor::colorF( pStockColorName );
426}
427
428//-----------------------------------------------------------------------------
429
430StringTableEntry LinearColorF::StockColor( void )
431{
432   // Return stock color name.
433   return StockColor::name( *this );
434}
435
436//-----------------------------------------------------------------------------
437
438ColorI::ColorI( const char* pStockColorName )
439{
440   // Set stock color.
441   *this = StockColor::colorI( pStockColorName );
442}
443
444//-----------------------------------------------------------------------------
445
446void ColorI::set( const char* pStockColorName )
447{
448   // Set stock color.
449   *this = StockColor::colorI( pStockColorName );
450}
451
452//-----------------------------------------------------------------------------
453
454const ColorI& ColorI::StockColor( const char* pStockColorName )
455{
456   return StockColor::colorI( pStockColorName );
457}
458
459//-----------------------------------------------------------------------------
460
461StringTableEntry ColorI::StockColor( void )
462{
463   // Return stock color name.
464   return StockColor::name( *this );
465}
466
467//-----------------------------------------------------------------------------
468
469#ifdef TORQUE_USE_LEGACY_GAMMA
470//legacy pow 2.2 - powf(color, 2.2f);
471float LinearColorF::sSrgbToLinear[256] =
472{
473   0.000000f,  0.000005f,  0.000023f,  0.000057f,  0.000107f,  0.000175f,  0.000262f,  0.000367f,  0.000493f,
474   0.000638f,  0.000805f,  0.000992f,  0.001202f,  0.001433f,  0.001687f,  0.001963f,  0.002263f,  0.002586f,
475   0.002932f,  0.003303f,  0.003697f,  0.004116f,  0.004560f,  0.005028f,  0.005522f,  0.006041f,  0.006585f,
476   0.007155f,  0.007751f,  0.008373f,  0.009021f,  0.009696f,  0.010398f,  0.011126f,  0.011881f,  0.012664f,
477   0.013473f,  0.014311f,  0.015175f,  0.016068f,  0.016988f,  0.017936f,  0.018913f,  0.019918f,  0.020951f,
478   0.022013f,  0.023104f,  0.024223f,  0.025371f,  0.026549f,  0.027755f,  0.028991f,  0.030257f,  0.031551f,
479   0.032876f,  0.034230f,  0.035614f,  0.037029f,  0.038473f,  0.039947f,  0.041452f,  0.042987f,  0.044553f,
480   0.046149f,  0.047776f,  0.049433f,  0.051122f,  0.052842f,  0.054592f,  0.056374f,  0.058187f,  0.060032f,
481   0.061907f,  0.063815f,  0.065754f,  0.067725f,  0.069727f,  0.071761f,  0.073828f,  0.075926f,  0.078057f,
482   0.080219f,  0.082414f,  0.084642f,  0.086901f,  0.089194f,  0.091518f,  0.093876f,  0.096266f,  0.098689f,
483   0.101145f,  0.103634f,  0.106156f,  0.108711f,  0.111299f,  0.113921f,  0.116576f,  0.119264f,  0.121986f,
484   0.124741f,  0.127530f,  0.130352f,  0.133209f,  0.136099f,  0.139022f,  0.141980f,  0.144972f,  0.147998f,
485   0.151058f,  0.154152f,  0.157281f,  0.160444f,  0.163641f,  0.166872f,  0.170138f,  0.173439f,  0.176774f,
486   0.180144f,  0.183549f,  0.186989f,  0.190463f,  0.193972f,  0.197516f,  0.201096f,  0.204710f,  0.208360f,
487   0.212044f,  0.215764f,  0.219520f,  0.223310f,  0.227137f,  0.230998f,  0.234895f,  0.238828f,  0.242796f,
488   0.246800f,  0.250840f,  0.254916f,  0.259027f,  0.263175f,  0.267358f,  0.271577f,  0.275833f,  0.280124f,
489   0.284452f,  0.288816f,  0.293216f,  0.297653f,  0.302126f,  0.306635f,  0.311181f,  0.315763f,  0.320382f,
490   0.325037f,  0.329729f,  0.334458f,  0.339223f,  0.344026f,  0.348865f,  0.353741f,  0.358654f,  0.363604f,
491   0.368591f,  0.373615f,  0.378676f,  0.383775f,  0.388910f,  0.394083f,  0.399293f,  0.404541f,  0.409826f,
492   0.415148f,  0.420508f,  0.425905f,  0.431340f,  0.436813f,  0.442323f,  0.447871f,  0.453456f,  0.459080f,
493   0.464741f,  0.470440f,  0.476177f,  0.481952f,  0.487765f,  0.493616f,  0.499505f,  0.505432f,  0.511398f,
494   0.517401f,  0.523443f,  0.529523f,  0.535642f,  0.541798f,  0.547994f,  0.554227f,  0.560499f,  0.566810f,
495   0.573159f,  0.579547f,  0.585973f,  0.592438f,  0.598942f,  0.605484f,  0.612066f,  0.618686f,  0.625345f,
496   0.632043f,  0.638779f,  0.645555f,  0.652370f,  0.659224f,  0.666117f,  0.673049f,  0.680020f,  0.687031f,
497   0.694081f,  0.701169f,  0.708298f,  0.715465f,  0.722672f,  0.729919f,  0.737205f,  0.744530f,  0.751895f,
498   0.759300f,  0.766744f,  0.774227f,  0.781751f,  0.789314f,  0.796917f,  0.804559f,  0.812241f,  0.819964f,
499   0.827726f,  0.835528f,  0.843370f,  0.851252f,  0.859174f,  0.867136f,  0.875138f,  0.883180f,  0.891262f,
500   0.899384f,  0.907547f,  0.915750f,  0.923993f,  0.932277f,  0.940601f,  0.948965f,  0.957370f,  0.965815f,
501   0.974300f,  0.982826f,  0.991393f,  1.000000f
502};
503#else
504//sRGB - color < 0.04045f ? (1.0f / 12.92f) * color : powf((color + 0.055f) * (1.0f / 1.055f), 2.4f);
505float LinearColorF::sSrgbToLinear[256] =
506{
507   0.000000f,  0.000304f,  0.000607f,  0.000911f,  0.001214f,  0.001518f,  0.001821f,  0.002125f,  0.002428f,
508   0.002732f,  0.003035f,  0.003347f,  0.003677f,  0.004025f,  0.004391f,  0.004777f,  0.005182f,  0.005605f,
509   0.006049f,  0.006512f,  0.006995f,  0.007499f,  0.008023f,  0.008568f,  0.009134f,  0.009721f,  0.010330f,
510   0.010960f,  0.011612f,  0.012286f,  0.012983f,  0.013702f,  0.014444f,  0.015209f,  0.015996f,  0.016807f,
511   0.017642f,  0.018500f,  0.019382f,  0.020289f,  0.021219f,  0.022174f,  0.023153f,  0.024158f,  0.025187f,
512   0.026241f,  0.027321f,  0.028426f,  0.029557f,  0.030713f,  0.031896f,  0.033105f,  0.034340f,  0.035601f,
513   0.036889f,  0.038204f,  0.039546f,  0.040915f,  0.042311f,  0.043735f,  0.045186f,  0.046665f,  0.048172f,
514   0.049707f,  0.051269f,  0.052861f,  0.054480f,  0.056128f,  0.057805f,  0.059511f,  0.061246f,  0.063010f,
515   0.064803f,  0.066626f,  0.068478f,  0.070360f,  0.072272f,  0.074214f,  0.076185f,  0.078187f,  0.080220f,
516   0.082283f,  0.084376f,  0.086500f,  0.088656f,  0.090842f,  0.093059f,  0.095307f,  0.097587f,  0.099899f,
517   0.102242f,  0.104616f,  0.107023f,  0.109462f,  0.111932f,  0.114435f,  0.116971f,  0.119538f,  0.122139f,
518   0.124772f,  0.127438f,  0.130136f,  0.132868f,  0.135633f,  0.138432f,  0.141263f,  0.144128f,  0.147027f,
519   0.149960f,  0.152926f,  0.155926f,  0.158961f,  0.162029f,  0.165132f,  0.168269f,  0.171441f,  0.174647f,
520   0.177888f,  0.181164f,  0.184475f,  0.187821f,  0.191202f,  0.194618f,  0.198069f,  0.201556f,  0.205079f,
521   0.208637f,  0.212231f,  0.215861f,  0.219526f,  0.223228f,  0.226966f,  0.230740f,  0.234551f,  0.238398f,
522   0.242281f,  0.246201f,  0.250158f,  0.254152f,  0.258183f,  0.262251f,  0.266356f,  0.270498f,  0.274677f,
523   0.278894f,  0.283149f,  0.287441f,  0.291771f,  0.296138f,  0.300544f,  0.304987f,  0.309469f,  0.313989f,
524   0.318547f,  0.323143f,  0.327778f,  0.332452f,  0.337164f,  0.341914f,  0.346704f,  0.351533f,  0.356400f,
525   0.361307f,  0.366253f,  0.371238f,  0.376262f,  0.381326f,  0.386430f,  0.391573f,  0.396755f,  0.401978f,
526   0.407240f,  0.412543f,  0.417885f,  0.423268f,  0.428691f,  0.434154f,  0.439657f,  0.445201f,  0.450786f,
527   0.456411f,  0.462077f,  0.467784f,  0.473532f,  0.479320f,  0.485150f,  0.491021f,  0.496933f,  0.502886f,
528   0.508881f,  0.514918f,  0.520996f,  0.527115f,  0.533276f,  0.539480f,  0.545725f,  0.552011f,  0.558340f,
529   0.564712f,  0.571125f,  0.577581f,  0.584078f,  0.590619f,  0.597202f,  0.603827f,  0.610496f,  0.617207f,
530   0.623960f,  0.630757f,  0.637597f,  0.644480f,  0.651406f,  0.658375f,  0.665387f,  0.672443f,  0.679543f,
531   0.686685f,  0.693872f,  0.701102f,  0.708376f,  0.715694f,  0.723055f,  0.730461f,  0.737911f,  0.745404f,
532   0.752942f,  0.760525f,  0.768151f,  0.775822f,  0.783538f,  0.791298f,  0.799103f,  0.806952f,  0.814847f,
533   0.822786f,  0.830770f,  0.838799f,  0.846873f,  0.854993f,  0.863157f,  0.871367f,  0.879622f,  0.887923f,
534   0.896269f,  0.904661f,  0.913099f,  0.921582f,  0.930111f,  0.938686f,  0.947307f,  0.955974f,  0.964686f,
535   0.973445f,  0.982251f,  0.991102f,  1.000000f
536};
537#endif
538//-----------------------------------------------------------------------------
539
540DefineEngineFunction(getStockColorCount, S32, (),,
541   "@brief Gets a count of available stock colors.\n"
542   "@return A count of available stock colors.")
543{
544   return StockColor::getCount();
545}
546
547//-----------------------------------------------------------------------------
548
549DefineEngineFunction(getStockColorName, const char*, (S32 stockColorIndex),,
550   "@brief Gets the stock color name at the specified index.\n"
551   "@param stockColorIndex The zero-based index of the stock color name to retrieve.\n"
552   "@return The stock color name at the specified index or nothing if the string is invalid.")
553{
554   // Fetch the color item.
555   const StockColorItem* pColorItem = StockColor::getColorItem(stockColorIndex);
556
557   return pColorItem == NULL ? NULL : pColorItem->getColorName();
558}
559
560//-----------------------------------------------------------------------------
561
562DefineEngineFunction(isStockColor, bool, (const char* stockColorName),,
563   "@brief Gets whether the specified name is a stock color or not.\n"
564   "@param stockColorName - The stock color name to test for.\n"
565   "@return Whether the specified name is a stock color or not.\n")
566{
567   // Return whether this is a stock color name or not.
568   return StockColor::isColor(stockColorName);
569}
570
571//-----------------------------------------------------------------------------
572
573DefineEngineFunction(getStockColorF, LinearColorF, (const char* stockColorName),,
574   "@brief Gets a floating-point-based stock color by name.\n"
575   "@param stockColorName - The stock color name to retrieve.\n"
576   "@return The stock color that matches the specified color name.  Returns nothing if the color name is not found.\n")
577{
578   // Return nothing if stock color name is invalid.
579   if (!StockColor::isColor(stockColorName))
580      return StringTable->EmptyString();
581
582   // Fetch stock color.
583   const LinearColorF& color = StockColor::colorF(stockColorName);
584
585   return color;
586}
587
588//-----------------------------------------------------------------------------
589
590DefineEngineFunction(getStockColorI, ColorI, (const char* stockColorName),,
591   "@brief Gets a byte-based stock color by name.\n"
592   "@param stockColorName - The stock color name to retrieve.\n"
593   "@return The stock color that matches the specified color name.  Returns nothing if the color name is not found.\n")
594{
595   // Return nothing if stock color name is invalid.
596   if (!StockColor::isColor(stockColorName))
597      return StringTable->EmptyString();
598
599   // Fetch stock color.
600   const ColorI& color = StockColor::colorI(stockColorName);
601
602   return color;
603}
604