diff options
Diffstat (limited to 'src/gpu/GrPathRendererChain.h')
-rw-r--r-- | src/gpu/GrPathRendererChain.h | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/src/gpu/GrPathRendererChain.h b/src/gpu/GrPathRendererChain.h new file mode 100644 index 0000000..8f95ea3 --- /dev/null +++ b/src/gpu/GrPathRendererChain.h @@ -0,0 +1,65 @@ + +/* + * Copyright 2011 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + + +#ifndef GrPathRendererChain_DEFINED +#define GrPathRendererChain_DEFINED + +#include "GrDrawTarget.h" +#include "GrRefCnt.h" +#include "SkTArray.h" + +class GrContext; + +class SkPath; +class GrPathRenderer; + +/** + * Keeps track of a ordered list of path renderers. When a path needs to be + * drawn this list is scanned to find the most preferred renderer. To add your + * path renderer to the list implement the GrPathRenderer::AddPathRenderers + * function. + */ +class GrPathRendererChain : public SkRefCnt { +public: + + enum UsageFlags { + kNone_UsageFlag = 0, + kNonAAOnly_UsageFlag = 1, + }; + + GrPathRendererChain(GrContext* context, UsageFlags flags); + + ~GrPathRendererChain(); + + // takes a ref and unrefs in destructor + GrPathRenderer* addPathRenderer(GrPathRenderer* pr); + + GrPathRenderer* getPathRenderer(const GrDrawTarget::Caps& targetCaps, + const SkPath& path, + GrPathFill fill, + bool antiAlias); + +private: + + GrPathRendererChain(); + + void init(); + + enum { + kPreAllocCount = 8, + }; + bool fInit; + GrContext* fOwner; + UsageFlags fFlags; + SkSTArray<kPreAllocCount, GrPathRenderer*, true> fChain; +}; + +GR_MAKE_BITFIELD_OPS(GrPathRendererChain::UsageFlags) + +#endif |