17839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger/* 27839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger * Copyright 2012 Google Inc. 37839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger * 47839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger * Use of this source code is governed by a BSD-style license that can be 57839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger * found in the LICENSE file. 67839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger */ 77839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger#ifndef SkPathOpsRect_DEFINED 87839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger#define SkPathOpsRect_DEFINED 97839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger 107839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger#include "SkPathOpsPoint.h" 117839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger 127839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenbergerstruct SkDRect { 137839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger double fLeft, fTop, fRight, fBottom; 147839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger 157839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger void add(const SkDPoint& pt) { 167839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger if (fLeft > pt.fX) { 177839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger fLeft = pt.fX; 187839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger } 197839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger if (fTop > pt.fY) { 207839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger fTop = pt.fY; 217839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger } 227839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger if (fRight < pt.fX) { 237839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger fRight = pt.fX; 247839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger } 257839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger if (fBottom < pt.fY) { 267839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger fBottom = pt.fY; 277839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger } 287839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger } 297839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger 307839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger bool contains(const SkDPoint& pt) const { 317839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger return approximately_between(fLeft, pt.fX, fRight) 327839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger && approximately_between(fTop, pt.fY, fBottom); 337839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger } 347839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger 357839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger bool intersects(SkDRect* r) const { 367839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger SkASSERT(fLeft <= fRight); 377839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger SkASSERT(fTop <= fBottom); 387839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger SkASSERT(r->fLeft <= r->fRight); 397839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger SkASSERT(r->fTop <= r->fBottom); 407839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger return r->fLeft <= fRight && fLeft <= r->fRight && r->fTop <= fBottom && fTop <= r->fBottom; 417839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger } 427839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger 437839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger void set(const SkDPoint& pt) { 447839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger fLeft = fRight = pt.fX; 457839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger fTop = fBottom = pt.fY; 467839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger } 477839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger 487839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger double width() const { 497839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger return fRight - fLeft; 507839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger } 517839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger 527839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger double height() const { 537839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger return fBottom - fTop; 547839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger } 557839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger 567839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger void setBounds(const SkDLine&); 577839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger void setBounds(const SkDCubic&); 587839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger void setBounds(const SkDQuad&); 597839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger void setRawBounds(const SkDCubic&); 607839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger void setRawBounds(const SkDQuad&); 617839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger}; 627839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger 637839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger#endif 64