|  | /* | 
|  | * 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 SkEdgeBuilder_DEFINED | 
|  | #define SkEdgeBuilder_DEFINED | 
|  |  | 
|  | #include "SkChunkAlloc.h" | 
|  | #include "SkRect.h" | 
|  | #include "SkTDArray.h" | 
|  |  | 
|  | struct SkEdge; | 
|  | class SkEdgeClipper; | 
|  | class SkPath; | 
|  |  | 
|  | class SkEdgeBuilder { | 
|  | public: | 
|  | SkEdgeBuilder(); | 
|  |  | 
|  | // returns the number of built edges. The array of those edge pointers | 
|  | // is returned from edgeList(). | 
|  | int build(const SkPath& path, const SkIRect* clip, int shiftUp, bool clipToTheRight); | 
|  |  | 
|  | SkEdge** edgeList() { return fEdgeList; } | 
|  |  | 
|  | private: | 
|  | enum Combine { | 
|  | kNo_Combine, | 
|  | kPartial_Combine, | 
|  | kTotal_Combine | 
|  | }; | 
|  |  | 
|  | static Combine CombineVertical(const SkEdge* edge, SkEdge* last); | 
|  | Combine checkVertical(const SkEdge* edge, SkEdge** edgePtr); | 
|  |  | 
|  | SkChunkAlloc        fAlloc; | 
|  | SkTDArray<SkEdge*>  fList; | 
|  |  | 
|  | /* | 
|  | *  If we're in general mode, we allcoate the pointers in fList, and this | 
|  | *  will point at fList.begin(). If we're in polygon mode, fList will be | 
|  | *  empty, as we will have preallocated room for the pointers in fAlloc's | 
|  | *  block, and fEdgeList will point into that. | 
|  | */ | 
|  | SkEdge**    fEdgeList; | 
|  |  | 
|  | int         fShiftUp; | 
|  |  | 
|  | public: | 
|  | void addLine(const SkPoint pts[]); | 
|  | void addQuad(const SkPoint pts[]); | 
|  | void addCubic(const SkPoint pts[]); | 
|  | void addClipper(SkEdgeClipper*); | 
|  |  | 
|  | int buildPoly(const SkPath& path, const SkIRect* clip, int shiftUp, bool clipToTheRight); | 
|  | }; | 
|  |  | 
|  | #endif |