diff options
| -rw-r--r-- | services/surfaceflinger/Layer.cpp | 4 | ||||
| -rw-r--r-- | services/surfaceflinger/tests/Transaction_test.cpp | 32 |
2 files changed, 36 insertions, 0 deletions
diff --git a/services/surfaceflinger/Layer.cpp b/services/surfaceflinger/Layer.cpp index c21f0c26a1..6f430a386f 100644 --- a/services/surfaceflinger/Layer.cpp +++ b/services/surfaceflinger/Layer.cpp @@ -399,6 +399,10 @@ Rect Layer::computeScreenBounds(bool reduceTransparentRegion) const { Transform t = getTransform(); win = t.transform(win); + if (!s.finalCrop.isEmpty()) { + win.intersect(s.finalCrop, &win); + } + const sp<Layer>& p = getParent(); // Now we need to calculate the parent bounds, so we can clip ourselves to those. // When calculating the parent bounds for purposes of clipping, diff --git a/services/surfaceflinger/tests/Transaction_test.cpp b/services/surfaceflinger/tests/Transaction_test.cpp index 68519a1ed2..b7792c7852 100644 --- a/services/surfaceflinger/tests/Transaction_test.cpp +++ b/services/surfaceflinger/tests/Transaction_test.cpp @@ -834,6 +834,38 @@ TEST_F(ChildLayerTest, ChildLayerPositioning) { } } +TEST_F(ChildLayerTest, ChildLayerCropping) { + SurfaceComposerClient::openGlobalTransaction(); + mChild->show(); + mChild->setPosition(0, 0); + mFGSurfaceControl->setPosition(0, 0); + mFGSurfaceControl->setCrop(Rect(0, 0, 5, 5)); + SurfaceComposerClient::closeGlobalTransaction(true); + + { + ScreenCapture::captureScreen(&mCapture); + mCapture->expectChildColor(0, 0); + mCapture->expectChildColor(4, 4); + mCapture->expectBGColor(5, 5); + } +} + +TEST_F(ChildLayerTest, ChildLayerFinalCropping) { + SurfaceComposerClient::openGlobalTransaction(); + mChild->show(); + mChild->setPosition(0, 0); + mFGSurfaceControl->setPosition(0, 0); + mFGSurfaceControl->setFinalCrop(Rect(0, 0, 5, 5)); + SurfaceComposerClient::closeGlobalTransaction(true); + + { + ScreenCapture::captureScreen(&mCapture); + mCapture->expectChildColor(0, 0); + mCapture->expectChildColor(4, 4); + mCapture->expectBGColor(5, 5); + } +} + TEST_F(ChildLayerTest, ChildLayerConstraints) { SurfaceComposerClient::openGlobalTransaction(); mChild->show(); |