| <!doctype html> |
| <link rel="match" href="devicepixel-ref.html"> |
| <meta name="assert" content="Device pixel content box sizes and pixel snapping are correct in Resize Observer callback"> |
| <!-- |
| This test verifies that the device pixel content box sizes available |
| in a resize observer callback are correct. Resize observer notifications |
| are delivered as the element is loaded. A box is then drawn using the |
| available dimensions in device pixels. The result is compared to the reference |
| which uses div and border to draw a box. |
| --> |
| |
| <style> |
| #canvas2D { |
| width: 100%; |
| height: 100%; |
| } |
| #canvas2DPadding14 { |
| width: 100%; |
| height: 100%; |
| } |
| #outer { |
| padding-top: 1.7px; |
| width: 300.8px; |
| height: 250.1px; |
| } |
| #outer2 { |
| padding-top: 1.4px; |
| width: 300.8px; |
| height: 250.1px; |
| } |
| |
| </style> |
| <body> |
| <div id="outer"> |
| <canvas id="canvas2D"></canvas> |
| </div> |
| <div id="outer2"> |
| <canvas id="canvas2DPadding14"></canvas> |
| </div> |
| </body> |
| |
| <script> |
| // Create a box using device pixel content box dimensions |
| function paint2D(ctx, snappedSize) { |
| ctx.beginPath(); |
| // Use a linewidth of 2. Because the rectangle is drawn at 0,0 with |
| // its dimensions being the same as canvas dimensions, linewidth as it |
| // is drawn on the canvas will be 1. |
| ctx.lineWidth = "2"; |
| ctx.strokeStyle = "green"; |
| ctx.rect(0, 0, snappedSize.inlineSize, snappedSize.blockSize); |
| ctx.stroke(); |
| } |
| |
| function updateCanvasSize2D(canvas2D, ctx, snappedSize) { |
| canvas2D.width = snappedSize.inlineSize; |
| canvas2D.height = snappedSize.blockSize; |
| paint2D(ctx, snappedSize); |
| } |
| |
| (function() { |
| let canvas2D = document.querySelector("#canvas2D"); |
| let canvas2DPadding14 = document.querySelector("#canvas2DPadding14"); |
| |
| function observeSizes() { |
| let ro = new ResizeObserver( entries => { |
| for (entry of entries) { |
| let size = entry.devicePixelContentBoxSize[0]; |
| if (entry.target == canvas2D) { |
| let canvas2D = document.querySelector("#canvas2D"); |
| let ctx = canvas2D.getContext("2d"); |
| updateCanvasSize2D(canvas2D, ctx, size); |
| } else if (entry.target == canvas2DPadding14){ |
| let canvas2DPadding14 = document.querySelector("#canvas2DPadding14"); |
| let ctx = canvas2DPadding14.getContext("2d"); |
| updateCanvasSize2D(canvas2DPadding14, ctx, size); |
| } |
| } |
| }); |
| ro.observe(canvas2D, {box: "device-pixel-content-box"}); |
| ro.observe(canvas2DPadding14, {box: "device-pixel-content-box"}); |
| } |
| observeSizes(); |
| })(); |
| </script> |