OLD | NEW |
1 // Copyright (c) 2008, Google Inc. | 1 // Copyright (c) 2008, Google Inc. |
2 // All rights reserved. | 2 // 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 are | 5 // modification, are permitted provided that the following conditions are |
6 // met: | 6 // met: |
7 // | 7 // |
8 // * Redistributions of source code must retain the above copyright | 8 // * Redistributions of source code must retain the above copyright |
9 // notice, this list of conditions and the following disclaimer. | 9 // notice, this list of conditions and the following disclaimer. |
10 // * Redistributions in binary form must reproduce the above | 10 // * Redistributions in binary form must reproduce the above |
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
136 oval.set(cx - radius, cy - radius, cx + radius, cy + radius); | 136 oval.set(cx - radius, cy - radius, cx + radius, cy + radius); |
137 | 137 |
138 float sweep = ea - sa; | 138 float sweep = ea - sa; |
139 // check for a circle | 139 // check for a circle |
140 if (sweep >= 2*gPI || sweep <= -2*gPI) { | 140 if (sweep >= 2*gPI || sweep <= -2*gPI) { |
141 m_path->addOval(oval); | 141 m_path->addOval(oval); |
142 } else { | 142 } else { |
143 SkScalar startDegrees = WebCoreFloatToSkScalar(sa * 180 / gPI); | 143 SkScalar startDegrees = WebCoreFloatToSkScalar(sa * 180 / gPI); |
144 SkScalar sweepDegrees = WebCoreFloatToSkScalar(sweep * 180 / gPI); | 144 SkScalar sweepDegrees = WebCoreFloatToSkScalar(sweep * 180 / gPI); |
145 | 145 |
| 146 // Counterclockwise arcs should be drawn with negative sweeps, while |
| 147 // clockwise arcs should be drawn with positive sweeps. Check to see |
| 148 // if the situation is reversed and correct it by adding or subtracting |
| 149 // a full circle |
146 if (anticlockwise && sweepDegrees > 0) { | 150 if (anticlockwise && sweepDegrees > 0) { |
147 sweepDegrees -= SkIntToScalar(360); | 151 sweepDegrees -= SkIntToScalar(360); |
148 } else if (!anticlockwise && sweepDegrees < 0) { | 152 } else if (!anticlockwise && sweepDegrees < 0) { |
149 sweepDegrees = SkIntToScalar(360) - sweepDegrees; | 153 sweepDegrees += SkIntToScalar(360); |
150 } | 154 } |
151 | 155 |
152 // SkDebugf("addArc sa=%g ea=%g cw=%d start=%g sweep=%g\n", sa, ea, clock
wise, | 156 // SkDebugf("addArc sa=%g ea=%g cw=%d start=%g sweep=%g\n", sa, ea, clock
wise, |
153 // SkScalarToFloat(startDegrees), SkScalarToFloat(sweepDegrees))
; | 157 // SkScalarToFloat(startDegrees), SkScalarToFloat(sweepDegrees))
; |
154 | 158 |
155 m_path->arcTo(oval, startDegrees, sweepDegrees, false); | 159 m_path->arcTo(oval, startDegrees, sweepDegrees, false); |
156 } | 160 } |
157 } | 161 } |
158 | 162 |
159 void Path::addRect(const FloatRect& rect) | 163 void Path::addRect(const FloatRect& rect) |
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
273 if (numPoints) { | 277 if (numPoints) { |
274 ASSERT(numPoints==1); | 278 ASSERT(numPoints==1); |
275 m_path->getLastPt(pts); | 279 m_path->getLastPt(pts); |
276 result += String::format("M%.2f,%.2f ", pts[0].fX, pts[0].fY); | 280 result += String::format("M%.2f,%.2f ", pts[0].fX, pts[0].fY); |
277 } | 281 } |
278 | 282 |
279 return result.stripWhiteSpace(); | 283 return result.stripWhiteSpace(); |
280 } | 284 } |
281 | 285 |
282 } // namespace WebCore | 286 } // namespace WebCore |
OLD | NEW |