| <!DOCTYPE html><!-- webkit-test-runner [ experimental:CSSPaintingAPIEnabled=true ] --> |
| <meta name="author" title="Justin Michaud" href="mailto:justin_michaud@webkit.org"> |
| <meta name="assert" content="Test paint worklet input properties and arguments"> |
| <link rel="help" content="https://drafts.css-houdini.org/css-paint-api-1/"> |
| <script src="resources/testharness.js"></script> |
| |
| <style> |
| .paint { |
| background-image: paint(my-paint,150px,helloworld1,helloworld2); |
| width: 150px; |
| height: 150px; |
| --my-prop:helloworld1; |
| --my-registered-prop:helloworld2; |
| } |
| |
| .paint2 { |
| background-image: paint(my-paint,150px,helloworld1,initialValueProp); |
| width: 150px; |
| height: 150px; |
| --my-prop:helloworld1; |
| } |
| </style> |
| |
| <div class="paint"></div> |
| <div class="paint2"></div> |
| |
| <script id="code" type="text/worklet"> |
| class MyPaint { |
| static get inputProperties() { return ['height', '--my-prop', '--my-registered-prop', "--never-specified"]; } |
| static get inputArguments() { return ['*', '*', '*']; } |
| |
| constructor() { this.myAttribute = 42; } |
| |
| testThis() { return this.myAttribute; } |
| |
| paint(ctx, geom, properties, args) { |
| assert_true(properties instanceof StylePropertyMapReadOnly); |
| assert_equals(properties.get('height').toString(), args[0].toString()); |
| assert_equals(properties.get('height').value, 150); |
| assert_equals(properties.get('height').unit, 'px'); |
| assert_equals(properties.get('--my-prop').toString(), args[1].toString()); |
| assert_equals(properties.get('--my-registered-prop').toString(), args[2].toString()); |
| assert_equals(properties.get('width'), null); |
| assert_equals(properties.get('--never-specified').toString(), ''); |
| |
| assert_equals(this.testThis(), 42); |
| |
| for (var i = 0; i < 6; i++){ |
| for (var j = 0; j < 6; j++){ |
| ctx.fillStyle = 'rgb(' + Math.floor(255 - 42.5 * i) + ',' + |
| Math.floor(255 - 42.5 * j) + ',0)'; |
| ctx.fillRect(j * 25, i * 25, 25, 25); |
| } |
| } |
| } |
| } |
| registerPaint('my-paint', MyPaint); |
| </script> |
| |
| <script> |
| importWorklet(CSS.paintWorklet, document.getElementById('code').textContent); |
| CSS.registerProperty({ |
| name: '--my-registered-prop', |
| syntax: '*', |
| initialValue: 'initialValueProp', |
| inherits: false |
| }); |
| </script> |