1/*
2 * Copyright 2013 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
8#ifndef GrOvalRenderer_DEFINED
9#define GrOvalRenderer_DEFINED
10
11#include "GrContext.h"
12#include "GrPaint.h"
13
14class GrContext;
15class GrDrawTarget;
16class GrPaint;
17struct SkRect;
18class SkStrokeRec;
19
20/*
21 * This class wraps helper functions that draw ovals and roundrects (filled & stroked)
22 */
23class GrOvalRenderer : public SkRefCnt {
24public:
25    SK_DECLARE_INST_COUNT(GrOvalRenderer)
26
27    GrOvalRenderer() : fRRectIndexBuffer(NULL) {}
28    ~GrOvalRenderer() {
29        this->reset();
30    }
31
32    void reset();
33
34    bool drawOval(GrDrawTarget* target, const GrContext* context, bool useAA,
35                  const SkRect& oval, const SkStrokeRec& stroke);
36    bool drawRRect(GrDrawTarget* target, GrContext* context, bool useAA,
37                   const SkRRect& rrect, const SkStrokeRec& stroke);
38    bool drawDRRect(GrDrawTarget* target, GrContext* context, bool useAA,
39                    const SkRRect& outer, const SkRRect& inner);
40
41private:
42    bool drawEllipse(GrDrawTarget* target, bool useCoverageAA,
43                     const SkRect& ellipse,
44                     const SkStrokeRec& stroke);
45    bool drawDIEllipse(GrDrawTarget* target, bool useCoverageAA,
46                       const SkRect& ellipse,
47                       const SkStrokeRec& stroke);
48    void drawCircle(GrDrawTarget* target, bool useCoverageAA,
49                    const SkRect& circle,
50                    const SkStrokeRec& stroke);
51
52    GrIndexBuffer* rRectIndexBuffer(GrGpu* gpu);
53
54    GrIndexBuffer* fRRectIndexBuffer;
55
56    typedef SkRefCnt INHERITED;
57};
58
59#endif // GrOvalRenderer_DEFINED
60