diff -r 000000000000 -r 6474c204b198 gfx/skia/trunk/src/core/SkQuadClipper.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gfx/skia/trunk/src/core/SkQuadClipper.h Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,70 @@ + +/* + * Copyright 2009 The Android Open Source Project + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + + +#ifndef SkQuadClipper_DEFINED +#define SkQuadClipper_DEFINED + +#include "SkPath.h" + +/** This class is initialized with a clip rectangle, and then can be fed quads, + which must already be monotonic in Y. + + In the future, it might return a series of segments, allowing it to clip + also in X, to ensure that all segments fit in a finite coordinate system. + */ +class SkQuadClipper { +public: + SkQuadClipper(); + + void setClip(const SkIRect& clip); + + bool clipQuad(const SkPoint src[3], SkPoint dst[3]); + +private: + SkRect fClip; +}; + +/** Iterator that returns the clipped segements of a quad clipped to a rect. + The segments will be either lines or quads (based on SkPath::Verb), and + will all be monotonic in Y + */ +class SkQuadClipper2 { +public: + bool clipQuad(const SkPoint pts[3], const SkRect& clip); + bool clipCubic(const SkPoint pts[4], const SkRect& clip); + + SkPath::Verb next(SkPoint pts[]); + +private: + SkPoint* fCurrPoint; + SkPath::Verb* fCurrVerb; + + enum { + kMaxVerbs = 13, + kMaxPoints = 32 + }; + SkPoint fPoints[kMaxPoints]; + SkPath::Verb fVerbs[kMaxVerbs]; + + void clipMonoQuad(const SkPoint srcPts[3], const SkRect& clip); + void clipMonoCubic(const SkPoint srcPts[4], const SkRect& clip); + void appendVLine(SkScalar x, SkScalar y0, SkScalar y1, bool reverse); + void appendQuad(const SkPoint pts[3], bool reverse); + void appendCubic(const SkPoint pts[4], bool reverse); +}; + +#ifdef SK_DEBUG + void sk_assert_monotonic_x(const SkPoint pts[], int count); + void sk_assert_monotonic_y(const SkPoint pts[], int count); +#else + #define sk_assert_monotonic_x(pts, count) + #define sk_assert_monotonic_y(pts, count) +#endif + +#endif