-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathinteractive-panel.go
More file actions
110 lines (80 loc) · 2.29 KB
/
interactive-panel.go
File metadata and controls
110 lines (80 loc) · 2.29 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
package main
import (
"sync"
"github.com/fresh4less/neopixel-display/neopixeldisplay"
)
type InteractivePanel struct {
frame neopixeldisplay.ColorFrame
hue uint32
width int
height int
x int
y int
mu *sync.Mutex
}
func NewInteractivePanel(width, height int) *InteractivePanel {
ip := new(InteractivePanel)
ip.frame = neopixeldisplay.MakeColorFrame(width,height,neopixeldisplay.MakeColor(0,0,0))
ip.hue = 0
ip.width = width
ip.height = height
ip.x = 0
ip.y = 0
ip.mu = &sync.Mutex{}
ip.frame.Set(ip.x,ip.y,neopixeldisplay.MakeColorHue(ip.hue), neopixeldisplay.Error)
return ip
}
func (ip *InteractivePanel) GetColorFrame() neopixeldisplay.ColorFrame {
ip.mu.Lock()
defer ip.mu.Unlock()
return ip.frame
}
func (ip *InteractivePanel) IncrementHue() {
ip.mu.Lock()
defer ip.mu.Unlock()
ip.hue = (ip.hue + 5) % 256
ip.frame.Set(ip.x,ip.y,neopixeldisplay.MakeColorHue(ip.hue), neopixeldisplay.Error)
}
func (ip *InteractivePanel) DecrementHue() {
ip.mu.Lock()
defer ip.mu.Unlock()
ip.hue = ip.hue - 5
if ip.hue < 0 {
ip.hue = 255
}
ip.frame.Set(ip.x,ip.y,neopixeldisplay.MakeColorHue(ip.hue), neopixeldisplay.Error)
}
func (ip *InteractivePanel) MoveRight() {
ip.mu.Lock()
defer ip.mu.Unlock()
ip.frame.Set(ip.x,ip.y,neopixeldisplay.MakeColor(0,0,0), neopixeldisplay.Error)
ip.x = (ip.x + 1) % ip.width
ip.frame.Set(ip.x,ip.y,neopixeldisplay.MakeColorHue(ip.hue), neopixeldisplay.Error)
}
func (ip *InteractivePanel) MoveLeft() {
ip.mu.Lock()
defer ip.mu.Unlock()
ip.frame.Set(ip.x,ip.y,neopixeldisplay.MakeColor(0,0,0), neopixeldisplay.Error)
ip.x = ip.x - 1
if ip.x < 0 {
ip.x = ip.width - 1
}
ip.frame.Set(ip.x,ip.y,neopixeldisplay.MakeColorHue(ip.hue), neopixeldisplay.Error)
}
func (ip *InteractivePanel) MoveDown() {
ip.mu.Lock()
defer ip.mu.Unlock()
ip.frame.Set(ip.x,ip.y,neopixeldisplay.MakeColor(0,0,0), neopixeldisplay.Error)
ip.y = (ip.y + 1) % ip.height
ip.frame.Set(ip.x,ip.y,neopixeldisplay.MakeColorHue(ip.hue), neopixeldisplay.Error)
}
func (ip *InteractivePanel) MoveUp() {
ip.mu.Lock()
defer ip.mu.Unlock()
ip.frame.Set(ip.x,ip.y,neopixeldisplay.MakeColor(0,0,0), neopixeldisplay.Error)
ip.y = ip.y - 1
if ip.y < 0 {
ip.y = ip.height - 1
}
ip.frame.Set(ip.x,ip.y,neopixeldisplay.MakeColorHue(ip.hue), neopixeldisplay.Error)
}