1 /* 2 * Copyright 2012 Google Inc. 3 * 4 * Use of this source code is governed by a BSD-style license that can be 5 * found in the LICENSE file. 6 */ 7 #ifndef SkPathOpsRect_DEFINED 8 #define SkPathOpsRect_DEFINED 9 10 #include "SkPathOpsPoint.h" 11 12 class SkTCurve; 13 14 struct SkDRect { 15 double fLeft, fTop, fRight, fBottom; 16 addSkDRect17 void add(const SkDPoint& pt) { 18 fLeft = SkTMin(fLeft, pt.fX); 19 fTop = SkTMin(fTop, pt.fY); 20 fRight = SkTMax(fRight, pt.fX); 21 fBottom = SkTMax(fBottom, pt.fY); 22 } 23 containsSkDRect24 bool contains(const SkDPoint& pt) const { 25 return approximately_between(fLeft, pt.fX, fRight) 26 && approximately_between(fTop, pt.fY, fBottom); 27 } 28 29 void debugInit(); 30 intersectsSkDRect31 bool intersects(const SkDRect& r) const { 32 SkASSERT(fLeft <= fRight); 33 SkASSERT(fTop <= fBottom); 34 SkASSERT(r.fLeft <= r.fRight); 35 SkASSERT(r.fTop <= r.fBottom); 36 return r.fLeft <= fRight && fLeft <= r.fRight && r.fTop <= fBottom && fTop <= r.fBottom; 37 } 38 setSkDRect39 void set(const SkDPoint& pt) { 40 fLeft = fRight = pt.fX; 41 fTop = fBottom = pt.fY; 42 } 43 widthSkDRect44 double width() const { 45 return fRight - fLeft; 46 } 47 heightSkDRect48 double height() const { 49 return fBottom - fTop; 50 } 51 setBoundsSkDRect52 void setBounds(const SkDConic& curve) { 53 setBounds(curve, curve, 0, 1); 54 } 55 56 void setBounds(const SkDConic& curve, const SkDConic& sub, double tStart, double tEnd); 57 setBoundsSkDRect58 void setBounds(const SkDCubic& curve) { 59 setBounds(curve, curve, 0, 1); 60 } 61 62 void setBounds(const SkDCubic& curve, const SkDCubic& sub, double tStart, double tEnd); 63 setBoundsSkDRect64 void setBounds(const SkDQuad& curve) { 65 setBounds(curve, curve, 0, 1); 66 } 67 68 void setBounds(const SkDQuad& curve, const SkDQuad& sub, double tStart, double tEnd); 69 70 void setBounds(const SkTCurve& curve); 71 validSkDRect72 bool valid() const { 73 return fLeft <= fRight && fTop <= fBottom; 74 } 75 }; 76 77 #endif 78