1package renderer
2
3import (
4 "fmt"
5 "image"
6 "image/color"
7 "image/draw"
8 "image/png"
9 "log"
10 "math"
11 "os"
12 "strconv"
13 "time"
14
15 "github.com/pbnjay/pixfont"
16)
17
18var FrameBuffers []*image.Gray
19var PerformanceTrackerTimer int64
20var ScreenCount int
21var ScreenWidth int
22var ScreenHeight int
23
24func checkError(error error) {
25 if error != nil {
26 log.Fatal(error)
27 }
28}
29
30func InitFrameBuffers() {
31 for i := 0; i < ScreenCount; i++ {
32 upLeft := image.Point{0, 0}
33 lowRight := image.Point{ScreenWidth, ScreenHeight}
34 img := image.NewGray(image.Rectangle{upLeft, lowRight})
35 FrameBuffers = append(FrameBuffers, img)
36 }
37}
38
39func DrawPixel(x int, y int, v int) {
40 FrameBuffers[int(math.Floor(float64(x)/float64(ScreenWidth)))].Set(x-int(math.Floor(float64(x)/float64(ScreenWidth)))*ScreenWidth, y, color.Gray{uint8(255 * v)})
41}
42
43func DrawHorizontalLine(startX int, startY, length int, v int) {
44 for i := 0; i < length; i++ {
45 DrawPixel(startX+i, startY, v)
46 }
47}
48
49func DrawVerticalLine(startX int, startY, length int, v int) {
50 for i := 0; i < length; i++ {
51 DrawPixel(startX, startY+i, v)
52 }
53}
54
55func DrawWidgetWindow(x, y, w, h int) {
56 for i := 0; i < ScreenCount; i++ {
57 DrawVerticalLine(x, y+1, h-2, 1)
58 DrawVerticalLine(x+w, y+1, h-2, 1)
59 DrawHorizontalLine(x+1, y, w-2, 1)
60 DrawHorizontalLine(x+1, y+h, w-2, 1)
61 }
62}
63
64func AddTextAllDisplays(x int, y int, v int, label string) {
65 col := color.Gray{uint8(255 * v)}
66 for i := 0; i < ScreenCount; i++ {
67 pixfont.DrawString(FrameBuffers[i], x-i*ScreenWidth, y, label, col)
68 }
69}
70
71func BlankScreen(v int) {
72 for i := 0; i < ScreenCount; i++ {
73 draw.Draw(FrameBuffers[i], FrameBuffers[i].Bounds(), &image.Uniform{color.Gray{uint8(255 * v)}}, image.ZP, draw.Src)
74 }
75}
76
77func PerformanceTrackerStart() {
78 PerformanceTrackerTimer = time.Now().UTC().UnixNano()
79}
80
81func PerformanceTrackerEnd() int64 {
82 return time.Now().UTC().UnixNano() - PerformanceTrackerTimer
83}
84
85func DrawSunsetIcon(x, y int) {
86 DrawHorizontalLine(3+x, 0+y, 2, 1)
87 DrawHorizontalLine(2+x, 1+y, 4, 1)
88 DrawHorizontalLine(2+x, 2+y, 4, 1)
89 DrawHorizontalLine(3+x, 3+y, 2, 1)
90 DrawHorizontalLine(2+x, 5+y, 1, 1)
91 DrawHorizontalLine(5+x, 5+y, 1, 1)
92 DrawHorizontalLine(3+x, 6+y, 2, 1)
93}
94
95func DrawSunriseIcon(x, y int) {
96 DrawHorizontalLine(3+x, 0+y, 2, 1)
97 DrawHorizontalLine(2+x, 1+y, 1, 1)
98 DrawHorizontalLine(5+x, 1+y, 1, 1)
99 DrawHorizontalLine(3+x, 3+y, 2, 1)
100 DrawHorizontalLine(2+x, 4+y, 4, 1)
101 DrawHorizontalLine(2+x, 5+y, 4, 1)
102 DrawHorizontalLine(3+x, 6+y, 2, 1)
103}
104
105func DrawPihonLogo() {
106 DrawHorizontalLine(113, 4, 8, 1)
107 DrawHorizontalLine(135, 4, 8, 1)
108 DrawHorizontalLine(110, 5, 14, 1)
109 DrawHorizontalLine(132, 5, 14, 1)
110 DrawHorizontalLine(108, 6, 3, 1)
111 DrawHorizontalLine(113, 6, 1, 1)
112 DrawHorizontalLine(121, 6, 1, 1)
113 DrawHorizontalLine(123, 6, 3, 1)
114 DrawHorizontalLine(130, 6, 3, 1)
115 DrawHorizontalLine(134, 6, 1, 1)
116 DrawHorizontalLine(142, 6, 1, 1)
117 DrawHorizontalLine(145, 6, 3, 1)
118 DrawHorizontalLine(108, 7, 1, 1)
119 DrawHorizontalLine(125, 7, 2, 1)
120 DrawHorizontalLine(129, 7, 2, 1)
121 DrawHorizontalLine(147, 7, 1, 1)
122 DrawHorizontalLine(108, 8, 2, 1)
123 DrawHorizontalLine(125, 8, 2, 1)
124 DrawHorizontalLine(129, 8, 2, 1)
125 DrawHorizontalLine(146, 8, 2, 1)
126 DrawHorizontalLine(108, 9, 1, 1)
127 DrawHorizontalLine(126, 9, 4, 1)
128 DrawHorizontalLine(141, 9, 1, 1)
129 DrawHorizontalLine(147, 9, 1, 1)
130 DrawHorizontalLine(108, 10, 2, 1)
131 DrawHorizontalLine(116, 10, 1, 1)
132 DrawHorizontalLine(126, 10, 4, 1)
133 DrawHorizontalLine(139, 10, 1, 1)
134 DrawHorizontalLine(146, 10, 2, 1)
135 DrawHorizontalLine(108, 11, 2, 1)
136 DrawHorizontalLine(118, 11, 2, 1)
137 DrawHorizontalLine(127, 11, 2, 1)
138 DrawHorizontalLine(136, 11, 2, 1)
139 DrawHorizontalLine(146, 11, 2, 1)
140 DrawHorizontalLine(109, 12, 2, 1)
141 DrawHorizontalLine(120, 12, 1, 1)
142 DrawHorizontalLine(127, 12, 2, 1)
143 DrawHorizontalLine(135, 12, 1, 1)
144 DrawHorizontalLine(145, 12, 2, 1)
145 DrawHorizontalLine(109, 13, 2, 1)
146 DrawHorizontalLine(121, 13, 2, 1)
147 DrawHorizontalLine(126, 13, 4, 1)
148 DrawHorizontalLine(133, 13, 2, 1)
149 DrawHorizontalLine(145, 13, 2, 1)
150 DrawHorizontalLine(110, 14, 2, 1)
151 DrawHorizontalLine(122, 14, 2, 1)
152 DrawHorizontalLine(126, 14, 4, 1)
153 DrawHorizontalLine(132, 14, 2, 1)
154 DrawHorizontalLine(144, 14, 2, 1)
155 DrawHorizontalLine(110, 15, 2, 1)
156 DrawHorizontalLine(124, 15, 8, 1)
157 DrawHorizontalLine(144, 15, 2, 1)
158 DrawHorizontalLine(111, 16, 3, 1)
159 DrawHorizontalLine(124, 16, 8, 1)
160 DrawHorizontalLine(142, 16, 3, 1)
161 DrawHorizontalLine(111, 17, 3, 1)
162 DrawHorizontalLine(123, 17, 10, 1)
163 DrawHorizontalLine(142, 17, 2, 1)
164 DrawHorizontalLine(113, 18, 2, 1)
165 DrawHorizontalLine(122, 18, 12, 1)
166 DrawHorizontalLine(141, 18, 2, 1)
167 DrawHorizontalLine(114, 19, 28, 1)
168 DrawHorizontalLine(114, 20, 11, 1)
169 DrawHorizontalLine(131, 20, 11, 1)
170 DrawHorizontalLine(113, 21, 3, 1)
171 DrawHorizontalLine(121, 21, 2, 1)
172 DrawHorizontalLine(133, 21, 2, 1)
173 DrawHorizontalLine(140, 21, 3, 1)
174 DrawHorizontalLine(112, 22, 2, 1)
175 DrawHorizontalLine(120, 22, 2, 1)
176 DrawHorizontalLine(134, 22, 2, 1)
177 DrawHorizontalLine(142, 22, 2, 1)
178 DrawHorizontalLine(111, 23, 3, 1)
179 DrawHorizontalLine(120, 23, 2, 1)
180 DrawHorizontalLine(134, 23, 2, 1)
181 DrawHorizontalLine(143, 23, 2, 1)
182 DrawHorizontalLine(111, 24, 2, 1)
183 DrawHorizontalLine(118, 24, 5, 1)
184 DrawHorizontalLine(134, 24, 3, 1)
185 DrawHorizontalLine(143, 24, 2, 1)
186 DrawHorizontalLine(110, 25, 2, 1)
187 DrawHorizontalLine(117, 25, 7, 1)
188 DrawHorizontalLine(132, 25, 7, 1)
189 DrawHorizontalLine(144, 25, 2, 1)
190 DrawHorizontalLine(110, 26, 2, 1)
191 DrawHorizontalLine(116, 26, 24, 1)
192 DrawHorizontalLine(144, 26, 2, 1)
193 DrawHorizontalLine(110, 27, 2, 1)
194 DrawHorizontalLine(115, 27, 4, 1)
195 DrawHorizontalLine(124, 27, 8, 1)
196 DrawHorizontalLine(138, 27, 3, 1)
197 DrawHorizontalLine(144, 27, 2, 1)
198 DrawHorizontalLine(110, 28, 2, 1)
199 DrawHorizontalLine(113, 28, 4, 1)
200 DrawHorizontalLine(125, 28, 6, 1)
201 DrawHorizontalLine(139, 28, 4, 1)
202 DrawHorizontalLine(144, 28, 2, 1)
203 DrawHorizontalLine(109, 29, 7, 1)
204 DrawHorizontalLine(140, 29, 7, 1)
205 DrawHorizontalLine(108, 30, 8, 1)
206 DrawHorizontalLine(127, 30, 2, 1)
207 DrawHorizontalLine(141, 30, 3, 1)
208 DrawHorizontalLine(145, 30, 3, 1)
209 DrawHorizontalLine(107, 31, 3, 1)
210 DrawHorizontalLine(112, 31, 3, 1)
211 DrawHorizontalLine(127, 31, 2, 1)
212 DrawHorizontalLine(141, 31, 2, 1)
213 DrawHorizontalLine(146, 31, 3, 1)
214 DrawHorizontalLine(107, 32, 2, 1)
215 DrawHorizontalLine(113, 32, 2, 1)
216 DrawHorizontalLine(127, 32, 2, 1)
217 DrawHorizontalLine(141, 32, 2, 1)
218 DrawHorizontalLine(147, 32, 2, 1)
219 DrawHorizontalLine(106, 33, 2, 1)
220 DrawHorizontalLine(113, 33, 1, 1)
221 DrawHorizontalLine(122, 33, 12, 1)
222 DrawHorizontalLine(142, 33, 1, 1)
223 DrawHorizontalLine(148, 33, 2, 1)
224 DrawHorizontalLine(106, 34, 2, 1)
225 DrawHorizontalLine(113, 34, 1, 1)
226 DrawHorizontalLine(127, 34, 2, 1)
227 DrawHorizontalLine(142, 34, 1, 1)
228 DrawHorizontalLine(148, 34, 2, 1)
229 DrawHorizontalLine(106, 35, 2, 1)
230 DrawHorizontalLine(113, 35, 2, 1)
231 DrawHorizontalLine(126, 35, 4, 1)
232 DrawHorizontalLine(141, 35, 2, 1)
233 DrawHorizontalLine(148, 35, 2, 1)
234 DrawHorizontalLine(106, 36, 2, 1)
235 DrawHorizontalLine(112, 36, 3, 1)
236 DrawHorizontalLine(125, 36, 6, 1)
237 DrawHorizontalLine(141, 36, 3, 1)
238 DrawHorizontalLine(148, 36, 2, 1)
239 DrawHorizontalLine(106, 37, 2, 1)
240 DrawHorizontalLine(112, 37, 3, 1)
241 DrawHorizontalLine(124, 37, 2, 1)
242 DrawHorizontalLine(127, 37, 2, 1)
243 DrawHorizontalLine(130, 37, 2, 1)
244 DrawHorizontalLine(141, 37, 3, 1)
245 DrawHorizontalLine(148, 37, 2, 1)
246 DrawHorizontalLine(106, 38, 2, 1)
247 DrawHorizontalLine(112, 38, 4, 1)
248 DrawHorizontalLine(123, 38, 2, 1)
249 DrawHorizontalLine(127, 38, 2, 1)
250 DrawHorizontalLine(131, 38, 2, 1)
251 DrawHorizontalLine(140, 38, 4, 1)
252 DrawHorizontalLine(148, 38, 2, 1)
253 DrawHorizontalLine(106, 39, 2, 1)
254 DrawHorizontalLine(112, 39, 6, 1)
255 DrawHorizontalLine(122, 39, 2, 1)
256 DrawHorizontalLine(125, 39, 6, 1)
257 DrawHorizontalLine(132, 39, 2, 1)
258 DrawHorizontalLine(137, 39, 7, 1)
259 DrawHorizontalLine(147, 39, 3, 1)
260 DrawHorizontalLine(107, 40, 2, 1)
261 DrawHorizontalLine(111, 40, 10, 1)
262 DrawHorizontalLine(122, 40, 1, 1)
263 DrawHorizontalLine(127, 40, 2, 1)
264 DrawHorizontalLine(133, 40, 1, 1)
265 DrawHorizontalLine(135, 40, 10, 1)
266 DrawHorizontalLine(147, 40, 2, 1)
267 DrawHorizontalLine(107, 41, 14, 1)
268 DrawHorizontalLine(127, 41, 2, 1)
269 DrawHorizontalLine(135, 41, 5, 1)
270 DrawHorizontalLine(144, 41, 5, 1)
271 DrawHorizontalLine(108, 42, 4, 1)
272 DrawHorizontalLine(116, 42, 6, 1)
273 DrawHorizontalLine(127, 42, 2, 1)
274 DrawHorizontalLine(134, 42, 5, 1)
275 DrawHorizontalLine(144, 42, 4, 1)
276 DrawHorizontalLine(108, 43, 3, 1)
277 DrawHorizontalLine(117, 43, 5, 1)
278 DrawHorizontalLine(134, 43, 4, 1)
279 DrawHorizontalLine(145, 43, 3, 1)
280 DrawHorizontalLine(108, 44, 3, 1)
281 DrawHorizontalLine(118, 44, 4, 1)
282 DrawHorizontalLine(134, 44, 3, 1)
283 DrawHorizontalLine(145, 44, 2, 1)
284 DrawHorizontalLine(109, 45, 2, 1)
285 DrawHorizontalLine(119, 45, 3, 1)
286 DrawHorizontalLine(134, 45, 2, 1)
287 DrawHorizontalLine(145, 45, 2, 1)
288 DrawHorizontalLine(109, 46, 2, 1)
289 DrawHorizontalLine(120, 46, 2, 1)
290 DrawHorizontalLine(134, 46, 2, 1)
291 DrawHorizontalLine(145, 46, 2, 1)
292 DrawHorizontalLine(109, 47, 2, 1)
293 DrawHorizontalLine(120, 47, 2, 1)
294 DrawHorizontalLine(134, 47, 1, 1)
295 DrawHorizontalLine(145, 47, 2, 1)
296 DrawHorizontalLine(110, 48, 2, 1)
297 DrawHorizontalLine(120, 48, 3, 1)
298 DrawHorizontalLine(133, 48, 2, 1)
299 DrawHorizontalLine(144, 48, 2, 1)
300 DrawHorizontalLine(110, 49, 3, 1)
301 DrawHorizontalLine(121, 49, 3, 1)
302 DrawHorizontalLine(132, 49, 3, 1)
303 DrawHorizontalLine(143, 49, 3, 1)
304 DrawHorizontalLine(111, 50, 2, 1)
305 DrawHorizontalLine(121, 50, 14, 1)
306 DrawHorizontalLine(143, 50, 2, 1)
307 DrawHorizontalLine(112, 51, 3, 1)
308 DrawHorizontalLine(120, 51, 15, 1)
309 DrawHorizontalLine(141, 51, 3, 1)
310 DrawHorizontalLine(113, 52, 4, 1)
311 DrawHorizontalLine(119, 52, 7, 1)
312 DrawHorizontalLine(131, 52, 5, 1)
313 DrawHorizontalLine(139, 52, 4, 1)
314 DrawHorizontalLine(114, 53, 9, 1)
315 DrawHorizontalLine(134, 53, 7, 1)
316 DrawHorizontalLine(116, 54, 6, 1)
317 DrawHorizontalLine(134, 54, 6, 1)
318 DrawHorizontalLine(118, 55, 4, 1)
319 DrawHorizontalLine(134, 55, 4, 1)
320 DrawHorizontalLine(120, 56, 3, 1)
321 DrawHorizontalLine(133, 56, 3, 1)
322 DrawHorizontalLine(121, 57, 4, 1)
323 DrawHorizontalLine(131, 57, 3, 1)
324 DrawHorizontalLine(123, 58, 10, 1)
325 DrawHorizontalLine(125, 59, 6, 1)
326}
327
328func DrawLightningIcon() {
329 DrawHorizontalLine(253, 1, 1, 1)
330 DrawHorizontalLine(252, 2, 1, 1)
331 DrawHorizontalLine(251, 3, 2, 1)
332 DrawHorizontalLine(250, 4, 5, 1)
333 DrawHorizontalLine(249, 5, 5, 1)
334 DrawHorizontalLine(251, 6, 2, 1)
335 DrawHorizontalLine(251, 7, 1, 1)
336 DrawHorizontalLine(250, 8, 1, 1)
337}
338
339func DrawWifiEnabledIcon() {
340 DrawHorizontalLine(239, 1, 8, 1)
341 DrawHorizontalLine(238, 2, 1, 1)
342 DrawHorizontalLine(247, 2, 1, 1)
343 DrawHorizontalLine(240, 3, 6, 1)
344 DrawHorizontalLine(239, 4, 1, 1)
345 DrawHorizontalLine(246, 4, 1, 1)
346 DrawHorizontalLine(241, 5, 4, 1)
347 DrawHorizontalLine(240, 6, 1, 1)
348 DrawHorizontalLine(245, 6, 1, 1)
349 DrawHorizontalLine(242, 7, 2, 1)
350 DrawHorizontalLine(242, 8, 2, 1)
351}
352
353func DrawWifiDisabledIcon() {
354 DrawHorizontalLine(239, 1, 8, 1)
355 DrawHorizontalLine(238, 2, 1, 1)
356 DrawHorizontalLine(245, 2, 1, 1)
357 DrawHorizontalLine(247, 2, 1, 1)
358 DrawHorizontalLine(240, 3, 6, 1)
359 DrawHorizontalLine(239, 4, 1, 1)
360 DrawHorizontalLine(243, 4, 1, 1)
361 DrawHorizontalLine(246, 4, 1, 1)
362 DrawHorizontalLine(241, 5, 4, 1)
363 DrawHorizontalLine(240, 6, 2, 1)
364 DrawHorizontalLine(245, 6, 1, 1)
365 DrawHorizontalLine(240, 7, 1, 1)
366 DrawHorizontalLine(242, 7, 2, 1)
367 DrawHorizontalLine(239, 8, 1, 1)
368 DrawHorizontalLine(242, 8, 2, 1)
369}
370
371func UpdateFrameBuffersToFiles(frameBuffer *image.Gray, bufferIndex int, sequenceIndex int) {
372 f, _ := os.Create("./virtual-screens/" + fmt.Sprintf("%04d", sequenceIndex) + "." + strconv.Itoa(bufferIndex) + "img.png")
373 png.Encode(f, frameBuffer)
374}