Fix a bug where non-cropped layer could be scaled incorrectly
If a layer is not cropped but its bounds are outside of the viewport (i.e.: clipped), the crop rectangle passed to hw composer would be invalid because it started invalid in the first place (to indicate "no crop"). Bug: 10410944 Change-Id: I4ae4d49a1adef0be7fa4304ecf84b1a5b7d03fe0
This commit is contained in:
parent
4f4f094348
commit
0e8f1443b8
@ -287,7 +287,13 @@ FloatRect Layer::computeCrop(const sp<const DisplayDevice>& hw) const {
|
|||||||
// pixels in the buffer.
|
// pixels in the buffer.
|
||||||
// FIXME: the 3 lines below can produce slightly incorrect clipping when we have
|
// FIXME: the 3 lines below can produce slightly incorrect clipping when we have
|
||||||
// a viewport clipping and a window transform. we should use floating point to fix this.
|
// a viewport clipping and a window transform. we should use floating point to fix this.
|
||||||
Rect activeCrop(s.transform.transform(s.active.crop));
|
|
||||||
|
Rect activeCrop(s.active.w, s.active.h);
|
||||||
|
if (!s.active.crop.isEmpty()) {
|
||||||
|
activeCrop = s.active.crop;
|
||||||
|
}
|
||||||
|
|
||||||
|
activeCrop = s.transform.transform(activeCrop);
|
||||||
activeCrop.intersect(hw->getViewport(), &activeCrop);
|
activeCrop.intersect(hw->getViewport(), &activeCrop);
|
||||||
activeCrop = s.transform.inverse().transform(activeCrop);
|
activeCrop = s.transform.inverse().transform(activeCrop);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user