| Index: src/gpu/GrDistanceFieldTextContext.cpp
|
| diff --git a/src/gpu/GrDistanceFieldTextContext.cpp b/src/gpu/GrDistanceFieldTextContext.cpp
|
| index 675c146d60dde29aa210b070f8f91fc364d9aaef..1739c530dc916ea935bca48376afbf7e788bb656 100755
|
| --- a/src/gpu/GrDistanceFieldTextContext.cpp
|
| +++ b/src/gpu/GrDistanceFieldTextContext.cpp
|
| @@ -55,11 +55,32 @@ GrDistanceFieldTextContext::~GrDistanceFieldTextContext() {
|
| }
|
|
|
| bool GrDistanceFieldTextContext::canDraw(const SkPaint& paint) {
|
| - return (kForceDistanceFieldFonts || paint.isDistanceFieldTextTEMP()) &&
|
| - !paint.getRasterizer() && !paint.getMaskFilter() &&
|
| - paint.getStyle() == SkPaint::kFill_Style &&
|
| - fContext->getTextTarget()->caps()->shaderDerivativeSupport() &&
|
| - !SkDraw::ShouldDrawTextAsPaths(paint, fContext->getMatrix());
|
| + if (!kForceDistanceFieldFonts && !paint.isDistanceFieldTextTEMP()) {
|
| + return false;
|
| + }
|
| +
|
| + // rasterizers and mask filters modify alpha, which doesn't
|
| + // translate well to distance
|
| + if (paint.getRasterizer() || paint.getMaskFilter() ||
|
| + !fContext->getTextTarget()->caps()->shaderDerivativeSupport()) {
|
| + return false;
|
| + }
|
| +
|
| + // TODO: add some stroking support
|
| + if (paint.getStyle() != SkPaint::kFill_Style) {
|
| + return false;
|
| + }
|
| +
|
| + // TODO: choose an appropriate maximum scale for distance fields and
|
| + // enable perspective
|
| + if (SkDraw::ShouldDrawTextAsPaths(paint, fContext->getMatrix())) {
|
| + return false;
|
| + }
|
| +
|
| + // distance fields cannot represent color fonts
|
| + SkScalerContext::Rec rec;
|
| + SkScalerContext::MakeRec(paint, &fDeviceProperties, NULL, &rec);
|
| + return rec.getFormat() != SkMask::kARGB32_Format;
|
| }
|
|
|
| static inline GrColor skcolor_to_grcolor_nopremultiply(SkColor c) {
|
|
|