diff options
Diffstat (limited to 'cc/base/math_util.cc')
-rw-r--r-- | cc/base/math_util.cc | 24 |
1 files changed, 22 insertions, 2 deletions
diff --git a/cc/base/math_util.cc b/cc/base/math_util.cc index 72b1e7f..e696ea6 100644 --- a/cc/base/math_util.cc +++ b/cc/base/math_util.cc @@ -101,8 +101,15 @@ static inline void AddVertexToClippedQuad(const gfx::PointF& new_vertex, (*num_vertices_in_clipped_quad)++; } -gfx::Rect MathUtil::MapClippedRect(const gfx::Transform& transform, - const gfx::Rect& src_rect) { +gfx::Rect MathUtil::MapEnclosingClippedRect(const gfx::Transform& transform, + const gfx::Rect& src_rect) { + if (transform.IsIdentityOrIntegerTranslation()) { + return src_rect + + gfx::Vector2d( + static_cast<int>(SkMScalarToFloat(transform.matrix().get(0, 3))), + static_cast<int>( + SkMScalarToFloat(transform.matrix().get(1, 3)))); + } return gfx::ToEnclosingRect(MapClippedRect(transform, gfx::RectF(src_rect))); } @@ -136,6 +143,19 @@ gfx::RectF MathUtil::MapClippedRect(const gfx::Transform& transform, return ComputeEnclosingClippedRect(hc0, hc1, hc2, hc3); } +gfx::Rect MathUtil::ProjectEnclosingClippedRect(const gfx::Transform& transform, + const gfx::Rect& src_rect) { + if (transform.IsIdentityOrIntegerTranslation()) { + return src_rect + + gfx::Vector2d( + static_cast<int>(SkMScalarToFloat(transform.matrix().get(0, 3))), + static_cast<int>( + SkMScalarToFloat(transform.matrix().get(1, 3)))); + } + return gfx::ToEnclosingRect( + ProjectClippedRect(transform, gfx::RectF(src_rect))); +} + gfx::RectF MathUtil::ProjectClippedRect(const gfx::Transform& transform, const gfx::RectF& src_rect) { if (transform.IsIdentityOrTranslation()) { |