Chromium Code Reviews| Index: LayoutTests/css3/compositing/svg-blend-multiply-expected.html |
| diff --git a/LayoutTests/css3/compositing/svg-blend-multiply-expected.html b/LayoutTests/css3/compositing/svg-blend-multiply-expected.html |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..cda571ca8813d5686b24d217867b7ddd5224af93 |
| --- /dev/null |
| +++ b/LayoutTests/css3/compositing/svg-blend-multiply-expected.html |
| @@ -0,0 +1,130 @@ |
| +<!DOCTYPE HTML> |
|
pdr.
2013/07/17 22:17:24
Because reftests can't be automatically rebaseline
|
| +<html> |
| +<head> |
| +<script> |
| +function camelCase(input) { |
| + return input.toLowerCase().replace(/-(.)/g, function(match, group1) { |
| + return group1.toUpperCase(); |
| + }); |
| +} |
| +window.addEventListener("load", function(){ |
| + var g = document.getElementById("emulate").firstElementChild; |
| + var rect = document.getElementById("r"); |
|
pdr.
2013/07/17 22:17:24
Too many id='r's! You may confuse getElementById's
|
| + var colors = [ [1, 0, 0, 1], [0, 1, 0, 1], [0, 0, 1, 1], [.5, .5, 0, 1]]; |
|
pdr.
2013/07/17 22:17:24
Are these just test colors? If so, can you do one
|
| + var blendmodes = ["normal", "multiply", "screen", "overlay", "darken", "lighten", "color-dodge","color-burn", "hard-light", "soft-light", "difference", "exclusion"]; |
| + var blendfunctions = { |
| + normal: function(a, b) { |
|
pdr.
2013/07/17 22:17:24
Nit: indent the blendFunctions
|
| + return a; |
| + }, |
| + multiply: function(a, b) { |
| + return a * b; |
| + }, |
| + screen: function(a, b) { |
| + return a + b - a * b; |
| + }, |
| + overlay: function(a, b) { |
| + return blendfunctions.hardLight(b, a); |
| + }, |
| + darken: function(a, b) { |
| + return Math.min(a, b); |
| + }, |
| + lighten: function(a, b) { |
| + return Math.max(a, b); |
| + }, |
| + colorDodge: function(a, b) { |
| + if(b == 0) |
| + return 0; |
| + if(a == 1) |
| + return 1; |
| + return Math.min(1, b / (1 - a)); |
| + }, |
| + colorBurn: function(a, b) { |
| + if(b == 1) |
| + return 1; |
| + if(a == 0) |
| + return 0; |
| + return 1 - Math.min(1, (1 - b) / a); |
| + }, |
| + hardLight: function(a, b) { |
| + if(a <= 0.5) |
| + return blendfunctions.multiply(b, 2 * a); |
|
pdr.
2013/07/17 22:17:24
indentation
|
| + |
| + return blendfunctions.screen(b, 2 * a - 1); |
| + }, |
| + softLight: function(a, b) { |
| + var c = 0; |
| + if(b <= 0.25) |
| + c = ((16 * b - 12) * b + 4) * b; |
| + else |
| + c = Math.sqrt(b); |
| + |
| + if(a <= 0.5) |
| + return b - (1 - 2 * a) * b * (1 - b); |
| + |
| + return b + (2 * a - 1) * (c - b); |
| + }, |
| + difference: function(a, b) { |
| + return Math.abs(a - b); |
| + }, |
| + exclusion: function(a, b) { |
| + return b + a - 2 * b * a; |
| + } |
| + }; |
| + var blend = function (a, b, f) { |
| + var ret = "rgba("; |
| + |
| + for(var z = 0; z < 3; z++) { |
| + var n = (a[3] * (1 - b[3]) * a[z] + a[3] * b[3] * f(a[z], b[z]) + (1 - a[3]) * b[3] * b[z]) * 255; |
| + ret += Math.floor(n) + ","; |
| + } |
| + return ret + "1)"; |
| + } |
| + blendmodes.forEach(function(b){ |
| + if(window.location.pathname.indexOf(b) != -1) |
| + for(var y = 0; y < 4; y++) { |
| + for(var x = 0; x < 4; x++) { |
| + var newrect = rect.cloneNode(0); |
|
pdr.
2013/07/17 22:17:24
I'm confused how this works. The test file has jus
|
| + newrect.x.baseVal.value = x * 10; |
| + newrect.y.baseVal.value = y * 10; |
| + newrect.attributes.fill.value = blend(colors[y], colors[x], blendfunctions[camelCase(b)]); |
| + g.appendChild(newrect); |
| + } |
| + } |
| + }); |
| +}); |
| +</script> |
| +</head> |
| +<body> |
| +<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="400px" height="400px"> |
| +<defs> |
| + <g id="patch"> |
|
pdr.
2013/07/17 22:17:24
Is patch used?
|
| + <rect x="0" y="0" width="10" height="40" fill="rgb(255,0,0)"></rect> |
| + <rect x="10" y="0" width="10" height="40" fill="rgb(0,255,0)"></rect> |
| + <rect x="20" y="0" width="10" height="40" fill="rgb(0,0,255)"></rect> |
| + <rect x="30" y="0" width="10" height="40" fill="rgb(255,255,0)"></rect> |
| + </g> |
| + <rect id="r" x="0" y="0" width="10" height="10" fill="rgb(255,0,0)"></rect> |
| +</defs> |
| +<g id="emulate" transform="scale(4 4)"> |
| + <g> |
| + <rect id="r" x="0" y="0" width="10" height="10" fill="rgba(255,0,0,1)"></rect> |
| + <rect id="r" x="10" y="0" width="10" height="10" fill="rgba(0,0,0,1)"></rect> |
| + <rect id="r" x="20" y="0" width="10" height="10" fill="rgba(0,0,0,1)"></rect> |
| + <rect id="r" x="30" y="0" width="10" height="10" fill="rgba(127,0,0,1)"></rect> |
| + <rect id="r" x="0" y="10" width="10" height="10" fill="rgba(0,0,0,1)"></rect> |
| + <rect id="r" x="10" y="10" width="10" height="10" fill="rgba(0,255,0,1)"></rect> |
| + <rect id="r" x="20" y="10" width="10" height="10" fill="rgba(0,0,0,1)"></rect> |
| + <rect id="r" x="30" y="10" width="10" height="10" fill="rgba(0,127,0,1)"></rect> |
| + <rect id="r" x="0" y="20" width="10" height="10" fill="rgba(0,0,0,1)"></rect> |
| + <rect id="r" x="10" y="20" width="10" height="10" fill="rgba(0,0,0,1)"></rect> |
| + <rect id="r" x="20" y="20" width="10" height="10" fill="rgba(0,0,255,1)"></rect> |
| + <rect id="r" x="30" y="20" width="10" height="10" fill="rgba(0,0,0,1)"></rect> |
| + <rect id="r" x="0" y="30" width="10" height="10" fill="rgba(127,0,0,1)"></rect> |
| + <rect id="r" x="10" y="30" width="10" height="10" fill="rgba(0,127,0,1)"></rect> |
| + <rect id="r" x="20" y="30" width="10" height="10" fill="rgba(0,0,0,1)"></rect> |
| + <rect id="r" x="30" y="30" width="10" height="10" fill="rgba(63,63,0,1)"></rect> |
| + </g> |
| +</g> |
| +</svg> |
| +</body> |
| +</html> |