Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(173)

Unified Diff: cc/layer_tree_host_common.cc

Issue 11644008: Migrate from MathUtil::inverse() to gfx::Transform::GetInverse() (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: cc/layer_tree_host_common.cc
diff --git a/cc/layer_tree_host_common.cc b/cc/layer_tree_host_common.cc
index b9fc38083f32150ab968b4c6e0e2770216c7a2be..87743392760d448095a1be789fff690cf25b57ce 100644
--- a/cc/layer_tree_host_common.cc
+++ b/cc/layer_tree_host_common.cc
@@ -56,7 +56,8 @@ inline gfx::Rect calculateVisibleRectWithCachedLayerRect(const gfx::Rect& target
// This bounding rectangle may be larger than it needs to be (being
// axis-aligned), but is a reasonable filter on the space to consider.
// Non-invertible transforms will create an empty rect here.
- const gfx::Transform surfaceToLayer = MathUtil::inverse(transform);
+ gfx::Transform surfaceToLayer(gfx::Transform::kSkipInitialization);
+ transform.GetInverse(&surfaceToLayer);
danakj 2012/12/19 05:23:06 If it's not invertible, should we return layerBoun
gfx::Rect layerRect = gfx::ToEnclosingRect(MathUtil::projectClippedRect(surfaceToLayer, gfx::RectF(minimalSurfaceRect)));
layerRect.Intersect(layerBoundRect);
return layerRect;
@@ -321,7 +322,9 @@ gfx::Transform computeScrollCompensationForThisLayer(LayerImpl* scrollingLayer,
gfx::Transform scrollCompensationForThisLayer = partialLayerOriginTransform; // Step 3
scrollCompensationForThisLayer.Translate(scrollingLayer->scrollDelta().x(), scrollingLayer->scrollDelta().y()); // Step 2
- scrollCompensationForThisLayer.PreconcatTransform(MathUtil::inverse(partialLayerOriginTransform)); // Step 1
+ gfx::Transform inversePartialLayerOriginTransform(gfx::Transform::kSkipInitialization);
+ partialLayerOriginTransform.GetInverse(&inversePartialLayerOriginTransform);
danakj 2012/12/19 05:23:06 DCHECK the return value?
+ scrollCompensationForThisLayer.PreconcatTransform(inversePartialLayerOriginTransform); // Step 1
return scrollCompensationForThisLayer;
}
@@ -373,8 +376,11 @@ gfx::Transform computeScrollCompensationMatrixForChildren(LayerImpl* layer, cons
// Step 1 (right-most in the math): transform from the new surface to the original ancestor surface
// Step 2: apply the scroll compensation
// Step 3: transform back to the new surface.
- if (layer->renderSurface() && !nextScrollCompensationMatrix.IsIdentity())
- nextScrollCompensationMatrix = MathUtil::inverse(layer->renderSurface()->drawTransform()) * nextScrollCompensationMatrix * layer->renderSurface()->drawTransform();
+ if (layer->renderSurface() && !nextScrollCompensationMatrix.IsIdentity()) {
+ gfx::Transform inverseSurfaceDrawTransform(gfx::Transform::kSkipInitialization);
+ layer->renderSurface()->drawTransform().GetInverse(&inverseSurfaceDrawTransform);
danakj 2012/12/19 05:23:06 DCHECK the return value? Or should we do something
+ nextScrollCompensationMatrix = inverseSurfaceDrawTransform * nextScrollCompensationMatrix * layer->renderSurface()->drawTransform();
+ }
return nextScrollCompensationMatrix;
}
@@ -736,7 +742,9 @@ static void calculateDrawPropertiesInternal(LayerType* layer, const gfx::Transfo
renderSurface->setIsClipped(ancestorClipsSubtree);
if (ancestorClipsSubtree) {
renderSurface->setClipRect(clipRectFromAncestor);
- clipRectForSubtreeInDescendantSpace = gfx::ToEnclosingRect(MathUtil::projectClippedRect(MathUtil::inverse(renderSurface->drawTransform()), renderSurface->clipRect()));
+ gfx::Transform inverseSurfaceDrawTransform(gfx::Transform::kSkipInitialization);
+ renderSurface->drawTransform().GetInverse(&inverseSurfaceDrawTransform);
danakj 2012/12/19 05:23:06 DCHECK the return value?
+ clipRectForSubtreeInDescendantSpace = gfx::ToEnclosingRect(MathUtil::projectClippedRect(inverseSurfaceDrawTransform, renderSurface->clipRect()));
} else {
renderSurface->setClipRect(gfx::Rect());
clipRectForSubtreeInDescendantSpace = clipRectFromAncestorInDescendantSpace;
@@ -998,12 +1006,13 @@ void LayerTreeHostCommon::calculateDrawProperties(LayerImpl* rootLayer, const gf
static bool pointHitsRect(const gfx::PointF& screenSpacePoint, const gfx::Transform& localSpaceToScreenSpaceTransform, gfx::RectF localSpaceRect)
{
// If the transform is not invertible, then assume that this point doesn't hit this rect.
- if (!localSpaceToScreenSpaceTransform.IsInvertible())
+ gfx::Transform inverseLocalSpaceToScreenSpace(gfx::Transform::kSkipInitialization);
+ if (!localSpaceToScreenSpaceTransform.GetInverse(&inverseLocalSpaceToScreenSpace))
return false;
// Transform the hit test point from screen space to the local space of the given rect.
bool clipped = false;
- gfx::PointF hitTestPointInLocalSpace = MathUtil::projectPoint(MathUtil::inverse(localSpaceToScreenSpaceTransform), screenSpacePoint, clipped);
+ gfx::PointF hitTestPointInLocalSpace = MathUtil::projectPoint(inverseLocalSpaceToScreenSpace, screenSpacePoint, clipped);
// If projectPoint could not project to a valid value, then we assume that this point doesn't hit this rect.
if (clipped)
@@ -1015,12 +1024,13 @@ static bool pointHitsRect(const gfx::PointF& screenSpacePoint, const gfx::Transf
static bool pointHitsRegion(gfx::PointF screenSpacePoint, const gfx::Transform& screenSpaceTransform, const Region& layerSpaceRegion, float layerContentScaleX, float layerContentScaleY)
{
// If the transform is not invertible, then assume that this point doesn't hit this region.
- if (!screenSpaceTransform.IsInvertible())
+ gfx::Transform inverseScreenSpaceTransform(gfx::Transform::kSkipInitialization);
+ if (!screenSpaceTransform.GetInverse(&inverseScreenSpaceTransform))
return false;
// Transform the hit test point from screen space to the local space of the given region.
bool clipped = false;
- gfx::PointF hitTestPointInContentSpace = MathUtil::projectPoint(MathUtil::inverse(screenSpaceTransform), screenSpacePoint, clipped);
+ gfx::PointF hitTestPointInContentSpace = MathUtil::projectPoint(inverseScreenSpaceTransform, screenSpacePoint, clipped);
gfx::PointF hitTestPointInLayerSpace = gfx::ScalePoint(hitTestPointInContentSpace, 1 / layerContentScaleX, 1 / layerContentScaleY);
// If projectPoint could not project to a valid value, then we assume that this point doesn't hit this region.

Powered by Google App Engine
This is Rietveld 408576698