| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) Research In Motion Limited 2010. All rights reserved. | 2 * Copyright (C) Research In Motion Limited 2010. All rights reserved. |
| 3 * | 3 * |
| 4 * This library is free software; you can redistribute it and/or | 4 * This library is free software; you can redistribute it and/or |
| 5 * modify it under the terms of the GNU Library General Public | 5 * modify it under the terms of the GNU Library General Public |
| 6 * License as published by the Free Software Foundation; either | 6 * License as published by the Free Software Foundation; either |
| 7 * version 2 of the License, or (at your option) any later version. | 7 * version 2 of the License, or (at your option) any later version. |
| 8 * | 8 * |
| 9 * This library is distributed in the hope that it will be useful, | 9 * This library is distributed in the hope that it will be useful, |
| 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of | 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| (...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 99 inAngle += 360; | 99 inAngle += 360; |
| 100 return clampTo<float>((inAngle + outAngle) / 2); | 100 return clampTo<float>((inAngle + outAngle) / 2); |
| 101 case EndMarker: | 101 case EndMarker: |
| 102 return clampTo<float>(inAngle); | 102 return clampTo<float>(inAngle); |
| 103 } | 103 } |
| 104 | 104 |
| 105 ASSERT_NOT_REACHED(); | 105 ASSERT_NOT_REACHED(); |
| 106 return 0; | 106 return 0; |
| 107 } | 107 } |
| 108 | 108 |
| 109 void updateOutslope(const FloatPoint& point) { | 109 void updateOutslope(const PathElement& element) { |
| 110 m_outslopePoints[0] = m_origin; | 110 m_outslopePoints[0] = m_origin; |
| 111 FloatPoint point = element.type == PathElementCloseSubpath |
| 112 ? m_subpathStart |
| 113 : element.points[0]; |
| 111 m_outslopePoints[1] = point; | 114 m_outslopePoints[1] = point; |
| 112 } | 115 } |
| 113 | 116 |
| 114 void updateFromPathElement(const PathElement& element) { | 117 void updateFromPathElement(const PathElement& element) { |
| 115 // First update the outslope for the previous element. | 118 // First update the outslope for the previous element. |
| 116 updateOutslope(element.points[0]); | 119 updateOutslope(element); |
| 117 | 120 |
| 118 // Record the marker for the previous element. | 121 // Record the marker for the previous element. |
| 119 if (m_elementIndex > 0) { | 122 if (m_elementIndex > 0) { |
| 120 SVGMarkerType markerType = m_elementIndex == 1 ? StartMarker : MidMarker; | 123 SVGMarkerType markerType = m_elementIndex == 1 ? StartMarker : MidMarker; |
| 121 m_positions.append( | 124 m_positions.append( |
| 122 MarkerPosition(markerType, m_origin, currentAngle(markerType))); | 125 MarkerPosition(markerType, m_origin, currentAngle(markerType))); |
| 123 } | 126 } |
| 124 | 127 |
| 125 // Update our marker data for this element. | 128 // Update our marker data for this element. |
| 126 updateMarkerDataForPathElement(element); | 129 updateMarkerDataForPathElement(element); |
| (...skipping 14 matching lines...) Expand all Loading... |
| 141 m_inslopePoints[1] = points[2]; | 144 m_inslopePoints[1] = points[2]; |
| 142 m_origin = points[2]; | 145 m_origin = points[2]; |
| 143 break; | 146 break; |
| 144 case PathElementMoveToPoint: | 147 case PathElementMoveToPoint: |
| 145 m_subpathStart = points[0]; | 148 m_subpathStart = points[0]; |
| 146 case PathElementAddLineToPoint: | 149 case PathElementAddLineToPoint: |
| 147 updateInslope(points[0]); | 150 updateInslope(points[0]); |
| 148 m_origin = points[0]; | 151 m_origin = points[0]; |
| 149 break; | 152 break; |
| 150 case PathElementCloseSubpath: | 153 case PathElementCloseSubpath: |
| 151 updateInslope(points[0]); | 154 updateInslope(m_subpathStart); |
| 152 m_origin = m_subpathStart; | 155 m_origin = m_subpathStart; |
| 153 m_subpathStart = FloatPoint(); | 156 m_subpathStart = FloatPoint(); |
| 154 } | 157 } |
| 155 } | 158 } |
| 156 | 159 |
| 157 void updateInslope(const FloatPoint& point) { | 160 void updateInslope(const FloatPoint& point) { |
| 158 m_inslopePoints[0] = m_origin; | 161 m_inslopePoints[0] = m_origin; |
| 159 m_inslopePoints[1] = point; | 162 m_inslopePoints[1] = point; |
| 160 } | 163 } |
| 161 | 164 |
| 162 Vector<MarkerPosition>& m_positions; | 165 Vector<MarkerPosition>& m_positions; |
| 163 unsigned m_elementIndex; | 166 unsigned m_elementIndex; |
| 164 FloatPoint m_origin; | 167 FloatPoint m_origin; |
| 165 FloatPoint m_subpathStart; | 168 FloatPoint m_subpathStart; |
| 166 FloatPoint m_inslopePoints[2]; | 169 FloatPoint m_inslopePoints[2]; |
| 167 FloatPoint m_outslopePoints[2]; | 170 FloatPoint m_outslopePoints[2]; |
| 168 bool m_autoStartReverse; | 171 bool m_autoStartReverse; |
| 169 }; | 172 }; |
| 170 | 173 |
| 171 } // namespace blink | 174 } // namespace blink |
| 172 | 175 |
| 173 #endif // SVGMarkerData_h | 176 #endif // SVGMarkerData_h |
| OLD | NEW |