summaryrefslogtreecommitdiffstats
path: root/cc/base/math_util.cc
diff options
context:
space:
mode:
Diffstat (limited to 'cc/base/math_util.cc')
-rw-r--r--cc/base/math_util.cc24
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()) {