1ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com
2909994fbae0ffb532f42feac8859f8d86bbf64dereed@android.com/*
3ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Copyright 2009 The Android Open Source Project
4909994fbae0ffb532f42feac8859f8d86bbf64dereed@android.com *
5ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Use of this source code is governed by a BSD-style license that can be
6ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * found in the LICENSE file.
7909994fbae0ffb532f42feac8859f8d86bbf64dereed@android.com */
8909994fbae0ffb532f42feac8859f8d86bbf64dereed@android.com
9ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com
10909994fbae0ffb532f42feac8859f8d86bbf64dereed@android.com#ifndef SkEdgeClipper_DEFINED
11909994fbae0ffb532f42feac8859f8d86bbf64dereed@android.com#define SkEdgeClipper_DEFINED
12909994fbae0ffb532f42feac8859f8d86bbf64dereed@android.com
13909994fbae0ffb532f42feac8859f8d86bbf64dereed@android.com#include "SkPath.h"
14909994fbae0ffb532f42feac8859f8d86bbf64dereed@android.com
15909994fbae0ffb532f42feac8859f8d86bbf64dereed@android.com/** This is basically an iterator. It is initialized with an edge and a clip,
16909994fbae0ffb532f42feac8859f8d86bbf64dereed@android.com    and then next() is called until it returns kDone_Verb.
17909994fbae0ffb532f42feac8859f8d86bbf64dereed@android.com */
18909994fbae0ffb532f42feac8859f8d86bbf64dereed@android.comclass SkEdgeClipper {
19909994fbae0ffb532f42feac8859f8d86bbf64dereed@android.compublic:
20909994fbae0ffb532f42feac8859f8d86bbf64dereed@android.com    bool clipQuad(const SkPoint pts[3], const SkRect& clip);
21909994fbae0ffb532f42feac8859f8d86bbf64dereed@android.com    bool clipCubic(const SkPoint pts[4], const SkRect& clip);
22909994fbae0ffb532f42feac8859f8d86bbf64dereed@android.com
23909994fbae0ffb532f42feac8859f8d86bbf64dereed@android.com    SkPath::Verb next(SkPoint pts[]);
24fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.com
25909994fbae0ffb532f42feac8859f8d86bbf64dereed@android.comprivate:
26909994fbae0ffb532f42feac8859f8d86bbf64dereed@android.com    SkPoint*        fCurrPoint;
27909994fbae0ffb532f42feac8859f8d86bbf64dereed@android.com    SkPath::Verb*   fCurrVerb;
28fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.com
29909994fbae0ffb532f42feac8859f8d86bbf64dereed@android.com    enum {
30909994fbae0ffb532f42feac8859f8d86bbf64dereed@android.com        kMaxVerbs = 13,
31909994fbae0ffb532f42feac8859f8d86bbf64dereed@android.com        kMaxPoints = 32
32909994fbae0ffb532f42feac8859f8d86bbf64dereed@android.com    };
33909994fbae0ffb532f42feac8859f8d86bbf64dereed@android.com    SkPoint         fPoints[kMaxPoints];
34909994fbae0ffb532f42feac8859f8d86bbf64dereed@android.com    SkPath::Verb    fVerbs[kMaxVerbs];
35909994fbae0ffb532f42feac8859f8d86bbf64dereed@android.com
36909994fbae0ffb532f42feac8859f8d86bbf64dereed@android.com    void clipMonoQuad(const SkPoint srcPts[3], const SkRect& clip);
37909994fbae0ffb532f42feac8859f8d86bbf64dereed@android.com    void clipMonoCubic(const SkPoint srcPts[4], const SkRect& clip);
38909994fbae0ffb532f42feac8859f8d86bbf64dereed@android.com    void appendVLine(SkScalar x, SkScalar y0, SkScalar y1, bool reverse);
39909994fbae0ffb532f42feac8859f8d86bbf64dereed@android.com    void appendQuad(const SkPoint pts[3], bool reverse);
40909994fbae0ffb532f42feac8859f8d86bbf64dereed@android.com    void appendCubic(const SkPoint pts[4], bool reverse);
41909994fbae0ffb532f42feac8859f8d86bbf64dereed@android.com};
42909994fbae0ffb532f42feac8859f8d86bbf64dereed@android.com
43909994fbae0ffb532f42feac8859f8d86bbf64dereed@android.com#ifdef SK_DEBUG
44909994fbae0ffb532f42feac8859f8d86bbf64dereed@android.com    void sk_assert_monotonic_x(const SkPoint pts[], int count);
45909994fbae0ffb532f42feac8859f8d86bbf64dereed@android.com    void sk_assert_monotonic_y(const SkPoint pts[], int count);
46909994fbae0ffb532f42feac8859f8d86bbf64dereed@android.com#else
47909994fbae0ffb532f42feac8859f8d86bbf64dereed@android.com    #define sk_assert_monotonic_x(pts, count)
48909994fbae0ffb532f42feac8859f8d86bbf64dereed@android.com    #define sk_assert_monotonic_y(pts, count)
49909994fbae0ffb532f42feac8859f8d86bbf64dereed@android.com#endif
50909994fbae0ffb532f42feac8859f8d86bbf64dereed@android.com
51909994fbae0ffb532f42feac8859f8d86bbf64dereed@android.com#endif
52