Chromium Code Reviews| OLD | NEW | 
|---|---|
| 1 /* | 1 /* | 
| 2 * Copyright (C) 2012 Adobe Systems Incorporated. All rights reserved. | 2 * Copyright (C) 2012 Adobe Systems Incorporated. All rights reserved. | 
| 3 * | 3 * | 
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without | 
| 5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions | 
| 6 * are met: | 6 * are met: | 
| 7 * | 7 * | 
| 8 * 1. Redistributions of source code must retain the above | 8 * 1. Redistributions of source code must retain the above | 
| 9 * copyright notice, this list of conditions and the following | 9 * copyright notice, this list of conditions and the following | 
| 10 * disclaimer. | 10 * disclaimer. | 
| (...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 122 float angle5 = ((padding) ? -angle : twoPI - angle) / arcSegmentCount; | 122 float angle5 = ((padding) ? -angle : twoPI - angle) / arcSegmentCount; | 
| 123 | 123 | 
| 124 vertices.append(startArcVertex); | 124 vertices.append(startArcVertex); | 
| 125 for (unsigned i = 1; i < arcSegmentCount; ++i) { | 125 for (unsigned i = 1; i < arcSegmentCount; ++i) { | 
| 126 float angle = startAngle + angle5 * i; | 126 float angle = startAngle + angle5 * i; | 
| 127 vertices.append(arcCenter + FloatPoint(cos(angle) * arcRadius, sin(angle ) * arcRadius)); | 127 vertices.append(arcCenter + FloatPoint(cos(angle) * arcRadius, sin(angle ) * arcRadius)); | 
| 128 } | 128 } | 
| 129 vertices.append(endArcVertex); | 129 vertices.append(endArcVertex); | 
| 130 } | 130 } | 
| 131 | 131 | 
| 132 static inline void snapVerticesToLayoutUnitGrid(Vector<FloatPoint>& vertices) | |
| 
 
Julien - ping for review
2013/04/23 17:09:04
Wouldn't it make more sense to have your vertices
 
leviw_travelin_and_unemployed
2013/04/23 18:27:20
For the record, I agree that since this issue show
 
 | |
| 133 { | |
| 134 for (unsigned i = 0; i < vertices.size(); ++i) | |
| 135 vertices[i].set(LayoutUnit(vertices[i].x()).toFloat(), LayoutUnit(vertic es[i].y()).toFloat()); | |
| 
 
Julien - ping for review
2013/04/23 17:09:04
Note that this could (and will) yield to big round
 
 | |
| 136 } | |
| 137 | |
| 132 static inline FloatPolygon* computeShapePaddingBounds(const FloatPolygon& polygo n, float padding, WindRule fillRule) | 138 static inline FloatPolygon* computeShapePaddingBounds(const FloatPolygon& polygo n, float padding, WindRule fillRule) | 
| 133 { | 139 { | 
| 134 Vector<FloatPoint>* paddedVertices = new Vector<FloatPoint>(); | 140 Vector<FloatPoint>* paddedVertices = new Vector<FloatPoint>(); | 
| 135 FloatPoint intersection; | 141 FloatPoint intersection; | 
| 136 | 142 | 
| 137 for (unsigned i = 0; i < polygon.numberOfEdges(); ++i) { | 143 for (unsigned i = 0; i < polygon.numberOfEdges(); ++i) { | 
| 138 const FloatPolygonEdge& thisEdge = polygon.edgeAt(i); | 144 const FloatPolygonEdge& thisEdge = polygon.edgeAt(i); | 
| 139 const FloatPolygonEdge& prevEdge = thisEdge.previousEdge(); | 145 const FloatPolygonEdge& prevEdge = thisEdge.previousEdge(); | 
| 140 OffsetPolygonEdge thisOffsetEdge(thisEdge, inwardEdgeNormal(thisEdge) * padding); | 146 OffsetPolygonEdge thisOffsetEdge(thisEdge, inwardEdgeNormal(thisEdge) * padding); | 
| 141 OffsetPolygonEdge prevOffsetEdge(prevEdge, inwardEdgeNormal(prevEdge) * padding); | 147 OffsetPolygonEdge prevOffsetEdge(prevEdge, inwardEdgeNormal(prevEdge) * padding); | 
| 142 | 148 | 
| 143 if (prevOffsetEdge.intersection(thisOffsetEdge, intersection)) | 149 if (prevOffsetEdge.intersection(thisOffsetEdge, intersection)) | 
| 144 paddedVertices->append(intersection); | 150 paddedVertices->append(intersection); | 
| 145 else if (isReflexVertex(prevEdge.vertex1(), thisEdge.vertex1(), thisEdge .vertex2())) | 151 else if (isReflexVertex(prevEdge.vertex1(), thisEdge.vertex1(), thisEdge .vertex2())) | 
| 146 appendArc(*paddedVertices, thisEdge.vertex1(), padding, prevOffsetEd ge.vertex2(), thisOffsetEdge.vertex1(), true); | 152 appendArc(*paddedVertices, thisEdge.vertex1(), padding, prevOffsetEd ge.vertex2(), thisOffsetEdge.vertex1(), true); | 
| 147 } | 153 } | 
| 148 | 154 | 
| 155 snapVerticesToLayoutUnitGrid(*paddedVertices); | |
| 149 return new FloatPolygon(adoptPtr(paddedVertices), fillRule); | 156 return new FloatPolygon(adoptPtr(paddedVertices), fillRule); | 
| 150 } | 157 } | 
| 151 | 158 | 
| 152 static inline FloatPolygon* computeShapeMarginBounds(const FloatPolygon& polygon , float margin, WindRule fillRule) | 159 static inline FloatPolygon* computeShapeMarginBounds(const FloatPolygon& polygon , float margin, WindRule fillRule) | 
| 153 { | 160 { | 
| 154 Vector<FloatPoint>* marginVertices = new Vector<FloatPoint>(); | 161 Vector<FloatPoint>* marginVertices = new Vector<FloatPoint>(); | 
| 155 FloatPoint intersection; | 162 FloatPoint intersection; | 
| 156 | 163 | 
| 157 for (unsigned i = 0; i < polygon.numberOfEdges(); ++i) { | 164 for (unsigned i = 0; i < polygon.numberOfEdges(); ++i) { | 
| 158 const FloatPolygonEdge& thisEdge = polygon.edgeAt(i); | 165 const FloatPolygonEdge& thisEdge = polygon.edgeAt(i); | 
| 159 const FloatPolygonEdge& prevEdge = thisEdge.previousEdge(); | 166 const FloatPolygonEdge& prevEdge = thisEdge.previousEdge(); | 
| 160 OffsetPolygonEdge thisOffsetEdge(thisEdge, outwardEdgeNormal(thisEdge) * margin); | 167 OffsetPolygonEdge thisOffsetEdge(thisEdge, outwardEdgeNormal(thisEdge) * margin); | 
| 161 OffsetPolygonEdge prevOffsetEdge(prevEdge, outwardEdgeNormal(prevEdge) * margin); | 168 OffsetPolygonEdge prevOffsetEdge(prevEdge, outwardEdgeNormal(prevEdge) * margin); | 
| 162 | 169 | 
| 163 if (prevOffsetEdge.intersection(thisOffsetEdge, intersection)) | 170 if (prevOffsetEdge.intersection(thisOffsetEdge, intersection)) | 
| 164 marginVertices->append(intersection); | 171 marginVertices->append(intersection); | 
| 165 else | 172 else | 
| 166 appendArc(*marginVertices, thisEdge.vertex1(), margin, prevOffsetEdg e.vertex2(), thisOffsetEdge.vertex1(), false); | 173 appendArc(*marginVertices, thisEdge.vertex1(), margin, prevOffsetEdg e.vertex2(), thisOffsetEdge.vertex1(), false); | 
| 167 } | 174 } | 
| 168 | 175 | 
| 176 snapVerticesToLayoutUnitGrid(*marginVertices); | |
| 169 return new FloatPolygon(adoptPtr(marginVertices), fillRule); | 177 return new FloatPolygon(adoptPtr(marginVertices), fillRule); | 
| 170 } | 178 } | 
| 171 | 179 | 
| 172 const FloatPolygon& ExclusionPolygon::shapePaddingBounds() const | 180 const FloatPolygon& ExclusionPolygon::shapePaddingBounds() const | 
| 173 { | 181 { | 
| 174 ASSERT(shapePadding() >= 0); | 182 ASSERT(shapePadding() >= 0); | 
| 175 if (!shapePadding()) | 183 if (!shapePadding()) | 
| 176 return m_polygon; | 184 return m_polygon; | 
| 177 | 185 | 
| 178 if (!m_paddingBounds) | 186 if (!m_paddingBounds) | 
| (...skipping 310 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 489 } | 497 } | 
| 490 } | 498 } | 
| 491 } | 499 } | 
| 492 | 500 | 
| 493 if (firstFitFound) | 501 if (firstFitFound) | 
| 494 result = firstFitRect.y(); | 502 result = firstFitRect.y(); | 
| 495 return firstFitFound; | 503 return firstFitFound; | 
| 496 } | 504 } | 
| 497 | 505 | 
| 498 } // namespace WebCore | 506 } // namespace WebCore | 
| OLD | NEW |