65 lines
1.9 KiB
HTML
65 lines
1.9 KiB
HTML
<!DOCTYPE html><!-- webkit-test-runner [ CSSPaintingAPIEnabled=true ] -->
|
|
<meta name="author" title="Justin Michaud" href="mailto:justin_michaud@webkit.org">
|
|
<meta name="assert" content="Test that paint worklets repaint when properties change">
|
|
<link rel="help" content="https://drafts.css-houdini.org/css-paint-api-1/">
|
|
<script src="resources/testharness.js"></script>
|
|
|
|
<script id="code" type="text/worklet">
|
|
class MyPaint {
|
|
static get inputProperties() { return ['--my-prop']; }
|
|
|
|
paint(ctx, geom, properties) {
|
|
if (properties.get('--my-prop').toString() != "goodbye") {
|
|
ctx.fillStyle = "red";
|
|
} else {
|
|
ctx.fillStyle = "green";
|
|
}
|
|
|
|
ctx.fillRect(0, 0, geom.width, geom.height);
|
|
}
|
|
}
|
|
registerPaint('my-paint', MyPaint);
|
|
</script>
|
|
|
|
<script type="text/javascript">
|
|
function onload() {
|
|
if (window.testRunner && window.internals) {
|
|
window.testRunner.dumpAsText(false);
|
|
window.internals.startTrackingRepaints();
|
|
}
|
|
importWorklet(CSS.paintWorklet, document.getElementById('code').textContent);
|
|
|
|
// FIXME: Once importWorklet returns a promise, these setTimeouts should go away.
|
|
setTimeout(function() {
|
|
document.getElementById('paint').style.setProperty('--my-prop', 'goodbye');
|
|
}, 500);
|
|
|
|
setTimeout(function() {
|
|
var repaintRects = "No test runner";
|
|
if (window.testRunner && window.internals) {
|
|
// force a style recalc.
|
|
var dummy = document.body.offsetTop;
|
|
repaintRects = window.internals.repaintRectsAsText();
|
|
window.internals.stopTrackingRepaints();
|
|
}
|
|
|
|
var pre = document.createElement('pre');
|
|
document.body.appendChild(pre);
|
|
pre.innerHTML = repaintRects;
|
|
}, 1000);
|
|
}
|
|
</script>
|
|
|
|
<style>
|
|
#paint {
|
|
background-image: paint(my-paint);
|
|
--my-prop: hello;
|
|
width: 150px;
|
|
height: 150px;
|
|
}
|
|
</style>
|
|
|
|
<body onload="onload()">
|
|
<div id="paint"></div>
|
|
</body>
|