| <!DOCTYPE html> |
| <html> |
| <head> |
| <script src="../../../resources/js-test-pre.js"></script> |
| <script src="../resources/subpixel-utils.js"></script> |
| |
| <style> |
| #container { |
| font: 20px/1 Ahem, sans-serif; |
| width: 200px; |
| height: 150px; |
| } |
| |
| #float-left { |
| float: left; |
| position: relative; |
| overflow: visible; |
| -webkit-shape-outside: polygon(70px 20px, 120px 70px, 70px 120px, 20px 70px); |
| -webkit-shape-margin: 20px; |
| width: 140px; |
| height: 140px; |
| } |
| |
| #svg-shape { |
| position: absolute; |
| display: block; |
| top: 0px; |
| left: 0px; |
| width: 100px; |
| height: 100px; |
| margin: 20px; |
| } |
| </style> |
| <body> |
| <div id="container"> |
| <div id="float-left"> |
| <svg id="svg-shape" xmlns="http://www.w3.org/2000/"> |
| <polygon points="50,0 100,50 50,100 0,50" fill="rgba(0,150,0, 0.5)"/> |
| </svg> |
| </div> |
| <span id="l1">X</span></br><span id="l2">X</span><br/><span id="l3">X</span><br/><br/><span id="l4">X</span><br/><span id="l5">X</span><br/><span id="l6">X</span> |
| </div> |
| <div id="console"></div> |
| </body> |
| <script> |
| function elementRect(elementId) |
| { |
| var s = document.getElementById("container").getBoundingClientRect(); |
| var r = document.getElementById(elementId).getBoundingClientRect(); |
| return {left: r.left - s.left, top: r.top - s.top, width: r.width, height: r.height}; |
| } |
| |
| // The shape-outside polygon's X and Y coordinates are 20, 70, 120, specified relative to the |
| // "float-left" element. Its shape-marign is 20px, which means that the X and Y limits of the |
| // margin boundary are 0, and 140. This is because the margin boundary has circular arc segments |
| // at the vertices, i.e. it's a rounded rectangle rotated by 45 degrees. None of the character |
| // positions in this test are defined by the arc segments. |
| // |
| // The left edge of the (20px square) Ahem character on the first "l1" line (y == 20) is: |
| // 20 + (20*sqrt(2) + 50) = 98.28. The second and third lines, "l2" and "l3" are similar, each |
| // one begins 20 pixels farther to the right. The left edges of "l4-l6" are the same as the first three, |
| // just in reverse order. |
| |
| function marginLeftXIntercept(lineNumber) |
| { |
| var f = SubPixelLayout.snapToLayoutUnit(lineNumber * 20 + 20 * Math.sqrt(2) + 50); |
| return Math.round(f); |
| } |
| |
| var quiet = true; // PASS output depends on SubPixelLayout.isEnabled() |
| |
| shouldBe("elementRect('l1').top", "0"); |
| shouldBeCloseTo("elementRect('l1').left", marginLeftXIntercept(1), 1, quiet); |
| |
| shouldBe("elementRect('l2').top", "20"); |
| shouldBeCloseTo("elementRect('l2').left", marginLeftXIntercept(2), 1, quiet); |
| |
| shouldBe("elementRect('l3').top", "40"); |
| shouldBeCloseTo("elementRect('l3').left", marginLeftXIntercept(3), 1, quiet); |
| |
| shouldBe("elementRect('l4').top", "80"); |
| shouldBeCloseTo("elementRect('l4').left", marginLeftXIntercept(3), 1, quiet); |
| |
| shouldBe("elementRect('l5').top", "100"); |
| shouldBeCloseTo("elementRect('l5').left", marginLeftXIntercept(2), 1, quiet); |
| |
| shouldBe("elementRect('l6').top", "120"); |
| shouldBeCloseTo("elementRect('l6').left", marginLeftXIntercept(1), 1, quiet); |
| |
| </script> |
| </html> |