| Index: LayoutTests/fast/shapes/resources/simple-polygon.js
|
| diff --git a/LayoutTests/fast/shapes/resources/simple-polygon.js b/LayoutTests/fast/shapes/resources/simple-polygon.js
|
| deleted file mode 100644
|
| index 7343309a1a6206d6f4e0c8265bc2704faa0d9f6d..0000000000000000000000000000000000000000
|
| --- a/LayoutTests/fast/shapes/resources/simple-polygon.js
|
| +++ /dev/null
|
| @@ -1,247 +0,0 @@
|
| -// The functions in this file are intended to be used to test non-complex polygons
|
| -// where horizontal lines that overlap the polygon only cross the polygon twice.
|
| -function createPolygon(vertices) {
|
| - var xCoordinates = vertices.map( function(p) { return p.x; } );
|
| - var yCoordinates = vertices.map( function(p) { return p.y; } );
|
| - return {
|
| - vertices: vertices,
|
| - minX: Math.min.apply(null, xCoordinates),
|
| - maxX: Math.max.apply(null, xCoordinates),
|
| - minY: Math.min.apply(null, yCoordinates),
|
| - maxY: Math.max.apply(null, yCoordinates)
|
| - };
|
| -}
|
| -
|
| -function createRegularPolygonVertices(size, nSides)
|
| -{
|
| - var radius = size / (2 * Math.cos(Math.PI / nSides));
|
| - var inset = size / 2 + 20;
|
| - var vertices = [];
|
| -
|
| - for (var i = 0; i < nSides/2; i++) {
|
| - var a = (1 + 2*i) * (Math.PI / nSides);
|
| - vertices[i] = {x: Math.floor(radius * Math.cos(a)), y: Math.floor(radius * Math.sin(a))};
|
| - vertices[nSides - i - 1] = {x: vertices[i].x, y: -vertices[i].y} // Y axis symmetry
|
| - }
|
| -
|
| - for (var i = 0; i < nSides; i++) {
|
| - vertices[i].x += inset;
|
| - vertices[i].y += inset;
|
| - }
|
| -
|
| - return vertices;
|
| -}
|
| -
|
| -// Return two X intercepts of the horizontal line at y. We're assuming that the polygon
|
| -// has 0 or 2 intercepts for all y. Of course this isn't true for polygons in general,
|
| -// just the ones used by the test cases supported by this file.
|
| -
|
| -function polygonXIntercepts(polygon, y) {
|
| - var vertices = polygon.vertices;
|
| - var foundXIntercept = false;
|
| - var interceptsMinX, interceptsMaxX;
|
| -
|
| - for(var i = 0; i < vertices.length; i++) {
|
| - var v1 = vertices[i];
|
| - var v2 = vertices[(i + 1) % vertices.length];
|
| -
|
| - if (Math.max(v1.y, v2.y) < y || Math.min(v1.y, v2.y) > y)
|
| - continue;
|
| -
|
| - if (v1.y == y && v2.y == y) { // horizontal edge
|
| - if (y != polygon.maxY)
|
| - continue;
|
| -
|
| - if (!foundXIntercept) {
|
| - interceptsMinX = Math.min(v1.x, v2.x);
|
| - interceptsMaxX = Math.max(v1.x, v2.x);
|
| - foundXIntercept = true;
|
| - }
|
| - else {
|
| - interceptsMinX = Math.min(v1.x, v2.x, interceptsMinX);
|
| - interceptsMaxX = Math.max(v1.x, v2.x, interceptsMaxX);
|
| - }
|
| - }
|
| - else {
|
| - var interceptX;
|
| -
|
| - if (v1.y == y)
|
| - interceptX = v1.x;
|
| - else if (v2.y == y)
|
| - interceptX = v2.x;
|
| - else
|
| - interceptX = ((y - v1.y) * (v2.x - v1.x) / (v2.y - v1.y)) + v1.x;
|
| -
|
| - if (!foundXIntercept) {
|
| - interceptsMinX = interceptsMaxX = interceptX;
|
| - foundXIntercept = true;
|
| - }
|
| - else {
|
| - interceptsMinX = Math.min(interceptX, interceptsMinX);
|
| - interceptsMaxX = Math.max(interceptX, interceptsMaxX);
|
| - }
|
| - }
|
| - }
|
| -
|
| - if (!foundXIntercept)
|
| - return [];
|
| -
|
| - return [SubPixelLayout.snapToLayoutUnit(interceptsMinX), SubPixelLayout.snapToLayoutUnit(interceptsMaxX)];
|
| -}
|
| -
|
| -function polygonLineIntercepts(polygon, y, lineHeight) {
|
| - var i1 = polygonXIntercepts(polygon, y);
|
| - var i2 = polygonXIntercepts(polygon, y + lineHeight);
|
| -
|
| - if (i1.length < 2)
|
| - return i2;
|
| - if (i2.length < 2)
|
| - return i1;
|
| -
|
| - return [Math.max(i1[0], i2[0]), Math.min(i1[1], i2[1])];
|
| -}
|
| -
|
| -// Generate an "X X ..." string that contains enough characters to fill the polygon. Each
|
| -// character occupies a lineHeight size square cell, the top of first line of characters is aligned
|
| -// with the the polygon's bounds minimum Y value, and each line of characters fills the interior
|
| -// of the polygon.
|
| -
|
| -function generatePolygonContentString(polygon, lineHeight) {
|
| - var result = "";
|
| -
|
| - for (var y = polygon.minY; y < polygon.maxY; y += lineHeight) {
|
| - var xIntercepts = polygonLineIntercepts(polygon, y, lineHeight);
|
| - var lengthInCells = Math.floor(xIntercepts[1] / lineHeight) - Math.ceil(xIntercepts[0] / lineHeight);
|
| - for (var i = 0; i < lengthInCells / 2; i++)
|
| - result += "X "; // all lines end in a space, to enable line breaking
|
| - }
|
| -
|
| - return result;
|
| -}
|
| -
|
| -function generatePolygonShapeInsideElement(elementId, stylesheet, polygon, lineHeight) {
|
| - var verticesString = polygon.vertices.map( function(p) { return p.x + "px " + p.y + "px"; } ).join(", ");
|
| - stylesheet.insertRule("#" + elementId + " { "
|
| - + "shape-inside: polygon(" + verticesString + "); "
|
| - + "width: " + polygon.maxX + "px; "
|
| - + "height: " + polygon.maxY + "px; "
|
| - + "font: " + lineHeight + "px/1 Ahem, sans-serif; }");
|
| - stylesheet.insertRule("#" + elementId + " p { -webkit-margin-before: 0; word-wrap: break-word; letter-spacing: 0;}");
|
| -
|
| - var text = document.createTextNode(generatePolygonContentString(polygon, lineHeight));
|
| - var p = document.createElement("p");
|
| - p.appendChild(text);
|
| -
|
| - var element = document.getElementById(elementId);
|
| - element.appendChild(p);
|
| -}
|
| -
|
| -function generatePolygonSVGElements(elementId, stylesheet, polygon, lineHeight) {
|
| - var svgNS = "http://www.w3.org/2000/svg";
|
| -
|
| - var svgPolygon = document.createElementNS(svgNS, "polygon");
|
| - svgPolygon.setAttribute("points", polygon.vertices.map( function(p) { return p.x + "," + p.y; } ).join(" "));
|
| - svgPolygon.setAttribute("fill", "#636363");
|
| -
|
| - var svgElement = document.getElementById(elementId);
|
| - svgElement.style.width = polygon.maxX + "px";
|
| - svgElement.style.height = polygon.maxY + "px";
|
| - svgElement.appendChild(svgPolygon);
|
| -}
|
| -
|
| -function simulatePolygonShape(elementId, stylesheet, polygon, lineHeight) {
|
| - var width = Math.ceil(polygon.maxX);
|
| - var height = Math.ceil(polygon.maxY);
|
| - stylesheet.insertRule("#" + elementId + " { width: " + width + "px; height: " + height + "px; font: " + lineHeight + "px/1 Ahem, sans-serif;}");
|
| - stylesheet.insertRule("#" + elementId + " .float { height: " + lineHeight + "px; }");
|
| - stylesheet.insertRule("#" + elementId + " .left { float: left; clear: left; }");
|
| - stylesheet.insertRule("#" + elementId + " .right { float: right; clear: right; }");
|
| - stylesheet.insertRule("#" + elementId + " p { -webkit-margin-before: 0; word-wrap: break-word; letter-spacing: 0; }");
|
| -
|
| - var element = document.getElementById(elementId);
|
| -
|
| - var paddingTop = document.createElement("div");
|
| - paddingTop.setAttribute("class", "float left");
|
| - paddingTop.style.width = width + "px";
|
| - paddingTop.style.height = polygon.minY + "px";
|
| - element.appendChild(paddingTop);
|
| -
|
| - for (var y = polygon.minY; y < polygon.maxY; y += lineHeight) {
|
| - var xIntercepts = polygonLineIntercepts(polygon, y, lineHeight);
|
| - var left = xIntercepts[0];
|
| - var right = xIntercepts[1];
|
| -
|
| - var paddingLeft = document.createElement("div");
|
| - paddingLeft.setAttribute("class", "float left");
|
| - paddingLeft.style.width = left + "px";
|
| - element.appendChild(paddingLeft);
|
| -
|
| - var paddingRight = document.createElement("div");
|
| - paddingRight.setAttribute("class", "float right");
|
| - paddingRight.style.width = width - right + "px";
|
| - element.appendChild(paddingRight);
|
| - }
|
| -}
|
| -
|
| -function generateSimulatedPolygonShapeInsideElement(elementId, stylesheet, polygon, lineHeight) {
|
| - var width = Math.ceil(polygon.maxX);
|
| - var height = Math.ceil(polygon.maxY);
|
| -
|
| - stylesheet.insertRule("#" + elementId + " { width: " + width + "px; height: " + height + "px; font: " + lineHeight + "px/1 Ahem, sans-serif;}");
|
| - stylesheet.insertRule("#" + elementId + " .float { height: " + lineHeight + "px; }");
|
| - stylesheet.insertRule("#" + elementId + " .left { float: left; clear: left; }");
|
| - stylesheet.insertRule("#" + elementId + " .right { float: right; clear: right; }");
|
| - stylesheet.insertRule("#" + elementId + " p { -webkit-margin-before: 0; word-wrap: break-word; letter-spacing: 0; }");
|
| -
|
| - var element = document.getElementById(elementId);
|
| -
|
| - var paddingTop = document.createElement("div");
|
| - paddingTop.setAttribute("class", "float left");
|
| - paddingTop.style.width = width + "px";
|
| - paddingTop.style.height = polygon.minY + "px";
|
| - element.appendChild(paddingTop);
|
| -
|
| - for (var y = polygon.minY; y < polygon.maxY; y += lineHeight) {
|
| - var xIntercepts = polygonLineIntercepts(polygon, y, lineHeight);
|
| - var left = xIntercepts[0];
|
| - var right = xIntercepts[1];
|
| -
|
| - var paddingLeft = document.createElement("div");
|
| - paddingLeft.setAttribute("class", "float left");
|
| - paddingLeft.style.width = left + "px";
|
| - element.appendChild(paddingLeft);
|
| -
|
| - var paddingRight = document.createElement("div");
|
| - paddingRight.setAttribute("class", "float right");
|
| - paddingRight.style.width = width - right + "px";
|
| - element.appendChild(paddingRight);
|
| - }
|
| -
|
| - var text = document.createTextNode(generatePolygonContentString(polygon, lineHeight));
|
| - var p = document.createElement("p");
|
| - p.appendChild(text);
|
| -
|
| - var element = document.getElementById(elementId);
|
| - element.appendChild(p);
|
| -}
|
| -
|
| -function positionInformativeText(elementId, stylesheet, polygon, lineHeight)
|
| -{
|
| - stylesheet.insertRule("#" + elementId + " { position: absolute; top: " + (polygon.maxY + lineHeight) + "px;}");
|
| -}
|
| -
|
| -function createPolygonShapeInsideTestCase() {
|
| - var stylesheet = document.getElementById("stylesheet").sheet;
|
| - var polygon = createPolygon(vertices);
|
| - generatePolygonShapeInsideElement("polygon-shape-inside", stylesheet, polygon, lineHeight);
|
| - generatePolygonSVGElements("polygon-svg-shape", stylesheet, polygon, lineHeight);
|
| - positionInformativeText("informative-text", stylesheet, polygon, lineHeight)
|
| -}
|
| -
|
| -function createPolygonShapeInsideTestCaseExpected() {
|
| - var stylesheet = document.getElementById("stylesheet").sheet;
|
| - var polygon = createPolygon(vertices);
|
| - generateSimulatedPolygonShapeInsideElement("polygon-shape-inside", stylesheet, polygon, lineHeight);
|
| - generatePolygonSVGElements("polygon-svg-shape", stylesheet, polygon, lineHeight);
|
| - positionInformativeText("informative-text", stylesheet, polygon, lineHeight)
|
| -}
|
|
|