wpt / css / css-paint-api / paint2d-filter.https.html

Status: PASS | Duration: 7ms | Subtests: 1/1 | Open test on wpt.live | Open ref on wpt.live | wpt.fyi

/css/css-paint-api/paint2d-filter.https.html

<!DOCTYPE html>
<html class="reftest-wait">
<link rel="help" href="https://drafts.css-houdini.org/css-paint-api/">
<link rel="match" href="paint2d-filter-ref.html">
<meta name="fuzzy" content="maxDifference=0-5;totalPixels=0-1000">
<style>
    div {
        display: inline-block;
        width: 100px;
        height: 100px;
    }
    #filter-none { background-image: paint(filter-none); }
    #filter-blur-10px { background-image: paint(filter-blur-10px); }
    #filter-blur-50vh { background-image: paint(filter-blur-50vh); }
    #filter-blur-1em { background-image: paint(filter-blur-1em); }
    #filter-blur-2percent { background-image: paint(filter-blur-2percent); }
    #filter-brightness { background-image: paint(filter-brightness); }
    #filter-contrast { background-image: paint(filter-contrast); }
    #filter-drop-shadow { background-image: paint(filter-drop-shadow); }
    #filter-grayscale { background-image: paint(filter-grayscale); }
    #filter-invert { background-image: paint(filter-invert); }
    #filter-opacity { background-image: paint(filter-opacity); }
    #filter-saturate { background-image: paint(filter-saturate); }
    #filter-sepia { background-image: paint(filter-sepia); }
    #filter-hue-rotate { background-image: paint(filter-hue-rotate); }
    #filter-url { background-image: paint(filter-url); }
</style>
<script src="/common/reftest-wait.js"></script>
<script src="/common/worklet-reftest.js"></script>
<body>
<div id="filter-none"></div>
<div id="filter-blur-10px"></div>
<div id="filter-blur-50vh"></div>
<div id="filter-blur-1em"></div>
<div id="filter-blur-2percent"></div>
<br>
<div id="filter-brightness"></div>
<div id="filter-contrast"></div>
<div id="filter-drop-shadow"></div>
<div id="filter-grayscale"></div>
<div id="filter-invert"></div>
<br>
<div id="filter-opacity"></div>
<div id="filter-saturate"></div>
<div id="filter-sepia"></div>
<div id="filter-hue-rotate"></div>
<div id="filter-url"></div>

<script id="code" type="text/worklet">
var paintNames = [
    'filter-none',
    'filter-blur-10px',
    'filter-blur-50vh',
    'filter-blur-1em',
    'filter-blur-2percent',
    'filter-brightness',
    'filter-contrast',
    'filter-drop-shadow',
    'filter-grayscale',
    'filter-invert',
    'filter-opacity',
    'filter-saturate',
    'filter-sepia',
    'filter-hue-rotate',
    'filter-url'
];

var filterOps = [
    'none',
    'blur(10px)',
    'blur(50vh)',
    'blur(1em)',
    'blur(2%)',
    'brightness(40%)',
    'contrast(20%)',
    'drop-shadow(0 0 5px green)',
    'grayscale(100%)',
    'invert(100%)',
    'opacity(50%)',
    'saturate(20%)',
    'sepia(100%)',
    'sepia(1) hue-rotate(200deg)',
    'url(#url)'
];

function doPaint(ctx, op) {
  ctx.filter = op;
  ctx.fillStyle = '#A00';
  ctx.fillRect(0, 0, 15, 15);
  ctx.fillStyle = '#0A0';
  ctx.fillRect(15, 0, 15, 15);
  ctx.fillStyle = '#00A';
  ctx.fillRect(0, 15, 15, 15);
  ctx.fillStyle = "#AA0";
  ctx.fillRect(15, 15, 15, 15);
};

for (var i = 0; i < filterOps.length; i++) {
  let op = filterOps[i];
  registerPaint(paintNames[i], class { paint(ctx, geom) { doPaint(ctx, op); } });
}
</script>

<script>
    importWorkletAndTerminateTestAfterAsyncPaint(CSS.paintWorklet, document.getElementById('code').textContent);
</script>
</body>
</html>

/css/css-paint-api/paint2d-filter-ref.html

<!DOCTYPE html>
<html>
<head>
<style>
    canvas { display: inline-block; }
</style>
</head>
<body>
<canvas id='output0' width='100' height='100'></canvas>
<canvas id='output1' width='100' height='100'></canvas>
<canvas id='output2' width='100' height='100'></canvas>
<canvas id='output3' width='100' height='100'></canvas>
<canvas id='output4' width='100' height='100'></canvas>
<br>
<canvas id='output5' width='100' height='100'></canvas>
<canvas id='output6' width='100' height='100'></canvas>
<canvas id='output7' width='100' height='100'></canvas>
<canvas id='output8' width='100' height='100'></canvas>
<canvas id='output9' width='100' height='100'></canvas>
<br>
<canvas id='output10' width='100' height='100'></canvas>
<canvas id='output11' width='100' height='100'></canvas>
<canvas id='output12' width='100' height='100'></canvas>
<canvas id='output13' width='100' height='100'></canvas>
<canvas id='output14' width='100' height='100'></canvas>

<script>
var paint = function(id, filter) {
  var c = document.getElementById(id);
  var ctx = c.getContext('2d');
  ctx.filter = filter;
  ctx.fillStyle = '#A00';
  ctx.fillRect(0, 0, 15, 15);
  ctx.fillStyle = '#0A0';
  ctx.fillRect(15, 0, 15, 15);
  ctx.fillStyle = '#00A';
  ctx.fillRect(0, 15, 15, 15);
  ctx.fillStyle = "#AA0";
  ctx.fillRect(15, 15, 15, 15);
  return ctx;
};

paint('output0', "none");
paint('output1', "blur(10px)");
paint('output2', "blur(0px)");
paint('output3', "blur(16px)");
paint('output4', "blur(0px)");
paint('output5', "brightness(40%)");
paint('output6', "contrast(20%)");
paint('output7', "drop-shadow(0 0 5px green)");
paint('output8', "grayscale(100%)");
paint('output9', "invert(100%)");
paint('output10', "opacity(50%)");
paint('output11', "saturate(20%)");
paint('output12', "sepia(100%)");
paint('output13', "sepia(1) hue-rotate(200deg)");
paint('output14', "url(#url)");
</script>
</body>
</html>