47 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			47 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package artist
 | |
| 
 | |
| import "image/color"
 | |
| 
 | |
| // Beveled is a pattern that has a highlight section and a shadow section.
 | |
| type Beveled [2]Pattern
 | |
| 
 | |
| // AtWhen satisfies the Pattern interface.
 | |
| func (pattern Beveled) AtWhen (x, y, width, height int) (c color.RGBA) {
 | |
| 	return QuadBeveled {
 | |
| 		pattern[0],
 | |
| 		pattern[1],
 | |
| 		pattern[1],
 | |
| 		pattern[0],
 | |
| 	}.AtWhen(x, y, width, height)
 | |
| }
 | |
| 
 | |
| // QuadBeveled is like Beveled, but with four sides. A pattern can be specified
 | |
| // for each one.
 | |
| type QuadBeveled [4]Pattern
 | |
| 
 | |
| // AtWhen satisfies the Pattern interface.
 | |
| func (pattern QuadBeveled) AtWhen (x, y, width, height int) (c color.RGBA) {
 | |
| 	bottom := y > height / 2
 | |
| 	right  := x > width / 2
 | |
| 	top    := !bottom
 | |
| 	left   := !right
 | |
| 	side := 0
 | |
| 	
 | |
| 	switch {
 | |
| 	case top && left:
 | |
| 		if x < y { side = 3 } else { side = 0 }
 | |
| 		
 | |
| 	case top && right:
 | |
| 		if width - x > y { side = 0 } else { side = 1 }
 | |
| 		
 | |
| 	case bottom && left:
 | |
| 		if x < height - y { side = 3 } else { side = 2 }
 | |
| 		
 | |
| 	case bottom && right:
 | |
| 		if width - x > height - y { side = 2 } else { side = 1 }
 | |
| 		
 | |
| 	}
 | |
| 
 | |
| 	return pattern[side].AtWhen(x, y, width, height)
 | |
| }
 |