9fans.net/go@v0.0.5/draw/border.go (about) 1 package draw 2 3 // BorderOp is like Border but specifies an explicit Porter-Duff operator. 4 func (dst *Image) BorderOp(r Rectangle, n int, color *Image, sp Point, op Op) { 5 if n < 0 { 6 r = r.Inset(n) 7 sp = sp.Add(Pt(n, n)) 8 n = -n 9 } 10 dst.Display.mu.Lock() 11 defer dst.Display.mu.Unlock() 12 draw(dst, Rect(r.Min.X, r.Min.Y, r.Max.X, r.Min.Y+n), 13 color, sp, nil, sp, op) 14 pt := Pt(sp.X, sp.Y+r.Dy()-n) 15 draw(dst, Rect(r.Min.X, r.Max.Y-n, r.Max.X, r.Max.Y), 16 color, pt, nil, pt, op) 17 pt = Pt(sp.X, sp.Y+n) 18 draw(dst, Rect(r.Min.X, r.Min.Y+n, r.Min.X+n, r.Max.Y-n), 19 color, pt, nil, pt, op) 20 pt = Pt(sp.X+r.Dx()-n, sp.Y+n) 21 draw(dst, Rect(r.Max.X-n, r.Min.Y+n, r.Max.X, r.Max.Y-n), 22 color, pt, nil, pt, op) 23 } 24 25 // Border draws an outline of rectangle r in the specified color. 26 // The outline has width w; if w is positive, the border goes inside the 27 // rectangle; if negative, outside. 28 // The source is aligned so that sp corresponds to r.Min. 29 func (dst *Image) Border(r Rectangle, w int, color *Image, sp Point) { 30 dst.BorderOp(r, w, color, sp, SoverD) 31 }