diff options
| -rw-r--r-- | libs/gui/include/gui/ISurfaceComposerClient.h | 1 | ||||
| -rw-r--r-- | services/surfaceflinger/SurfaceFlinger.cpp | 15 | ||||
| -rw-r--r-- | services/surfaceflinger/SurfaceFlinger.h | 4 |
3 files changed, 20 insertions, 0 deletions
diff --git a/libs/gui/include/gui/ISurfaceComposerClient.h b/libs/gui/include/gui/ISurfaceComposerClient.h index 8dfc99a4b7..b4fd956b0f 100644 --- a/libs/gui/include/gui/ISurfaceComposerClient.h +++ b/libs/gui/include/gui/ISurfaceComposerClient.h @@ -42,6 +42,7 @@ public: eFXSurfaceNormal = 0x00000000, eFXSurfaceColor = 0x00020000, + eFXSurfaceContainer = 0x00080000, eFXSurfaceMask = 0x000F0000, }; diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp index cf53930fa1..38e83f1450 100644 --- a/services/surfaceflinger/SurfaceFlinger.cpp +++ b/services/surfaceflinger/SurfaceFlinger.cpp @@ -3628,6 +3628,11 @@ status_t SurfaceFlinger::createLayer( uniqueName, w, h, flags, handle, &layer); break; + case ISurfaceComposerClient::eFXSurfaceContainer: + result = createContainerLayer(client, + uniqueName, w, h, flags, + handle, &layer); + break; default: result = BAD_VALUE; break; @@ -3719,6 +3724,16 @@ status_t SurfaceFlinger::createColorLayer(const sp<Client>& client, return NO_ERROR; } +status_t SurfaceFlinger::createContainerLayer(const sp<Client>& client, + const String8& name, uint32_t w, uint32_t h, uint32_t flags, + sp<IBinder>* handle, sp<Layer>* outLayer) +{ + *outLayer = new ContainerLayer(this, client, name, w, h, flags); + *handle = (*outLayer)->getHandle(); + return NO_ERROR; +} + + status_t SurfaceFlinger::onLayerRemoved(const sp<Client>& client, const sp<IBinder>& handle) { // called by a client when it wants to remove a Layer diff --git a/services/surfaceflinger/SurfaceFlinger.h b/services/surfaceflinger/SurfaceFlinger.h index 8f724e98d1..4b9e9cb1cc 100644 --- a/services/surfaceflinger/SurfaceFlinger.h +++ b/services/surfaceflinger/SurfaceFlinger.h @@ -540,6 +540,10 @@ private: uint32_t w, uint32_t h, uint32_t flags, sp<IBinder>* outHandle, sp<Layer>* outLayer); + status_t createContainerLayer(const sp<Client>& client, const String8& name, + uint32_t w, uint32_t h, uint32_t flags, sp<IBinder>* outHandle, + sp<Layer>* outLayer); + String8 getUniqueLayerName(const String8& name); // called in response to the window-manager calling |