summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTreehugger Robot <treehugger-gerrit@google.com>2019-04-09 16:56:33 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2019-04-09 16:56:33 +0000
commit0a75a6ae0e662034bc39934df4d9721b534a7db0 (patch)
tree95ea255badca8f68d8d902294a90dbbd2e115649
parent9305f34da2e4733d77bd1c189043938f18cb51c9 (diff)
parentd6a3f263d58f35e820a8e8509bd82c5ac0a2772a (diff)
downloadnative-0a75a6ae0e662034bc39934df4d9721b534a7db0.tar.gz
Merge "Fix the source crop for screenshots for notch hide"android-q-preview-6android-q-preview-5android-q-preview-4android-q-preview-2.5
-rw-r--r--services/surfaceflinger/DisplayDevice.h28
1 files changed, 20 insertions, 8 deletions
diff --git a/services/surfaceflinger/DisplayDevice.h b/services/surfaceflinger/DisplayDevice.h
index 3cf06bceaf..d779ca4609 100644
--- a/services/surfaceflinger/DisplayDevice.h
+++ b/services/surfaceflinger/DisplayDevice.h
@@ -375,16 +375,21 @@ public:
}
Rect getSourceCrop() const override {
- // use the (projected) logical display viewport by default
+ // use the projected display viewport by default.
if (mSourceCrop.isEmpty()) {
return mDevice->getScissor();
}
- const int orientation = mDevice->getInstallOrientation();
- if (orientation == DisplayState::eOrientationDefault) {
- return mSourceCrop;
- }
+ // Recompute the device transformation for the source crop.
+ Transform rotation;
+ Transform translatePhysical;
+ Transform translateLogical;
+ Transform scale;
+ const Rect& viewport = mDevice->getViewport();
+ const Rect& scissor = mDevice->getScissor();
+ const Rect& frame = mDevice->getFrame();
+ const int orientation = mDevice->getInstallOrientation();
// Install orientation is transparent to the callers. Apply it now.
uint32_t flags = 0x00;
switch (orientation) {
@@ -397,10 +402,17 @@ public:
case DisplayState::eOrientation270:
flags = Transform::ROT_270;
break;
+ default:
+ break;
}
- Transform tr;
- tr.set(flags, getWidth(), getHeight());
- return tr.transform(mSourceCrop);
+ rotation.set(flags, getWidth(), getHeight());
+ translateLogical.set(-viewport.left, -viewport.top);
+ translatePhysical.set(scissor.left, scissor.top);
+ scale.set(frame.getWidth() / float(viewport.getWidth()), 0, 0,
+ frame.getHeight() / float(viewport.getHeight()));
+ const Transform finalTransform =
+ rotation * translatePhysical * scale * translateLogical;
+ return finalTransform.transform(mSourceCrop);
}
private: