v4color.cpp
上传用户:king477883
上传日期:2021-03-01
资源大小:9553k
文件大小:18k
源码类别:

游戏引擎

开发平台:

C++ Builder

  1. /** 
  2.  * @file v4color.cpp
  3.  * @brief LLColor4 class implementation.
  4.  *
  5.  * $LicenseInfo:firstyear=2000&license=viewergpl$
  6.  * 
  7.  * Copyright (c) 2000-2010, Linden Research, Inc.
  8.  * 
  9.  * Second Life Viewer Source Code
  10.  * The source code in this file ("Source Code") is provided by Linden Lab
  11.  * to you under the terms of the GNU General Public License, version 2.0
  12.  * ("GPL"), unless you have obtained a separate licensing agreement
  13.  * ("Other License"), formally executed by you and Linden Lab.  Terms of
  14.  * the GPL can be found in doc/GPL-license.txt in this distribution, or
  15.  * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
  16.  * 
  17.  * There are special exceptions to the terms and conditions of the GPL as
  18.  * it is applied to this Source Code. View the full text of the exception
  19.  * in the file doc/FLOSS-exception.txt in this software distribution, or
  20.  * online at
  21.  * http://secondlifegrid.net/programs/open_source/licensing/flossexception
  22.  * 
  23.  * By copying, modifying or distributing this software, you acknowledge
  24.  * that you have read and understood your obligations described above,
  25.  * and agree to abide by those obligations.
  26.  * 
  27.  * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
  28.  * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
  29.  * COMPLETENESS OR PERFORMANCE.
  30.  * $/LicenseInfo$
  31.  */
  32. #include "linden_common.h"
  33. #include "llboost.h"
  34. #include "v4color.h"
  35. #include "v4coloru.h"
  36. #include "v3color.h"
  37. #include "v4math.h"
  38. #include "llmath.h"
  39. // LLColor4
  40. //////////////////////////////////////////////////////////////////////////////
  41. LLColor4 LLColor4::red( 1.f, 0.f, 0.f, 1.f);
  42. LLColor4 LLColor4::green( 0.f, 1.f, 0.f, 1.f);
  43. LLColor4 LLColor4::blue( 0.f, 0.f, 1.f, 1.f);
  44. LLColor4 LLColor4::black( 0.f, 0.f, 0.f, 1.f);
  45. LLColor4 LLColor4::yellow( 1.f, 1.f, 0.f, 1.f);
  46. LLColor4 LLColor4::magenta( 1.0f, 0.0f, 1.0f, 1.0f);
  47. LLColor4 LLColor4::cyan( 0.0f, 1.0f, 1.0f, 1.0f);
  48. LLColor4 LLColor4::white( 1.f, 1.f, 1.f, 1.f);
  49. LLColor4 LLColor4::smoke( 0.5f, 0.5f, 0.5f, 0.5f);
  50. LLColor4 LLColor4::grey( 0.5f, 0.5f, 0.5f, 1.0f);
  51. LLColor4 LLColor4::orange( 1.f, 0.5, 0.f, 1.f );
  52. LLColor4 LLColor4::purple( 0.6f, 0.2f, 0.8f, 1.0f);
  53. LLColor4 LLColor4::pink( 1.0f, 0.5f, 0.8f, 1.0f);
  54. LLColor4 LLColor4::transparent( 0.f, 0.f, 0.f, 0.f );
  55. //////////////////////////////////////////////////////////////////////////////
  56. LLColor4 LLColor4::grey1(0.8f, 0.8f, 0.8f, 1.0f);
  57. LLColor4 LLColor4::grey2(0.6f, 0.6f, 0.6f, 1.0f);
  58. LLColor4 LLColor4::grey3(0.4f, 0.4f, 0.4f, 1.0f);
  59. LLColor4 LLColor4::grey4(0.3f, 0.3f, 0.3f, 1.0f);
  60. LLColor4 LLColor4::red1(1.0f, 0.0f, 0.0f, 1.0f);
  61. LLColor4 LLColor4::red2(0.6f, 0.0f, 0.0f, 1.0f);
  62. LLColor4 LLColor4::red3(1.0f, 0.2f, 0.2f, 1.0f);
  63. LLColor4 LLColor4::red4(0.5f, 0.1f, 0.1f, 1.0f);
  64. LLColor4 LLColor4::red5(0.8f, 0.1f, 0.0f, 1.0f);
  65. LLColor4 LLColor4::green1(0.0f, 1.0f, 0.0f, 1.0f);
  66. LLColor4 LLColor4::green2(0.0f, 0.6f, 0.0f, 1.0f);
  67. LLColor4 LLColor4::green3(0.0f, 0.4f, 0.0f, 1.0f);
  68. LLColor4 LLColor4::green4(0.0f, 1.0f, 0.4f, 1.0f);
  69. LLColor4 LLColor4::green5(0.2f, 0.6f, 0.4f, 1.0f);
  70. LLColor4 LLColor4::green6(0.4f, 0.6f, 0.2f, 1.0f);
  71. LLColor4 LLColor4::blue1(0.0f, 0.0f, 1.0f, 1.0f);
  72. LLColor4 LLColor4::blue2(0.0f, 0.4f, 1.0f, 1.0f);
  73. LLColor4 LLColor4::blue3(0.2f, 0.2f, 0.8f, 1.0f);
  74. LLColor4 LLColor4::blue4(0.0f, 0.0f, 0.6f, 1.0f);
  75. LLColor4 LLColor4::blue5(0.4f, 0.2f, 1.0f, 1.0f);
  76. LLColor4 LLColor4::blue6(0.4f, 0.5f, 1.0f, 1.0f);
  77. LLColor4 LLColor4::yellow1(1.0f, 1.0f, 0.0f, 1.0f);
  78. LLColor4 LLColor4::yellow2(0.6f, 0.6f, 0.0f, 1.0f);
  79. LLColor4 LLColor4::yellow3(0.8f, 1.0f, 0.2f, 1.0f);
  80. LLColor4 LLColor4::yellow4(1.0f, 1.0f, 0.4f, 1.0f);
  81. LLColor4 LLColor4::yellow5(0.6f, 0.4f, 0.2f, 1.0f);
  82. LLColor4 LLColor4::yellow6(1.0f, 0.8f, 0.4f, 1.0f);
  83. LLColor4 LLColor4::yellow7(0.8f, 0.8f, 0.0f, 1.0f);
  84. LLColor4 LLColor4::yellow8(0.8f, 0.8f, 0.2f, 1.0f);
  85. LLColor4 LLColor4::yellow9(0.8f, 0.8f, 0.4f, 1.0f);
  86. LLColor4 LLColor4::orange1(1.0f, 0.8f, 0.0f, 1.0f);
  87. LLColor4 LLColor4::orange2(1.0f, 0.6f, 0.0f, 1.0f);
  88. LLColor4 LLColor4::orange3(1.0f, 0.4f, 0.2f, 1.0f);
  89. LLColor4 LLColor4::orange4(0.8f, 0.4f, 0.0f, 1.0f);
  90. LLColor4 LLColor4::orange5(0.9f, 0.5f, 0.0f, 1.0f);
  91. LLColor4 LLColor4::orange6(1.0f, 0.8f, 0.2f, 1.0f);
  92. LLColor4 LLColor4::magenta1(1.0f, 0.0f, 1.0f, 1.0f);
  93. LLColor4 LLColor4::magenta2(0.6f, 0.2f, 0.4f, 1.0f);
  94. LLColor4 LLColor4::magenta3(1.0f, 0.4f, 0.6f, 1.0f);
  95. LLColor4 LLColor4::magenta4(1.0f, 0.2f, 0.8f, 1.0f);
  96. LLColor4 LLColor4::purple1(0.6f, 0.2f, 0.8f, 1.0f);
  97. LLColor4 LLColor4::purple2(0.8f, 0.2f, 1.0f, 1.0f);
  98. LLColor4 LLColor4::purple3(0.6f, 0.0f, 1.0f, 1.0f);
  99. LLColor4 LLColor4::purple4(0.4f, 0.0f, 0.8f, 1.0f);
  100. LLColor4 LLColor4::purple5(0.6f, 0.0f, 0.8f, 1.0f);
  101. LLColor4 LLColor4::purple6(0.8f, 0.0f, 0.6f, 1.0f);
  102. LLColor4 LLColor4::pink1(1.0f, 0.5f, 0.8f, 1.0f);
  103. LLColor4 LLColor4::pink2(1.0f, 0.8f, 0.9f, 1.0f);
  104. LLColor4 LLColor4::cyan1(0.0f, 1.0f, 1.0f, 1.0f);
  105. LLColor4 LLColor4::cyan2(0.4f, 0.8f, 0.8f, 1.0f);
  106. LLColor4 LLColor4::cyan3(0.0f, 1.0f, 0.6f, 1.0f);
  107. LLColor4 LLColor4::cyan4(0.6f, 1.0f, 1.0f, 1.0f);
  108. LLColor4 LLColor4::cyan5(0.2f, 0.6f, 1.0f, 1.0f);
  109. LLColor4 LLColor4::cyan6(0.2f, 0.6f, 0.6f, 1.0f);
  110. //////////////////////////////////////////////////////////////////////////////
  111. // conversion
  112. LLColor4::operator const LLColor4U() const
  113. {
  114. return LLColor4U(
  115. (U8)llclampb(llround(mV[VRED]*255.f)),
  116. (U8)llclampb(llround(mV[VGREEN]*255.f)),
  117. (U8)llclampb(llround(mV[VBLUE]*255.f)),
  118. (U8)llclampb(llround(mV[VALPHA]*255.f)));
  119. }
  120. LLColor4::LLColor4(const LLColor3 &vec, F32 a)
  121. {
  122. mV[VX] = vec.mV[VX];
  123. mV[VY] = vec.mV[VY];
  124. mV[VZ] = vec.mV[VZ];
  125. mV[VW] = a;
  126. }
  127. LLColor4::LLColor4(const LLColor4U& color4u)
  128. {
  129. const F32 SCALE = 1.f/255.f;
  130. mV[VX] = color4u.mV[VX] * SCALE;
  131. mV[VY] = color4u.mV[VY] * SCALE;
  132. mV[VZ] = color4u.mV[VZ] * SCALE;
  133. mV[VW] = color4u.mV[VW] * SCALE;
  134. }
  135. LLColor4::LLColor4(const LLVector4& vector4)
  136. {
  137. mV[VX] = vector4.mV[VX];
  138. mV[VY] = vector4.mV[VY];
  139. mV[VZ] = vector4.mV[VZ];
  140. mV[VW] = vector4.mV[VW];
  141. }
  142. const LLColor4& LLColor4::set(const LLColor4U& color4u)
  143. {
  144. const F32 SCALE = 1.f/255.f;
  145. mV[VX] = color4u.mV[VX] * SCALE;
  146. mV[VY] = color4u.mV[VY] * SCALE;
  147. mV[VZ] = color4u.mV[VZ] * SCALE;
  148. mV[VW] = color4u.mV[VW] * SCALE;
  149. return (*this);
  150. }
  151. const LLColor4& LLColor4::set(const LLColor3 &vec)
  152. {
  153. mV[VX] = vec.mV[VX];
  154. mV[VY] = vec.mV[VY];
  155. mV[VZ] = vec.mV[VZ];
  156. //  no change to alpha!
  157. // mV[VW] = 1.f;  
  158. return (*this);
  159. }
  160. const LLColor4& LLColor4::set(const LLColor3 &vec, F32 a)
  161. {
  162. mV[VX] = vec.mV[VX];
  163. mV[VY] = vec.mV[VY];
  164. mV[VZ] = vec.mV[VZ];
  165. mV[VW] = a;
  166. return (*this);
  167. }
  168. // deprecated -- use set()
  169. const LLColor4& LLColor4::setVec(const LLColor4U& color4u)
  170. {
  171. const F32 SCALE = 1.f/255.f;
  172. mV[VX] = color4u.mV[VX] * SCALE;
  173. mV[VY] = color4u.mV[VY] * SCALE;
  174. mV[VZ] = color4u.mV[VZ] * SCALE;
  175. mV[VW] = color4u.mV[VW] * SCALE;
  176. return (*this);
  177. }
  178. // deprecated -- use set()
  179. const LLColor4& LLColor4::setVec(const LLColor3 &vec)
  180. {
  181. mV[VX] = vec.mV[VX];
  182. mV[VY] = vec.mV[VY];
  183. mV[VZ] = vec.mV[VZ];
  184. //  no change to alpha!
  185. // mV[VW] = 1.f;  
  186. return (*this);
  187. }
  188. // deprecated -- use set()
  189. const LLColor4& LLColor4::setVec(const LLColor3 &vec, F32 a)
  190. {
  191. mV[VX] = vec.mV[VX];
  192. mV[VY] = vec.mV[VY];
  193. mV[VZ] = vec.mV[VZ];
  194. mV[VW] = a;
  195. return (*this);
  196. }
  197. void LLColor4::setValue(const LLSD& sd)
  198. {
  199. #if 0
  200. // Clamping on setValue from LLSD is inconsistent with other set behavior
  201. F32 val;
  202. bool out_of_range = false;
  203. val = sd[0].asReal();
  204. mV[0] = llclamp(val, 0.f, 1.f);
  205. out_of_range = mV[0] != val;
  206. val = sd[1].asReal();
  207. mV[1] = llclamp(val, 0.f, 1.f);
  208. out_of_range |= mV[1] != val;
  209. val = sd[2].asReal();
  210. mV[2] = llclamp(val, 0.f, 1.f);
  211. out_of_range |= mV[2] != val;
  212. val = sd[3].asReal();
  213. mV[3] = llclamp(val, 0.f, 1.f);
  214. out_of_range |= mV[3] != val;
  215. if (out_of_range)
  216. {
  217. llwarns << "LLSD color value out of range!" << llendl;
  218. }
  219. #else
  220. mV[0] = (F32) sd[0].asReal();
  221. mV[1] = (F32) sd[1].asReal();
  222. mV[2] = (F32) sd[2].asReal();
  223. mV[3] = (F32) sd[3].asReal();
  224. #endif
  225. }
  226. const LLColor4& LLColor4::operator=(const LLColor3 &a)
  227. {
  228. mV[VX] = a.mV[VX];
  229. mV[VY] = a.mV[VY];
  230. mV[VZ] = a.mV[VZ];
  231. // converting from an rgb sets a=1 (opaque)
  232. mV[VW] = 1.f;
  233. return (*this);
  234. }
  235. std::ostream& operator<<(std::ostream& s, const LLColor4 &a) 
  236. {
  237. s << "{ " << a.mV[VX] << ", " << a.mV[VY] << ", " << a.mV[VZ] << ", " << a.mV[VW] << " }";
  238. return s;
  239. }
  240. bool operator==(const LLColor4 &a, const LLColor3 &b)
  241. {
  242. return (  (a.mV[VX] == b.mV[VX])
  243. &&(a.mV[VY] == b.mV[VY])
  244. &&(a.mV[VZ] == b.mV[VZ]));
  245. }
  246. bool operator!=(const LLColor4 &a, const LLColor3 &b)
  247. {
  248. return (  (a.mV[VX] != b.mV[VX])
  249. ||(a.mV[VY] != b.mV[VY])
  250. ||(a.mV[VZ] != b.mV[VZ]));
  251. }
  252. LLColor3 vec4to3(const LLColor4 &vec)
  253. {
  254. LLColor3 temp(vec.mV[VX], vec.mV[VY], vec.mV[VZ]);
  255. return temp;
  256. }
  257. LLColor4 vec3to4(const LLColor3 &vec)
  258. {
  259. LLColor3 temp(vec.mV[VX], vec.mV[VY], vec.mV[VZ]);
  260. return temp;
  261. }
  262. static F32 hueToRgb ( F32 val1In, F32 val2In, F32 valHUeIn )
  263. {
  264. if ( valHUeIn < 0.0f ) valHUeIn += 1.0f;
  265. if ( valHUeIn > 1.0f ) valHUeIn -= 1.0f;
  266. if ( ( 6.0f * valHUeIn ) < 1.0f ) return ( val1In + ( val2In - val1In ) * 6.0f * valHUeIn );
  267. if ( ( 2.0f * valHUeIn ) < 1.0f ) return ( val2In );
  268. if ( ( 3.0f * valHUeIn ) < 2.0f ) return ( val1In + ( val2In - val1In ) * ( ( 2.0f / 3.0f ) - valHUeIn ) * 6.0f );
  269. return ( val1In );
  270. }
  271. void LLColor4::setHSL ( F32 hValIn, F32 sValIn, F32 lValIn)
  272. {
  273. if ( sValIn < 0.00001f )
  274. {
  275. mV[VRED] = lValIn;
  276. mV[VGREEN] = lValIn;
  277. mV[VBLUE] = lValIn;
  278. }
  279. else
  280. {
  281. F32 interVal1;
  282. F32 interVal2;
  283. if ( lValIn < 0.5f )
  284. interVal2 = lValIn * ( 1.0f + sValIn );
  285. else
  286. interVal2 = ( lValIn + sValIn ) - ( sValIn * lValIn );
  287. interVal1 = 2.0f * lValIn - interVal2;
  288. mV[VRED] = hueToRgb ( interVal1, interVal2, hValIn + ( 1.f / 3.f ) );
  289. mV[VGREEN] = hueToRgb ( interVal1, interVal2, hValIn );
  290. mV[VBLUE] = hueToRgb ( interVal1, interVal2, hValIn - ( 1.f / 3.f ) );
  291. }
  292. }
  293. void LLColor4::calcHSL(F32* hue, F32* saturation, F32* luminance) const
  294. {
  295. F32 var_R = mV[VRED];
  296. F32 var_G = mV[VGREEN];
  297. F32 var_B = mV[VBLUE];
  298. F32 var_Min = ( var_R < ( var_G < var_B ? var_G : var_B ) ? var_R : ( var_G < var_B ? var_G : var_B ) );
  299. F32 var_Max = ( var_R > ( var_G > var_B ? var_G : var_B ) ? var_R : ( var_G > var_B ? var_G : var_B ) );
  300. F32 del_Max = var_Max - var_Min;
  301. F32 L = ( var_Max + var_Min ) / 2.0f;
  302. F32 H = 0.0f;
  303. F32 S = 0.0f;
  304. if ( del_Max == 0.0f )
  305. {
  306.    H = 0.0f;
  307.    S = 0.0f;
  308. }
  309. else
  310. {
  311. if ( L < 0.5 )
  312. S = del_Max / ( var_Max + var_Min );
  313. else
  314. S = del_Max / ( 2.0f - var_Max - var_Min );
  315. F32 del_R = ( ( ( var_Max - var_R ) / 6.0f ) + ( del_Max / 2.0f ) ) / del_Max;
  316. F32 del_G = ( ( ( var_Max - var_G ) / 6.0f ) + ( del_Max / 2.0f ) ) / del_Max;
  317. F32 del_B = ( ( ( var_Max - var_B ) / 6.0f ) + ( del_Max / 2.0f ) ) / del_Max;
  318. if ( var_R >= var_Max )
  319. H = del_B - del_G;
  320. else
  321. if ( var_G >= var_Max )
  322. H = ( 1.0f / 3.0f ) + del_R - del_B;
  323. else
  324. if ( var_B >= var_Max )
  325. H = ( 2.0f / 3.0f ) + del_G - del_R;
  326. if ( H < 0.0f ) H += 1.0f;
  327. if ( H > 1.0f ) H -= 1.0f;
  328. }
  329. if (hue) *hue = H;
  330. if (saturation) *saturation = S;
  331. if (luminance) *luminance = L;
  332. }
  333. // static
  334. BOOL LLColor4::parseColor(const std::string& buf, LLColor4* color)
  335. {
  336. if( buf.empty() || color == NULL)
  337. {
  338. return FALSE;
  339. }
  340. boost_tokenizer tokens(buf, boost::char_separator<char>(", "));
  341. boost_tokenizer::iterator token_iter = tokens.begin();
  342. if (token_iter == tokens.end())
  343. {
  344. return FALSE;
  345. }
  346. // Grab the first token into a string, since we don't know
  347. // if this is a float or a color name.
  348. std::string color_name( (*token_iter) );
  349. ++token_iter;
  350. if (token_iter != tokens.end())
  351. {
  352. // There are more tokens to read.  This must be a vector.
  353. LLColor4 v;
  354. LLStringUtil::convertToF32( color_name,  v.mV[VX] );
  355. LLStringUtil::convertToF32( *token_iter, v.mV[VY] );
  356. v.mV[VZ] = 0.0f;
  357. v.mV[VW] = 1.0f;
  358. ++token_iter;
  359. if (token_iter == tokens.end())
  360. {
  361. // This is a malformed vector.
  362. llwarns << "LLColor4::parseColor() malformed color " << buf << llendl;
  363. }
  364. else
  365. {
  366. // There is a z-component.
  367. LLStringUtil::convertToF32( *token_iter, v.mV[VZ] );
  368. ++token_iter;
  369. if (token_iter != tokens.end())
  370. {
  371. // There is an alpha component.
  372. LLStringUtil::convertToF32( *token_iter, v.mV[VW] );
  373. }
  374. }
  375. //  Make sure all values are between 0 and 1.
  376. if (v.mV[VX] > 1.f || v.mV[VY] > 1.f || v.mV[VZ] > 1.f || v.mV[VW] > 1.f)
  377. {
  378. v = v * (1.f / 255.f);
  379. }
  380. color->set( v );
  381. }
  382. else // Single value.  Read as a named color.
  383. {
  384. // We have a color name
  385. if ( "red" == color_name )
  386. {
  387. color->set(LLColor4::red);
  388. }
  389. else if ( "red1" == color_name )
  390. {
  391. color->set(LLColor4::red1);
  392. }
  393. else if ( "red2" == color_name )
  394. {
  395. color->set(LLColor4::red2);
  396. }
  397. else if ( "red3" == color_name )
  398. {
  399. color->set(LLColor4::red3);
  400. }
  401. else if ( "red4" == color_name )
  402. {
  403. color->set(LLColor4::red4);
  404. }
  405. else if ( "red5" == color_name )
  406. {
  407. color->set(LLColor4::red5);
  408. }
  409. else if( "green" == color_name )
  410. {
  411. color->set(LLColor4::green);
  412. }
  413. else if( "green1" == color_name )
  414. {
  415. color->set(LLColor4::green1);
  416. }
  417. else if( "green2" == color_name )
  418. {
  419. color->set(LLColor4::green2);
  420. }
  421. else if( "green3" == color_name )
  422. {
  423. color->set(LLColor4::green3);
  424. }
  425. else if( "green4" == color_name )
  426. {
  427. color->set(LLColor4::green4);
  428. }
  429. else if( "green5" == color_name )
  430. {
  431. color->set(LLColor4::green5);
  432. }
  433. else if( "green6" == color_name )
  434. {
  435. color->set(LLColor4::green6);
  436. }
  437. else if( "blue" == color_name )
  438. {
  439. color->set(LLColor4::blue);
  440. }
  441. else if( "blue1" == color_name )
  442. {
  443. color->set(LLColor4::blue1);
  444. }
  445. else if( "blue2" == color_name )
  446. {
  447. color->set(LLColor4::blue2);
  448. }
  449. else if( "blue3" == color_name )
  450. {
  451. color->set(LLColor4::blue3);
  452. }
  453. else if( "blue4" == color_name )
  454. {
  455. color->set(LLColor4::blue4);
  456. }
  457. else if( "blue5" == color_name )
  458. {
  459. color->set(LLColor4::blue5);
  460. }
  461. else if( "blue6" == color_name )
  462. {
  463. color->set(LLColor4::blue6);
  464. }
  465. else if( "black" == color_name )
  466. {
  467. color->set(LLColor4::black);
  468. }
  469. else if( "white" == color_name )
  470. {
  471. color->set(LLColor4::white);
  472. }
  473. else if( "yellow" == color_name )
  474. {
  475. color->set(LLColor4::yellow);
  476. }
  477. else if( "yellow1" == color_name )
  478. {
  479. color->set(LLColor4::yellow1);
  480. }
  481. else if( "yellow2" == color_name )
  482. {
  483. color->set(LLColor4::yellow2);
  484. }
  485. else if( "yellow3" == color_name )
  486. {
  487. color->set(LLColor4::yellow3);
  488. }
  489. else if( "yellow4" == color_name )
  490. {
  491. color->set(LLColor4::yellow4);
  492. }
  493. else if( "yellow5" == color_name )
  494. {
  495. color->set(LLColor4::yellow5);
  496. }
  497. else if( "yellow6" == color_name )
  498. {
  499. color->set(LLColor4::yellow6);
  500. }
  501. else if( "magenta" == color_name )
  502. {
  503. color->set(LLColor4::magenta);
  504. }
  505. else if( "magenta1" == color_name )
  506. {
  507. color->set(LLColor4::magenta1);
  508. }
  509. else if( "magenta2" == color_name )
  510. {
  511. color->set(LLColor4::magenta2);
  512. }
  513. else if( "magenta3" == color_name )
  514. {
  515. color->set(LLColor4::magenta3);
  516. }
  517. else if( "magenta4" == color_name )
  518. {
  519. color->set(LLColor4::magenta4);
  520. }
  521. else if( "purple" == color_name )
  522. {
  523. color->set(LLColor4::purple);
  524. }
  525. else if( "purple1" == color_name )
  526. {
  527. color->set(LLColor4::purple1);
  528. }
  529. else if( "purple2" == color_name )
  530. {
  531. color->set(LLColor4::purple2);
  532. }
  533. else if( "purple3" == color_name )
  534. {
  535. color->set(LLColor4::purple3);
  536. }
  537. else if( "purple4" == color_name )
  538. {
  539. color->set(LLColor4::purple4);
  540. }
  541. else if( "purple5" == color_name )
  542. {
  543. color->set(LLColor4::purple5);
  544. }
  545. else if( "purple6" == color_name )
  546. {
  547. color->set(LLColor4::purple6);
  548. }
  549. else if( "pink" == color_name )
  550. {
  551. color->set(LLColor4::pink);
  552. }
  553. else if( "pink1" == color_name )
  554. {
  555. color->set(LLColor4::pink1);
  556. }
  557. else if( "pink2" == color_name )
  558. {
  559. color->set(LLColor4::pink2);
  560. }
  561. else if( "cyan" == color_name )
  562. {
  563. color->set(LLColor4::cyan);
  564. }
  565. else if( "cyan1" == color_name )
  566. {
  567. color->set(LLColor4::cyan1);
  568. }
  569. else if( "cyan2" == color_name )
  570. {
  571. color->set(LLColor4::cyan2);
  572. }
  573. else if( "cyan3" == color_name )
  574. {
  575. color->set(LLColor4::cyan3);
  576. }
  577. else if( "cyan4" == color_name )
  578. {
  579. color->set(LLColor4::cyan4);
  580. }
  581. else if( "cyan5" == color_name )
  582. {
  583. color->set(LLColor4::cyan5);
  584. }
  585. else if( "cyan6" == color_name )
  586. {
  587. color->set(LLColor4::cyan6);
  588. }
  589. else if( "smoke" == color_name )
  590. {
  591. color->set(LLColor4::smoke);
  592. }
  593. else if( "grey" == color_name )
  594. {
  595. color->set(LLColor4::grey);
  596. }
  597. else if( "grey1" == color_name )
  598. {
  599. color->set(LLColor4::grey1);
  600. }
  601. else if( "grey2" == color_name )
  602. {
  603. color->set(LLColor4::grey2);
  604. }
  605. else if( "grey3" == color_name )
  606. {
  607. color->set(LLColor4::grey3);
  608. }
  609. else if( "grey4" == color_name )
  610. {
  611. color->set(LLColor4::grey4);
  612. }
  613. else if( "orange" == color_name )
  614. {
  615. color->set(LLColor4::orange);
  616. }
  617. else if( "orange1" == color_name )
  618. {
  619. color->set(LLColor4::orange1);
  620. }
  621. else if( "orange2" == color_name )
  622. {
  623. color->set(LLColor4::orange2);
  624. }
  625. else if( "orange3" == color_name )
  626. {
  627. color->set(LLColor4::orange3);
  628. }
  629. else if( "orange4" == color_name )
  630. {
  631. color->set(LLColor4::orange4);
  632. }
  633. else if( "orange5" == color_name )
  634. {
  635. color->set(LLColor4::orange5);
  636. }
  637. else if( "orange6" == color_name )
  638. {
  639. color->set(LLColor4::orange6);
  640. }
  641. else if ( "clear" == color_name )
  642. {
  643. color->set(0.f, 0.f, 0.f, 0.f);
  644. }
  645. else
  646. {
  647. llwarns << "invalid color " << color_name << llendl;
  648. }
  649. }
  650. return TRUE;
  651. }
  652. // static
  653. BOOL LLColor4::parseColor4(const std::string& buf, LLColor4* value)
  654. {
  655. if( buf.empty() || value == NULL)
  656. {
  657. return FALSE;
  658. }
  659. LLColor4 v;
  660. S32 count = sscanf( buf.c_str(), "%f, %f, %f, %f", v.mV + 0, v.mV + 1, v.mV + 2, v.mV + 3 );
  661. if (1 == count )
  662. {
  663. // try this format
  664. count = sscanf( buf.c_str(), "%f %f %f %f", v.mV + 0, v.mV + 1, v.mV + 2, v.mV + 3 );
  665. }
  666. if( 4 == count )
  667. {
  668. value->setVec( v );
  669. return TRUE;
  670. }
  671. return FALSE;
  672. }
  673. // EOF