| Index: src/gpu/GrBitmapTextContext.cpp
|
| diff --git a/src/gpu/GrBitmapTextContext.cpp b/src/gpu/GrBitmapTextContext.cpp
|
| index e509e024377101face82f8f64a9929bb262d8fb5..48054f4eac1ed949e12655435a33e4d22980e487 100755
|
| --- a/src/gpu/GrBitmapTextContext.cpp
|
| +++ b/src/gpu/GrBitmapTextContext.cpp
|
| @@ -561,6 +561,7 @@
|
| // Color bitmap text
|
| case kARGB_GrMaskFormat:
|
| SkASSERT(!drawState.hasColorVertexAttribute());
|
| + drawState.setBlendFunc(fPaint.getSrcBlendCoeff(), fPaint.getDstBlendCoeff());
|
| drawState.setAlpha(fSkPaint.getAlpha());
|
| break;
|
| // LCD text
|
| @@ -572,12 +573,24 @@
|
| SkDebugf("LCD Text will not draw correctly.\n");
|
| }
|
| SkASSERT(!drawState.hasColorVertexAttribute());
|
| + // We don't use the GrPaint's color in this case because it's been premultiplied by
|
| + // alpha. Instead we feed in a non-premultiplied color, and multiply its alpha by
|
| + // the mask texture color. The end result is that we get
|
| + // mask*paintAlpha*paintColor + (1-mask*paintAlpha)*dstColor
|
| + int a = SkColorGetA(fSkPaint.getColor());
|
| + // paintAlpha
|
| + drawState.setColor(SkColorSetARGB(a, a, a, a));
|
| + // paintColor
|
| + drawState.setBlendConstant(skcolor_to_grcolor_nopremultiply(fSkPaint.getColor()));
|
| + drawState.setBlendFunc(kConstC_GrBlendCoeff, kISC_GrBlendCoeff);
|
| break;
|
| }
|
| // Grayscale/BW text
|
| case kA8_GrMaskFormat:
|
| drawState.setHint(GrDrawState::kVertexColorsAreOpaque_Hint,
|
| 0xFF == GrColorUnpackA(fPaint.getColor()));
|
| + // set back to normal in case we took LCD path previously.
|
| + drawState.setBlendFunc(fPaint.getSrcBlendCoeff(), fPaint.getDstBlendCoeff());
|
| // We're using per-vertex color.
|
| SkASSERT(drawState.hasColorVertexAttribute());
|
| break;
|
|
|