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

Commit f7551407 authored by Michael Lentine's avatar Michael Lentine
Browse files

Incorporate TransformToDisplayInverse into the crop calculation.

Change-Id: Ia9757b3a43d3b8f99df9fef2ed4d11c43b5abdd2
parent 45e2fc22
Loading
Loading
Loading
Loading
+19 −5
Original line number Diff line number Diff line
@@ -323,6 +323,20 @@ FloatRect Layer::computeCrop(const sp<const DisplayDevice>& hw) const {
        // which means using the inverse of the current transform set on the
        // SurfaceFlingerConsumer.
        uint32_t invTransform = mCurrentTransform;
        if (mSurfaceFlingerConsumer->getTransformToDisplayInverse()) {
            /*
             * the code below applies the display's inverse transform to the buffer
             */
            uint32_t invTransformOrient = hw->getOrientationTransform();
            // calculate the inverse transform
            if (invTransformOrient & NATIVE_WINDOW_TRANSFORM_ROT_90) {
                invTransformOrient ^= NATIVE_WINDOW_TRANSFORM_FLIP_V |
                        NATIVE_WINDOW_TRANSFORM_FLIP_H;
            }
            // and apply to the current transform
            invTransform = (Transform(invTransform) * Transform(invTransformOrient)).getOrientation();
        }

        int winWidth = s.active.w;
        int winHeight = s.active.h;
        if (invTransform & NATIVE_WINDOW_TRANSFORM_ROT_90) {
@@ -332,7 +346,7 @@ FloatRect Layer::computeCrop(const sp<const DisplayDevice>& hw) const {
            winHeight = s.active.w;
        }
        const Rect winCrop = activeCrop.transform(
                invTransform, winWidth, winHeight);
                invTransform, s.active.w, s.active.h);

        // below, crop is intersected with winCrop expressed in crop's coordinate space
        float xScale = crop.getWidth()  / float(winWidth);
@@ -340,8 +354,8 @@ FloatRect Layer::computeCrop(const sp<const DisplayDevice>& hw) const {

        float insetL = winCrop.left                 * xScale;
        float insetT = winCrop.top                  * yScale;
        float insetR = (s.active.w - winCrop.right ) * xScale;
        float insetB = (s.active.h - winCrop.bottom) * yScale;
        float insetR = (winWidth - winCrop.right )  * xScale;
        float insetB = (winHeight - winCrop.bottom) * yScale;

        crop.left   += insetL;
        crop.top    += insetT;