| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2003, 2004, 2005, 2006, 2008 Apple Inc. All rights reserved. | 2 * Copyright (C) 2003, 2004, 2005, 2006, 2008 Apple Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
| 6 * are met: | 6 * are met: |
| 7 * 1. Redistributions of source code must retain the above copyright | 7 * 1. Redistributions of source code must retain the above copyright |
| 8 * notice, this list of conditions and the following disclaimer. | 8 * notice, this list of conditions and the following disclaimer. |
| 9 * 2. Redistributions in binary form must reproduce the above copyright | 9 * 2. Redistributions in binary form must reproduce the above copyright |
| 10 * notice, this list of conditions and the following disclaimer in the | 10 * notice, this list of conditions and the following disclaimer in the |
| (...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 112 int r = static_cast<int>(nextafter(256, 0) * (colors * (1 - c))); | 112 int r = static_cast<int>(nextafter(256, 0) * (colors * (1 - c))); |
| 113 int g = static_cast<int>(nextafter(256, 0) * (colors * (1 - m))); | 113 int g = static_cast<int>(nextafter(256, 0) * (colors * (1 - m))); |
| 114 int b = static_cast<int>(nextafter(256, 0) * (colors * (1 - y))); | 114 int b = static_cast<int>(nextafter(256, 0) * (colors * (1 - y))); |
| 115 return makeRGBA(r, g, b, static_cast<float>(nextafter(256, 0) * a)); | 115 return makeRGBA(r, g, b, static_cast<float>(nextafter(256, 0) * a)); |
| 116 } | 116 } |
| 117 | 117 |
| 118 // originally moved here from the CSS parser | 118 // originally moved here from the CSS parser |
| 119 template <typename CharacterType> | 119 template <typename CharacterType> |
| 120 static inline bool parseHexColorInternal(const CharacterType* name, unsigned len
gth, RGBA32& rgb) | 120 static inline bool parseHexColorInternal(const CharacterType* name, unsigned len
gth, RGBA32& rgb) |
| 121 { | 121 { |
| 122 if (length != 3 && length != 6) | 122 if (length != 3 && length != 4 && length != 6 && length != 8) |
| 123 return false; | 123 return false; |
| 124 unsigned value = 0; | 124 unsigned value = 0; |
| 125 for (unsigned i = 0; i < length; ++i) { | 125 for (unsigned i = 0; i < length; ++i) { |
| 126 if (!isASCIIHexDigit(name[i])) | 126 if (!isASCIIHexDigit(name[i])) |
| 127 return false; | 127 return false; |
| 128 value <<= 4; | 128 value <<= 4; |
| 129 value |= toASCIIHexValue(name[i]); | 129 value |= toASCIIHexValue(name[i]); |
| 130 } | 130 } |
| 131 if (length == 6) { | 131 if (length == 6) { |
| 132 rgb = 0xFF000000 | value; | 132 rgb = 0xFF000000 | value; |
| 133 return true; | 133 return true; |
| 134 } | 134 } |
| 135 if (length == 8) { |
| 136 // We parsed the values into RGBA order, but the RGBA32 type |
| 137 // expects them to be in ARGB order, so we right rotate eight bits. |
| 138 rgb = value << 24 | value >> 8; |
| 139 return true; |
| 140 } |
| 141 if (length == 4) { |
| 142 // #abcd converts to ddaabbcc in RGBA32. |
| 143 rgb = (value & 0xF) << 28 | (value & 0xF) << 24 |
| 144 | (value & 0xF000) << 8 | (value & 0xF000) << 4 |
| 145 | (value & 0xF00) << 4 | (value & 0xF00) |
| 146 | (value & 0xF0) | (value & 0xF0) >> 4; |
| 147 return true; |
| 148 } |
| 135 // #abc converts to #aabbcc | 149 // #abc converts to #aabbcc |
| 136 rgb = 0xFF000000 | 150 rgb = 0xFF000000 |
| 137 | (value & 0xF00) << 12 | (value & 0xF00) << 8 | 151 | (value & 0xF00) << 12 | (value & 0xF00) << 8 |
| 138 | (value & 0xF0) << 8 | (value & 0xF0) << 4 | 152 | (value & 0xF0) << 8 | (value & 0xF0) << 4 |
| 139 | (value & 0xF) << 4 | (value & 0xF); | 153 | (value & 0xF) << 4 | (value & 0xF); |
| 140 return true; | 154 return true; |
| 141 } | 155 } |
| 142 | 156 |
| 143 bool Color::parseHexColor(const LChar* name, unsigned length, RGBA32& rgb) | 157 bool Color::parseHexColor(const LChar* name, unsigned length, RGBA32& rgb) |
| 144 { | 158 { |
| (...skipping 303 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 448 (color.green() * alpha + 254) / 255, | 462 (color.green() * alpha + 254) / 255, |
| 449 (color.blue() * alpha + 254) / 255, | 463 (color.blue() * alpha + 254) / 255, |
| 450 alpha).rgb(); | 464 alpha).rgb(); |
| 451 } else | 465 } else |
| 452 pixelColor = color.rgb(); | 466 pixelColor = color.rgb(); |
| 453 | 467 |
| 454 return pixelColor; | 468 return pixelColor; |
| 455 } | 469 } |
| 456 | 470 |
| 457 } // namespace blink | 471 } // namespace blink |
| OLD | NEW |