Upstream version 5.34.98.0
[platform/framework/web/crosswalk.git] / src / third_party / skia / src / core / SkEdgeBuilder.h
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