Fix burn and dodge operators to match acroread output
authorBenjamin Otte <otte@gnome.org>
Mon, 13 Jul 2009 22:02:09 +0000 (18:02 -0400)
committerSøren Sandmann Pedersen <sandmann@redhat.com>
Mon, 13 Jul 2009 22:02:09 +0000 (18:02 -0400)
pixman/pixman-combine.c.template

index 44a09ad..a937bf7 100644 (file)
@@ -538,7 +538,7 @@ static inline comp4_t
 blend_color_dodge (comp4_t dca, comp4_t da, comp4_t sca, comp4_t sa)
 {
     if (sca >= sa) {
-       return DIV_ONE_UNc (sa * da);
+       return dca == 0 ? 0 : DIV_ONE_UNc (sa * da);
     } else {
        comp4_t rca = dca * sa * sa / (sa - sca);
        return DIV_ONE_UNc (rca > sa * da ? sa * da : rca);
@@ -560,7 +560,7 @@ static inline comp4_t
 blend_color_burn (comp4_t dca, comp4_t da, comp4_t sca, comp4_t sa)
 {
     if (sca == 0) {
-       return 0;
+       return dca < da ? 0 : DIV_ONE_UNc (sa * da);
     } else {
        comp4_t sada = sa * da;
        comp4_t rca = (da - dca) * sa * sa / sca;