simplify GrPathRenderer interface

Review URL: http://codereview.appspot.com/5706053/



git-svn-id: http://skia.googlecode.com/svn/trunk@3312 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/src/gpu/GrAAConvexPathRenderer.cpp b/src/gpu/GrAAConvexPathRenderer.cpp
index d596284..60749d8 100644
--- a/src/gpu/GrAAConvexPathRenderer.cpp
+++ b/src/gpu/GrAAConvexPathRenderer.cpp
@@ -18,15 +18,6 @@
 GrAAConvexPathRenderer::GrAAConvexPathRenderer() {
 }
 
-bool GrAAConvexPathRenderer::canDrawPath(const GrDrawTarget::Caps& targetCaps,
-                                         const SkPath& path,
-                                         GrPathFill fill,
-                                         bool antiAlias) const {
-    return targetCaps.fShaderDerivativeSupport && antiAlias &&
-           kHairLine_PathFill != fill && !GrIsFillInverted(fill) &&
-           path.isConvex();
-}
-
 namespace {
 
 struct Segment {
@@ -415,17 +406,38 @@
 
 }
 
-void GrAAConvexPathRenderer::drawPath(GrDrawState::StageMask stageMask) {
-    GrAssert(fPath->isConvex());
-    if (fPath->isEmpty()) {
-        return;
+bool GrAAConvexPathRenderer::canDrawPath(const SkPath& path,
+                                         GrPathFill fill,
+                                         const GrDrawTarget* target,
+                                         bool antiAlias) const {
+    if (!target->getCaps().fShaderDerivativeSupport || !antiAlias ||
+        kHairLine_PathFill == fill || GrIsFillInverted(fill) ||
+        !path.isConvex()) {
+        return false;
+    }  else {
+        return true;
     }
-    GrDrawState* drawState = fTarget->drawState();
+}
+
+bool GrAAConvexPathRenderer::onDrawPath(const SkPath& origPath,
+                                        GrPathFill fill,
+                                        const GrVec* translate,
+                                        GrDrawTarget* target,
+                                        GrDrawState::StageMask stageMask,
+                                        bool antiAlias) {
+
+
+    if (origPath.isEmpty()) {
+        return true;
+    }
+    GrDrawState* drawState = target->drawState();
 
     GrDrawTarget::AutoStateRestore asr;
     GrMatrix vm = drawState->getViewMatrix();
-    vm.postTranslate(fTranslate.fX, fTranslate.fY);
-    asr.set(fTarget);
+    if (NULL != translate) {
+        vm.postTranslate(translate->fX, translate->fY);
+    }
+    asr.set(target);
     GrMatrix ivm;
     if (vm.invert(&ivm)) {
         drawState->preConcatSamplerMatrices(stageMask, ivm);
@@ -433,7 +445,7 @@
     drawState->setViewMatrix(GrMatrix::I());
 
     SkPath path;
-    fPath->transform(vm, &path);
+    origPath.transform(vm, &path);
 
     GrVertexLayout layout = 0;
     for (int s = 0; s < GrDrawState::kNumStages; ++s) {
@@ -451,26 +463,27 @@
     SegmentArray segments;
     SkPoint fanPt;
     if (!get_segments(path, &segments, &fanPt, &vCount, &iCount)) {
-        return;
+        return false;
     }
 
-    if (!fTarget->reserveVertexSpace(layout,
-                                     vCount,
-                                     reinterpret_cast<void**>(&verts))) {
-        return;
+    if (!target->reserveVertexSpace(layout,
+                                    vCount,
+                                    reinterpret_cast<void**>(&verts))) {
+        return false;
     }
-    if (!fTarget->reserveIndexSpace(iCount, reinterpret_cast<void**>(&idxs))) {
-        fTarget->resetVertexSource();
-        return;
+    if (!target->reserveIndexSpace(iCount, reinterpret_cast<void**>(&idxs))) {
+        target->resetVertexSource();
+        return false;
     }
 
     create_vertices(segments, fanPt, verts, idxs);
 
     drawState->setVertexEdgeType(GrDrawState::kQuad_EdgeType);
-    fTarget->drawIndexed(kTriangles_PrimitiveType,
-                         0,        // start vertex
-                         0,        // start index
-                         vCount,
-                         iCount);
+    target->drawIndexed(kTriangles_PrimitiveType,
+                        0,        // start vertex
+                        0,        // start index
+                        vCount,
+                        iCount);
+    return true;
 }