-
Notifications
You must be signed in to change notification settings - Fork 1
/
writer.go
76 lines (67 loc) · 1.68 KB
/
writer.go
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
// Copyright 2015 Jacques Supcik, HEIA-FR
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package ledmatrix
import (
"github.com/heia-fr/telecom-tower/ledmatrix/font"
)
type Writer struct {
matrix *Matrix
pos int
}
func NewWriter(m *Matrix) *Writer {
w := new(Writer)
w.matrix = m
w.pos = 0
return w
}
func (w *Writer) SetPos(pos int) {
w.pos = pos
}
func (w *Writer) Pos() int {
return w.pos
}
func (w *Writer) WriteText(text string, font font.Font, color, bgColor Color) {
for _, c := range text {
for _, i := range font.Bitmap(c) {
for k := 0; k < font.Height(); k++ {
if i&(1<<uint(k)) != 0 {
w.matrix.SetPixel(w.pos, k, color)
} else {
w.matrix.SetPixel(w.pos, k, bgColor)
}
}
w.pos++
}
}
}
func (w *Writer) WriteBitmap(bitmap [][]Color) {
width := 0
for y := 0; y < len(bitmap); y++ {
if len(bitmap[y]) > width {
width = len(bitmap[y])
}
for x := 0; x < len(bitmap[y]); x++ {
w.matrix.SetPixel(w.pos+x, y, bitmap[y][x])
}
}
w.pos += width
}
func (w *Writer) Spacer(width int, color Color) {
for y := 0; y < w.matrix.rows; y++ {
for x := 0; x < width; x++ {
w.matrix.SetPixel(w.pos+x, y, color)
}
}
w.pos += width
}