107393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com/*
207393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com * Copyright 2012 Google Inc.
307393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com *
407393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com * Use of this source code is governed by a BSD-style license that can be
507393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com * found in the LICENSE file.
607393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com */
707393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com#ifndef SkPathOpsRect_DEFINED
807393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com#define SkPathOpsRect_DEFINED
907393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com
1007393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com#include "SkPathOpsPoint.h"
1107393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com
1207393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.comstruct SkDRect {
1307393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com    double fLeft, fTop, fRight, fBottom;
1407393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com
1507393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com    void add(const SkDPoint& pt) {
1607393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com        if (fLeft > pt.fX) {
1707393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com            fLeft = pt.fX;
1807393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com        }
1907393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com        if (fTop > pt.fY) {
2007393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com            fTop = pt.fY;
2107393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com        }
2207393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com        if (fRight < pt.fX) {
2307393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com            fRight = pt.fX;
2407393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com        }
2507393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com        if (fBottom < pt.fY) {
2607393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com            fBottom = pt.fY;
2707393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com        }
2807393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com    }
2907393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com
3007393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com    bool contains(const SkDPoint& pt) const {
3107393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com        return approximately_between(fLeft, pt.fX, fRight)
3207393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com                && approximately_between(fTop, pt.fY, fBottom);
3307393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com    }
3407393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com
3507393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com    bool intersects(SkDRect* r) const {
3607393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com        SkASSERT(fLeft <= fRight);
3707393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com        SkASSERT(fTop <= fBottom);
3807393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com        SkASSERT(r->fLeft <= r->fRight);
3907393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com        SkASSERT(r->fTop <= r->fBottom);
4007393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com        return r->fLeft <= fRight && fLeft <= r->fRight && r->fTop <= fBottom && fTop <= r->fBottom;
4107393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com    }
4207393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com
4307393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com    void set(const SkDPoint& pt) {
4407393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com        fLeft = fRight = pt.fX;
4507393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com        fTop = fBottom = pt.fY;
4607393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com    }
4707393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com
48a5e55925ea03e76885804bda77408a1d6f04c335caryclark@google.com    double width() const {
49a5e55925ea03e76885804bda77408a1d6f04c335caryclark@google.com        return fRight - fLeft;
50a5e55925ea03e76885804bda77408a1d6f04c335caryclark@google.com    }
51a5e55925ea03e76885804bda77408a1d6f04c335caryclark@google.com
52a5e55925ea03e76885804bda77408a1d6f04c335caryclark@google.com    double height() const {
53a5e55925ea03e76885804bda77408a1d6f04c335caryclark@google.com        return fBottom - fTop;
54a5e55925ea03e76885804bda77408a1d6f04c335caryclark@google.com    }
55a5e55925ea03e76885804bda77408a1d6f04c335caryclark@google.com
5607393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com    void setBounds(const SkDLine&);
5707393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com    void setBounds(const SkDCubic&);
5807393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com    void setBounds(const SkDQuad&);
5907393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com    void setRawBounds(const SkDCubic&);
6007393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com    void setRawBounds(const SkDQuad&);
6107393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com};
6207393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com
6307393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com#endif
64