Chromium Code Reviews| Index: cc/base/math_util.cc |
| diff --git a/cc/base/math_util.cc b/cc/base/math_util.cc |
| index ca6e5711760f8b6a16ccfcb9f3e10c82b1f3ada7..641d6499cd147a759453baa86095101851ab5b6e 100644 |
| --- a/cc/base/math_util.cc |
| +++ b/cc/base/math_util.cc |
| @@ -41,6 +41,15 @@ static HomogeneousCoordinate ProjectHomogeneousPoint( |
| return result; |
| } |
| +static HomogeneousCoordinate ProjectHomogeneousPoint( |
| + const gfx::Transform& transform, |
| + const gfx::PointF& p, |
| + bool* clipped) { |
| + HomogeneousCoordinate h = ProjectHomogeneousPoint(transform, p); |
| + *clipped = h.w() <= 0; |
| + return h; |
| +} |
| + |
| static HomogeneousCoordinate MapHomogeneousPoint( |
| const gfx::Transform& transform, |
| const gfx::Point3F& p) { |
| @@ -444,28 +453,27 @@ gfx::QuadF MathUtil::ProjectQuad(const gfx::Transform& transform, |
| gfx::PointF MathUtil::ProjectPoint(const gfx::Transform& transform, |
| const gfx::PointF& p, |
| bool* clipped) { |
| - HomogeneousCoordinate h = ProjectHomogeneousPoint(transform, p); |
| - |
| - if (h.w() > 0) { |
| - // The cartesian coordinates will be valid in this case. |
| - *clipped = false; |
| - return h.CartesianPoint2d(); |
| - } |
| - |
| - // The cartesian coordinates will be invalid after dividing by w. |
| - *clipped = true; |
| - |
| + HomogeneousCoordinate h = ProjectHomogeneousPoint(transform, p, clipped); |
| // Avoid dividing by w if w == 0. |
| if (!h.w()) |
| return gfx::PointF(); |
| - // This return value will be invalid because clipped == true, but (1) users of |
| + // This return value will be invalid if clipped == true, but (1) users of |
| // this code should be ignoring the return value when clipped == true anyway, |
| // and (2) this behavior is more consistent with existing behavior of WebKit |
| // transforms if the user really does not ignore the return value. |
| return h.CartesianPoint2d(); |
| } |
| +gfx::Point3F MathUtil::ProjectPoint3D(const gfx::Transform& transform, |
| + const gfx::PointF& p, |
| + bool* clipped) { |
| + HomogeneousCoordinate h = ProjectHomogeneousPoint(transform, p, clipped); |
| + if (!h.w()) |
| + return gfx::Point3F(); |
| + return h.CartesianPoint3d(); |
|
enne (OOO)
2014/05/06 20:30:58
What if h is clipped?
Ian Vollick
2014/05/06 21:06:20
In that case, the answer isn't valid, but won't di
|
| +} |
| + |
| gfx::RectF MathUtil::ScaleRectProportional(const gfx::RectF& input_outer_rect, |
| const gfx::RectF& scale_outer_rect, |
| const gfx::RectF& scale_inner_rect) { |