1/*
2 * Copyright 2011 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 GrDefaultPathRenderer_DEFINED
9#define GrDefaultPathRenderer_DEFINED
10
11#include "GrPathRenderer.h"
12#include "SkTemplates.h"
13
14/**
15 *  Subclass that renders the path using the stencil buffer to resolve fill rules
16 * (e.g. winding, even-odd)
17 */
18class GR_API GrDefaultPathRenderer : public GrPathRenderer {
19public:
20    GrDefaultPathRenderer(bool separateStencilSupport, bool stencilWrapOpsSupport);
21
22    virtual bool canDrawPath(const SkPath&,
23                             const SkStrokeRec&,
24                             const GrDrawTarget*,
25                             bool antiAlias) const SK_OVERRIDE;
26
27private:
28
29    virtual StencilSupport onGetStencilSupport(const SkPath&,
30                                               const SkStrokeRec&,
31                                               const GrDrawTarget*) const SK_OVERRIDE;
32
33    virtual bool onDrawPath(const SkPath&,
34                            const SkStrokeRec&,
35                            GrDrawTarget*,
36                            bool antiAlias) SK_OVERRIDE;
37
38    virtual void onStencilPath(const SkPath&,
39                               const SkStrokeRec&,
40                               GrDrawTarget*) SK_OVERRIDE;
41
42    bool internalDrawPath(const SkPath&,
43                          const SkStrokeRec&,
44                          GrDrawTarget*,
45                          bool stencilOnly);
46
47    bool createGeom(const SkPath&,
48                    const SkStrokeRec&,
49                    SkScalar srcSpaceTol,
50                    GrDrawTarget*,
51                    GrPrimitiveType*,
52                    int* vertexCnt,
53                    int* indexCnt,
54                    GrDrawTarget::AutoReleaseGeometry*);
55
56    bool    fSeparateStencil;
57    bool    fStencilWrapOps;
58
59    typedef GrPathRenderer INHERITED;
60};
61
62#endif
63