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

Commit ab6d3877 authored by Mathias Agopian's avatar Mathias Agopian Committed by Android (Google) Code Review
Browse files

Merge "take the state transform into account with h/w composer hal"

parents 15a99db8 29a367bb
Loading
Loading
Loading
Loading
+20 −5
Original line number Diff line number Diff line
@@ -188,22 +188,37 @@ void Layer::setGeometry(hwc_layer_t* hwcl)
        return;
    }

    /*
     * Transformations are applied in this order:
     * 1) buffer orientation/flip/mirror
     * 2) state transformation (window manager)
     * 3) layer orientation (screen orientation)
     * (NOTE: the matrices are multiplied in reverse order)
     */

    const Transform bufferOrientation(mCurrentTransform);
    const Transform& stateTransform(s.transform);
    const Transform layerOrientation(mOrientation);

    const Transform tr(layerOrientation * stateTransform * bufferOrientation);

    // this gives us only the "orientation" component of the transform
    const uint32_t finalTransform = tr.getOrientation();

    // we can only handle simple transformation
    if (mOrientation & Transform::ROT_INVALID) {
    if (finalTransform & Transform::ROT_INVALID) {
        hwcl->flags = HWC_SKIP_LAYER;
        return;
    }

    // FIXME: shouldn't we take the state's transform into account here?

    Transform tr(Transform(mOrientation) * Transform(mCurrentTransform));
    hwcl->transform = tr.getOrientation();
    hwcl->transform = finalTransform;

    if (!isOpaque()) {
        hwcl->blending = mPremultipliedAlpha ?
                HWC_BLENDING_PREMULT : HWC_BLENDING_COVERAGE;
    }

    // scaling is already applied in mTransformedBounds
    hwcl->displayFrame.left   = mTransformedBounds.left;
    hwcl->displayFrame.top    = mTransformedBounds.top;
    hwcl->displayFrame.right  = mTransformedBounds.right;
+1 −0
Original line number Diff line number Diff line
@@ -308,6 +308,7 @@ uint32_t Transform::type() const
                scale = true;
            }
        } else {
            // there is a skew component and/or a non 90 degrees rotation
            flags = ROT_INVALID;
        }