]> Cypherpunks repositories - gostls13.git/commitdiff
Add Rectangle.Eq and Point.In.
authorRoger Peppe <rogpeppe@gmail.com>
Fri, 28 May 2010 00:19:47 +0000 (17:19 -0700)
committerRob Pike <r@golang.org>
Fri, 28 May 2010 00:19:47 +0000 (17:19 -0700)
Fix Rectangle.Clip.
It could return a non-canonical rectangle if its arguments
did not overlap.
e.g. Rect(0, 0, 10, 10).Clip(Rect(0, 20, 10, 30)) -> Rect(0, 20, 10, 10)

R=rsc, r
CC=golang-dev, golang-dev
https://golang.org/cl/1290041

src/pkg/exp/draw/arith.go

index 2b9033b8c0f120140546d6f1e07c2c1d79c669e4..b72242aaa6d5af6d900fea686194ba58d72390e8 100644 (file)
@@ -44,6 +44,12 @@ func (p Point) Div(k int) Point { return Point{p.X / k, p.Y / k} }
 // Eq returns true if p and q are equal.
 func (p Point) Eq(q Point) bool { return p.X == q.X && p.Y == q.Y }
 
+// In returns true if p is within r.
+func (p Point) In(r Rectangle) bool {
+       return p.X >= r.Min.X && p.X < r.Max.X &&
+               p.Y >= r.Min.Y && p.Y < r.Max.Y
+}
+
 // Inset returns the rectangle r inset by n: Rect(r.Min.X+n, r.Min.Y+n, r.Max.X-n, r.Max.Y-n).
 func (r Rectangle) Inset(n int) Rectangle {
        return Rectangle{Point{r.Min.X + n, r.Min.Y + n}, Point{r.Max.X - n, r.Max.Y - n}}
@@ -119,6 +125,9 @@ func (r Rectangle) Clip(r1 Rectangle) Rectangle {
        if r1.Empty() {
                return r1
        }
+       if !r.Overlaps(r1) {
+               return Rectangle{r.Min, r.Min}
+       }
        if r.Min.X < r1.Min.X {
                r.Min.X = r1.Min.X
        }
@@ -139,3 +148,8 @@ func (r Rectangle) Dx() int { return r.Max.X - r.Min.X }
 
 // Dy returns the width of the rectangle r: r.Max.Y - r.Min.Y.
 func (r Rectangle) Dy() int { return r.Max.Y - r.Min.Y }
+
+// Eq returns true if r and r1 are equal.
+func (r Rectangle) Eq(r1 Rectangle) bool {
+       return r.Min.Eq(r1.Min) && r.Max.Eq(r1.Max)
+}