GrPathRendererChain.h revision 289533ada623f2238a83771eec977f204f75994f
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 GrDrawTarget::Caps& targetCaps, 44 const SkPath& path, 45 GrPathFill fill, 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