OLD | NEW |
1 | 1 |
2 /* | 2 /* |
3 * Copyright 2006 The Android Open Source Project | 3 * Copyright 2006 The Android Open Source Project |
4 * | 4 * |
5 * Use of this source code is governed by a BSD-style license that can be | 5 * Use of this source code is governed by a BSD-style license that can be |
6 * found in the LICENSE file. | 6 * found in the LICENSE file. |
7 */ | 7 */ |
8 | 8 |
9 | 9 |
10 #include "SkXfermode.h" | 10 #include "SkXfermode.h" |
(...skipping 382 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
393 int sa = SkGetPackedA32(src); | 393 int sa = SkGetPackedA32(src); |
394 int da = SkGetPackedA32(dst); | 394 int da = SkGetPackedA32(dst); |
395 int a = srcover_byte(sa, da); | 395 int a = srcover_byte(sa, da); |
396 int r = difference_byte(SkGetPackedR32(src), SkGetPackedR32(dst), sa, da); | 396 int r = difference_byte(SkGetPackedR32(src), SkGetPackedR32(dst), sa, da); |
397 int g = difference_byte(SkGetPackedG32(src), SkGetPackedG32(dst), sa, da); | 397 int g = difference_byte(SkGetPackedG32(src), SkGetPackedG32(dst), sa, da); |
398 int b = difference_byte(SkGetPackedB32(src), SkGetPackedB32(dst), sa, da); | 398 int b = difference_byte(SkGetPackedB32(src), SkGetPackedB32(dst), sa, da); |
399 return SkPackARGB32(a, r, g, b); | 399 return SkPackARGB32(a, r, g, b); |
400 } | 400 } |
401 | 401 |
402 // kExclusion_Mode | 402 // kExclusion_Mode |
403 static inline int exclusion_byte(int sc, int dc, int sa, int da) { | 403 static inline int exclusion_byte(int sc, int dc, int, int) { |
404 // this equations is wacky, wait for SVG to confirm it | 404 // this equations is wacky, wait for SVG to confirm it |
405 int r = sc * da + dc * sa - 2 * sc * dc + sc * (255 - da) + dc * (255 - sa); | 405 //int r = sc * da + dc * sa - 2 * sc * dc + sc * (255 - da) + dc * (255 - sa
); |
| 406 |
| 407 // The above equation can be simplified as follows |
| 408 int r = 255*(sc + dc) - 2 * sc * dc; |
406 return clamp_div255round(r); | 409 return clamp_div255round(r); |
407 } | 410 } |
408 static SkPMColor exclusion_modeproc(SkPMColor src, SkPMColor dst) { | 411 static SkPMColor exclusion_modeproc(SkPMColor src, SkPMColor dst) { |
409 int sa = SkGetPackedA32(src); | 412 int sa = SkGetPackedA32(src); |
410 int da = SkGetPackedA32(dst); | 413 int da = SkGetPackedA32(dst); |
411 int a = srcover_byte(sa, da); | 414 int a = srcover_byte(sa, da); |
412 int r = exclusion_byte(SkGetPackedR32(src), SkGetPackedR32(dst), sa, da); | 415 int r = exclusion_byte(SkGetPackedR32(src), SkGetPackedR32(dst), sa, da); |
413 int g = exclusion_byte(SkGetPackedG32(src), SkGetPackedG32(dst), sa, da); | 416 int g = exclusion_byte(SkGetPackedG32(src), SkGetPackedG32(dst), sa, da); |
414 int b = exclusion_byte(SkGetPackedB32(src), SkGetPackedB32(dst), sa, da); | 417 int b = exclusion_byte(SkGetPackedB32(src), SkGetPackedB32(dst), sa, da); |
415 return SkPackARGB32(a, r, g, b); | 418 return SkPackARGB32(a, r, g, b); |
(...skipping 1552 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1968 return proc16; | 1971 return proc16; |
1969 } | 1972 } |
1970 | 1973 |
1971 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkXfermode) | 1974 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkXfermode) |
1972 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkProcCoeffXfermode) | 1975 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkProcCoeffXfermode) |
1973 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkClearXfermode) | 1976 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkClearXfermode) |
1974 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkSrcXfermode) | 1977 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkSrcXfermode) |
1975 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkDstInXfermode) | 1978 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkDstInXfermode) |
1976 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkDstOutXfermode) | 1979 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkDstOutXfermode) |
1977 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END | 1980 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END |
OLD | NEW |