1
2/*
3 * Copyright 2011 Google Inc.
4 *
5 * Use of this source code is governed by a BSD-style license that can be
6 * found in the LICENSE file.
7 */
8
9#ifndef GrAAHairLinePathRenderer_DEFINED
10#define GrAAHairLinePathRenderer_DEFINED
11
12#include "GrPathRenderer.h"
13
14class GrAAHairLinePathRenderer : public GrPathRenderer {
15public:
16    virtual ~GrAAHairLinePathRenderer();
17
18    static GrPathRenderer* Create(GrContext* context);
19
20    virtual bool canDrawPath(const SkPath& path,
21                             const SkStrokeRec& stroke,
22                             const GrDrawTarget* target,
23                             bool antiAlias) const SK_OVERRIDE;
24
25    typedef SkTArray<SkPoint, true> PtArray;
26    typedef SkTArray<int, true> IntArray;
27    typedef SkTArray<float, true> FloatArray;
28
29protected:
30    virtual bool onDrawPath(const SkPath& path,
31                            const SkStrokeRec& stroke,
32                            GrDrawTarget* target,
33                            bool antiAlias) SK_OVERRIDE;
34
35private:
36    GrAAHairLinePathRenderer(const GrContext* context,
37                             const GrIndexBuffer* fLinesIndexBuffer,
38                             const GrIndexBuffer* fQuadsIndexBuffer);
39
40    bool createLineGeom(const SkPath& path,
41                        GrDrawTarget* target,
42                        const PtArray& lines,
43                        int lineCnt,
44                        GrDrawTarget::AutoReleaseGeometry* arg,
45                        SkRect* devBounds);
46
47    bool createBezierGeom(const SkPath& path,
48                          GrDrawTarget* target,
49                          const PtArray& quads,
50                          int quadCnt,
51                          const PtArray& conics,
52                          int conicCnt,
53                          const IntArray& qSubdivs,
54                          const FloatArray& cWeights,
55                          GrDrawTarget::AutoReleaseGeometry* arg,
56                          SkRect* devBounds);
57
58    const GrIndexBuffer*        fLinesIndexBuffer;
59    const GrIndexBuffer*        fQuadsIndexBuffer;
60
61    typedef GrPathRenderer INHERITED;
62};
63
64
65#endif
66