diff options
author | Chris Craik <ccraik@google.com> | 2014-08-15 15:46:37 -0700 |
---|---|---|
committer | Chris Craik <ccraik@google.com> | 2014-08-15 15:46:37 -0700 |
commit | 39c5e7cbdfdc0c74eb5746467d9975dbaba3da61 (patch) | |
tree | 1eda9eb9ee703cf135716e9b67b458493c8b736d /libs | |
parent | 1e1a01b0e44ab7a948265a78070937d2022d7abd (diff) | |
download | frameworks_base-39c5e7cbdfdc0c74eb5746467d9975dbaba3da61.zip frameworks_base-39c5e7cbdfdc0c74eb5746467d9975dbaba3da61.tar.gz frameworks_base-39c5e7cbdfdc0c74eb5746467d9975dbaba3da61.tar.bz2 |
Fix glyph positions underflow issue
bug:16450675
Avoid using unsigned ints in math with negative numbers
Change-Id: Icdfb72451f03380dbf78b3703793869b2cd4e751
Diffstat (limited to 'libs')
-rw-r--r-- | libs/hwui/font/Font.cpp | 21 |
1 files changed, 12 insertions, 9 deletions
diff --git a/libs/hwui/font/Font.cpp b/libs/hwui/font/Font.cpp index 2ea6c8c..ba878ba 100644 --- a/libs/hwui/font/Font.cpp +++ b/libs/hwui/font/Font.cpp @@ -140,12 +140,12 @@ void Font::invalidateTextureCache(CacheTexture* cacheTexture) { void Font::measureCachedGlyph(CachedGlyphInfo *glyph, int x, int y, uint8_t* bitmap, uint32_t bitmapW, uint32_t bitmapH, Rect* bounds, const float* pos) { - int nPenX = x + glyph->mBitmapLeft; - int nPenY = y + glyph->mBitmapTop; - int width = (int) glyph->mBitmapWidth; int height = (int) glyph->mBitmapHeight; + int nPenX = x + glyph->mBitmapLeft; + int nPenY = y + glyph->mBitmapTop; + if (bounds->bottom > nPenY) { bounds->bottom = nPenY; } @@ -162,12 +162,12 @@ void Font::measureCachedGlyph(CachedGlyphInfo *glyph, int x, int y, void Font::drawCachedGlyph(CachedGlyphInfo* glyph, int x, int y, uint8_t* bitmap, uint32_t bitmapW, uint32_t bitmapH, Rect* bounds, const float* pos) { - float nPenX = x + glyph->mBitmapLeft; - float nPenY = y + glyph->mBitmapTop + glyph->mBitmapHeight; - float width = (float) glyph->mBitmapWidth; float height = (float) glyph->mBitmapHeight; + float nPenX = x + glyph->mBitmapLeft; + float nPenY = y + glyph->mBitmapTop + height; + float u1 = glyph->mBitmapMinU; float u2 = glyph->mBitmapMaxU; float v1 = glyph->mBitmapMinV; @@ -181,10 +181,13 @@ void Font::drawCachedGlyph(CachedGlyphInfo* glyph, int x, int y, void Font::drawCachedGlyphTransformed(CachedGlyphInfo* glyph, int x, int y, uint8_t* bitmap, uint32_t bitmapW, uint32_t bitmapH, Rect* bounds, const float* pos) { + float width = (float) glyph->mBitmapWidth; + float height = (float) glyph->mBitmapHeight; + SkPoint p[4]; - p[0].iset(glyph->mBitmapLeft, glyph->mBitmapTop + glyph->mBitmapHeight); - p[1].iset(glyph->mBitmapLeft + glyph->mBitmapWidth, glyph->mBitmapTop + glyph->mBitmapHeight); - p[2].iset(glyph->mBitmapLeft + glyph->mBitmapWidth, glyph->mBitmapTop); + p[0].iset(glyph->mBitmapLeft, glyph->mBitmapTop + height); + p[1].iset(glyph->mBitmapLeft + width, glyph->mBitmapTop + height); + p[2].iset(glyph->mBitmapLeft + width, glyph->mBitmapTop); p[3].iset(glyph->mBitmapLeft, glyph->mBitmapTop); mDescription.mInverseLookupTransform.mapPoints(p, 4); |