Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4f014a29 authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "frameworks/native: Add support for transparent layers"

parents a0790bdd fcd5c990
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -39,6 +39,7 @@ struct layer_state_t {
    enum {
        eLayerHidden        = 0x01,     // SURFACE_HIDDEN in SurfaceControl.java
        eLayerOpaque        = 0x02,     // SURFACE_OPAQUE
        eLayerTransparent   = 0x80,     // SURFACE_TRANSPARENT
    };

    enum {
@@ -52,6 +53,7 @@ struct layer_state_t {
        eLayerStackChanged          = 0x00000080,
        eCropChanged                = 0x00000100,
        eOpacityChanged             = 0x00000200,
        eTransparencyChanged        = 0x80000000,
    };

    layer_state_t()
+3 −0
Original line number Diff line number Diff line
@@ -316,6 +316,9 @@ status_t Composer::setFlags(const sp<SurfaceComposerClient>& client,
    if (mask & layer_state_t::eLayerHidden) {
        s->what |= layer_state_t::eVisibilityChanged;
    }
    if (mask & layer_state_t::eLayerTransparent) {
        s->what |= layer_state_t::eTransparencyChanged;
    }
    s->flags &= ~mask;
    s->flags |= (flags & mask);
    s->mask |= mask;
+2 −1
Original line number Diff line number Diff line
@@ -1199,7 +1199,8 @@ void Layer::onPostComposition() {

bool Layer::isVisible() const {
    const Layer::State& s(mDrawingState);
    return !(s.flags & layer_state_t::eLayerHidden) && s.alpha
    return !(s.flags & layer_state_t::eLayerHidden) &&
            !(s.flags & layer_state_t::eLayerTransparent) && s.alpha
            && (mActiveBuffer != NULL || mSidebandStream != NULL);
}

+2 −1
Original line number Diff line number Diff line
@@ -2535,7 +2535,8 @@ uint32_t SurfaceFlinger::setClientStateLocked(
                flags |= eTraversalNeeded;
        }
        if ((what & layer_state_t::eVisibilityChanged) ||
                (what & layer_state_t::eOpacityChanged)) {
                (what & layer_state_t::eOpacityChanged) ||
                (what & layer_state_t::eTransparencyChanged)) {
            // TODO: should we just use an eFlagsChanged for this?
            if (layer->setFlags(s.flags, s.mask))
                flags |= eTraversalNeeded;