From 3715677d7289db3ff64f7435f17d786754d26d4e Mon Sep 17 00:00:00 2001 From: Stan Iliev Date: Mon, 27 Nov 2017 15:59:05 -0500 Subject: [PATCH] Fix nine patch scaling Fix nine patch scaling for assets that don't match the DPI. Sometimes nine patches were scaled up with divs bigger than width/height. This is fixing incorrect SearchView control draw for 213dpi material theme in ThemeHostTest. Test: Ran CtsGraphicsTestCases, CtsUiRenderingTestCases tests Change-Id: Ifb8037e8ece97b802e723f911d9b74ccd8fe5400 --- core/jni/android/graphics/BitmapFactory.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/core/jni/android/graphics/BitmapFactory.cpp b/core/jni/android/graphics/BitmapFactory.cpp index 5990d7be9d23..2e8c27ab7217 100644 --- a/core/jni/android/graphics/BitmapFactory.cpp +++ b/core/jni/android/graphics/BitmapFactory.cpp @@ -130,8 +130,10 @@ static void scaleNinePatchChunk(android::Res_png_9patch* chunk, float scale, chunk->paddingRight = int(chunk->paddingRight * scale + 0.5f); chunk->paddingBottom = int(chunk->paddingBottom * scale + 0.5f); - scaleDivRange(chunk->getXDivs(), chunk->numXDivs, scale, scaledWidth); - scaleDivRange(chunk->getYDivs(), chunk->numYDivs, scale, scaledHeight); + // The max value for the divRange is one pixel less than the actual max to ensure that the size + // of the last div is not zero. A div of size 0 is considered invalid input and will not render. + scaleDivRange(chunk->getXDivs(), chunk->numXDivs, scale, scaledWidth - 1); + scaleDivRange(chunk->getYDivs(), chunk->numYDivs, scale, scaledHeight - 1); } class ScaleCheckingAllocator : public SkBitmap::HeapAllocator { -- 2.11.0