diff options
| -rw-r--r-- | services/surfaceflinger/LayerBase.cpp | 17 | ||||
| -rw-r--r-- | services/surfaceflinger/SurfaceFlinger.cpp | 2 |
2 files changed, 11 insertions, 8 deletions
diff --git a/services/surfaceflinger/LayerBase.cpp b/services/surfaceflinger/LayerBase.cpp index dfdbf300fd..24b122ab8a 100644 --- a/services/surfaceflinger/LayerBase.cpp +++ b/services/surfaceflinger/LayerBase.cpp @@ -259,7 +259,7 @@ Rect LayerBase::computeBounds() const { if (!s.active.crop.isEmpty()) { win.intersect(s.active.crop, &win); } - return s.transform.transform(win); + return win; } Region LayerBase::latchBuffer(bool& recomputeVisibleRegions) { @@ -289,13 +289,16 @@ void LayerBase::setGeometry( HWC_BLENDING_COVERAGE); } - const Transform& tr = hw->getTransform(); - Rect transformedBounds(computeBounds()); - transformedBounds = tr.transform(transformedBounds); - // scaling is already applied in transformedBounds - layer.setFrame(transformedBounds); - layer.setCrop(transformedBounds.getBounds()); + Rect bounds(computeBounds()); + + // apply the layer's transform, followed by the display's global transform + // here we're guaranteed that the layer's transform preserves rects + + const Transform& tr = hw->getTransform(); + Rect frame(tr.transform(s.transform.transform(bounds))); + layer.setFrame(frame); + layer.setCrop(bounds); } void LayerBase::setPerFrameData(const sp<const DisplayDevice>& hw, diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp index ee3e93b1a4..bdeffdfcac 100644 --- a/services/surfaceflinger/SurfaceFlinger.cpp +++ b/services/surfaceflinger/SurfaceFlinger.cpp @@ -1384,7 +1384,7 @@ void SurfaceFlinger::computeVisibleRegions( // handle hidden surfaces by setting the visible region to empty if (CC_LIKELY(layer->isVisible())) { const bool translucent = !layer->isOpaque(); - Rect bounds(layer->computeBounds()); + Rect bounds(s.transform.transform(layer->computeBounds())); visibleRegion.set(bounds); if (!visibleRegion.isEmpty()) { // Remove the transparent area from the visible region |