Fix display projection transforms
Bug: 7139798 Change-Id: I61aafe99180d85563c6880d16bc367fce80e6022
This commit is contained in:
parent
1fc4f80fc3
commit
6360ec42d4
@ -309,7 +309,7 @@ void DisplayDevice::setProjection(int orientation,
|
|||||||
void DisplayDevice::updateGeometryTransform() {
|
void DisplayDevice::updateGeometryTransform() {
|
||||||
int w = mDisplayWidth;
|
int w = mDisplayWidth;
|
||||||
int h = mDisplayHeight;
|
int h = mDisplayHeight;
|
||||||
Transform R, S;
|
Transform T, R, S;
|
||||||
if (DisplayDevice::orientationToTransfrom(
|
if (DisplayDevice::orientationToTransfrom(
|
||||||
mOrientation, w, h, &R) == NO_ERROR) {
|
mOrientation, w, h, &R) == NO_ERROR) {
|
||||||
dirtyRegion.set(bounds());
|
dirtyRegion.set(bounds());
|
||||||
@ -340,20 +340,23 @@ void DisplayDevice::updateGeometryTransform() {
|
|||||||
float src_height = viewport.height();
|
float src_height = viewport.height();
|
||||||
float dst_width = frame.width();
|
float dst_width = frame.width();
|
||||||
float dst_height = frame.height();
|
float dst_height = frame.height();
|
||||||
if (src_width != src_height || dst_width != dst_height) {
|
if (src_width != dst_width || src_height != dst_height) {
|
||||||
float sx = dst_width / src_width;
|
float sx = dst_width / src_width;
|
||||||
float sy = dst_height / src_height;
|
float sy = dst_height / src_height;
|
||||||
S.set(sx, 0, 0, sy);
|
S.set(sx, 0, 0, sy);
|
||||||
}
|
}
|
||||||
|
|
||||||
float src_x = viewport.left;
|
float src_x = viewport.left;
|
||||||
float src_y = viewport.top;
|
float src_y = viewport.top;
|
||||||
float dst_x = frame.left;
|
float dst_x = frame.left;
|
||||||
float dst_y = frame.top;
|
float dst_y = frame.top;
|
||||||
float tx = dst_x - src_x;
|
float tx = dst_x - src_x;
|
||||||
float ty = dst_y - src_y;
|
float ty = dst_y - src_y;
|
||||||
S.set(tx, ty);
|
T.set(tx, ty);
|
||||||
|
|
||||||
// rotate first, followed by scaling
|
// The viewport and frame are both in the logical orientation, so the
|
||||||
mGlobalTransform = S * R;
|
// translation is also in that space. So translation must be applied
|
||||||
|
// before rotating from logical to physical orientation.
|
||||||
|
mGlobalTransform = S * R * T;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user