Merge "Add clamp to Layer and update Transform inverse." into lmp-mr1-dev
This commit is contained in:
commit
b947f29a6a
@ -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,
|
||||
|
@ -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;
|
||||
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;
|
||||
|
||||
T.mMatrix[2][0] = -x;
|
||||
T.mMatrix[2][1] = -y;
|
||||
T.mType = TRANSLATE;
|
||||
result = R * T;
|
||||
vec2 T(-x, -y);
|
||||
T = result.transform(T);
|
||||
result.mMatrix[2][0] = T[0];
|
||||
result.mMatrix[2][1] = T[1];
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user