| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Apple Inc.
All rights reserved. | 2 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Apple Inc.
All rights reserved. |
| 3 * Copyright (C) 2008, 2010 Nokia Corporation and/or its subsidiary(-ies) | 3 * Copyright (C) 2008, 2010 Nokia Corporation and/or its subsidiary(-ies) |
| 4 * Copyright (C) 2007 Alp Toker <alp@atoker.com> | 4 * Copyright (C) 2007 Alp Toker <alp@atoker.com> |
| 5 * Copyright (C) 2008 Eric Seidel <eric@webkit.org> | 5 * Copyright (C) 2008 Eric Seidel <eric@webkit.org> |
| 6 * Copyright (C) 2008 Dirk Schulze <krit@webkit.org> | 6 * Copyright (C) 2008 Dirk Schulze <krit@webkit.org> |
| 7 * Copyright (C) 2010 Torch Mobile (Beijing) Co. Ltd. All rights reserved. | 7 * Copyright (C) 2010 Torch Mobile (Beijing) Co. Ltd. All rights reserved. |
| 8 * Copyright (C) 2012, 2013 Intel Corporation. All rights reserved. | 8 * Copyright (C) 2012, 2013 Intel Corporation. All rights reserved. |
| 9 * Copyright (C) 2012, 2013 Adobe Systems Incorporated. All rights reserved. | 9 * Copyright (C) 2012, 2013 Adobe Systems Incorporated. All rights reserved. |
| 10 * | 10 * |
| (...skipping 17 matching lines...) Expand all Loading... |
| 28 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | 28 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
| 29 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR | 29 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR |
| 30 * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF | 30 * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF |
| 31 * THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | 31 * THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
| 32 * SUCH DAMAGE. | 32 * SUCH DAMAGE. |
| 33 */ | 33 */ |
| 34 | 34 |
| 35 #include "sky/engine/config.h" | 35 #include "sky/engine/config.h" |
| 36 #include "sky/engine/core/html/canvas/CanvasPathMethods.h" | 36 #include "sky/engine/core/html/canvas/CanvasPathMethods.h" |
| 37 | 37 |
| 38 #include "sky/engine/bindings/core/v8/ExceptionState.h" | 38 #include "sky/engine/bindings2/exception_state.h" |
| 39 #include "sky/engine/core/dom/ExceptionCode.h" | 39 #include "sky/engine/core/dom/ExceptionCode.h" |
| 40 #include "sky/engine/platform/geometry/FloatRect.h" | 40 #include "sky/engine/platform/geometry/FloatRect.h" |
| 41 #include "sky/engine/platform/transforms/AffineTransform.h" | 41 #include "sky/engine/platform/transforms/AffineTransform.h" |
| 42 #include "sky/engine/wtf/MathExtras.h" | 42 #include "sky/engine/wtf/MathExtras.h" |
| 43 | 43 |
| 44 namespace blink { | 44 namespace blink { |
| 45 | 45 |
| 46 void CanvasPathMethods::closePath() | 46 void CanvasPathMethods::closePath() |
| 47 { | 47 { |
| 48 if (m_path.isEmpty()) | 48 if (m_path.isEmpty()) |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 106 if (p1 != m_path.currentPoint() || p1 != cp1 || p1 != cp2) | 106 if (p1 != m_path.currentPoint() || p1 != cp1 || p1 != cp2) |
| 107 m_path.addBezierCurveTo(cp1, cp2, p1); | 107 m_path.addBezierCurveTo(cp1, cp2, p1); |
| 108 } | 108 } |
| 109 | 109 |
| 110 void CanvasPathMethods::arcTo(float x1, float y1, float x2, float y2, float r, E
xceptionState& exceptionState) | 110 void CanvasPathMethods::arcTo(float x1, float y1, float x2, float y2, float r, E
xceptionState& exceptionState) |
| 111 { | 111 { |
| 112 if (!std::isfinite(x1) || !std::isfinite(y1) || !std::isfinite(x2) || !std::
isfinite(y2) || !std::isfinite(r)) | 112 if (!std::isfinite(x1) || !std::isfinite(y1) || !std::isfinite(x2) || !std::
isfinite(y2) || !std::isfinite(r)) |
| 113 return; | 113 return; |
| 114 | 114 |
| 115 if (r < 0) { | 115 if (r < 0) { |
| 116 exceptionState.throwDOMException(IndexSizeError, "The radius provided ("
+ String::number(r) + ") is negative."); | 116 exceptionState.ThrowDOMException(IndexSizeError, "The radius provided ("
+ String::number(r) + ") is negative."); |
| 117 return; | 117 return; |
| 118 } | 118 } |
| 119 | 119 |
| 120 if (!isTransformInvertible()) | 120 if (!isTransformInvertible()) |
| 121 return; | 121 return; |
| 122 | 122 |
| 123 FloatPoint p1 = FloatPoint(x1, y1); | 123 FloatPoint p1 = FloatPoint(x1, y1); |
| 124 FloatPoint p2 = FloatPoint(x2, y2); | 124 FloatPoint p2 = FloatPoint(x2, y2); |
| 125 | 125 |
| 126 if (!m_path.hasCurrentPoint()) | 126 if (!m_path.hasCurrentPoint()) |
| (...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 250 } | 250 } |
| 251 | 251 |
| 252 } // namespace | 252 } // namespace |
| 253 | 253 |
| 254 void CanvasPathMethods::arc(float x, float y, float radius, float startAngle, fl
oat endAngle, bool anticlockwise, ExceptionState& exceptionState) | 254 void CanvasPathMethods::arc(float x, float y, float radius, float startAngle, fl
oat endAngle, bool anticlockwise, ExceptionState& exceptionState) |
| 255 { | 255 { |
| 256 if (!std::isfinite(x) || !std::isfinite(y) || !std::isfinite(radius) || !std
::isfinite(startAngle) || !std::isfinite(endAngle)) | 256 if (!std::isfinite(x) || !std::isfinite(y) || !std::isfinite(radius) || !std
::isfinite(startAngle) || !std::isfinite(endAngle)) |
| 257 return; | 257 return; |
| 258 | 258 |
| 259 if (radius < 0) { | 259 if (radius < 0) { |
| 260 exceptionState.throwDOMException(IndexSizeError, "The radius provided ("
+ String::number(radius) + ") is negative."); | 260 exceptionState.ThrowDOMException(IndexSizeError, "The radius provided ("
+ String::number(radius) + ") is negative."); |
| 261 return; | 261 return; |
| 262 } | 262 } |
| 263 | 263 |
| 264 if (!isTransformInvertible()) | 264 if (!isTransformInvertible()) |
| 265 return; | 265 return; |
| 266 | 266 |
| 267 if (!radius || startAngle == endAngle) { | 267 if (!radius || startAngle == endAngle) { |
| 268 // The arc is empty but we still need to draw the connecting line. | 268 // The arc is empty but we still need to draw the connecting line. |
| 269 lineTo(x + radius * cosf(startAngle), y + radius * sinf(startAngle)); | 269 lineTo(x + radius * cosf(startAngle), y + radius * sinf(startAngle)); |
| 270 return; | 270 return; |
| 271 } | 271 } |
| 272 | 272 |
| 273 canonicalizeAngle(&startAngle, &endAngle); | 273 canonicalizeAngle(&startAngle, &endAngle); |
| 274 float adjustedEndAngle = adjustEndAngle(startAngle, endAngle, anticlockwise)
; | 274 float adjustedEndAngle = adjustEndAngle(startAngle, endAngle, anticlockwise)
; |
| 275 m_path.addArc(FloatPoint(x, y), radius, startAngle, adjustedEndAngle, anticl
ockwise); | 275 m_path.addArc(FloatPoint(x, y), radius, startAngle, adjustedEndAngle, anticl
ockwise); |
| 276 } | 276 } |
| 277 | 277 |
| 278 void CanvasPathMethods::ellipse(float x, float y, float radiusX, float radiusY,
float rotation, float startAngle, float endAngle, bool anticlockwise, ExceptionS
tate& exceptionState) | 278 void CanvasPathMethods::ellipse(float x, float y, float radiusX, float radiusY,
float rotation, float startAngle, float endAngle, bool anticlockwise, ExceptionS
tate& exceptionState) |
| 279 { | 279 { |
| 280 if (!std::isfinite(x) || !std::isfinite(y) || !std::isfinite(radiusX) || !st
d::isfinite(radiusY) || !std::isfinite(rotation) || !std::isfinite(startAngle) |
| !std::isfinite(endAngle)) | 280 if (!std::isfinite(x) || !std::isfinite(y) || !std::isfinite(radiusX) || !st
d::isfinite(radiusY) || !std::isfinite(rotation) || !std::isfinite(startAngle) |
| !std::isfinite(endAngle)) |
| 281 return; | 281 return; |
| 282 | 282 |
| 283 if (radiusX < 0) { | 283 if (radiusX < 0) { |
| 284 exceptionState.throwDOMException(IndexSizeError, "The major-axis radius
provided (" + String::number(radiusX) + ") is negative."); | 284 exceptionState.ThrowDOMException(IndexSizeError, "The major-axis radius
provided (" + String::number(radiusX) + ") is negative."); |
| 285 return; | 285 return; |
| 286 } | 286 } |
| 287 if (radiusY < 0) { | 287 if (radiusY < 0) { |
| 288 exceptionState.throwDOMException(IndexSizeError, "The minor-axis radius
provided (" + String::number(radiusY) + ") is negative."); | 288 exceptionState.ThrowDOMException(IndexSizeError, "The minor-axis radius
provided (" + String::number(radiusY) + ") is negative."); |
| 289 return; | 289 return; |
| 290 } | 290 } |
| 291 | 291 |
| 292 if (!isTransformInvertible()) | 292 if (!isTransformInvertible()) |
| 293 return; | 293 return; |
| 294 | 294 |
| 295 canonicalizeAngle(&startAngle, &endAngle); | 295 canonicalizeAngle(&startAngle, &endAngle); |
| 296 float adjustedEndAngle = adjustEndAngle(startAngle, endAngle, anticlockwise)
; | 296 float adjustedEndAngle = adjustEndAngle(startAngle, endAngle, anticlockwise)
; |
| 297 if (!radiusX || !radiusY || startAngle == adjustedEndAngle) { | 297 if (!radiusX || !radiusY || startAngle == adjustedEndAngle) { |
| 298 // The ellipse is empty but we still need to draw the connecting line to
start point. | 298 // The ellipse is empty but we still need to draw the connecting line to
start point. |
| (...skipping 13 matching lines...) Expand all Loading... |
| 312 return; | 312 return; |
| 313 | 313 |
| 314 if (!width && !height) { | 314 if (!width && !height) { |
| 315 m_path.moveTo(FloatPoint(x, y)); | 315 m_path.moveTo(FloatPoint(x, y)); |
| 316 return; | 316 return; |
| 317 } | 317 } |
| 318 | 318 |
| 319 m_path.addRect(FloatRect(x, y, width, height)); | 319 m_path.addRect(FloatRect(x, y, width, height)); |
| 320 } | 320 } |
| 321 } | 321 } |
| OLD | NEW |