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) 2013 Adobe Systems Incorporated. All rights reserved. | 9 * Copyright (C) 2013 Adobe Systems Incorporated. All rights reserved. |
10 * | 10 * |
(...skipping 1013 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1024 if (!domPath) { | 1024 if (!domPath) { |
1025 exceptionState.throwDOMException(TypeMismatchError, ExceptionMessages::a
rgumentNullOrIncorrectType(1, "Path")); | 1025 exceptionState.throwDOMException(TypeMismatchError, ExceptionMessages::a
rgumentNullOrIncorrectType(1, "Path")); |
1026 return; | 1026 return; |
1027 } | 1027 } |
1028 | 1028 |
1029 clipInternal(domPath->path(), windingRuleString); | 1029 clipInternal(domPath->path(), windingRuleString); |
1030 } | 1030 } |
1031 | 1031 |
1032 bool CanvasRenderingContext2D::isPointInPath(const float x, const float y, const
String& windingRuleString) | 1032 bool CanvasRenderingContext2D::isPointInPath(const float x, const float y, const
String& windingRuleString) |
1033 { | 1033 { |
| 1034 return isPointInPathInternal(m_path, x, y, windingRuleString); |
| 1035 } |
| 1036 |
| 1037 bool CanvasRenderingContext2D::isPointInPath(DOMPath* domPath, const float x, co
nst float y, ExceptionState& exceptionState) |
| 1038 { |
| 1039 return isPointInPath(domPath, x, y, "nonzero", exceptionState); |
| 1040 } |
| 1041 |
| 1042 bool CanvasRenderingContext2D::isPointInPath(DOMPath* domPath, const float x, co
nst float y, const String& windingRuleString, ExceptionState& exceptionState) |
| 1043 { |
| 1044 if (!domPath) { |
| 1045 exceptionState.throwDOMException(TypeMismatchError, ExceptionMessages::a
rgumentNullOrIncorrectType(1, "Path")); |
| 1046 return false; |
| 1047 } |
| 1048 |
| 1049 return isPointInPathInternal(domPath->path(), x, y, windingRuleString); |
| 1050 } |
| 1051 |
| 1052 bool CanvasRenderingContext2D::isPointInPathInternal(const Path& path, const flo
at x, const float y, const String& windingRuleString) |
| 1053 { |
1034 GraphicsContext* c = drawingContext(); | 1054 GraphicsContext* c = drawingContext(); |
1035 if (!c) | 1055 if (!c) |
1036 return false; | 1056 return false; |
1037 if (!state().m_invertibleCTM) | 1057 if (!state().m_invertibleCTM) |
1038 return false; | 1058 return false; |
1039 | 1059 |
1040 FloatPoint point(x, y); | 1060 FloatPoint point(x, y); |
1041 AffineTransform ctm = state().m_transform; | 1061 AffineTransform ctm = state().m_transform; |
1042 FloatPoint transformedPoint = ctm.inverse().mapPoint(point); | 1062 FloatPoint transformedPoint = ctm.inverse().mapPoint(point); |
1043 if (!std::isfinite(transformedPoint.x()) || !std::isfinite(transformedPoint.
y())) | 1063 if (!std::isfinite(transformedPoint.x()) || !std::isfinite(transformedPoint.
y())) |
1044 return false; | 1064 return false; |
1045 | 1065 |
1046 WindRule windRule = RULE_NONZERO; | 1066 WindRule windRule = RULE_NONZERO; |
1047 if (!parseWinding(windingRuleString, windRule)) | 1067 if (!parseWinding(windingRuleString, windRule)) |
1048 return false; | 1068 return false; |
1049 | 1069 |
1050 return m_path.contains(transformedPoint, windRule); | 1070 return path.contains(transformedPoint, windRule); |
1051 } | 1071 } |
1052 | 1072 |
| 1073 bool CanvasRenderingContext2D::isPointInStroke(const float x, const float y) |
| 1074 { |
| 1075 return isPointInStrokeInternal(m_path, x, y); |
| 1076 } |
1053 | 1077 |
1054 bool CanvasRenderingContext2D::isPointInStroke(const float x, const float y) | 1078 bool CanvasRenderingContext2D::isPointInStroke(DOMPath* domPath, const float x,
const float y, ExceptionState& exceptionState) |
| 1079 { |
| 1080 if (!domPath) { |
| 1081 exceptionState.throwDOMException(TypeMismatchError, ExceptionMessages::a
rgumentNullOrIncorrectType(1, "Path")); |
| 1082 return false; |
| 1083 } |
| 1084 |
| 1085 return isPointInStrokeInternal(domPath->path(), x, y); |
| 1086 } |
| 1087 |
| 1088 bool CanvasRenderingContext2D::isPointInStrokeInternal(const Path& path, const f
loat x, const float y) |
1055 { | 1089 { |
1056 GraphicsContext* c = drawingContext(); | 1090 GraphicsContext* c = drawingContext(); |
1057 if (!c) | 1091 if (!c) |
1058 return false; | 1092 return false; |
1059 if (!state().m_invertibleCTM) | 1093 if (!state().m_invertibleCTM) |
1060 return false; | 1094 return false; |
1061 | 1095 |
1062 FloatPoint point(x, y); | 1096 FloatPoint point(x, y); |
1063 AffineTransform ctm = state().m_transform; | 1097 AffineTransform ctm = state().m_transform; |
1064 FloatPoint transformedPoint = ctm.inverse().mapPoint(point); | 1098 FloatPoint transformedPoint = ctm.inverse().mapPoint(point); |
1065 if (!std::isfinite(transformedPoint.x()) || !std::isfinite(transformedPoint.
y())) | 1099 if (!std::isfinite(transformedPoint.x()) || !std::isfinite(transformedPoint.
y())) |
1066 return false; | 1100 return false; |
1067 | 1101 |
1068 StrokeData strokeData; | 1102 StrokeData strokeData; |
1069 strokeData.setThickness(lineWidth()); | 1103 strokeData.setThickness(lineWidth()); |
1070 strokeData.setLineCap(getLineCap()); | 1104 strokeData.setLineCap(getLineCap()); |
1071 strokeData.setLineJoin(getLineJoin()); | 1105 strokeData.setLineJoin(getLineJoin()); |
1072 strokeData.setMiterLimit(miterLimit()); | 1106 strokeData.setMiterLimit(miterLimit()); |
1073 strokeData.setLineDash(getLineDash(), lineDashOffset()); | 1107 strokeData.setLineDash(getLineDash(), lineDashOffset()); |
1074 return m_path.strokeContains(transformedPoint, strokeData); | 1108 return path.strokeContains(transformedPoint, strokeData); |
1075 } | 1109 } |
1076 | 1110 |
1077 void CanvasRenderingContext2D::clearRect(float x, float y, float width, float he
ight) | 1111 void CanvasRenderingContext2D::clearRect(float x, float y, float width, float he
ight) |
1078 { | 1112 { |
1079 if (!validateRectForCanvas(x, y, width, height)) | 1113 if (!validateRectForCanvas(x, y, width, height)) |
1080 return; | 1114 return; |
1081 GraphicsContext* context = drawingContext(); | 1115 GraphicsContext* context = drawingContext(); |
1082 if (!context) | 1116 if (!context) |
1083 return; | 1117 return; |
1084 if (!state().m_invertibleCTM) | 1118 if (!state().m_invertibleCTM) |
(...skipping 1384 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2469 const int focusRingWidth = 5; | 2503 const int focusRingWidth = 5; |
2470 const int focusRingOutline = 0; | 2504 const int focusRingOutline = 0; |
2471 c->drawFocusRing(path, focusRingWidth, focusRingOutline, focusRingColor); | 2505 c->drawFocusRing(path, focusRingWidth, focusRingOutline, focusRingColor); |
2472 | 2506 |
2473 c->restore(); | 2507 c->restore(); |
2474 | 2508 |
2475 didDraw(dirtyRect); | 2509 didDraw(dirtyRect); |
2476 } | 2510 } |
2477 | 2511 |
2478 } // namespace WebCore | 2512 } // namespace WebCore |
OLD | NEW |