Compute crop using all ancestors, not just immediate parent
The current computeCrop function only handles intersecting with
the parent's crop and not traversing to the top most parent. This change
will recurse and intersect all the ancestor's crop with the current
layer's crop.
Test: Created a parent layer several layer's above the current layer that
had a crop. Before, the content would stretch. With the change, the
content is the correct size.
Change-Id: I592e0afdfc9db574c5ccc79aacedfbd42357c8f7
diff --git a/services/surfaceflinger/Layer.cpp b/services/surfaceflinger/Layer.cpp
index 27739ce..dbace32 100755
--- a/services/surfaceflinger/Layer.cpp
+++ b/services/surfaceflinger/Layer.cpp
@@ -546,6 +546,13 @@
activeCrop.clear();
}
}
+
+ const auto& p = mDrawingParent.promote();
+ if (p != nullptr) {
+ auto parentCrop = p->computeInitialCrop(hw);
+ activeCrop.intersect(parentCrop, &activeCrop);
+ }
+
return activeCrop;
}
@@ -559,11 +566,6 @@
// Screen space to make reduction to parent crop clearer.
Rect activeCrop = computeInitialCrop(hw);
- const auto& p = mDrawingParent.promote();
- if (p != nullptr) {
- auto parentCrop = p->computeInitialCrop(hw);
- activeCrop.intersect(parentCrop, &activeCrop);
- }
Transform t = getTransform();
// Back to layer space to work with the content crop.
activeCrop = t.inverse().transform(activeCrop);