Home | History | Annotate | Download | only in core
      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 
     15 struct SkEdge;
     16 class SkEdgeClipper;
     17 class SkPath;
     18 
     19 class SkEdgeBuilder {
     20 public:
     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);
     26 
     27     SkEdge** edgeList() { return fEdgeList; }
     28 
     29 private:
     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 
     43 public:
     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);
     50 };
     51 
     52 #endif
     53