Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 39c5e7cb authored by Chris Craik's avatar Chris Craik
Browse files

Fix glyph positions underflow issue

bug:16450675

Avoid using unsigned ints in math with negative numbers

Change-Id: Icdfb72451f03380dbf78b3703793869b2cd4e751
parent 1e1a01b0
Loading
Loading
Loading
Loading
+12 −9
Original line number Diff line number Diff line
@@ -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);