| <!DOCTYPE HTML> |
| <script src="../resources/testharness.js"></script> |
| <script src="../resources/testharnessreport.js"></script> |
| <style> |
| .referenceClipPath { |
| -webkit-clip-path: url(#referenceClipPathTopLeft); |
| clip-path: url(#referenceClipPathTopLeft); |
| width: 100px; |
| height: 100px; |
| position: absolute; |
| } |
| .referenceClipPath:hover { |
| background: green; |
| } |
| .shapeClipPath { |
| -webkit-clip-path: polygon(0% 0%, 100% 100%, 100% 0%); |
| clip-path: polygon(0% 0%, 100% 100%, 100% 0%); |
| width: 100px; |
| height: 100px; |
| position: absolute; |
| } |
| .shapeClipPath:hover { |
| background: green; |
| } |
| #imageWithReferenceClipPath { |
| top: 50px; |
| left: 50px; |
| } |
| #imageWithShapeClipPath { |
| top: 50px; |
| left: 150px; |
| } |
| #transformedDivContainer { |
| position: absolute; |
| top: 0; |
| left: 0; |
| transform: translate3d(25px, 25px, 0); |
| } |
| #transformedWithReferenceClipPath { |
| top: 125px; |
| left: 25px; |
| transform: rotateY(60deg); |
| } |
| #transformedWithShapeClipPath { |
| top: 125px; |
| left: 125px; |
| transform: rotateY(60deg); |
| } |
| </style> |
| <p>Image hit testing should not include clipped-out regions.</p> |
| <svg width="100" height="0"> |
| <defs> |
| <clipPath id="referenceClipPathTopLeft" clipPathUnits="objectBoundingBox"> |
| <path id="path" d="M 0 0 L 100 100 L 100 0Z" /> |
| </clipPath> |
| </defs> |
| </svg> |
| <img id="imageWithReferenceClipPath" class="referenceClipPath" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg=="> |
| <img id="imageWithShapeClipPath" class="shapeClipPath" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg=="> |
| <div id="transformedDivContainer"> |
| <img id="transformedWithReferenceClipPath" class="referenceClipPath" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg=="> |
| <img id="transformedWithShapeClipPath" class="shapeClipPath" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg=="> |
| </div> |
| <div id="console"></div> |
| <script> |
| test(function(t) |
| { |
| // Check that clip path affects hit testing for the first row of images. |
| // These images are offset with top/left. |
| // (75,125) is outside the triangular clip path, (125,75) is inside it. |
| assert_not_equals(document.elementFromPoint(75, 125).id, "imageWithReferenceClipPath"); |
| assert_equals(document.elementFromPoint(125, 75).id, "imageWithReferenceClipPath"); |
| // Same test as above but for a shape-based clip path offset by 100px. |
| assert_not_equals(document.elementFromPoint(75+100, 125).id, "imageWithShapeClipPath"); |
| assert_equals(document.elementFromPoint(125+100, 75).id, "imageWithShapeClipPath"); |
| |
| // Check that clip path affects hit testing for the second row. These |
| // images are transformed by a container by (25,25) and each has a |
| // 3d rotation causing the images to be horizontally squished. The test |
| // coordinates are tight and will fail without the Y rotation. |
| // (100,255) and (135,175) are outside the triangular clip path. |
| // (115,175) and (120,225) are inside the triangular clip path. |
| assert_not_equals(document.elementFromPoint(100, 225).id, "transformedWithReferenceClipPath"); |
| assert_not_equals(document.elementFromPoint(135, 175).id, "transformedWithReferenceClipPath"); |
| assert_equals(document.elementFromPoint(115, 175).id, "transformedWithReferenceClipPath"); |
| assert_equals(document.elementFromPoint(120, 225).id, "transformedWithReferenceClipPath"); |
| // Same test as above but for a shape-based clip path offset by 100px. |
| assert_not_equals(document.elementFromPoint(100+100, 225).id, "transformedWithShapeClipPath"); |
| assert_not_equals(document.elementFromPoint(135+100, 175).id, "transformedWithShapeClipPath"); |
| assert_equals(document.elementFromPoint(115+100, 175).id, "transformedWithShapeClipPath"); |
| assert_equals(document.elementFromPoint(120+100, 225).id, "transformedWithShapeClipPath"); |
| }, "Image hit testing should not include clipped-out regions."); |
| </script> |