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
10#ifndef GrPathRendererChain_DEFINED
11#define GrPathRendererChain_DEFINED
12
13#include "GrDrawTarget.h"
14#include "GrRefCnt.h"
15#include "SkTArray.h"
16
17class GrContext;
18
19class SkPath;
20class GrPathRenderer;
21
22/**
23 * Keeps track of a ordered list of path renderers. When a path needs to be
24 * drawn this list is scanned to find the most preferred renderer. To add your
25 * path renderer to the list implement the GrPathRenderer::AddPathRenderers
26 * function.
27 */
28class GrPathRendererChain : public SkRefCnt {
29public:
30
31    enum UsageFlags {
32        kNone_UsageFlag      = 0,
33        kNonAAOnly_UsageFlag = 1,
34    };
35
36    GrPathRendererChain(GrContext* context, UsageFlags flags);
37
38    ~GrPathRendererChain();
39
40    // takes a ref and unrefs in destructor
41    GrPathRenderer* addPathRenderer(GrPathRenderer* pr);
42
43    GrPathRenderer* getPathRenderer(const SkPath& path,
44                                    GrPathFill fill,
45                                    const GrDrawTarget* target,
46                                    bool antiAlias);
47
48private:
49
50    GrPathRendererChain();
51
52    void init();
53
54    enum {
55        kPreAllocCount = 8,
56    };
57    bool fInit;
58    GrContext*                                          fOwner;
59    UsageFlags                                          fFlags;
60    SkSTArray<kPreAllocCount, GrPathRenderer*, true>    fChain;
61};
62
63GR_MAKE_BITFIELD_OPS(GrPathRendererChain::UsageFlags)
64
65#endif
66