| OLD | NEW |
| 1 // Copyright 2014 PDFium Authors. All rights reserved. | 1 // Copyright 2014 PDFium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
| 6 | 6 |
| 7 #include "../../include/javascript/JavaScript.h" | 7 #include "../../include/javascript/JavaScript.h" |
| 8 #include "../../include/javascript/IJavaScript.h" | 8 #include "../../include/javascript/IJavaScript.h" |
| 9 #include "../../include/javascript/JS_Define.h" | 9 #include "../../include/javascript/JS_Define.h" |
| 10 #include "../../include/javascript/JS_Object.h" | 10 #include "../../include/javascript/JS_Object.h" |
| 11 #include "../../include/javascript/JS_Value.h" | 11 #include "../../include/javascript/JS_Value.h" |
| 12 #include "../../include/javascript/color.h" | 12 #include "../../include/javascript/color.h" |
| 13 #include "../../include/javascript/JS_EventHandler.h" | 13 #include "../../include/javascript/JS_EventHandler.h" |
| 14 #include "../../include/javascript/JS_Context.h" | 14 #include "../../include/javascript/JS_Context.h" |
| 15 #include "../../include/javascript/JS_Runtime.h" | 15 #include "../../include/javascript/JS_Runtime.h" |
| 16 | 16 |
| 17 static v8::Isolate* GetIsolate(IFXJS_Context* cc) | 17 static v8::Isolate* GetIsolate(IFXJS_Context* cc) { |
| 18 { | 18 CJS_Context* pContext = (CJS_Context*)cc; |
| 19 » CJS_Context* pContext = (CJS_Context *)cc; | 19 ASSERT(pContext != NULL); |
| 20 » ASSERT(pContext != NULL); | |
| 21 | 20 |
| 22 » CJS_Runtime* pRuntime = pContext->GetJSRuntime(); | 21 CJS_Runtime* pRuntime = pContext->GetJSRuntime(); |
| 23 » ASSERT(pRuntime != NULL); | 22 ASSERT(pRuntime != NULL); |
| 24 | 23 |
| 25 » return pRuntime->GetIsolate(); | 24 return pRuntime->GetIsolate(); |
| 26 } | 25 } |
| 27 /* -------------------------- color -------------------------- */ | 26 /* -------------------------- color -------------------------- */ |
| 28 | 27 |
| 29 BEGIN_JS_STATIC_CONST(CJS_Color) | 28 BEGIN_JS_STATIC_CONST(CJS_Color) |
| 30 END_JS_STATIC_CONST() | 29 END_JS_STATIC_CONST() |
| 31 | 30 |
| 32 BEGIN_JS_STATIC_PROP(CJS_Color) | 31 BEGIN_JS_STATIC_PROP(CJS_Color) |
| 33 » JS_STATIC_PROP_ENTRY(black) | 32 JS_STATIC_PROP_ENTRY(black) |
| 34 » JS_STATIC_PROP_ENTRY(blue) | 33 JS_STATIC_PROP_ENTRY(blue) |
| 35 » JS_STATIC_PROP_ENTRY(cyan) | 34 JS_STATIC_PROP_ENTRY(cyan) |
| 36 » JS_STATIC_PROP_ENTRY(dkGray) | 35 JS_STATIC_PROP_ENTRY(dkGray) |
| 37 » JS_STATIC_PROP_ENTRY(gray) | 36 JS_STATIC_PROP_ENTRY(gray) |
| 38 » JS_STATIC_PROP_ENTRY(green) | 37 JS_STATIC_PROP_ENTRY(green) |
| 39 » JS_STATIC_PROP_ENTRY(ltGray) | 38 JS_STATIC_PROP_ENTRY(ltGray) |
| 40 » JS_STATIC_PROP_ENTRY(magenta) | 39 JS_STATIC_PROP_ENTRY(magenta) |
| 41 » JS_STATIC_PROP_ENTRY(red) | 40 JS_STATIC_PROP_ENTRY(red) |
| 42 » JS_STATIC_PROP_ENTRY(transparent) | 41 JS_STATIC_PROP_ENTRY(transparent) |
| 43 » JS_STATIC_PROP_ENTRY(white) | 42 JS_STATIC_PROP_ENTRY(white) |
| 44 » JS_STATIC_PROP_ENTRY(yellow) | 43 JS_STATIC_PROP_ENTRY(yellow) |
| 45 END_JS_STATIC_PROP() | 44 END_JS_STATIC_PROP() |
| 46 | 45 |
| 47 BEGIN_JS_STATIC_METHOD(CJS_Color) | 46 BEGIN_JS_STATIC_METHOD(CJS_Color) |
| 48 » JS_STATIC_METHOD_ENTRY(convert) | 47 JS_STATIC_METHOD_ENTRY(convert) |
| 49 » JS_STATIC_METHOD_ENTRY(equal) | 48 JS_STATIC_METHOD_ENTRY(equal) |
| 50 END_JS_STATIC_METHOD() | 49 END_JS_STATIC_METHOD() |
| 51 | 50 |
| 52 IMPLEMENT_JS_CLASS(CJS_Color,color) | 51 IMPLEMENT_JS_CLASS(CJS_Color, color) |
| 53 | 52 |
| 54 color::color(CJS_Object* pJSObject): CJS_EmbedObj(pJSObject) | 53 color::color(CJS_Object* pJSObject) : CJS_EmbedObj(pJSObject) { |
| 55 { | 54 m_crTransparent = CPWL_Color(COLORTYPE_TRANSPARENT); |
| 56 » m_crTransparent = CPWL_Color(COLORTYPE_TRANSPARENT); | 55 m_crBlack = CPWL_Color(COLORTYPE_GRAY, 0); |
| 57 » m_crBlack = CPWL_Color(COLORTYPE_GRAY, 0); | 56 m_crWhite = CPWL_Color(COLORTYPE_GRAY, 1); |
| 58 » m_crWhite = CPWL_Color(COLORTYPE_GRAY, 1); | 57 m_crRed = CPWL_Color(COLORTYPE_RGB, 1, 0, 0); |
| 59 » m_crRed = CPWL_Color(COLORTYPE_RGB, 1, 0 ,0); | 58 m_crGreen = CPWL_Color(COLORTYPE_RGB, 0, 1, 0); |
| 60 » m_crGreen = CPWL_Color(COLORTYPE_RGB, 0, 1 ,0); | 59 m_crBlue = CPWL_Color(COLORTYPE_RGB, 0, 0, 1); |
| 61 » m_crBlue = CPWL_Color(COLORTYPE_RGB, 0, 0 ,1); | 60 m_crCyan = CPWL_Color(COLORTYPE_CMYK, 1, 0, 0, 0); |
| 62 » m_crCyan = CPWL_Color(COLORTYPE_CMYK, 1, 0 ,0, 0); | 61 m_crMagenta = CPWL_Color(COLORTYPE_CMYK, 0, 1, 0, 0); |
| 63 » m_crMagenta = CPWL_Color(COLORTYPE_CMYK, 0, 1 ,0, 0); | 62 m_crYellow = CPWL_Color(COLORTYPE_CMYK, 0, 0, 1, 0); |
| 64 » m_crYellow = CPWL_Color(COLORTYPE_CMYK, 0, 0 ,1, 0); | 63 m_crDKGray = CPWL_Color(COLORTYPE_GRAY, 0.25); |
| 65 » m_crDKGray = CPWL_Color(COLORTYPE_GRAY, 0.25); | 64 m_crGray = CPWL_Color(COLORTYPE_GRAY, 0.5); |
| 66 » m_crGray = CPWL_Color(COLORTYPE_GRAY, 0.5); | 65 m_crLTGray = CPWL_Color(COLORTYPE_GRAY, 0.75); |
| 67 » m_crLTGray = CPWL_Color(COLORTYPE_GRAY, 0.75); | |
| 68 } | 66 } |
| 69 | 67 |
| 70 color::~color(void) | 68 color::~color(void) {} |
| 71 { | 69 |
| 70 void color::ConvertPWLColorToArray(const CPWL_Color& color, CJS_Array& array) { |
| 71 switch (color.nColorType) { |
| 72 case COLORTYPE_TRANSPARENT: |
| 73 array.SetElement(0, CJS_Value(array.GetIsolate(), "T")); |
| 74 break; |
| 75 case COLORTYPE_GRAY: |
| 76 array.SetElement(0, CJS_Value(array.GetIsolate(), "G")); |
| 77 array.SetElement(1, CJS_Value(array.GetIsolate(), color.fColor1)); |
| 78 break; |
| 79 case COLORTYPE_RGB: |
| 80 array.SetElement(0, CJS_Value(array.GetIsolate(), "RGB")); |
| 81 array.SetElement(1, CJS_Value(array.GetIsolate(), color.fColor1)); |
| 82 array.SetElement(2, CJS_Value(array.GetIsolate(), color.fColor2)); |
| 83 array.SetElement(3, CJS_Value(array.GetIsolate(), color.fColor3)); |
| 84 break; |
| 85 case COLORTYPE_CMYK: |
| 86 array.SetElement(0, CJS_Value(array.GetIsolate(), "CMYK")); |
| 87 array.SetElement(1, CJS_Value(array.GetIsolate(), color.fColor1)); |
| 88 array.SetElement(2, CJS_Value(array.GetIsolate(), color.fColor2)); |
| 89 array.SetElement(3, CJS_Value(array.GetIsolate(), color.fColor3)); |
| 90 array.SetElement(4, CJS_Value(array.GetIsolate(), color.fColor4)); |
| 91 break; |
| 92 } |
| 72 } | 93 } |
| 73 | 94 |
| 74 void color::ConvertPWLColorToArray(const CPWL_Color& color, CJS_Array& array) | 95 void color::ConvertArrayToPWLColor(CJS_Array& array, CPWL_Color& color) { |
| 75 { | 96 int nArrayLen = array.GetLength(); |
| 76 » switch (color.nColorType) | 97 if (nArrayLen < 1) |
| 77 » { | 98 return; |
| 78 » case COLORTYPE_TRANSPARENT: | 99 |
| 79 » » array.SetElement(0, CJS_Value(array.GetIsolate(), "T")); | 100 CJS_Value value(array.GetIsolate()); |
| 80 » » break; | 101 array.GetElement(0, value); |
| 81 » case COLORTYPE_GRAY: | 102 CFX_ByteString sSpace = value.ToCFXByteString(); |
| 82 » » array.SetElement(0, CJS_Value(array.GetIsolate(),"G")); | 103 |
| 83 » » array.SetElement(1, CJS_Value(array.GetIsolate(),color.fColor1))
; | 104 double d1 = 0; |
| 84 » » break; | 105 double d2 = 0; |
| 85 » case COLORTYPE_RGB: | 106 double d3 = 0; |
| 86 » » array.SetElement(0, CJS_Value(array.GetIsolate(),"RGB")); | 107 double d4 = 0; |
| 87 » » array.SetElement(1, CJS_Value(array.GetIsolate(),color.fColor1))
; | 108 |
| 88 » » array.SetElement(2, CJS_Value(array.GetIsolate(),color.fColor2))
; | 109 if (nArrayLen > 1) { |
| 89 » » array.SetElement(3, CJS_Value(array.GetIsolate(),color.fColor3))
; | 110 array.GetElement(1, value); |
| 90 » » break; | 111 d1 = value.ToDouble(); |
| 91 » case COLORTYPE_CMYK: | 112 } |
| 92 » » array.SetElement(0, CJS_Value(array.GetIsolate(),"CMYK")); | 113 |
| 93 » » array.SetElement(1, CJS_Value(array.GetIsolate(),color.fColor1))
; | 114 if (nArrayLen > 2) { |
| 94 » » array.SetElement(2, CJS_Value(array.GetIsolate(),color.fColor2))
; | 115 array.GetElement(2, value); |
| 95 » » array.SetElement(3, CJS_Value(array.GetIsolate(),color.fColor3))
; | 116 d2 = value.ToDouble(); |
| 96 » » array.SetElement(4, CJS_Value(array.GetIsolate(),color.fColor4))
; | 117 } |
| 97 » » break; | 118 |
| 98 » } | 119 if (nArrayLen > 3) { |
| 120 array.GetElement(3, value); |
| 121 d3 = value.ToDouble(); |
| 122 } |
| 123 |
| 124 if (nArrayLen > 4) { |
| 125 array.GetElement(4, value); |
| 126 d4 = value.ToDouble(); |
| 127 } |
| 128 |
| 129 if (sSpace == "T") { |
| 130 color = CPWL_Color(COLORTYPE_TRANSPARENT); |
| 131 } else if (sSpace == "G") { |
| 132 color = CPWL_Color(COLORTYPE_GRAY, (FX_FLOAT)d1); |
| 133 } else if (sSpace == "RGB") { |
| 134 color = CPWL_Color(COLORTYPE_RGB, (FX_FLOAT)d1, (FX_FLOAT)d2, (FX_FLOAT)d3); |
| 135 } else if (sSpace == "CMYK") { |
| 136 color = CPWL_Color(COLORTYPE_CMYK, (FX_FLOAT)d1, (FX_FLOAT)d2, (FX_FLOAT)d3, |
| 137 (FX_FLOAT)d4); |
| 138 } |
| 99 } | 139 } |
| 100 | 140 |
| 101 void color::ConvertArrayToPWLColor(CJS_Array& array, CPWL_Color& color) | 141 #define JS_IMPLEMENT_COLORPROP(prop, var) \ |
| 102 { | 142 FX_BOOL color::prop(IFXJS_Context* cc, CJS_PropValue& vp, \ |
| 103 » int nArrayLen = array.GetLength(); | 143 CFX_WideString& sError) { \ |
| 104 » if (nArrayLen < 1) return; | 144 CJS_Context* pContext = (CJS_Context*)cc; \ |
| 105 | 145 v8::Isolate* isolate = pContext->GetJSRuntime()->GetIsolate(); \ |
| 106 » CJS_Value value(array.GetIsolate()); | 146 if (vp.IsGetting()) { \ |
| 107 » array.GetElement(0, value); | 147 CJS_Array array(isolate); \ |
| 108 » CFX_ByteString sSpace = value.ToCFXByteString(); | 148 ConvertPWLColorToArray(var, array); \ |
| 109 | 149 vp << array; \ |
| 110 » double d1 = 0; | 150 } else { \ |
| 111 » double d2 = 0; | 151 CJS_Array array(isolate); \ |
| 112 » double d3 = 0; | 152 if (!vp.ConvertToArray(array)) \ |
| 113 » double d4 = 0; | 153 return FALSE; \ |
| 114 | 154 ConvertArrayToPWLColor(array, var); \ |
| 115 » if (nArrayLen > 1) | 155 } \ |
| 116 » { | 156 return TRUE; \ |
| 117 » » array.GetElement(1, value); | 157 } |
| 118 » » d1 = value.ToDouble(); | |
| 119 » } | |
| 120 | |
| 121 » if (nArrayLen > 2) | |
| 122 » { | |
| 123 » » array.GetElement(2, value); | |
| 124 » » d2 = value.ToDouble(); | |
| 125 » } | |
| 126 | |
| 127 » if (nArrayLen > 3) | |
| 128 » { | |
| 129 » » array.GetElement(3, value); | |
| 130 » » d3 = value.ToDouble(); | |
| 131 » } | |
| 132 | |
| 133 » if (nArrayLen > 4) | |
| 134 » { | |
| 135 » » array.GetElement(4, value); | |
| 136 » » d4 = value.ToDouble(); | |
| 137 » } | |
| 138 | |
| 139 » if (sSpace == "T") | |
| 140 » { | |
| 141 » » color = CPWL_Color(COLORTYPE_TRANSPARENT); | |
| 142 » } | |
| 143 » else if (sSpace == "G") | |
| 144 » { | |
| 145 » » color = CPWL_Color(COLORTYPE_GRAY, (FX_FLOAT)d1); | |
| 146 » } | |
| 147 » else if (sSpace == "RGB") | |
| 148 » { | |
| 149 » » color = CPWL_Color(COLORTYPE_RGB, (FX_FLOAT)d1, (FX_FLOAT)d2, (F
X_FLOAT)d3); | |
| 150 » } | |
| 151 » else if (sSpace == "CMYK") | |
| 152 » { | |
| 153 » » color = CPWL_Color(COLORTYPE_CMYK, (FX_FLOAT)d1, (FX_FLOAT)d2, (
FX_FLOAT)d3, (FX_FLOAT)d4); | |
| 154 » } | |
| 155 } | |
| 156 | |
| 157 #define JS_IMPLEMENT_COLORPROP(prop, var)\ | |
| 158 FX_BOOL color::prop(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError
)\ | |
| 159 {\ | |
| 160 » CJS_Context* pContext = (CJS_Context*)cc;\ | |
| 161 » v8::Isolate* isolate = pContext->GetJSRuntime()->GetIsolate();\ | |
| 162 » if (vp.IsGetting())\ | |
| 163 » {\ | |
| 164 » » CJS_Array array(isolate);\ | |
| 165 » » ConvertPWLColorToArray(var, array);\ | |
| 166 » » vp << array;\ | |
| 167 » }\ | |
| 168 » else\ | |
| 169 » {\ | |
| 170 » » CJS_Array array(isolate);\ | |
| 171 » » if (!vp.ConvertToArray(array)) return FALSE;\ | |
| 172 » » ConvertArrayToPWLColor(array, var);\ | |
| 173 » }\ | |
| 174 » return TRUE;\ | |
| 175 } | |
| 176 | 158 |
| 177 JS_IMPLEMENT_COLORPROP(transparent, m_crTransparent) | 159 JS_IMPLEMENT_COLORPROP(transparent, m_crTransparent) |
| 178 JS_IMPLEMENT_COLORPROP(black, m_crBlack) | 160 JS_IMPLEMENT_COLORPROP(black, m_crBlack) |
| 179 JS_IMPLEMENT_COLORPROP(white, m_crWhite) | 161 JS_IMPLEMENT_COLORPROP(white, m_crWhite) |
| 180 JS_IMPLEMENT_COLORPROP(red, m_crRed) | 162 JS_IMPLEMENT_COLORPROP(red, m_crRed) |
| 181 JS_IMPLEMENT_COLORPROP(green, m_crGreen) | 163 JS_IMPLEMENT_COLORPROP(green, m_crGreen) |
| 182 JS_IMPLEMENT_COLORPROP(blue, m_crBlue) | 164 JS_IMPLEMENT_COLORPROP(blue, m_crBlue) |
| 183 JS_IMPLEMENT_COLORPROP(cyan, m_crCyan) | 165 JS_IMPLEMENT_COLORPROP(cyan, m_crCyan) |
| 184 JS_IMPLEMENT_COLORPROP(magenta, m_crMagenta) | 166 JS_IMPLEMENT_COLORPROP(magenta, m_crMagenta) |
| 185 JS_IMPLEMENT_COLORPROP(yellow, m_crYellow) | 167 JS_IMPLEMENT_COLORPROP(yellow, m_crYellow) |
| 186 JS_IMPLEMENT_COLORPROP(dkGray, m_crDKGray) | 168 JS_IMPLEMENT_COLORPROP(dkGray, m_crDKGray) |
| 187 JS_IMPLEMENT_COLORPROP(gray, m_crGray) | 169 JS_IMPLEMENT_COLORPROP(gray, m_crGray) |
| 188 JS_IMPLEMENT_COLORPROP(ltGray, m_crLTGray) | 170 JS_IMPLEMENT_COLORPROP(ltGray, m_crLTGray) |
| 189 | 171 |
| 190 FX_BOOL color::convert(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Valu
e& vRet, CFX_WideString& sError) | 172 FX_BOOL color::convert(IFXJS_Context* cc, |
| 191 { | 173 const CJS_Parameters& params, |
| 192 » v8::Isolate* isolate = GetIsolate(cc); | 174 CJS_Value& vRet, |
| 193 » int iSize = params.size(); | 175 CFX_WideString& sError) { |
| 194 » if (iSize < 2) return FALSE; | 176 v8::Isolate* isolate = GetIsolate(cc); |
| 195 » CJS_Array aSource(isolate); | 177 int iSize = params.size(); |
| 196 » if (!params[0].ConvertToArray(aSource)) return FALSE; | 178 if (iSize < 2) |
| 179 return FALSE; |
| 180 CJS_Array aSource(isolate); |
| 181 if (!params[0].ConvertToArray(aSource)) |
| 182 return FALSE; |
| 197 | 183 |
| 198 » CPWL_Color crSource; | 184 CPWL_Color crSource; |
| 199 » ConvertArrayToPWLColor(aSource, crSource); | 185 ConvertArrayToPWLColor(aSource, crSource); |
| 200 | 186 |
| 201 » CFX_ByteString sDestSpace = params[1].ToCFXByteString(); | 187 CFX_ByteString sDestSpace = params[1].ToCFXByteString(); |
| 202 » int nColorType = COLORTYPE_TRANSPARENT; | 188 int nColorType = COLORTYPE_TRANSPARENT; |
| 203 | 189 |
| 204 » if (sDestSpace == "T") | 190 if (sDestSpace == "T") { |
| 205 » { | 191 nColorType = COLORTYPE_TRANSPARENT; |
| 206 » » nColorType = COLORTYPE_TRANSPARENT; | 192 } else if (sDestSpace == "G") { |
| 207 » } | 193 nColorType = COLORTYPE_GRAY; |
| 208 » else if (sDestSpace == "G") | 194 } else if (sDestSpace == "RGB") { |
| 209 » { | 195 nColorType = COLORTYPE_RGB; |
| 210 » » nColorType = COLORTYPE_GRAY; | 196 } else if (sDestSpace == "CMYK") { |
| 211 » } | 197 nColorType = COLORTYPE_CMYK; |
| 212 » else if (sDestSpace == "RGB") | 198 } |
| 213 » { | |
| 214 » » nColorType = COLORTYPE_RGB; | |
| 215 » } | |
| 216 » else if (sDestSpace == "CMYK") | |
| 217 » { | |
| 218 » » nColorType = COLORTYPE_CMYK; | |
| 219 » } | |
| 220 | 199 |
| 221 » CJS_Array aDest(isolate); | 200 CJS_Array aDest(isolate); |
| 222 » CPWL_Color crDest = crSource; | 201 CPWL_Color crDest = crSource; |
| 223 » crDest.ConvertColorType(nColorType); | 202 crDest.ConvertColorType(nColorType); |
| 224 » ConvertPWLColorToArray(crDest, aDest); | 203 ConvertPWLColorToArray(crDest, aDest); |
| 225 » vRet = aDest; | 204 vRet = aDest; |
| 226 | 205 |
| 227 » return TRUE; | 206 return TRUE; |
| 228 } | 207 } |
| 229 | 208 |
| 230 FX_BOOL color::equal(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value&
vRet, CFX_WideString& sError) | 209 FX_BOOL color::equal(IFXJS_Context* cc, |
| 231 { | 210 const CJS_Parameters& params, |
| 232 » v8::Isolate* isolate = GetIsolate(cc); | 211 CJS_Value& vRet, |
| 233 » if (params.size() < 2) return FALSE; | 212 CFX_WideString& sError) { |
| 213 v8::Isolate* isolate = GetIsolate(cc); |
| 214 if (params.size() < 2) |
| 215 return FALSE; |
| 234 | 216 |
| 235 » CJS_Array array1(isolate), array2(isolate); | 217 CJS_Array array1(isolate), array2(isolate); |
| 236 | 218 |
| 237 » if (!params[0].ConvertToArray(array1)) return FALSE; | 219 if (!params[0].ConvertToArray(array1)) |
| 238 » if (!params[1].ConvertToArray(array2)) return FALSE; | 220 return FALSE; |
| 221 if (!params[1].ConvertToArray(array2)) |
| 222 return FALSE; |
| 239 | 223 |
| 240 » CPWL_Color color1; | 224 CPWL_Color color1; |
| 241 » CPWL_Color color2; | 225 CPWL_Color color2; |
| 242 | 226 |
| 243 » ConvertArrayToPWLColor(array1, color1); | 227 ConvertArrayToPWLColor(array1, color1); |
| 244 » ConvertArrayToPWLColor(array2, color2); | 228 ConvertArrayToPWLColor(array2, color2); |
| 245 | 229 |
| 246 » color1.ConvertColorType(color2.nColorType); | 230 color1.ConvertColorType(color2.nColorType); |
| 247 | 231 |
| 248 » vRet = color1 == color2; | 232 vRet = color1 == color2; |
| 249 » return TRUE; | 233 return TRUE; |
| 250 } | 234 } |
| 251 | |
| OLD | NEW |