Fix 9patches' limitation of 32 empty quads
The 9patch format allows to define more empty quads than this, remove
the use of a single int to index empty quads and replace it with a
lookup in the 9patch resource data structure.
Change-Id: I148ee5d9e0c96822b534a344e15c9d88078db7c2
diff --git a/libs/hwui/Patch.cpp b/libs/hwui/Patch.cpp
index 7656f85..9b023f9 100644
--- a/libs/hwui/Patch.cpp
+++ b/libs/hwui/Patch.cpp
@@ -56,17 +56,14 @@
float width, float height, const UvMapper& mapper, const Res_png_9patch* patch) {
if (vertices) return vertices;
- const uint32_t* colors = &patch->colors[0];
- const int8_t numColors = patch->numColors;
-
- mColorKey = 0;
int8_t emptyQuads = 0;
+ mColors = patch->colors;
+ const int8_t numColors = patch->numColors;
if (uint8_t(numColors) < sizeof(uint32_t) * 4) {
for (int8_t i = 0; i < numColors; i++) {
- if (colors[i] == 0x0) {
+ if (mColors[i] == 0x0) {
emptyQuads++;
- mColorKey |= 0x1 << i;
}
}
}
@@ -221,11 +218,11 @@
if (y2 < 0.0f) y2 = 0.0f;
// Skip degenerate and transparent (empty) quads
- if (((mColorKey >> oldQuadCount) & 0x1) || x1 >= x2 || y1 >= y2) {
+ if ((mColors[oldQuadCount] == 0) || x1 >= x2 || y1 >= y2) {
#if DEBUG_PATCHES_EMPTY_VERTICES
PATCH_LOGD(" quad %d (empty)", oldQuadCount);
- PATCH_LOGD(" left, top = %.2f, %.2f\t\tu1, v1 = %.4f, %.4f", x1, y1, u1, v1);
- PATCH_LOGD(" right, bottom = %.2f, %.2f\t\tu2, v2 = %.4f, %.4f", x2, y2, u2, v2);
+ PATCH_LOGD(" left, top = %.2f, %.2f\t\tu1, v1 = %.8f, %.8f", x1, y1, u1, v1);
+ PATCH_LOGD(" right, bottom = %.2f, %.2f\t\tu2, v2 = %.8f, %.8f", x2, y2, u2, v2);
#endif
return;
}
@@ -248,8 +245,8 @@
#if DEBUG_PATCHES_VERTICES
PATCH_LOGD(" quad %d", oldQuadCount);
- PATCH_LOGD(" left, top = %.2f, %.2f\t\tu1, v1 = %.4f, %.4f", x1, y1, u1, v1);
- PATCH_LOGD(" right, bottom = %.2f, %.2f\t\tu2, v2 = %.4f, %.4f", x2, y2, u2, v2);
+ PATCH_LOGD(" left, top = %.2f, %.2f\t\tu1, v1 = %.8f, %.8f", x1, y1, u1, v1);
+ PATCH_LOGD(" right, bottom = %.2f, %.2f\t\tu2, v2 = %.8f, %.8f", x2, y2, u2, v2);
#endif
}