diff options
author | Romain Guy <romainguy@google.com> | 2011-01-17 10:53:31 -0800 |
---|---|---|
committer | Romain Guy <romainguy@google.com> | 2011-01-17 10:53:44 -0800 |
commit | 7444da512680df0c52af39ea521e35adbe0c167d (patch) | |
tree | 001f5bbb70e6f0a8759381498665343136e003f9 /libs/hwui/Patch.cpp | |
parent | fb13abd800cd610c7f46815848545feff83e5748 (diff) | |
download | frameworks_base-7444da512680df0c52af39ea521e35adbe0c167d.zip frameworks_base-7444da512680df0c52af39ea521e35adbe0c167d.tar.gz frameworks_base-7444da512680df0c52af39ea521e35adbe0c167d.tar.bz2 |
Yet another fix for 9patch rendering.
Bug #3362133
Change-Id: Ia6521d31a8c208a2ad2506a23b6a01e5e442ad86
Diffstat (limited to 'libs/hwui/Patch.cpp')
-rw-r--r-- | libs/hwui/Patch.cpp | 27 |
1 files changed, 14 insertions, 13 deletions
diff --git a/libs/hwui/Patch.cpp b/libs/hwui/Patch.cpp index 77cbb80..535c0ac 100644 --- a/libs/hwui/Patch.cpp +++ b/libs/hwui/Patch.cpp @@ -154,7 +154,8 @@ void Patch::updateVertices(const float bitmapWidth, const float bitmapHeight, float y1 = 0.0f; float v1 = 0.0f; - for (uint32_t i = 0; i < mYCount; i++) { + uint32_t i = 0; + for ( ; i < mYCount; i++) { float stepY = mYDivs[i]; float y2 = 0.0f; @@ -166,7 +167,8 @@ void Patch::updateVertices(const float bitmapWidth, const float bitmapHeight, } float v2 = fmax(0.0f, stepY - 0.5f) / bitmapHeight; - generateRow(vertex, y1, y2, v1, v2, stretchX, right - left, bitmapWidth, quadCount); + generateRow(vertex, y1, y2, v1, v2, stretchX, right - left, + bitmapWidth, quadCount, i & 1); y1 = y2; v1 = (stepY + 0.5f) / bitmapHeight; @@ -175,7 +177,7 @@ void Patch::updateVertices(const float bitmapWidth, const float bitmapHeight, } generateRow(vertex, y1, bottom - top, v1, 1.0f, stretchX, right - left, - bitmapWidth, quadCount); + bitmapWidth, quadCount, i & 1); if (verticesCount > 0) { Caches::getInstance().bindMeshBuffer(meshBuffer); @@ -193,14 +195,15 @@ void Patch::updateVertices(const float bitmapWidth, const float bitmapHeight, } void Patch::generateRow(TextureVertex*& vertex, float y1, float y2, float v1, float v2, - float stretchX, float width, float bitmapWidth, uint32_t& quadCount) { + float stretchX, float width, float bitmapWidth, uint32_t& quadCount, bool isStretch) { float previousStepX = 0.0f; float x1 = 0.0f; float u1 = 0.0f; // Generate the row quad by quad - for (uint32_t i = 0; i < mXCount; i++) { + uint32_t i = 0; + for ( ; i < mXCount; i++) { float stepX = mXDivs[i]; float x2 = 0.0f; @@ -212,7 +215,7 @@ void Patch::generateRow(TextureVertex*& vertex, float y1, float y2, float v1, fl } float u2 = fmax(0.0f, stepX - 0.5f) / bitmapWidth; - bool valid = generateQuad(vertex, x1, y1, x2, y2, u1, v1, u2, v2, quadCount); + generateQuad(vertex, x1, y1, x2, y2, u1, v1, u2, v2, quadCount, isStretch || (i & 1)); x1 = x2; u1 = (stepX + 0.5f) / bitmapWidth; @@ -220,13 +223,13 @@ void Patch::generateRow(TextureVertex*& vertex, float y1, float y2, float v1, fl previousStepX = stepX; } - generateQuad(vertex, x1, y1, width, y2, u1, v1, 1.0f, v2, quadCount); + generateQuad(vertex, x1, y1, width, y2, u1, v1, 1.0f, v2, quadCount, isStretch || (i & 1)); } -bool Patch::generateQuad(TextureVertex*& vertex, float x1, float y1, float x2, float y2, - float u1, float v1, float u2, float v2, uint32_t& quadCount) { +void Patch::generateQuad(TextureVertex*& vertex, float x1, float y1, float x2, float y2, + float u1, float v1, float u2, float v2, uint32_t& quadCount, bool isStretch) { const uint32_t oldQuadCount = quadCount; - const bool valid = x2 >= x1 && y2 >= y1; + const bool valid = isStretch || (x2 - x1 > 0.9999f && y2 - y1 > 0.9999f); if (valid) { quadCount++; } @@ -238,7 +241,7 @@ bool Patch::generateQuad(TextureVertex*& vertex, float x1, float y1, float x2, f PATCH_LOGD(" left, top = %.2f, %.2f\t\tu1, v1 = %.2f, %.2f", x1, y1, u1, v1); PATCH_LOGD(" right, bottom = %.2f, %.2f\t\tu2, v2 = %.2f, %.2f", x2, y2, u2, v2); #endif - return false; + return; } #if RENDER_LAYERS_AS_REGIONS @@ -267,8 +270,6 @@ bool Patch::generateQuad(TextureVertex*& vertex, float x1, float y1, float x2, f PATCH_LOGD(" left, top = %.2f, %.2f\t\tu1, v1 = %.2f, %.2f", x1, y1, u1, v1); PATCH_LOGD(" right, bottom = %.2f, %.2f\t\tu2, v2 = %.2f, %.2f", x2, y2, u2, v2); #endif - - return true; } }; // namespace uirenderer |