| Index: src/gpu/GrBitmapTextContext.cpp
|
| diff --git a/src/gpu/GrBitmapTextContext.cpp b/src/gpu/GrBitmapTextContext.cpp
|
| index a8ac78a209105bf58c3def737eeae083fe64e81e..3031f985ed373fb3b819ed127fa83b6332bf0bd8 100755
|
| --- a/src/gpu/GrBitmapTextContext.cpp
|
| +++ b/src/gpu/GrBitmapTextContext.cpp
|
| @@ -138,23 +138,23 @@ void GrBitmapTextContext::onDrawText(GrRenderTarget* rt, const GrClip& clip,
|
|
|
| SkFixed fxMask = ~0;
|
| SkFixed fyMask = ~0;
|
| - SkFixed halfSampleX, halfSampleY;
|
| + SkScalar halfSampleX, halfSampleY;
|
| if (cache->isSubpixel()) {
|
| - halfSampleX = halfSampleY = SkGlyph::kSubpixelRound;
|
| + halfSampleX = halfSampleY = SkFixedToScalar(SkGlyph::kSubpixelRound);
|
| SkAxisAlignment baseline = SkComputeAxisAlignmentForHText(viewMatrix);
|
| if (kX_SkAxisAlignment == baseline) {
|
| fyMask = 0;
|
| - halfSampleY = SK_FixedHalf;
|
| + halfSampleY = SK_ScalarHalf;
|
| } else if (kY_SkAxisAlignment == baseline) {
|
| fxMask = 0;
|
| - halfSampleX = SK_FixedHalf;
|
| + halfSampleX = SK_ScalarHalf;
|
| }
|
| } else {
|
| - halfSampleX = halfSampleY = SK_FixedHalf;
|
| + halfSampleX = halfSampleY = SK_ScalarHalf;
|
| }
|
|
|
| - SkFixed fx = SkScalarToFixed(x) + halfSampleX;
|
| - SkFixed fy = SkScalarToFixed(y) + halfSampleY;
|
| + Sk48Dot16 fx = SkScalarTo48Dot16(x + halfSampleX);
|
| + Sk48Dot16 fy = SkScalarTo48Dot16(y + halfSampleY);
|
|
|
| // if we have RGB, then we won't have any SkShaders so no need to use a localmatrix, but for
|
| // performance reasons we just invert here instead
|
| @@ -172,8 +172,8 @@ void GrBitmapTextContext::onDrawText(GrRenderTarget* rt, const GrClip& clip,
|
| this->appendGlyph(GrGlyph::Pack(glyph.getGlyphID(),
|
| glyph.getSubXFixed(),
|
| glyph.getSubYFixed()),
|
| - SkFixedFloorToFixed(fx),
|
| - SkFixedFloorToFixed(fy),
|
| + Sk48Dot16FloorToInt(fx),
|
| + Sk48Dot16FloorToInt(fy),
|
| fontScaler);
|
| }
|
|
|
| @@ -219,7 +219,7 @@ void GrBitmapTextContext::onDrawPosText(GrRenderTarget* rt, const GrClip& clip,
|
| const char* stop = text + byteLength;
|
| SkTextAlignProc alignProc(fSkPaint.getTextAlign());
|
| SkTextMapStateProc tmsProc(viewMatrix, offset, scalarsPerPosition);
|
| - SkFixed halfSampleX = 0, halfSampleY = 0;
|
| + SkScalar halfSampleX = 0, halfSampleY = 0;
|
|
|
| if (cache->isSubpixel()) {
|
| // maybe we should skip the rounding if linearText is set
|
| @@ -229,18 +229,18 @@ void GrBitmapTextContext::onDrawPosText(GrRenderTarget* rt, const GrClip& clip,
|
| SkFixed fyMask = ~0;
|
| if (kX_SkAxisAlignment == baseline) {
|
| fyMask = 0;
|
| - halfSampleY = SK_FixedHalf;
|
| + halfSampleY = SK_ScalarHalf;
|
| } else if (kY_SkAxisAlignment == baseline) {
|
| fxMask = 0;
|
| - halfSampleX = SK_FixedHalf;
|
| + halfSampleX = SK_ScalarHalf;
|
| }
|
|
|
| if (SkPaint::kLeft_Align == fSkPaint.getTextAlign()) {
|
| while (text < stop) {
|
| SkPoint tmsLoc;
|
| tmsProc(pos, &tmsLoc);
|
| - SkFixed fx = SkScalarToFixed(tmsLoc.fX) + halfSampleX;
|
| - SkFixed fy = SkScalarToFixed(tmsLoc.fY) + halfSampleY;
|
| + Sk48Dot16 fx = SkScalarTo48Dot16(tmsLoc.fX + halfSampleX);
|
| + Sk48Dot16 fy = SkScalarTo48Dot16(tmsLoc.fY + halfSampleY);
|
|
|
| const SkGlyph& glyph = glyphCacheProc(cache, &text,
|
| fx & fxMask, fy & fyMask);
|
| @@ -249,8 +249,8 @@ void GrBitmapTextContext::onDrawPosText(GrRenderTarget* rt, const GrClip& clip,
|
| this->appendGlyph(GrGlyph::Pack(glyph.getGlyphID(),
|
| glyph.getSubXFixed(),
|
| glyph.getSubYFixed()),
|
| - SkFixedFloorToFixed(fx),
|
| - SkFixedFloorToFixed(fy),
|
| + Sk48Dot16FloorToInt(fx),
|
| + Sk48Dot16FloorToInt(fy),
|
| fontScaler);
|
| }
|
| pos += scalarsPerPosition;
|
| @@ -265,11 +265,11 @@ void GrBitmapTextContext::onDrawPosText(GrRenderTarget* rt, const GrClip& clip,
|
| SkDEBUGCODE(SkFixed prevAdvY = metricGlyph.fAdvanceY;)
|
| SkPoint tmsLoc;
|
| tmsProc(pos, &tmsLoc);
|
| - SkIPoint fixedLoc;
|
| - alignProc(tmsLoc, metricGlyph, &fixedLoc);
|
| + SkPoint alignLoc;
|
| + alignProc(tmsLoc, metricGlyph, &alignLoc);
|
|
|
| - SkFixed fx = fixedLoc.fX + halfSampleX;
|
| - SkFixed fy = fixedLoc.fY + halfSampleY;
|
| + Sk48Dot16 fx = SkScalarTo48Dot16(alignLoc.fX + halfSampleX);
|
| + Sk48Dot16 fy = SkScalarTo48Dot16(alignLoc.fY + halfSampleY);
|
|
|
| // have to call again, now that we've been "aligned"
|
| const SkGlyph& glyph = glyphCacheProc(cache, ¤tText,
|
| @@ -282,8 +282,8 @@ void GrBitmapTextContext::onDrawPosText(GrRenderTarget* rt, const GrClip& clip,
|
| this->appendGlyph(GrGlyph::Pack(glyph.getGlyphID(),
|
| glyph.getSubXFixed(),
|
| glyph.getSubYFixed()),
|
| - SkFixedFloorToFixed(fx),
|
| - SkFixedFloorToFixed(fy),
|
| + Sk48Dot16FloorToInt(fx),
|
| + Sk48Dot16FloorToInt(fy),
|
| fontScaler);
|
| }
|
| pos += scalarsPerPosition;
|
| @@ -300,13 +300,13 @@ void GrBitmapTextContext::onDrawPosText(GrRenderTarget* rt, const GrClip& clip,
|
| SkPoint tmsLoc;
|
| tmsProc(pos, &tmsLoc);
|
|
|
| - SkFixed fx = SkScalarToFixed(tmsLoc.fX) + SK_FixedHalf; //halfSampleX;
|
| - SkFixed fy = SkScalarToFixed(tmsLoc.fY) + SK_FixedHalf; //halfSampleY;
|
| + Sk48Dot16 fx = SkScalarTo48Dot16(tmsLoc.fX + SK_ScalarHalf); //halfSampleX;
|
| + Sk48Dot16 fy = SkScalarTo48Dot16(tmsLoc.fY + SK_ScalarHalf); //halfSampleY;
|
| this->appendGlyph(GrGlyph::Pack(glyph.getGlyphID(),
|
| glyph.getSubXFixed(),
|
| glyph.getSubYFixed()),
|
| - SkFixedFloorToFixed(fx),
|
| - SkFixedFloorToFixed(fy),
|
| + Sk48Dot16FloorToInt(fx),
|
| + Sk48Dot16FloorToInt(fy),
|
| fontScaler);
|
| }
|
| pos += scalarsPerPosition;
|
| @@ -320,16 +320,16 @@ void GrBitmapTextContext::onDrawPosText(GrRenderTarget* rt, const GrClip& clip,
|
| SkPoint tmsLoc;
|
| tmsProc(pos, &tmsLoc);
|
|
|
| - SkIPoint fixedLoc;
|
| - alignProc(tmsLoc, glyph, &fixedLoc);
|
| + SkPoint alignLoc;
|
| + alignProc(tmsLoc, glyph, &alignLoc);
|
|
|
| - SkFixed fx = fixedLoc.fX + SK_FixedHalf; //halfSampleX;
|
| - SkFixed fy = fixedLoc.fY + SK_FixedHalf; //halfSampleY;
|
| + Sk48Dot16 fx = SkScalarTo48Dot16(alignLoc.fX + SK_ScalarHalf); //halfSampleX;
|
| + Sk48Dot16 fy = SkScalarTo48Dot16(alignLoc.fY + SK_ScalarHalf); //halfSampleY;
|
| this->appendGlyph(GrGlyph::Pack(glyph.getGlyphID(),
|
| glyph.getSubXFixed(),
|
| glyph.getSubYFixed()),
|
| - SkFixedFloorToFixed(fx),
|
| - SkFixedFloorToFixed(fy),
|
| + Sk48Dot16FloorToInt(fx),
|
| + Sk48Dot16FloorToInt(fy),
|
| fontScaler);
|
| }
|
| pos += scalarsPerPosition;
|
| @@ -405,7 +405,7 @@ inline bool GrBitmapTextContext::uploadGlyph(GrGlyph* glyph, GrFontScaler* scale
|
| }
|
|
|
| void GrBitmapTextContext::appendGlyph(GrGlyph::PackedID packed,
|
| - SkFixed vx, SkFixed vy,
|
| + int vx, int vy,
|
| GrFontScaler* scaler) {
|
| if (NULL == fDrawTarget) {
|
| return;
|
| @@ -420,16 +420,14 @@ void GrBitmapTextContext::appendGlyph(GrGlyph::PackedID packed,
|
| return;
|
| }
|
|
|
| - vx += SkIntToFixed(glyph->fBounds.fLeft);
|
| - vy += SkIntToFixed(glyph->fBounds.fTop);
|
| + int x = vx + glyph->fBounds.fLeft;
|
| + int y = vy + glyph->fBounds.fTop;
|
|
|
| // keep them as ints until we've done the clip-test
|
| int width = glyph->fBounds.width();
|
| int height = glyph->fBounds.height();
|
|
|
| // check if we clipped out
|
| - int x = vx >> 16;
|
| - int y = vy >> 16;
|
| if (fClipRect.quickReject(x, y, x + width, y + height)) {
|
| return;
|
| }
|
| @@ -450,8 +448,7 @@ void GrBitmapTextContext::appendGlyph(GrGlyph::PackedID packed,
|
| this->flush();
|
|
|
| SkMatrix translate;
|
| - translate.setTranslate(SkFixedToScalar(vx - SkIntToFixed(glyph->fBounds.fLeft)),
|
| - SkFixedToScalar(vy - SkIntToFixed(glyph->fBounds.fTop)));
|
| + translate.setTranslate(SkIntToScalar(vx), SkIntToScalar(vy));
|
| SkPath tmpPath(*glyph->fPath);
|
| tmpPath.transform(translate);
|
| GrStrokeInfo strokeInfo(SkStrokeRec::kFill_InitStyle);
|
| @@ -484,13 +481,13 @@ void GrBitmapTextContext::appendGlyph(GrGlyph::PackedID packed,
|
| }
|
|
|
| SkRect r;
|
| - r.fLeft = SkFixedToFloat(vx);
|
| - r.fTop = SkFixedToFloat(vy);
|
| - r.fRight = r.fLeft + width;
|
| - r.fBottom = r.fTop + height;
|
| + r.fLeft = SkIntToScalar(x);
|
| + r.fTop = SkIntToScalar(y);
|
| + r.fRight = r.fLeft + SkIntToScalar(width);
|
| + r.fBottom = r.fTop + SkIntToScalar(height);
|
|
|
| fVertexBounds.joinNonEmptyArg(r);
|
| -
|
| +
|
| int u0 = glyph->fAtlasLocation.fX;
|
| int v0 = glyph->fAtlasLocation.fY;
|
| int u1 = u0 + width;
|
| @@ -510,7 +507,7 @@ void GrBitmapTextContext::appendGlyph(GrGlyph::PackedID packed,
|
| sizeof(SkIPoint16));
|
| textureCoords->set(u0, v0);
|
| vertex += vertSize;
|
| -
|
| +
|
| // V1
|
| position = reinterpret_cast<SkPoint*>(vertex);
|
| position->set(r.fLeft, r.fBottom);
|
| @@ -521,7 +518,7 @@ void GrBitmapTextContext::appendGlyph(GrGlyph::PackedID packed,
|
| textureCoords = reinterpret_cast<SkIPoint16*>(vertex + vertSize - sizeof(SkIPoint16));
|
| textureCoords->set(u0, v1);
|
| vertex += vertSize;
|
| -
|
| +
|
| // V2
|
| position = reinterpret_cast<SkPoint*>(vertex);
|
| position->set(r.fRight, r.fBottom);
|
| @@ -532,7 +529,7 @@ void GrBitmapTextContext::appendGlyph(GrGlyph::PackedID packed,
|
| textureCoords = reinterpret_cast<SkIPoint16*>(vertex + vertSize - sizeof(SkIPoint16));
|
| textureCoords->set(u1, v1);
|
| vertex += vertSize;
|
| -
|
| +
|
| // V3
|
| position = reinterpret_cast<SkPoint*>(vertex);
|
| position->set(r.fRight, r.fTop);
|
|
|