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  }