diff options
author | Treehugger Robot <treehugger-gerrit@google.com> | 2019-04-09 16:56:33 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2019-04-09 16:56:33 +0000 |
commit | 0a75a6ae0e662034bc39934df4d9721b534a7db0 (patch) | |
tree | 95ea255badca8f68d8d902294a90dbbd2e115649 | |
parent | 9305f34da2e4733d77bd1c189043938f18cb51c9 (diff) | |
parent | d6a3f263d58f35e820a8e8509bd82c5ac0a2772a (diff) | |
download | native-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.h | 28 |
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: |