11cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger
240528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger/*
31cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * Copyright 2009 The Android Open Source Project
440528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger *
51cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * Use of this source code is governed by a BSD-style license that can be
61cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * found in the LICENSE file.
740528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger */
840528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger
91cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger
1040528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger#ifndef SkCubicClipper_DEFINED
1140528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger#define SkCubicClipper_DEFINED
1240528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger
1340528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger#include "SkPoint.h"
1440528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger#include "SkRect.h"
1540528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger
1640528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger/** This class is initialized with a clip rectangle, and then can be fed cubics,
1740528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger    which must already be monotonic in Y.
1840528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger
1940528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger    In the future, it might return a series of segments, allowing it to clip
2040528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger    also in X, to ensure that all segments fit in a finite coordinate system.
2140528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger */
2240528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenbergerclass SkCubicClipper {
2340528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenbergerpublic:
2440528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger    SkCubicClipper();
2540528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger
2640528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger    void setClip(const SkIRect& clip);
2740528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger
2840528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger    bool clipCubic(const SkPoint src[4], SkPoint dst[4]);
2940528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger
3040528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenbergerprivate:
3140528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger    SkRect      fClip;
3240528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger};
3340528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger
3440528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger#endif  // SkCubicClipper_DEFINED
35