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