From 76f5f2fd479a700636e80b73a5357aa4f4f474a6 Mon Sep 17 00:00:00 2001 From: chaviw Date: Mon, 23 Sep 2019 10:15:51 -0700 Subject: Fix the position set for setGeometry calculation. The current implementation of setGeometry will set the position as the x and y value of destination. However, this value will not work if the source is not at 0, 0 since it will start crop at a non zero position. The position will be set based on the non cropped area so the final content frame will not be positioned at the specified position. This change calculates the offset for x and y based on the source's crop's position and scale since it will need to create a negative offset to compensate for the crop Test: SetGeometryTest Fixes: 141495784 Change-Id: I7dc0e5f9e65f9838ebd86f304bc1ca0beffc4393 --- libs/gui/SurfaceComposerClient.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'libs/gui/SurfaceComposerClient.cpp') diff --git a/libs/gui/SurfaceComposerClient.cpp b/libs/gui/SurfaceComposerClient.cpp index 6b5021d1b4..547e5f1be2 100644 --- a/libs/gui/SurfaceComposerClient.cpp +++ b/libs/gui/SurfaceComposerClient.cpp @@ -1327,7 +1327,9 @@ SurfaceComposerClient::Transaction& SurfaceComposerClient::Transaction::setGeome break; } setMatrix(sc, matrix[0], matrix[1], matrix[2], matrix[3]); - setPosition(sc, x, y); + float offsetX = xScale * source.left; + float offsetY = yScale * source.top; + setPosition(sc, x - offsetX, y - offsetY); return *this; } -- cgit v1.2.3-59-g8ed1b