diff options
| author | 2016-05-15 11:27:47 -0700 | |
|---|---|---|
| committer | 2016-06-07 11:42:32 -0700 | |
| commit | 82364e3cea0bf88fa8147766433329b3dd5148b8 (patch) | |
| tree | 8c02d094dc655a958de9f941c38325348c7e1b3c /libs/gui/SurfaceComposerClient.cpp | |
| parent | d224e6111bf4532fb1c1fc021c20285b38bc80ec (diff) | |
SurfaceFlinger: Add mode to apply position with resize.
For some cases, like scaled windows with shadows,
we need to be able to apply the position concurrent with
window resize. This is because the scaling of the shadows causes
the top left coordinate of the non shadow surface content
to change before and after the resize.
Bug: 28899837
Change-Id: I522eacfbbcd79707dc1e5ab71901a263b3004ba9
Diffstat (limited to 'libs/gui/SurfaceComposerClient.cpp')
| -rw-r--r-- | libs/gui/SurfaceComposerClient.cpp | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/libs/gui/SurfaceComposerClient.cpp b/libs/gui/SurfaceComposerClient.cpp index e33cc37b24..92ae41eec8 100644 --- a/libs/gui/SurfaceComposerClient.cpp +++ b/libs/gui/SurfaceComposerClient.cpp @@ -165,6 +165,8 @@ public: uint64_t frameNumber); status_t setOverrideScalingMode(const sp<SurfaceComposerClient>& client, const sp<IBinder>& id, int32_t overrideScalingMode); + status_t setPositionAppliesWithResize(const sp<SurfaceComposerClient>& client, + const sp<IBinder>& id); void setDisplaySurface(const sp<IBinder>& token, const sp<IGraphicBufferProducer>& bufferProducer); @@ -443,6 +445,18 @@ status_t Composer::setOverrideScalingMode( return NO_ERROR; } +status_t Composer::setPositionAppliesWithResize( + const sp<SurfaceComposerClient>& client, + const sp<IBinder>& id) { + Mutex::Autolock lock(mLock); + layer_state_t* s = getLayerStateLocked(client, id); + if (!s) { + return BAD_INDEX; + } + s->what |= layer_state_t::ePositionAppliesWithResize; + return NO_ERROR; +} + // --------------------------------------------------------------------------- DisplayState& Composer::getDisplayStateLocked(const sp<IBinder>& token) { @@ -685,6 +699,11 @@ status_t SurfaceComposerClient::setOverrideScalingMode( this, id, overrideScalingMode); } +status_t SurfaceComposerClient::setPositionAppliesWithResize( + const sp<IBinder>& id) { + return getComposer().setPositionAppliesWithResize(this, id); +} + // ---------------------------------------------------------------------------- void SurfaceComposerClient::setDisplaySurface(const sp<IBinder>& token, |