Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

<!DOCTYPE html>
<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. -->
<html class="reftest-wait">
<link rel="match" href="2d.layer.globalCompositeOperation-expected.html">
<title>Canvas test: 2d.layer.globalCompositeOperation</title>
<h1 style="font-size: 20px;">2d.layer.globalCompositeOperation</h1>
<p class="desc">Checks that layers work with all globalCompositeOperation values.</p>
<script>pending_tests = 25;</script>
<div style="display: grid; grid-gap: 4px;
grid-template-columns: repeat(7, max-content);
font-size: 13px; text-align: center;">
<span>
<div>source-over</div>
<canvas id="canvas0" width="90" height="90" style="outline: 1px solid">
<p class="fallback">FAIL (fallback content)</p>
</canvas>
<script id="myWorker0" type="text/worker">
self.onmessage = function(e) {
const canvas = new OffscreenCanvas(90, 90);
const ctx = canvas.getContext('2d');
ctx.translate(50, 50);
ctx.scale(2, 2);
ctx.rotate(Math.PI);
ctx.translate(-25, -25);
ctx.fillStyle = 'rgba(0, 0, 255, 0.8)';
ctx.fillRect(15, 15, 25, 25);
ctx.globalAlpha = 0.75;
ctx.globalCompositeOperation = 'source-over';
ctx.shadowOffsetX = 7;
ctx.shadowOffsetY = 7;
ctx.shadowColor = 'rgba(255, 165, 0, 0.5)';
ctx.beginLayer();
ctx.fillStyle = 'rgba(204, 0, 0, 1)';
ctx.fillRect(10, 25, 25, 20);
ctx.fillStyle = 'rgba(0, 204, 0, 1)';
ctx.fillRect(25, 10, 20, 25);
ctx.endLayer();
const bitmap = canvas.transferToImageBitmap();
self.postMessage(bitmap, bitmap);
};
</script>
<script type="module">
const blob = new Blob([document.getElementById('myWorker0').textContent]);
const worker = new Worker(URL.createObjectURL(blob));
worker.addEventListener('message', msg => {
const outputCanvas = document.getElementById('canvas0');
const outputCtx = outputCanvas.getContext('2d');
outputCtx.drawImage(msg.data, 0, 0);
if (--pending_tests == 0) {
document.documentElement.classList.remove('reftest-wait');
}
});
worker.postMessage(null);
</script>
</span>
<span>
<div>source-in</div>
<canvas id="canvas1" width="90" height="90" style="outline: 1px solid">
<p class="fallback">FAIL (fallback content)</p>
</canvas>
<script id="myWorker1" type="text/worker">
self.onmessage = function(e) {
const canvas = new OffscreenCanvas(90, 90);
const ctx = canvas.getContext('2d');
ctx.translate(50, 50);
ctx.scale(2, 2);
ctx.rotate(Math.PI);
ctx.translate(-25, -25);
ctx.fillStyle = 'rgba(0, 0, 255, 0.8)';
ctx.fillRect(15, 15, 25, 25);
ctx.globalAlpha = 0.75;
ctx.globalCompositeOperation = 'source-in';
ctx.shadowOffsetX = 7;
ctx.shadowOffsetY = 7;
ctx.shadowColor = 'rgba(255, 165, 0, 0.5)';
ctx.beginLayer();
ctx.fillStyle = 'rgba(204, 0, 0, 1)';
ctx.fillRect(10, 25, 25, 20);
ctx.fillStyle = 'rgba(0, 204, 0, 1)';
ctx.fillRect(25, 10, 20, 25);
ctx.endLayer();
const bitmap = canvas.transferToImageBitmap();
self.postMessage(bitmap, bitmap);
};
</script>
<script type="module">
const blob = new Blob([document.getElementById('myWorker1').textContent]);
const worker = new Worker(URL.createObjectURL(blob));
worker.addEventListener('message', msg => {
const outputCanvas = document.getElementById('canvas1');
const outputCtx = outputCanvas.getContext('2d');
outputCtx.drawImage(msg.data, 0, 0);
if (--pending_tests == 0) {
document.documentElement.classList.remove('reftest-wait');
}
});
worker.postMessage(null);
</script>
</span>
<span>
<div>source-atop</div>
<canvas id="canvas2" width="90" height="90" style="outline: 1px solid">
<p class="fallback">FAIL (fallback content)</p>
</canvas>
<script id="myWorker2" type="text/worker">
self.onmessage = function(e) {
const canvas = new OffscreenCanvas(90, 90);
const ctx = canvas.getContext('2d');
ctx.translate(50, 50);
ctx.scale(2, 2);
ctx.rotate(Math.PI);
ctx.translate(-25, -25);
ctx.fillStyle = 'rgba(0, 0, 255, 0.8)';
ctx.fillRect(15, 15, 25, 25);
ctx.globalAlpha = 0.75;
ctx.globalCompositeOperation = 'source-atop';
ctx.shadowOffsetX = 7;
ctx.shadowOffsetY = 7;
ctx.shadowColor = 'rgba(255, 165, 0, 0.5)';
ctx.beginLayer();
ctx.fillStyle = 'rgba(204, 0, 0, 1)';
ctx.fillRect(10, 25, 25, 20);
ctx.fillStyle = 'rgba(0, 204, 0, 1)';
ctx.fillRect(25, 10, 20, 25);
ctx.endLayer();
const bitmap = canvas.transferToImageBitmap();
self.postMessage(bitmap, bitmap);
};
</script>
<script type="module">
const blob = new Blob([document.getElementById('myWorker2').textContent]);
const worker = new Worker(URL.createObjectURL(blob));
worker.addEventListener('message', msg => {
const outputCanvas = document.getElementById('canvas2');
const outputCtx = outputCanvas.getContext('2d');
outputCtx.drawImage(msg.data, 0, 0);
if (--pending_tests == 0) {
document.documentElement.classList.remove('reftest-wait');
}
});
worker.postMessage(null);
</script>
</span>
<span>
<div>destination-over</div>
<canvas id="canvas3" width="90" height="90" style="outline: 1px solid">
<p class="fallback">FAIL (fallback content)</p>
</canvas>
<script id="myWorker3" type="text/worker">
self.onmessage = function(e) {
const canvas = new OffscreenCanvas(90, 90);
const ctx = canvas.getContext('2d');
ctx.translate(50, 50);
ctx.scale(2, 2);
ctx.rotate(Math.PI);
ctx.translate(-25, -25);
ctx.fillStyle = 'rgba(0, 0, 255, 0.8)';
ctx.fillRect(15, 15, 25, 25);
ctx.globalAlpha = 0.75;
ctx.globalCompositeOperation = 'destination-over';
ctx.shadowOffsetX = 7;
ctx.shadowOffsetY = 7;
ctx.shadowColor = 'rgba(255, 165, 0, 0.5)';
ctx.beginLayer();
ctx.fillStyle = 'rgba(204, 0, 0, 1)';
ctx.fillRect(10, 25, 25, 20);
ctx.fillStyle = 'rgba(0, 204, 0, 1)';
ctx.fillRect(25, 10, 20, 25);
ctx.endLayer();
const bitmap = canvas.transferToImageBitmap();
self.postMessage(bitmap, bitmap);
};
</script>
<script type="module">
const blob = new Blob([document.getElementById('myWorker3').textContent]);
const worker = new Worker(URL.createObjectURL(blob));
worker.addEventListener('message', msg => {
const outputCanvas = document.getElementById('canvas3');
const outputCtx = outputCanvas.getContext('2d');
outputCtx.drawImage(msg.data, 0, 0);
if (--pending_tests == 0) {
document.documentElement.classList.remove('reftest-wait');
}
});
worker.postMessage(null);
</script>
</span>
<span>
<div>destination-in</div>
<canvas id="canvas4" width="90" height="90" style="outline: 1px solid">
<p class="fallback">FAIL (fallback content)</p>
</canvas>
<script id="myWorker4" type="text/worker">
self.onmessage = function(e) {
const canvas = new OffscreenCanvas(90, 90);
const ctx = canvas.getContext('2d');
ctx.translate(50, 50);
ctx.scale(2, 2);
ctx.rotate(Math.PI);
ctx.translate(-25, -25);
ctx.fillStyle = 'rgba(0, 0, 255, 0.8)';
ctx.fillRect(15, 15, 25, 25);
ctx.globalAlpha = 0.75;
ctx.globalCompositeOperation = 'destination-in';
ctx.shadowOffsetX = 7;
ctx.shadowOffsetY = 7;
ctx.shadowColor = 'rgba(255, 165, 0, 0.5)';
ctx.beginLayer();
ctx.fillStyle = 'rgba(204, 0, 0, 1)';
ctx.fillRect(10, 25, 25, 20);
ctx.fillStyle = 'rgba(0, 204, 0, 1)';
ctx.fillRect(25, 10, 20, 25);
ctx.endLayer();
const bitmap = canvas.transferToImageBitmap();
self.postMessage(bitmap, bitmap);
};
</script>
<script type="module">
const blob = new Blob([document.getElementById('myWorker4').textContent]);
const worker = new Worker(URL.createObjectURL(blob));
worker.addEventListener('message', msg => {
const outputCanvas = document.getElementById('canvas4');
const outputCtx = outputCanvas.getContext('2d');
outputCtx.drawImage(msg.data, 0, 0);
if (--pending_tests == 0) {
document.documentElement.classList.remove('reftest-wait');
}
});
worker.postMessage(null);
</script>
</span>
<span>
<div>destination-out</div>
<canvas id="canvas5" width="90" height="90" style="outline: 1px solid">
<p class="fallback">FAIL (fallback content)</p>
</canvas>
<script id="myWorker5" type="text/worker">
self.onmessage = function(e) {
const canvas = new OffscreenCanvas(90, 90);
const ctx = canvas.getContext('2d');
ctx.translate(50, 50);
ctx.scale(2, 2);
ctx.rotate(Math.PI);
ctx.translate(-25, -25);
ctx.fillStyle = 'rgba(0, 0, 255, 0.8)';
ctx.fillRect(15, 15, 25, 25);
ctx.globalAlpha = 0.75;
ctx.globalCompositeOperation = 'destination-out';
ctx.shadowOffsetX = 7;
ctx.shadowOffsetY = 7;
ctx.shadowColor = 'rgba(255, 165, 0, 0.5)';
ctx.beginLayer();
ctx.fillStyle = 'rgba(204, 0, 0, 1)';
ctx.fillRect(10, 25, 25, 20);
ctx.fillStyle = 'rgba(0, 204, 0, 1)';
ctx.fillRect(25, 10, 20, 25);
ctx.endLayer();
const bitmap = canvas.transferToImageBitmap();
self.postMessage(bitmap, bitmap);
};
</script>
<script type="module">
const blob = new Blob([document.getElementById('myWorker5').textContent]);
const worker = new Worker(URL.createObjectURL(blob));
worker.addEventListener('message', msg => {
const outputCanvas = document.getElementById('canvas5');
const outputCtx = outputCanvas.getContext('2d');
outputCtx.drawImage(msg.data, 0, 0);
if (--pending_tests == 0) {
document.documentElement.classList.remove('reftest-wait');
}
});
worker.postMessage(null);
</script>
</span>
<span>
<div>destination-atop</div>
<canvas id="canvas6" width="90" height="90" style="outline: 1px solid">
<p class="fallback">FAIL (fallback content)</p>
</canvas>
<script id="myWorker6" type="text/worker">
self.onmessage = function(e) {
const canvas = new OffscreenCanvas(90, 90);
const ctx = canvas.getContext('2d');
ctx.translate(50, 50);
ctx.scale(2, 2);
ctx.rotate(Math.PI);
ctx.translate(-25, -25);
ctx.fillStyle = 'rgba(0, 0, 255, 0.8)';
ctx.fillRect(15, 15, 25, 25);
ctx.globalAlpha = 0.75;
ctx.globalCompositeOperation = 'destination-atop';
ctx.shadowOffsetX = 7;
ctx.shadowOffsetY = 7;
ctx.shadowColor = 'rgba(255, 165, 0, 0.5)';
ctx.beginLayer();
ctx.fillStyle = 'rgba(204, 0, 0, 1)';
ctx.fillRect(10, 25, 25, 20);
ctx.fillStyle = 'rgba(0, 204, 0, 1)';
ctx.fillRect(25, 10, 20, 25);
ctx.endLayer();
const bitmap = canvas.transferToImageBitmap();
self.postMessage(bitmap, bitmap);
};
</script>
<script type="module">
const blob = new Blob([document.getElementById('myWorker6').textContent]);
const worker = new Worker(URL.createObjectURL(blob));
worker.addEventListener('message', msg => {
const outputCanvas = document.getElementById('canvas6');
const outputCtx = outputCanvas.getContext('2d');
outputCtx.drawImage(msg.data, 0, 0);
if (--pending_tests == 0) {
document.documentElement.classList.remove('reftest-wait');
}
});
worker.postMessage(null);
</script>
</span>
<span>
<div>lighter</div>
<canvas id="canvas7" width="90" height="90" style="outline: 1px solid">
<p class="fallback">FAIL (fallback content)</p>
</canvas>
<script id="myWorker7" type="text/worker">
self.onmessage = function(e) {
const canvas = new OffscreenCanvas(90, 90);
const ctx = canvas.getContext('2d');
ctx.translate(50, 50);
ctx.scale(2, 2);
ctx.rotate(Math.PI);
ctx.translate(-25, -25);
ctx.fillStyle = 'rgba(0, 0, 255, 0.8)';
ctx.fillRect(15, 15, 25, 25);
ctx.globalAlpha = 0.75;
ctx.globalCompositeOperation = 'lighter';
ctx.shadowOffsetX = 7;
ctx.shadowOffsetY = 7;
ctx.shadowColor = 'rgba(255, 165, 0, 0.5)';
ctx.beginLayer();
ctx.fillStyle = 'rgba(204, 0, 0, 1)';
ctx.fillRect(10, 25, 25, 20);
ctx.fillStyle = 'rgba(0, 204, 0, 1)';
ctx.fillRect(25, 10, 20, 25);
ctx.endLayer();
const bitmap = canvas.transferToImageBitmap();
self.postMessage(bitmap, bitmap);
};
</script>
<script type="module">
const blob = new Blob([document.getElementById('myWorker7').textContent]);
const worker = new Worker(URL.createObjectURL(blob));
worker.addEventListener('message', msg => {
const outputCanvas = document.getElementById('canvas7');
const outputCtx = outputCanvas.getContext('2d');
outputCtx.drawImage(msg.data, 0, 0);
if (--pending_tests == 0) {
document.documentElement.classList.remove('reftest-wait');
}
});
worker.postMessage(null);
</script>
</span>
<span>
<div>copy</div>
<canvas id="canvas8" width="90" height="90" style="outline: 1px solid">
<p class="fallback">FAIL (fallback content)</p>
</canvas>
<script id="myWorker8" type="text/worker">
self.onmessage = function(e) {
const canvas = new OffscreenCanvas(90, 90);
const ctx = canvas.getContext('2d');
ctx.translate(50, 50);
ctx.scale(2, 2);
ctx.rotate(Math.PI);
ctx.translate(-25, -25);
ctx.fillStyle = 'rgba(0, 0, 255, 0.8)';
ctx.fillRect(15, 15, 25, 25);
ctx.globalAlpha = 0.75;
ctx.globalCompositeOperation = 'copy';
ctx.shadowOffsetX = 7;
ctx.shadowOffsetY = 7;
ctx.shadowColor = 'rgba(255, 165, 0, 0.5)';
ctx.beginLayer();
ctx.fillStyle = 'rgba(204, 0, 0, 1)';
ctx.fillRect(10, 25, 25, 20);
ctx.fillStyle = 'rgba(0, 204, 0, 1)';
ctx.fillRect(25, 10, 20, 25);
ctx.endLayer();
const bitmap = canvas.transferToImageBitmap();
self.postMessage(bitmap, bitmap);
};
</script>
<script type="module">
const blob = new Blob([document.getElementById('myWorker8').textContent]);
const worker = new Worker(URL.createObjectURL(blob));
worker.addEventListener('message', msg => {
const outputCanvas = document.getElementById('canvas8');
const outputCtx = outputCanvas.getContext('2d');
outputCtx.drawImage(msg.data, 0, 0);
if (--pending_tests == 0) {
document.documentElement.classList.remove('reftest-wait');
}
});
worker.postMessage(null);
</script>
</span>
<span>
<div>xor</div>
<canvas id="canvas9" width="90" height="90" style="outline: 1px solid">
<p class="fallback">FAIL (fallback content)</p>
</canvas>
<script id="myWorker9" type="text/worker">
self.onmessage = function(e) {
const canvas = new OffscreenCanvas(90, 90);
const ctx = canvas.getContext('2d');
ctx.translate(50, 50);
ctx.scale(2, 2);
ctx.rotate(Math.PI);
ctx.translate(-25, -25);
ctx.fillStyle = 'rgba(0, 0, 255, 0.8)';
ctx.fillRect(15, 15, 25, 25);
ctx.globalAlpha = 0.75;
ctx.globalCompositeOperation = 'xor';
ctx.shadowOffsetX = 7;
ctx.shadowOffsetY = 7;
ctx.shadowColor = 'rgba(255, 165, 0, 0.5)';
ctx.beginLayer();
ctx.fillStyle = 'rgba(204, 0, 0, 1)';
ctx.fillRect(10, 25, 25, 20);
ctx.fillStyle = 'rgba(0, 204, 0, 1)';
ctx.fillRect(25, 10, 20, 25);
ctx.endLayer();
const bitmap = canvas.transferToImageBitmap();
self.postMessage(bitmap, bitmap);
};
</script>
<script type="module">
const blob = new Blob([document.getElementById('myWorker9').textContent]);
const worker = new Worker(URL.createObjectURL(blob));
worker.addEventListener('message', msg => {
const outputCanvas = document.getElementById('canvas9');
const outputCtx = outputCanvas.getContext('2d');
outputCtx.drawImage(msg.data, 0, 0);
if (--pending_tests == 0) {
document.documentElement.classList.remove('reftest-wait');
}
});
worker.postMessage(null);
</script>
</span>
<span>
<div>multiply</div>
<canvas id="canvas10" width="90" height="90" style="outline: 1px solid">
<p class="fallback">FAIL (fallback content)</p>
</canvas>
<script id="myWorker10" type="text/worker">
self.onmessage = function(e) {
const canvas = new OffscreenCanvas(90, 90);
const ctx = canvas.getContext('2d');
ctx.translate(50, 50);
ctx.scale(2, 2);
ctx.rotate(Math.PI);
ctx.translate(-25, -25);
ctx.fillStyle = 'rgba(0, 0, 255, 0.8)';
ctx.fillRect(15, 15, 25, 25);
ctx.globalAlpha = 0.75;
ctx.globalCompositeOperation = 'multiply';
ctx.shadowOffsetX = 7;
ctx.shadowOffsetY = 7;
ctx.shadowColor = 'rgba(255, 165, 0, 0.5)';
ctx.beginLayer();
ctx.fillStyle = 'rgba(204, 0, 0, 1)';
ctx.fillRect(10, 25, 25, 20);
ctx.fillStyle = 'rgba(0, 204, 0, 1)';
ctx.fillRect(25, 10, 20, 25);
ctx.endLayer();
const bitmap = canvas.transferToImageBitmap();
self.postMessage(bitmap, bitmap);
};
</script>
<script type="module">
const blob = new Blob([document.getElementById('myWorker10').textContent]);
const worker = new Worker(URL.createObjectURL(blob));
worker.addEventListener('message', msg => {
const outputCanvas = document.getElementById('canvas10');
const outputCtx = outputCanvas.getContext('2d');
outputCtx.drawImage(msg.data, 0, 0);
if (--pending_tests == 0) {
document.documentElement.classList.remove('reftest-wait');
}
});
worker.postMessage(null);
</script>
</span>
<span>
<div>screen</div>
<canvas id="canvas11" width="90" height="90" style="outline: 1px solid">
<p class="fallback">FAIL (fallback content)</p>
</canvas>
<script id="myWorker11" type="text/worker">
self.onmessage = function(e) {
const canvas = new OffscreenCanvas(90, 90);
const ctx = canvas.getContext('2d');
ctx.translate(50, 50);
ctx.scale(2, 2);
ctx.rotate(Math.PI);
ctx.translate(-25, -25);
ctx.fillStyle = 'rgba(0, 0, 255, 0.8)';
ctx.fillRect(15, 15, 25, 25);
ctx.globalAlpha = 0.75;
ctx.globalCompositeOperation = 'screen';
ctx.shadowOffsetX = 7;
ctx.shadowOffsetY = 7;
ctx.shadowColor = 'rgba(255, 165, 0, 0.5)';
ctx.beginLayer();
ctx.fillStyle = 'rgba(204, 0, 0, 1)';
ctx.fillRect(10, 25, 25, 20);
ctx.fillStyle = 'rgba(0, 204, 0, 1)';
ctx.fillRect(25, 10, 20, 25);
ctx.endLayer();
const bitmap = canvas.transferToImageBitmap();
self.postMessage(bitmap, bitmap);
};
</script>
<script type="module">
const blob = new Blob([document.getElementById('myWorker11').textContent]);
const worker = new Worker(URL.createObjectURL(blob));
worker.addEventListener('message', msg => {
const outputCanvas = document.getElementById('canvas11');
const outputCtx = outputCanvas.getContext('2d');
outputCtx.drawImage(msg.data, 0, 0);
if (--pending_tests == 0) {
document.documentElement.classList.remove('reftest-wait');
}
});
worker.postMessage(null);
</script>
</span>
<span>
<div>overlay</div>
<canvas id="canvas12" width="90" height="90" style="outline: 1px solid">
<p class="fallback">FAIL (fallback content)</p>
</canvas>
<script id="myWorker12" type="text/worker">
self.onmessage = function(e) {
const canvas = new OffscreenCanvas(90, 90);
const ctx = canvas.getContext('2d');
ctx.translate(50, 50);
ctx.scale(2, 2);
ctx.rotate(Math.PI);
ctx.translate(-25, -25);
ctx.fillStyle = 'rgba(0, 0, 255, 0.8)';
ctx.fillRect(15, 15, 25, 25);
ctx.globalAlpha = 0.75;
ctx.globalCompositeOperation = 'overlay';
ctx.shadowOffsetX = 7;
ctx.shadowOffsetY = 7;
ctx.shadowColor = 'rgba(255, 165, 0, 0.5)';
ctx.beginLayer();
ctx.fillStyle = 'rgba(204, 0, 0, 1)';
ctx.fillRect(10, 25, 25, 20);
ctx.fillStyle = 'rgba(0, 204, 0, 1)';
ctx.fillRect(25, 10, 20, 25);
ctx.endLayer();
const bitmap = canvas.transferToImageBitmap();
self.postMessage(bitmap, bitmap);
};
</script>
<script type="module">
const blob = new Blob([document.getElementById('myWorker12').textContent]);
const worker = new Worker(URL.createObjectURL(blob));
worker.addEventListener('message', msg => {
const outputCanvas = document.getElementById('canvas12');
const outputCtx = outputCanvas.getContext('2d');
outputCtx.drawImage(msg.data, 0, 0);
if (--pending_tests == 0) {
document.documentElement.classList.remove('reftest-wait');
}
});
worker.postMessage(null);
</script>
</span>
<span>
<div>darken</div>
<canvas id="canvas13" width="90" height="90" style="outline: 1px solid">
<p class="fallback">FAIL (fallback content)</p>
</canvas>
<script id="myWorker13" type="text/worker">
self.onmessage = function(e) {
const canvas = new OffscreenCanvas(90, 90);
const ctx = canvas.getContext('2d');
ctx.translate(50, 50);
ctx.scale(2, 2);
ctx.rotate(Math.PI);
ctx.translate(-25, -25);
ctx.fillStyle = 'rgba(0, 0, 255, 0.8)';
ctx.fillRect(15, 15, 25, 25);
ctx.globalAlpha = 0.75;
ctx.globalCompositeOperation = 'darken';
ctx.shadowOffsetX = 7;
ctx.shadowOffsetY = 7;
ctx.shadowColor = 'rgba(255, 165, 0, 0.5)';
ctx.beginLayer();
ctx.fillStyle = 'rgba(204, 0, 0, 1)';
ctx.fillRect(10, 25, 25, 20);
ctx.fillStyle = 'rgba(0, 204, 0, 1)';
ctx.fillRect(25, 10, 20, 25);
ctx.endLayer();
const bitmap = canvas.transferToImageBitmap();
self.postMessage(bitmap, bitmap);
};
</script>
<script type="module">
const blob = new Blob([document.getElementById('myWorker13').textContent]);
const worker = new Worker(URL.createObjectURL(blob));
worker.addEventListener('message', msg => {
const outputCanvas = document.getElementById('canvas13');
const outputCtx = outputCanvas.getContext('2d');
outputCtx.drawImage(msg.data, 0, 0);
if (--pending_tests == 0) {
document.documentElement.classList.remove('reftest-wait');
}
});
worker.postMessage(null);
</script>
</span>
<span>
<div>lighten</div>
<canvas id="canvas14" width="90" height="90" style="outline: 1px solid">
<p class="fallback">FAIL (fallback content)</p>
</canvas>
<script id="myWorker14" type="text/worker">
self.onmessage = function(e) {
const canvas = new OffscreenCanvas(90, 90);
const ctx = canvas.getContext('2d');
ctx.translate(50, 50);
ctx.scale(2, 2);
ctx.rotate(Math.PI);
ctx.translate(-25, -25);
ctx.fillStyle = 'rgba(0, 0, 255, 0.8)';
ctx.fillRect(15, 15, 25, 25);
ctx.globalAlpha = 0.75;
ctx.globalCompositeOperation = 'lighten';
ctx.shadowOffsetX = 7;
ctx.shadowOffsetY = 7;
ctx.shadowColor = 'rgba(255, 165, 0, 0.5)';
ctx.beginLayer();
ctx.fillStyle = 'rgba(204, 0, 0, 1)';
ctx.fillRect(10, 25, 25, 20);
ctx.fillStyle = 'rgba(0, 204, 0, 1)';
ctx.fillRect(25, 10, 20, 25);
ctx.endLayer();
const bitmap = canvas.transferToImageBitmap();
self.postMessage(bitmap, bitmap);
};
</script>
<script type="module">
const blob = new Blob([document.getElementById('myWorker14').textContent]);
const worker = new Worker(URL.createObjectURL(blob));
worker.addEventListener('message', msg => {
const outputCanvas = document.getElementById('canvas14');
const outputCtx = outputCanvas.getContext('2d');
outputCtx.drawImage(msg.data, 0, 0);
if (--pending_tests == 0) {
document.documentElement.classList.remove('reftest-wait');
}
});
worker.postMessage(null);
</script>
</span>
<span>
<div>color-dodge</div>
<canvas id="canvas15" width="90" height="90" style="outline: 1px solid">
<p class="fallback">FAIL (fallback content)</p>
</canvas>
<script id="myWorker15" type="text/worker">
self.onmessage = function(e) {
const canvas = new OffscreenCanvas(90, 90);
const ctx = canvas.getContext('2d');
ctx.translate(50, 50);
ctx.scale(2, 2);
ctx.rotate(Math.PI);
ctx.translate(-25, -25);
ctx.fillStyle = 'rgba(0, 0, 255, 0.8)';
ctx.fillRect(15, 15, 25, 25);
ctx.globalAlpha = 0.75;
ctx.globalCompositeOperation = 'color-dodge';
ctx.shadowOffsetX = 7;
ctx.shadowOffsetY = 7;
ctx.shadowColor = 'rgba(255, 165, 0, 0.5)';
ctx.beginLayer();
ctx.fillStyle = 'rgba(204, 0, 0, 1)';
ctx.fillRect(10, 25, 25, 20);
ctx.fillStyle = 'rgba(0, 204, 0, 1)';
ctx.fillRect(25, 10, 20, 25);
ctx.endLayer();
const bitmap = canvas.transferToImageBitmap();
self.postMessage(bitmap, bitmap);
};
</script>
<script type="module">
const blob = new Blob([document.getElementById('myWorker15').textContent]);
const worker = new Worker(URL.createObjectURL(blob));
worker.addEventListener('message', msg => {
const outputCanvas = document.getElementById('canvas15');
const outputCtx = outputCanvas.getContext('2d');
outputCtx.drawImage(msg.data, 0, 0);
if (--pending_tests == 0) {
document.documentElement.classList.remove('reftest-wait');
}
});
worker.postMessage(null);
</script>
</span>
<span>
<div>color-burn</div>
<canvas id="canvas16" width="90" height="90" style="outline: 1px solid">
<p class="fallback">FAIL (fallback content)</p>
</canvas>
<script id="myWorker16" type="text/worker">
self.onmessage = function(e) {
const canvas = new OffscreenCanvas(90, 90);
const ctx = canvas.getContext('2d');
ctx.translate(50, 50);
ctx.scale(2, 2);
ctx.rotate(Math.PI);
ctx.translate(-25, -25);
ctx.fillStyle = 'rgba(0, 0, 255, 0.8)';
ctx.fillRect(15, 15, 25, 25);
ctx.globalAlpha = 0.75;
ctx.globalCompositeOperation = 'color-burn';
ctx.shadowOffsetX = 7;
ctx.shadowOffsetY = 7;
ctx.shadowColor = 'rgba(255, 165, 0, 0.5)';
ctx.beginLayer();
ctx.fillStyle = 'rgba(204, 0, 0, 1)';
ctx.fillRect(10, 25, 25, 20);
ctx.fillStyle = 'rgba(0, 204, 0, 1)';
ctx.fillRect(25, 10, 20, 25);
ctx.endLayer();
const bitmap = canvas.transferToImageBitmap();
self.postMessage(bitmap, bitmap);
};
</script>
<script type="module">
const blob = new Blob([document.getElementById('myWorker16').textContent]);
const worker = new Worker(URL.createObjectURL(blob));
worker.addEventListener('message', msg => {
const outputCanvas = document.getElementById('canvas16');
const outputCtx = outputCanvas.getContext('2d');
outputCtx.drawImage(msg.data, 0, 0);
if (--pending_tests == 0) {
document.documentElement.classList.remove('reftest-wait');
}
});
worker.postMessage(null);
</script>
</span>
<span>
<div>hard-light</div>
<canvas id="canvas17" width="90" height="90" style="outline: 1px solid">
<p class="fallback">FAIL (fallback content)</p>
</canvas>
<script id="myWorker17" type="text/worker">
self.onmessage = function(e) {
const canvas = new OffscreenCanvas(90, 90);
const ctx = canvas.getContext('2d');
ctx.translate(50, 50);
ctx.scale(2, 2);
ctx.rotate(Math.PI);
ctx.translate(-25, -25);
ctx.fillStyle = 'rgba(0, 0, 255, 0.8)';
ctx.fillRect(15, 15, 25, 25);
ctx.globalAlpha = 0.75;
ctx.globalCompositeOperation = 'hard-light';
ctx.shadowOffsetX = 7;
ctx.shadowOffsetY = 7;
ctx.shadowColor = 'rgba(255, 165, 0, 0.5)';
ctx.beginLayer();
ctx.fillStyle = 'rgba(204, 0, 0, 1)';
ctx.fillRect(10, 25, 25, 20);
ctx.fillStyle = 'rgba(0, 204, 0, 1)';
ctx.fillRect(25, 10, 20, 25);
ctx.endLayer();
const bitmap = canvas.transferToImageBitmap();
self.postMessage(bitmap, bitmap);
};
</script>
<script type="module">
const blob = new Blob([document.getElementById('myWorker17').textContent]);
const worker = new Worker(URL.createObjectURL(blob));
worker.addEventListener('message', msg => {
const outputCanvas = document.getElementById('canvas17');
const outputCtx = outputCanvas.getContext('2d');
outputCtx.drawImage(msg.data, 0, 0);
if (--pending_tests == 0) {
document.documentElement.classList.remove('reftest-wait');
}
});
worker.postMessage(null);
</script>
</span>
<span>
<div>soft-light</div>
<canvas id="canvas18" width="90" height="90" style="outline: 1px solid">
<p class="fallback">FAIL (fallback content)</p>
</canvas>
<script id="myWorker18" type="text/worker">
self.onmessage = function(e) {
const canvas = new OffscreenCanvas(90, 90);
const ctx = canvas.getContext('2d');
ctx.translate(50, 50);
ctx.scale(2, 2);
ctx.rotate(Math.PI);
ctx.translate(-25, -25);
ctx.fillStyle = 'rgba(0, 0, 255, 0.8)';
ctx.fillRect(15, 15, 25, 25);
ctx.globalAlpha = 0.75;
ctx.globalCompositeOperation = 'soft-light';
ctx.shadowOffsetX = 7;
ctx.shadowOffsetY = 7;
ctx.shadowColor = 'rgba(255, 165, 0, 0.5)';
ctx.beginLayer();
ctx.fillStyle = 'rgba(204, 0, 0, 1)';
ctx.fillRect(10, 25, 25, 20);
ctx.fillStyle = 'rgba(0, 204, 0, 1)';
ctx.fillRect(25, 10, 20, 25);
ctx.endLayer();
const bitmap = canvas.transferToImageBitmap();
self.postMessage(bitmap, bitmap);
};
</script>
<script type="module">
const blob = new Blob([document.getElementById('myWorker18').textContent]);
const worker = new Worker(URL.createObjectURL(blob));
worker.addEventListener('message', msg => {
const outputCanvas = document.getElementById('canvas18');
const outputCtx = outputCanvas.getContext('2d');
outputCtx.drawImage(msg.data, 0, 0);
if (--pending_tests == 0) {
document.documentElement.classList.remove('reftest-wait');
}
});
worker.postMessage(null);
</script>
</span>
<span>
<div>difference</div>
<canvas id="canvas19" width="90" height="90" style="outline: 1px solid">
<p class="fallback">FAIL (fallback content)</p>
</canvas>
<script id="myWorker19" type="text/worker">
self.onmessage = function(e) {
const canvas = new OffscreenCanvas(90, 90);
const ctx = canvas.getContext('2d');
ctx.translate(50, 50);
ctx.scale(2, 2);
ctx.rotate(Math.PI);
ctx.translate(-25, -25);
ctx.fillStyle = 'rgba(0, 0, 255, 0.8)';
ctx.fillRect(15, 15, 25, 25);
ctx.globalAlpha = 0.75;
ctx.globalCompositeOperation = 'difference';
ctx.shadowOffsetX = 7;
ctx.shadowOffsetY = 7;
ctx.shadowColor = 'rgba(255, 165, 0, 0.5)';
ctx.beginLayer();
ctx.fillStyle = 'rgba(204, 0, 0, 1)';
ctx.fillRect(10, 25, 25, 20);
ctx.fillStyle = 'rgba(0, 204, 0, 1)';
ctx.fillRect(25, 10, 20, 25);
ctx.endLayer();
const bitmap = canvas.transferToImageBitmap();
self.postMessage(bitmap, bitmap);
};
</script>
<script type="module">
const blob = new Blob([document.getElementById('myWorker19').textContent]);
const worker = new Worker(URL.createObjectURL(blob));
worker.addEventListener('message', msg => {
const outputCanvas = document.getElementById('canvas19');
const outputCtx = outputCanvas.getContext('2d');
outputCtx.drawImage(msg.data, 0, 0);
if (--pending_tests == 0) {
document.documentElement.classList.remove('reftest-wait');
}
});
worker.postMessage(null);
</script>
</span>
<span>
<div>exclusion</div>
<canvas id="canvas20" width="90" height="90" style="outline: 1px solid">
<p class="fallback">FAIL (fallback content)</p>
</canvas>
<script id="myWorker20" type="text/worker">
self.onmessage = function(e) {
const canvas = new OffscreenCanvas(90, 90);
const ctx = canvas.getContext('2d');
ctx.translate(50, 50);
ctx.scale(2, 2);
ctx.rotate(Math.PI);
ctx.translate(-25, -25);
ctx.fillStyle = 'rgba(0, 0, 255, 0.8)';
ctx.fillRect(15, 15, 25, 25);
ctx.globalAlpha = 0.75;
ctx.globalCompositeOperation = 'exclusion';
ctx.shadowOffsetX = 7;
ctx.shadowOffsetY = 7;
ctx.shadowColor = 'rgba(255, 165, 0, 0.5)';
ctx.beginLayer();
ctx.fillStyle = 'rgba(204, 0, 0, 1)';
ctx.fillRect(10, 25, 25, 20);
ctx.fillStyle = 'rgba(0, 204, 0, 1)';
ctx.fillRect(25, 10, 20, 25);
ctx.endLayer();
const bitmap = canvas.transferToImageBitmap();
self.postMessage(bitmap, bitmap);
};
</script>
<script type="module">
const blob = new Blob([document.getElementById('myWorker20').textContent]);
const worker = new Worker(URL.createObjectURL(blob));
worker.addEventListener('message', msg => {
const outputCanvas = document.getElementById('canvas20');
const outputCtx = outputCanvas.getContext('2d');
outputCtx.drawImage(msg.data, 0, 0);
if (--pending_tests == 0) {
document.documentElement.classList.remove('reftest-wait');
}
});
worker.postMessage(null);
</script>
</span>
<span>
<div>hue</div>
<canvas id="canvas21" width="90" height="90" style="outline: 1px solid">
<p class="fallback">FAIL (fallback content)</p>
</canvas>
<script id="myWorker21" type="text/worker">
self.onmessage = function(e) {
const canvas = new OffscreenCanvas(90, 90);
const ctx = canvas.getContext('2d');
ctx.translate(50, 50);
ctx.scale(2, 2);
ctx.rotate(Math.PI);
ctx.translate(-25, -25);
ctx.fillStyle = 'rgba(0, 0, 255, 0.8)';
ctx.fillRect(15, 15, 25, 25);
ctx.globalAlpha = 0.75;
ctx.globalCompositeOperation = 'hue';
ctx.shadowOffsetX = 7;
ctx.shadowOffsetY = 7;
ctx.shadowColor = 'rgba(255, 165, 0, 0.5)';
ctx.beginLayer();
ctx.fillStyle = 'rgba(204, 0, 0, 1)';
ctx.fillRect(10, 25, 25, 20);
ctx.fillStyle = 'rgba(0, 204, 0, 1)';
ctx.fillRect(25, 10, 20, 25);
ctx.endLayer();
const bitmap = canvas.transferToImageBitmap();
self.postMessage(bitmap, bitmap);
};
</script>
<script type="module">
const blob = new Blob([document.getElementById('myWorker21').textContent]);
const worker = new Worker(URL.createObjectURL(blob));
worker.addEventListener('message', msg => {
const outputCanvas = document.getElementById('canvas21');
const outputCtx = outputCanvas.getContext('2d');
outputCtx.drawImage(msg.data, 0, 0);
if (--pending_tests == 0) {
document.documentElement.classList.remove('reftest-wait');
}
});
worker.postMessage(null);
</script>
</span>
<span>
<div>saturation</div>
<canvas id="canvas22" width="90" height="90" style="outline: 1px solid">
<p class="fallback">FAIL (fallback content)</p>
</canvas>
<script id="myWorker22" type="text/worker">
self.onmessage = function(e) {
const canvas = new OffscreenCanvas(90, 90);
const ctx = canvas.getContext('2d');
ctx.translate(50, 50);
ctx.scale(2, 2);
ctx.rotate(Math.PI);
ctx.translate(-25, -25);
ctx.fillStyle = 'rgba(0, 0, 255, 0.8)';
ctx.fillRect(15, 15, 25, 25);
ctx.globalAlpha = 0.75;
ctx.globalCompositeOperation = 'saturation';
ctx.shadowOffsetX = 7;
ctx.shadowOffsetY = 7;
ctx.shadowColor = 'rgba(255, 165, 0, 0.5)';
ctx.beginLayer();
ctx.fillStyle = 'rgba(204, 0, 0, 1)';
ctx.fillRect(10, 25, 25, 20);
ctx.fillStyle = 'rgba(0, 204, 0, 1)';
ctx.fillRect(25, 10, 20, 25);
ctx.endLayer();
const bitmap = canvas.transferToImageBitmap();
self.postMessage(bitmap, bitmap);
};
</script>
<script type="module">
const blob = new Blob([document.getElementById('myWorker22').textContent]);
const worker = new Worker(URL.createObjectURL(blob));
worker.addEventListener('message', msg => {
const outputCanvas = document.getElementById('canvas22');
const outputCtx = outputCanvas.getContext('2d');
outputCtx.drawImage(msg.data, 0, 0);
if (--pending_tests == 0) {
document.documentElement.classList.remove('reftest-wait');
}
});
worker.postMessage(null);
</script>
</span>
<span>
<div>color</div>
<canvas id="canvas23" width="90" height="90" style="outline: 1px solid">
<p class="fallback">FAIL (fallback content)</p>
</canvas>
<script id="myWorker23" type="text/worker">
self.onmessage = function(e) {
const canvas = new OffscreenCanvas(90, 90);
const ctx = canvas.getContext('2d');
ctx.translate(50, 50);
ctx.scale(2, 2);
ctx.rotate(Math.PI);
ctx.translate(-25, -25);
ctx.fillStyle = 'rgba(0, 0, 255, 0.8)';
ctx.fillRect(15, 15, 25, 25);
ctx.globalAlpha = 0.75;
ctx.globalCompositeOperation = 'color';
ctx.shadowOffsetX = 7;
ctx.shadowOffsetY = 7;
ctx.shadowColor = 'rgba(255, 165, 0, 0.5)';
ctx.beginLayer();
ctx.fillStyle = 'rgba(204, 0, 0, 1)';
ctx.fillRect(10, 25, 25, 20);
ctx.fillStyle = 'rgba(0, 204, 0, 1)';
ctx.fillRect(25, 10, 20, 25);
ctx.endLayer();
const bitmap = canvas.transferToImageBitmap();
self.postMessage(bitmap, bitmap);
};
</script>
<script type="module">
const blob = new Blob([document.getElementById('myWorker23').textContent]);
const worker = new Worker(URL.createObjectURL(blob));
worker.addEventListener('message', msg => {
const outputCanvas = document.getElementById('canvas23');
const outputCtx = outputCanvas.getContext('2d');
outputCtx.drawImage(msg.data, 0, 0);
if (--pending_tests == 0) {
document.documentElement.classList.remove('reftest-wait');
}
});
worker.postMessage(null);
</script>
</span>
<span>
<div>luminosity</div>
<canvas id="canvas24" width="90" height="90" style="outline: 1px solid">
<p class="fallback">FAIL (fallback content)</p>
</canvas>
<script id="myWorker24" type="text/worker">
self.onmessage = function(e) {
const canvas = new OffscreenCanvas(90, 90);
const ctx = canvas.getContext('2d');
ctx.translate(50, 50);
ctx.scale(2, 2);
ctx.rotate(Math.PI);
ctx.translate(-25, -25);
ctx.fillStyle = 'rgba(0, 0, 255, 0.8)';
ctx.fillRect(15, 15, 25, 25);
ctx.globalAlpha = 0.75;
ctx.globalCompositeOperation = 'luminosity';
ctx.shadowOffsetX = 7;
ctx.shadowOffsetY = 7;
ctx.shadowColor = 'rgba(255, 165, 0, 0.5)';
ctx.beginLayer();
ctx.fillStyle = 'rgba(204, 0, 0, 1)';
ctx.fillRect(10, 25, 25, 20);
ctx.fillStyle = 'rgba(0, 204, 0, 1)';
ctx.fillRect(25, 10, 20, 25);
ctx.endLayer();
const bitmap = canvas.transferToImageBitmap();
self.postMessage(bitmap, bitmap);
};
</script>
<script type="module">
const blob = new Blob([document.getElementById('myWorker24').textContent]);
const worker = new Worker(URL.createObjectURL(blob));
worker.addEventListener('message', msg => {
const outputCanvas = document.getElementById('canvas24');
const outputCtx = outputCanvas.getContext('2d');
outputCtx.drawImage(msg.data, 0, 0);
if (--pending_tests == 0) {
document.documentElement.classList.remove('reftest-wait');
}
});
worker.postMessage(null);
</script>
</span>
</div>
</html>