give the proper orientation to the h/w composer HAL

we were using the "orientation" value instead of the
real transform, which may contain arbitrary rotations for
instance, and in some case ended up with a final "orientation"
that looked valid, but wasn't.

this fixes a problem on devices with a h/w composer hal where
the rotation animation looked weird.

Change-Id: I4be8a2a1bde49c33456fcf5c8d87ab515c216763
This commit is contained in:
Mathias Agopian 2011-08-18 18:31:00 -07:00
parent 9509b9ce60
commit d992db3827
3 changed files with 4 additions and 3 deletions

View File

@ -196,13 +196,12 @@ void Layer::setGeometry(hwc_layer_t* hwcl)
* 1) buffer orientation/flip/mirror
* 2) state transformation (window manager)
* 3) layer orientation (screen orientation)
* mOrientation is already the composition of (2) and (3)
* mTransform is already the composition of (2) and (3)
* (NOTE: the matrices are multiplied in reverse order)
*/
const Transform bufferOrientation(mCurrentTransform);
const Transform layerOrientation(mOrientation);
const Transform tr(layerOrientation * bufferOrientation);
const Transform tr(mTransform * bufferOrientation);
// this gives us only the "orientation" component of the transform
const uint32_t finalTransform = tr.getOrientation();

View File

@ -257,6 +257,7 @@ void LayerBase::validateVisibility(const Transform& planeTransform)
// cache a few things...
mOrientation = tr.getOrientation();
mTransform = tr;
mTransformedBounds = tr.makeBounds(w, h);
mLeft = tr.tx();
mTop = tr.ty();

View File

@ -247,6 +247,7 @@ private:
protected:
// cached during validateVisibility()
int32_t mOrientation;
Transform mTransform;
GLfloat mVertices[4][2];
Rect mTransformedBounds;
int mLeft;