--- pixman/pixman/pixman-compose.c.old 2007-11-28 16:21:58.809105000 +0800 +++ pixman/pixman/pixman-compose.c 2007-11-28 16:23:52.669312000 +0800 @@ -1803,11 +1803,17 @@ int i; for (i = 0; i < width; ++i) { uint32_t s = *(src + i); - uint32_t d = *(dest + i); uint32_t ia = Alpha(~s); - FbByteMulAdd(d, ia, s); - *(dest + i) = d; + if (ia == 0) { + *(dest + i) = s; + } + else { + uint32_t d = *(dest + i); + FbByteMulAdd(d, ia, s); + *(dest + i) = d; + } + } } @@ -1831,8 +1837,16 @@ for (i = 0; i < width; ++i) { uint32_t s = *(src + i); uint32_t a = Alpha(*(dest + i)); - FbByteMul(s, a); - *(dest + i) = s; + + if (a == 0xff) + { + *(dest + i) = s; + } + else + { + FbByteMul(s, a); + *(dest + i) = s; + } } }