From: Roger Peppe Date: Fri, 28 May 2010 00:19:47 +0000 (-0700) Subject: Add Rectangle.Eq and Point.In. X-Git-Tag: weekly.2010-06-09~72 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=1fda1323d49b25ab8c757b70066bb0b6376698e1;p=gostls13.git Add Rectangle.Eq and Point.In. 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 --- diff --git a/src/pkg/exp/draw/arith.go b/src/pkg/exp/draw/arith.go index 2b9033b8c0..b72242aaa6 100644 --- a/src/pkg/exp/draw/arith.go +++ b/src/pkg/exp/draw/arith.go @@ -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) +}