From: reed@google.com Date: Wed, 28 Sep 2011 12:33:41 +0000 (+0000) Subject: roll in fixes from android when we have to compress sections of "stretchy" X-Git-Tag: submit/tizen/20180928.044319~17600 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=ade907bf9843c626e66c739ee12479024497effe;p=platform%2Fupstream%2FlibSkiaSharp.git roll in fixes from android when we have to compress sections of "stretchy" git-svn-id: http://skia.googlecode.com/svn/trunk@2345 2bbb7eff-a529-9590-31e7-b0007b416f81 --- diff --git a/src/utils/SkNinePatch.cpp b/src/utils/SkNinePatch.cpp index 16e815d4c8..6ee96848a0 100644 --- a/src/utils/SkNinePatch.cpp +++ b/src/utils/SkNinePatch.cpp @@ -55,10 +55,18 @@ static void fillRow(SkPoint verts[], SkPoint texs[], texs->set(0, ty); texs++; for (int x = 0; x < numXDivs; x++) { SkScalar tx = SkIntToScalar(xDivs[x]); - if (x & 1) { - vx += stretchX; + if (stretchX >= 0) { + if (x & 1) { + vx += stretchX; + } else { + vx += tx; + } } else { - vx += tx; + if (x & 1) { + ; // do nothing + } else { + vx += SkScalarMul(tx, -stretchX); + } } verts->set(vx, vy); verts++; texs->set(tx, ty); texs++; @@ -110,8 +118,6 @@ void SkNinePatch::DrawMesh(SkCanvas* canvas, const SkRect& bounds, const int numYStretch = (numYDivs + 1) >> 1; if (numXStretch < 1 && numYStretch < 1) { - BITMAP_RECT: -// SkDebugf("------ drawasamesh revert to bitmaprect\n"); canvas->drawBitmapRect(bitmap, NULL, bounds, paint); return; } @@ -136,7 +142,8 @@ void SkNinePatch::DrawMesh(SkCanvas* canvas, const SkRect& bounds, int fixed = bitmap.width() - stretchSize; stretchX = (bounds.width() - SkIntToScalar(fixed)) / numXStretch; if (stretchX < 0) { - goto BITMAP_RECT; + // reuse stretchX, but keep it negative as a signal + stretchX = -bitmap.width() / fixed; } } @@ -148,7 +155,8 @@ void SkNinePatch::DrawMesh(SkCanvas* canvas, const SkRect& bounds, int fixed = bitmap.height() - stretchSize; stretchY = (bounds.height() - SkIntToScalar(fixed)) / numYStretch; if (stretchY < 0) { - goto BITMAP_RECT; + // reuse stretchY, but keep it negative as a signal + stretchY = -bitmap.height() / fixed; } } @@ -191,10 +199,18 @@ void SkNinePatch::DrawMesh(SkCanvas* canvas, const SkRect& bounds, texs += numXDivs + 2; for (int y = 0; y < numYDivs; y++) { const SkScalar ty = SkIntToScalar(yDivs[y]); - if (y & 1) { - vy += stretchY; - } else { - vy += ty; + if (stretchY >= 0) { + if (y & 1) { + vy += stretchY; + } else { + vy += ty; + } + } else { // shrink fixed sections, and collaps stretchy sections + if (y & 1) { + ;// do nothing + } else { + vy += SkScalarMul(ty, -stretchY); + } } fillRow(verts, texs, vy, ty, bounds, xDivs, numXDivs, stretchX, bitmap.width());