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);
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);
50};
51
52#endif
53