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

Commit b947f29a authored by Michael Lentine's avatar Michael Lentine Committed by Android (Google) Code Review
Browse files

Merge "Add clamp to Layer and update Transform inverse." into lmp-mr1-dev

parents e8a4dce8 28ea217f
Loading
Loading
Loading
Loading
+13 −2
Original line number Diff line number Diff line
@@ -332,8 +332,12 @@ FloatRect Layer::computeCrop(const sp<const DisplayDevice>& hw) const {
    activeCrop.intersect(hw->getViewport(), &activeCrop);
    activeCrop = s.transform.inverse().transform(activeCrop);

    // paranoia: make sure the window-crop is constrained in the
    // window's bounds
    // This needs to be here as transform.transform(Rect) computes the
    // transformed rect and then takes the bounding box of the result before
    // returning. This means
    // transform.inverse().transform(transform.transform(Rect)) != Rect
    // in which case we need to make sure the final rect is clipped to the
    // display bounds.
    activeCrop.intersect(Rect(s.active.w, s.active.h), &activeCrop);

    // subtract the transparent region and snap to the bounds
@@ -432,6 +436,13 @@ void Layer::setGeometry(
        activeCrop = s.transform.transform(activeCrop);
        activeCrop.intersect(hw->getViewport(), &activeCrop);
        activeCrop = s.transform.inverse().transform(activeCrop);
        // This needs to be here as transform.transform(Rect) computes the
        // transformed rect and then takes the bounding box of the result before
        // returning. This means
        // transform.inverse().transform(transform.transform(Rect)) != Rect
        // in which case we need to make sure the final rect is clipped to the
        // display bounds.
        activeCrop.intersect(Rect(s.active.w, s.active.h), &activeCrop);
        // mark regions outside the crop as transparent
        activeTransparentRegion.orSelf(Rect(0, 0, s.active.w, activeCrop.top));
        activeTransparentRegion.orSelf(Rect(0, activeCrop.bottom,
+16 −15
Original line number Diff line number Diff line
@@ -301,16 +301,16 @@ Transform Transform::inverse() const {
    // (T*M)^-1 = M^-1 * T^-1
    Transform result;
    if (mType <= TRANSLATE) {
        // 1 0 x
        // 0 1 y
        // 0 0 1
        // 1 0 0
        // 0 1 0
        // x y 1
        result = *this;
        result.mMatrix[2][0] = -result.mMatrix[2][0];
        result.mMatrix[2][1] = -result.mMatrix[2][1];
    } else {
        // a c x
        // b d y
        // 0 0 1
        // a c 0
        // b d 0
        // x y 1
        const mat33& M(mMatrix);
        const float a = M[0][0];
        const float b = M[1][0];
@@ -319,16 +319,17 @@ Transform Transform::inverse() const {
        const float x = M[2][0];
        const float y = M[2][1];

        Transform R, T;
        const float idet = 1.0 / (a*d - b*c);
        R.mMatrix[0][0] =  d*idet;    R.mMatrix[0][1] = -c*idet;
        R.mMatrix[1][0] = -b*idet;    R.mMatrix[1][1] =  a*idet;
        R.mType = mType &= ~TRANSLATE;

        T.mMatrix[2][0] = -x;
        T.mMatrix[2][1] = -y;
        T.mType = TRANSLATE;
        result =  R * T;
        result.mMatrix[0][0] =  d*idet;
        result.mMatrix[0][1] = -c*idet;
        result.mMatrix[1][0] = -b*idet;
        result.mMatrix[1][1] =  a*idet;
        result.mType = mType;

        vec2 T(-x, -y);
        T = result.transform(T);
        result.mMatrix[2][0] = T[0];
        result.mMatrix[2][1] = T[1];
    }
    return result;
}