| #include "DataTypes.h" |
| #include "Extrema.h" |
| |
| void _Rect::setBounds(const Cubic& cubic) { |
| set(cubic[0]); |
| add(cubic[3]); |
| double tValues[4]; |
| int roots = SkFindCubicExtrema(cubic[0].x, cubic[1].x, cubic[2].x, |
| cubic[3].x, tValues); |
| roots += SkFindCubicExtrema(cubic[0].y, cubic[1].y, cubic[2].y, cubic[3].y, |
| &tValues[roots]); |
| for (int x = 0; x < roots; ++x) { |
| _Point result; |
| xy_at_t(cubic, tValues[x], result.x, result.y); |
| add(result); |
| } |
| } |
| |
| void _Rect::setRawBounds(const Cubic& cubic) { |
| set(cubic[0]); |
| for (int x = 1; x < 4; ++x) { |
| add(cubic[x]); |
| } |
| } |
| |
| void _Rect::setBounds(const Quadratic& quad) { |
| set(quad[0]); |
| add(quad[2]); |
| double tValues[2]; |
| int roots = SkFindQuadExtrema(quad[0].x, quad[1].x, quad[2].x, tValues); |
| roots += SkFindQuadExtrema(quad[0].y, quad[1].y, quad[2].y, &tValues[roots]); |
| for (int x = 0; x < roots; ++x) { |
| _Point result; |
| xy_at_t(quad, tValues[x], result.x, result.y); |
| add(result); |
| } |
| } |
| |
| void _Rect::setRawBounds(const Quadratic& quad) { |
| set(quad[0]); |
| for (int x = 1; x < 3; ++x) { |
| add(quad[x]); |
| } |
| } |