180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru/* 380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * Copyright 2009 The Android Open Source Project 480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * 580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * Use of this source code is governed by a BSD-style license that can be 680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * found in the LICENSE file. 780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru */ 880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 1080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#ifndef SkEdgeClipper_DEFINED 1180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#define SkEdgeClipper_DEFINED 1280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 1380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "SkPath.h" 1480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 1580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru/** This is basically an iterator. It is initialized with an edge and a clip, 1680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru and then next() is called until it returns kDone_Verb. 1780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru */ 1880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruclass SkEdgeClipper { 1980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querupublic: 2080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru bool clipQuad(const SkPoint pts[3], const SkRect& clip); 2180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru bool clipCubic(const SkPoint pts[4], const SkRect& clip); 2280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 2380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkPath::Verb next(SkPoint pts[]); 2480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 2580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruprivate: 2680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkPoint* fCurrPoint; 2780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkPath::Verb* fCurrVerb; 2880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 2980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru enum { 3080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru kMaxVerbs = 13, 3180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru kMaxPoints = 32 3280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru }; 3380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkPoint fPoints[kMaxPoints]; 3480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkPath::Verb fVerbs[kMaxVerbs]; 3580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 3680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru void clipMonoQuad(const SkPoint srcPts[3], const SkRect& clip); 3780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru void clipMonoCubic(const SkPoint srcPts[4], const SkRect& clip); 3880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru void appendVLine(SkScalar x, SkScalar y0, SkScalar y1, bool reverse); 3980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru void appendQuad(const SkPoint pts[3], bool reverse); 4080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru void appendCubic(const SkPoint pts[4], bool reverse); 4180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru}; 4280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 4380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#ifdef SK_DEBUG 4480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru void sk_assert_monotonic_x(const SkPoint pts[], int count); 4580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru void sk_assert_monotonic_y(const SkPoint pts[], int count); 4680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#else 4780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru #define sk_assert_monotonic_x(pts, count) 4880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru #define sk_assert_monotonic_y(pts, count) 4980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#endif 5080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 5180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#endif 52