diff options
Diffstat (limited to 'skia/ext/skia_utils_win.cc')
-rw-r--r-- | skia/ext/skia_utils_win.cc | 21 |
1 files changed, 14 insertions, 7 deletions
diff --git a/skia/ext/skia_utils_win.cc b/skia/ext/skia_utils_win.cc index 4988a3a..97d793c 100644 --- a/skia/ext/skia_utils_win.cc +++ b/skia/ext/skia_utils_win.cc @@ -54,16 +54,23 @@ SkColor COLORREFToSkColor(COLORREF color) { } COLORREF SkColorToCOLORREF(SkColor color) { - // Currently, Alpha is always 255 or the color is 0 so there is no need to - // demultiply the channels. If this DCHECK() is ever hit, the full - // (SkColorGetX(color) * 255 / a) will have to be added in the conversion. - SkASSERT((0xFF == SkColorGetA(color)) || (0 == color)); + int alpha = SkColorGetA(color); + if (alpha == 0) + return 0; + + if (alpha == 0xFF) { + // Fast path. #ifndef _MSC_VER - return RGB(SkColorGetR(color), SkColorGetG(color), SkColorGetB(color)); + return RGB(SkColorGetR(color), SkColorGetG(color), SkColorGetB(color)); #else - // 0BGR = ((ARGB -> BGRA) >> 8) - return (_byteswap_ulong(color) >> 8); + // 0BGR = ((ARGB -> BGRA) >> 8) + return (_byteswap_ulong(color) >> 8); #endif + } + + return RGB(SkColorGetR(color) * 255 / alpha, + SkColorGetG(color) * 255 / alpha, + SkColorGetB(color) * 255 / alpha); } } // namespace skia |