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#ifndef SkEdgeBuilder_DEFINED 9#define SkEdgeBuilder_DEFINED 10 11#include "SkChunkAlloc.h" 12#include "SkRect.h" 13#include "SkTDArray.h" 14 15struct SkEdge; 16class SkEdgeClipper; 17class SkPath; 18 19class SkEdgeBuilder { 20public: 21 SkEdgeBuilder(); 22 23 // returns the number of built edges. The array of those edge pointers 24 // is returned from edgeList(). 25 int build(const SkPath& path, const SkIRect* clip, int shiftUp, bool clipToTheRight); 26 27 SkEdge** edgeList() { return fEdgeList; } 28 29private: 30 SkChunkAlloc fAlloc; 31 SkTDArray<SkEdge*> fList; 32 33 /* 34 * If we're in general mode, we allcoate the pointers in fList, and this 35 * will point at fList.begin(). If we're in polygon mode, fList will be 36 * empty, as we will have preallocated room for the pointers in fAlloc's 37 * block, and fEdgeList will point into that. 38 */ 39 SkEdge** fEdgeList; 40 41 int fShiftUp; 42 43public: 44 void addLine(const SkPoint pts[]); 45 void addQuad(const SkPoint pts[]); 46 void addCubic(const SkPoint pts[]); 47 void addClipper(SkEdgeClipper*); 48 49 int buildPoly(const SkPath& path, const SkIRect* clip, int shiftUp, bool clipToTheRight); 50}; 51 52#endif 53