4 <script src=
"../../../resources/js-test.js"></script>
5 <script src=
"../resources/subpixel-utils.js"></script>
8 border:
1px solid black;
14 font:
20px/
1 Ahem, sans-serif;
23 shape-outside: ellipse(
200px
100px at
225px
125px);
40 <p>The left edges of the three black squares should follow the outer ellipse boundary and each square should appear on a subsequent line.
</p>
41 <div id=
"container-border">
44 <svg id=
"svg-shape-ellipse" xmlns=
"http://www.w3.org/2000/">
45 <ellipse cx=
"225" cy=
"125" rx=
"200" ry=
"100" fill=
"green"></ellipse>
46 <ellipse cx=
"225" cy=
"125" rx=
"225" ry=
"125" fill=
"none" stroke=
"green"></ellipse>
49 <span id=
"s1">X
</span></br><span id=
"s2">X
</span><br/><span id=
"s3">X
</span>
52 <div id=
"console"></div>
55 function elementRect(elementId
)
57 var s
= document
.getElementById("container").getBoundingClientRect();
58 var r
= document
.getElementById(elementId
).getBoundingClientRect();
59 return {left
: r
.left
- s
.left
, top
: r
.top
- s
.top
, width
: r
.width
, height
: r
.height
};
62 // You'll find the equation for the X intercept of an elliptical arc here (among other places):
63 // http://hansmuller-webkit.blogspot.com/2012/07/computing-horizonal-rounded-rectangle.html
65 function marginEllipseLeftXIntercept(y
, cx
, rx
, ry
)
67 var f
= SubPixelLayout
.snapToLayoutUnit(cx
+ rx
* Math
.sqrt(1 - Math
.pow((ry
- y
) / ry
, 2)));
68 return String( Math
.round(f
) );
71 // In the ".left" tests below, it's the lower edge of the 20px Ahem glyph that that defines the element rect's left edge.
72 // That's why the Y coordinate in each of those tests is 20 greater than the ".top" test.
74 var quiet
= true; // PASS output depends on SubPixelLayout.isEnabled()
76 shouldBe("elementRect('s1').top", "0");
77 shouldBe("elementRect('s1').left", marginEllipseLeftXIntercept(20, 225, 225, 125), quiet
);
79 shouldBe("elementRect('s2').top", "20");
80 shouldBe("elementRect('s2').left", marginEllipseLeftXIntercept(40, 225, 225, 125), quiet
);
82 shouldBe("elementRect('s3').top", "40");
83 shouldBe("elementRect('s3').left", marginEllipseLeftXIntercept(60, 225, 225, 125), quiet
);