Update scaleRectAboutCenter to correctly account for negative left/top values and floating point errors using centerX/Y.

Fix: 290211274
Test: manual.

Change-Id: Ieddce683d76c696b5ac3eae4fb9f73a5827a50ad
This commit is contained in:
Pat Manning
2023-07-06 15:12:49 +00:00
parent 3396b5c338
commit 75708262fc

View File

@@ -334,14 +334,12 @@ public final class Utilities {
public static void scaleRectAboutCenter(Rect r, float scale) {
if (scale != 1.0f) {
int cx = r.centerX();
int cy = r.centerY();
r.offset(-cx, -cy);
r.left = (int) (r.left * scale + 0.5f);
r.top = (int) (r.top * scale + 0.5f);
r.right = (int) (r.right * scale + 0.5f);
r.bottom = (int) (r.bottom * scale + 0.5f);
r.offset(cx, cy);
float cx = r.exactCenterX();
float cy = r.exactCenterY();
r.left = Math.round(cx + (r.left - cx) * scale);
r.top = Math.round(cy + (r.top - cy) * scale);
r.right = Math.round(cx + (r.right - cx) * scale);
r.bottom = Math.round(cy + (r.bottom - cy) * scale);
}
}