Add fallback code for TextContexts that don't support all features

BUG=skia:2018

NOTRY=true
R=bsalomon@google.com, reed@google.com

Author: jvanverth@google.com

Review URL: https://codereview.chromium.org/135683006

git-svn-id: http://skia.googlecode.com/svn/trunk@13236 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/src/gpu/SkGpuDevice.cpp b/src/gpu/SkGpuDevice.cpp
index df302c4..f951a15 100644
--- a/src/gpu/SkGpuDevice.cpp
+++ b/src/gpu/SkGpuDevice.cpp
@@ -1771,9 +1771,7 @@
                           const SkPaint& paint) {
     CHECK_SHOULD_DRAW(draw, false);
 
-    if (SkDraw::ShouldDrawTextAsPaths(paint, fContext->getMatrix())) {
-        draw.drawText_asPaths((const char*)text, byteLength, x, y, paint);
-    } else {
+    if (fTextContextManager->canDraw(paint, fContext->getMatrix())) {
         GrPaint grPaint;
         if (!skPaint2GrPaintShader(this, paint, true, &grPaint)) {
             return;
@@ -1785,6 +1783,20 @@
                                                                      grPaint, paint,
                                                                      this->getDeviceProperties()));
         ctx->drawText((const char *)text, byteLength, x, y);
+    } else if (GrBitmapTextContext::CanDraw(paint, fContext->getMatrix())) {
+        GrPaint grPaint;
+        if (!skPaint2GrPaintShader(this, paint, true, &grPaint)) {
+            return;
+        }
+
+        SkDEBUGCODE(this->validate();)
+
+        GrBitmapTextContext textContext(this->context(), grPaint, paint,
+                                        this->getDeviceProperties());
+        textContext.drawText((const char *)text, byteLength, x, y);
+    } else {
+        // this guy will just call our drawPath()
+        draw.drawText_asPaths((const char*)text, byteLength, x, y, paint);
     }
 }
 
@@ -1794,11 +1806,7 @@
                              const SkPaint& paint) {
     CHECK_SHOULD_DRAW(draw, false);
 
-    if (SkDraw::ShouldDrawTextAsPaths(paint, fContext->getMatrix())) {
-        // this guy will just call our drawPath()
-        draw.drawPosText_asPaths((const char*)text, byteLength, pos, constY,
-                         scalarsPerPos, paint);
-    } else {
+    if (fTextContextManager->canDraw(paint, fContext->getMatrix())) {
         GrPaint grPaint;
         if (!skPaint2GrPaintShader(this, paint, true, &grPaint)) {
             return;
@@ -1810,6 +1818,20 @@
                                                                      grPaint, paint,
                                                                      this->getDeviceProperties()));
         ctx->drawPosText((const char *)text, byteLength, pos, constY, scalarsPerPos);
+    } else if (GrBitmapTextContext::CanDraw(paint, fContext->getMatrix())) {
+        GrPaint grPaint;
+        if (!skPaint2GrPaintShader(this, paint, true, &grPaint)) {
+            return;
+        }
+        
+        SkDEBUGCODE(this->validate();)
+        
+        GrBitmapTextContext textContext(this->context(), grPaint, paint,
+                                        this->getDeviceProperties());
+        textContext.drawPosText((const char *)text, byteLength, pos, constY, scalarsPerPos);
+    } else {
+        draw.drawPosText_asPaths((const char*)text, byteLength, pos, constY,
+                                 scalarsPerPos, paint);
     }
 }