diff options
author | mtklein <mtklein@chromium.org> | 2015-06-29 12:04:10 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-06-29 12:04:10 -0700 |
commit | b743c6679abeeeab998a1147fd6aefd3b4d1fcd9 (patch) | |
tree | da49a2527718a42746f4088bf4ff5b41fe75279c /src/core | |
parent | 218f21ac09c70b98a10cb8e1999b85a22fa0b151 (diff) |
Edges matter, part 2.
Affected modes: lighten, hard-light, overlay (== hard-light).
This fixes a couple places where I used < when I should have used <=,
or swapped the logic as I've done here.
Caught by layout tests; our tests should be unchanged.
https://storage.googleapis.com/chromium-layout-test-archives/linux_blink_rel/68935/layout-test-results/css3/blending/background-blend-mode-crossfade-image-gradient-diffs.html
BUG=skia:
Review URL: https://codereview.chromium.org/1217013003
Diffstat (limited to 'src/core')
-rw-r--r-- | src/core/Sk4pxXfermode.h | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/src/core/Sk4pxXfermode.h b/src/core/Sk4pxXfermode.h index b587183046..e40d2ebb30 100644 --- a/src/core/Sk4pxXfermode.h +++ b/src/core/Sk4pxXfermode.h @@ -68,15 +68,15 @@ XFERMODE(HardLight) { auto sa = s.alphas(), da = d.alphas(); - auto isDark = s < (sa-s); + auto isLite = (sa-s) < s; auto dark = s*d << 1, lite = sa*da - ((da-d)*(sa-s) << 1), both = s*da.inv() + d*sa.inv(); - // TODO: do isDark in 16-bit so we only have to div255() once. - auto colors = isDark.thenElse((dark + both).div255(), - (lite + both).div255()); + // TODO: do isLite in 16-bit so we only have to div255() once. + auto colors = isLite.thenElse((lite + both).div255(), + (dark + both).div255()); return alphas.zeroColors() + colors.zeroAlphas(); } XFERMODE(Overlay) { return HardLight::Xfer(d,s); } @@ -96,7 +96,7 @@ XFERMODE(Lighten) { auto srcover = s + (d - dsa), dstover = d + (s - sda); auto alphas = srcover, - colors = (sda < dsa).thenElse(dstover, srcover); + colors = (dsa < sda).thenElse(srcover, dstover); return alphas.zeroColors() + colors.zeroAlphas(); } #undef XFERMODE |