Move oval and rect renderer includes to private interface

R=bsalomon@google.com, robertphillips@google.com

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

git-svn-id: http://skia.googlecode.com/svn/trunk@11132 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/src/gpu/GrAARectRenderer.h b/src/gpu/GrAARectRenderer.h
new file mode 100644
index 0000000..607329a
--- /dev/null
+++ b/src/gpu/GrAARectRenderer.h
@@ -0,0 +1,114 @@
+/*
+ * Copyright 2012 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+
+#ifndef GrAARectRenderer_DEFINED
+#define GrAARectRenderer_DEFINED
+
+#include "GrRefCnt.h"
+#include "SkMatrix.h"
+#include "SkRect.h"
+
+class GrGpu;
+class GrDrawTarget;
+class GrIndexBuffer;
+
+/*
+ * This class wraps helper functions that draw AA rects (filled & stroked)
+ */
+class GrAARectRenderer : public GrRefCnt {
+public:
+    SK_DECLARE_INST_COUNT(GrAARectRenderer)
+
+    GrAARectRenderer()
+    : fAAFillRectIndexBuffer(NULL)
+    , fAAStrokeRectIndexBuffer(NULL) {
+    }
+
+    void reset();
+
+    ~GrAARectRenderer() {
+        this->reset();
+    }
+
+    // TODO: potentialy fuse the fill & stroke methods and differentiate
+    // between them by passing in strokeWidth (<0 means fill).
+
+    void fillAARect(GrGpu* gpu,
+                    GrDrawTarget* target,
+                    const SkRect& rect,
+                    const SkMatrix& combinedMatrix,
+                    const SkRect& devRect,
+                    bool useVertexCoverage) {
+#ifdef SHADER_AA_FILL_RECT
+        if (combinedMatrix.rectStaysRect()) {
+            this->shaderFillAlignedAARect(gpu, target,
+                                          rect, combinedMatrix);
+        } else {
+            this->shaderFillAARect(gpu, target,
+                                   rect, combinedMatrix);
+        }
+#else
+        this->geometryFillAARect(gpu, target,
+                                 rect, combinedMatrix,
+                                 devRect, useVertexCoverage);
+#endif
+    }
+
+    void strokeAARect(GrGpu* gpu,
+                      GrDrawTarget* target,
+                      const SkRect& rect,
+                      const SkMatrix& combinedMatrix,
+                      const SkRect& devRect,
+                      SkScalar width,
+                      bool useVertexCoverage);
+
+    // First rect is outer; second rect is inner
+    void fillAANestedRects(GrGpu* gpu,
+                           GrDrawTarget* target,
+                           const SkRect rects[2],
+                           const SkMatrix& combinedMatrix,
+                           bool useVertexCoverage);
+
+private:
+    GrIndexBuffer*              fAAFillRectIndexBuffer;
+    GrIndexBuffer*              fAAStrokeRectIndexBuffer;
+
+    GrIndexBuffer* aaFillRectIndexBuffer(GrGpu* gpu);
+
+    static int aaStrokeRectIndexCount();
+    GrIndexBuffer* aaStrokeRectIndexBuffer(GrGpu* gpu);
+
+    // TODO: Remove the useVertexCoverage boolean. Just use it all the time
+    // since we now have a coverage vertex attribute
+    void geometryFillAARect(GrGpu* gpu,
+                            GrDrawTarget* target,
+                            const SkRect& rect,
+                            const SkMatrix& combinedMatrix,
+                            const SkRect& devRect,
+                            bool useVertexCoverage);
+
+    void shaderFillAARect(GrGpu* gpu,
+                          GrDrawTarget* target,
+                          const SkRect& rect,
+                          const SkMatrix& combinedMatrix);
+
+    void shaderFillAlignedAARect(GrGpu* gpu,
+                                 GrDrawTarget* target,
+                                 const SkRect& rect,
+                                 const SkMatrix& combinedMatrix);
+
+    void geometryStrokeAARect(GrGpu* gpu,
+                              GrDrawTarget* target,
+                              const SkRect& devOutside,
+                              const SkRect& devInside,
+                              bool useVertexCoverage);
+
+    typedef GrRefCnt INHERITED;
+};
+
+#endif // GrAARectRenderer_DEFINED
diff --git a/src/gpu/GrClipMaskManager.cpp b/src/gpu/GrClipMaskManager.cpp
index 1e8eb25..8465880 100644
--- a/src/gpu/GrClipMaskManager.cpp
+++ b/src/gpu/GrClipMaskManager.cpp
@@ -9,6 +9,7 @@
 #include "GrClipMaskManager.h"
 #include "GrAAConvexPathRenderer.h"
 #include "GrAAHairLinePathRenderer.h"
+#include "GrAARectRenderer.h"
 #include "GrDrawTargetCaps.h"
 #include "GrGpu.h"
 #include "GrPaint.h"
diff --git a/src/gpu/GrContext.cpp b/src/gpu/GrContext.cpp
index 4be77f8..b6555c4 100644
--- a/src/gpu/GrContext.cpp
+++ b/src/gpu/GrContext.cpp
@@ -12,6 +12,7 @@
 #include "effects/GrSingleTextureEffect.h"
 #include "effects/GrConfigConversionEffect.h"
 
+#include "GrAARectRenderer.h"
 #include "GrBufferAllocPool.h"
 #include "GrGpu.h"
 #include "GrDrawTargetCaps.h"
diff --git a/src/gpu/GrOvalRenderer.h b/src/gpu/GrOvalRenderer.h
new file mode 100644
index 0000000..8c47e9a
--- /dev/null
+++ b/src/gpu/GrOvalRenderer.h
@@ -0,0 +1,58 @@
+/*
+ * Copyright 2013 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#ifndef GrOvalRenderer_DEFINED
+#define GrOvalRenderer_DEFINED
+
+#include "GrContext.h"
+#include "GrPaint.h"
+#include "GrRefCnt.h"
+
+class GrContext;
+class GrDrawTarget;
+class GrPaint;
+struct SkRect;
+class SkStrokeRec;
+
+/*
+ * This class wraps helper functions that draw ovals and roundrects (filled & stroked)
+ */
+class GrOvalRenderer : public GrRefCnt {
+public:
+    SK_DECLARE_INST_COUNT(GrOvalRenderer)
+
+    GrOvalRenderer() : fRRectIndexBuffer(NULL) {}
+    ~GrOvalRenderer() {
+        this->reset();
+    }
+
+    void reset();
+
+    bool drawOval(GrDrawTarget* target, const GrContext* context, bool useAA,
+                  const SkRect& oval, const SkStrokeRec& stroke);
+    bool drawSimpleRRect(GrDrawTarget* target, GrContext* context, bool useAA,
+                         const SkRRect& rrect, const SkStrokeRec& stroke);
+
+private:
+    bool drawEllipse(GrDrawTarget* target, bool useAA,
+                     const SkRect& ellipse,
+                     const SkStrokeRec& stroke);
+    bool drawDIEllipse(GrDrawTarget* target, bool useAA,
+                       const SkRect& ellipse,
+                       const SkStrokeRec& stroke);
+    void drawCircle(GrDrawTarget* target, bool useAA,
+                    const SkRect& circle,
+                    const SkStrokeRec& stroke);
+
+    GrIndexBuffer* rRectIndexBuffer(GrGpu* gpu);
+
+    GrIndexBuffer* fRRectIndexBuffer;
+
+    typedef GrRefCnt INHERITED;
+};
+
+#endif // GrOvalRenderer_DEFINED