/* * 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 SkPath& path, GrPathFill fill, const GrDrawTarget* target, 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