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 SkPathOpBounds_DEFINED
8 #define SkPathOpBounds_DEFINED
9 
10 #include "SkPathOpsRect.h"
11 #include "SkRect.h"
12 
13 // SkPathOpsBounds, unlike SkRect, does not consider a line to be empty.
14 struct SkPathOpsBounds : public SkRect {
IntersectsSkPathOpsBounds15     static bool Intersects(const SkPathOpsBounds& a, const SkPathOpsBounds& b) {
16         return AlmostLessOrEqualUlps(a.fLeft, b.fRight)
17                 && AlmostLessOrEqualUlps(b.fLeft, a.fRight)
18                 && AlmostLessOrEqualUlps(a.fTop, b.fBottom)
19                 && AlmostLessOrEqualUlps(b.fTop, a.fBottom);
20     }
21 
22    // Note that add(), unlike SkRect::join() or SkRect::growToInclude()
23    // does not treat the bounds of horizontal and vertical lines as
24    // empty rectangles.
addSkPathOpsBounds25     void add(SkScalar left, SkScalar top, SkScalar right, SkScalar bottom) {
26         if (left < fLeft) fLeft = left;
27         if (top < fTop) fTop = top;
28         if (right > fRight) fRight = right;
29         if (bottom > fBottom) fBottom = bottom;
30     }
31 
addSkPathOpsBounds32     void add(const SkPathOpsBounds& toAdd) {
33         add(toAdd.fLeft, toAdd.fTop, toAdd.fRight, toAdd.fBottom);
34     }
35 
addSkPathOpsBounds36     void add(const SkDPoint& pt) {
37         if (pt.fX < fLeft) fLeft = SkDoubleToScalar(pt.fX);
38         if (pt.fY < fTop) fTop = SkDoubleToScalar(pt.fY);
39         if (pt.fX > fRight) fRight = SkDoubleToScalar(pt.fX);
40         if (pt.fY > fBottom) fBottom = SkDoubleToScalar(pt.fY);
41     }
42 
almostContainsSkPathOpsBounds43     bool almostContains(const SkPoint& pt) {
44         return AlmostLessOrEqualUlps(fLeft, pt.fX)
45                 && AlmostLessOrEqualUlps(pt.fX, fRight)
46                 && AlmostLessOrEqualUlps(fTop, pt.fY)
47                 && AlmostLessOrEqualUlps(pt.fY, fBottom);
48     }
49 
50     typedef SkRect INHERITED;
51 };
52 
53 #endif
54