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 12 matching lines...) Expand all Loading... |
23 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | 23 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
24 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | 24 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, |
25 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | 25 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
26 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED | 26 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED |
27 * OF THE POSSIBILITY OF SUCH DAMAGE. | 27 * OF THE POSSIBILITY OF SUCH DAMAGE. |
28 */ | 28 */ |
29 | 29 |
30 #include "platform/geometry/FloatPolygon.h" | 30 #include "platform/geometry/FloatPolygon.h" |
31 | 31 |
32 #include "wtf/MathExtras.h" | 32 #include "wtf/MathExtras.h" |
33 #include <memory> | |
34 | 33 |
35 namespace blink { | 34 namespace blink { |
36 | 35 |
37 static inline float determinant(const FloatSize& a, const FloatSize& b) | 36 static inline float determinant(const FloatSize& a, const FloatSize& b) |
38 { | 37 { |
39 return a.width() * b.height() - a.height() * b.width(); | 38 return a.width() * b.height() - a.height() * b.width(); |
40 } | 39 } |
41 | 40 |
42 static inline bool areCollinearPoints(const FloatPoint& p0, const FloatPoint& p1
, const FloatPoint& p2) | 41 static inline bool areCollinearPoints(const FloatPoint& p0, const FloatPoint& p1
, const FloatPoint& p2) |
43 { | 42 { |
(...skipping 28 matching lines...) Expand all Loading... |
72 while (vertexIndex2) { | 71 while (vertexIndex2) { |
73 unsigned vertexIndex3 = nextVertexIndex(vertexIndex2, nVertices, clockwi
se); | 72 unsigned vertexIndex3 = nextVertexIndex(vertexIndex2, nVertices, clockwi
se); |
74 if (!areCollinearPoints(polygon.vertexAt(vertexIndex1), polygon.vertexAt
(vertexIndex2), polygon.vertexAt(vertexIndex3))) | 73 if (!areCollinearPoints(polygon.vertexAt(vertexIndex1), polygon.vertexAt
(vertexIndex2), polygon.vertexAt(vertexIndex3))) |
75 break; | 74 break; |
76 vertexIndex2 = vertexIndex3; | 75 vertexIndex2 = vertexIndex3; |
77 } | 76 } |
78 | 77 |
79 return vertexIndex2; | 78 return vertexIndex2; |
80 } | 79 } |
81 | 80 |
82 FloatPolygon::FloatPolygon(std::unique_ptr<Vector<FloatPoint>> vertices, WindRul
e fillRule) | 81 FloatPolygon::FloatPolygon(PassOwnPtr<Vector<FloatPoint>> vertices, WindRule fil
lRule) |
83 : m_vertices(std::move(vertices)) | 82 : m_vertices(std::move(vertices)) |
84 , m_fillRule(fillRule) | 83 , m_fillRule(fillRule) |
85 { | 84 { |
86 unsigned nVertices = numberOfVertices(); | 85 unsigned nVertices = numberOfVertices(); |
87 m_edges.resize(nVertices); | 86 m_edges.resize(nVertices); |
88 m_empty = nVertices < 3; | 87 m_empty = nVertices < 3; |
89 | 88 |
90 if (nVertices) | 89 if (nVertices) |
91 m_boundingBox.setLocation(vertexAt(0)); | 90 m_boundingBox.setLocation(vertexAt(0)); |
92 | 91 |
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
218 float uOtherLine = determinant(thisDelta, vertex1Delta) / denominator; | 217 float uOtherLine = determinant(thisDelta, vertex1Delta) / denominator; |
219 | 218 |
220 if (uThisLine < 0 || uOtherLine < 0 || uThisLine > 1 || uOtherLine > 1) | 219 if (uThisLine < 0 || uOtherLine < 0 || uThisLine > 1 || uOtherLine > 1) |
221 return false; | 220 return false; |
222 | 221 |
223 point = vertex1() + uThisLine * thisDelta; | 222 point = vertex1() + uThisLine * thisDelta; |
224 return true; | 223 return true; |
225 } | 224 } |
226 | 225 |
227 } // namespace blink | 226 } // namespace blink |
OLD | NEW |