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 struct SkDRect {
13     double fLeft, fTop, fRight, fBottom;
14 
addSkDRect15     void add(const SkDPoint& pt) {
16         fLeft = SkTMin(fLeft, pt.fX);
17         fTop = SkTMin(fTop, pt.fY);
18         fRight = SkTMax(fRight, pt.fX);
19         fBottom = SkTMax(fBottom, pt.fY);
20     }
21 
containsSkDRect22     bool contains(const SkDPoint& pt) const {
23         return approximately_between(fLeft, pt.fX, fRight)
24                 && approximately_between(fTop, pt.fY, fBottom);
25     }
26 
27     void debugInit();
28 
intersectsSkDRect29     bool intersects(const SkDRect& r) const {
30         SkASSERT(fLeft <= fRight);
31         SkASSERT(fTop <= fBottom);
32         SkASSERT(r.fLeft <= r.fRight);
33         SkASSERT(r.fTop <= r.fBottom);
34         return r.fLeft <= fRight && fLeft <= r.fRight && r.fTop <= fBottom && fTop <= r.fBottom;
35     }
36 
setSkDRect37     void set(const SkDPoint& pt) {
38         fLeft = fRight = pt.fX;
39         fTop = fBottom = pt.fY;
40     }
41 
widthSkDRect42     double width() const {
43         return fRight - fLeft;
44     }
45 
heightSkDRect46     double height() const {
47         return fBottom - fTop;
48     }
49 
setBoundsSkDRect50     void setBounds(const SkDConic& curve) {
51         setBounds(curve, curve, 0, 1);
52     }
53 
54     void setBounds(const SkDConic& curve, const SkDConic& sub, double tStart, double tEnd);
55 
setBoundsSkDRect56     void setBounds(const SkDCubic& curve) {
57         setBounds(curve, curve, 0, 1);
58     }
59 
60     void setBounds(const SkDCubic& curve, const SkDCubic& sub, double tStart, double tEnd);
61 
setBoundsSkDRect62     void setBounds(const SkDQuad& curve) {
63         setBounds(curve, curve, 0, 1);
64     }
65 
66     void setBounds(const SkDQuad& curve, const SkDQuad& sub, double tStart, double tEnd);
67 };
68 
69 #endif
70