adds display package

This commit is contained in:
2023-12-21 10:06:48 -05:00
parent 31895881a9
commit 5343f26ad9
28 changed files with 2412 additions and 0 deletions
+139
View File
@@ -0,0 +1,139 @@
package fonts
var (
Face5x4 = Font{
"1": {
{0, 1, 0, 0},
{0, 1, 0, 0},
{0, 1, 0, 0},
{0, 1, 0, 0},
{0, 1, 0, 0},
},
"2": {
{1, 1, 0, 0},
{0, 0, 1, 0},
{0, 1, 0, 0},
{1, 0, 0, 0},
{1, 1, 1, 0},
},
"3": {
{1, 1, 0, 0},
{0, 0, 1, 0},
{0, 1, 0, 0},
{0, 0, 1, 0},
{1, 1, 0, 0},
},
"4": {
{0, 0, 1, 0},
{0, 1, 1, 0},
{1, 0, 1, 0},
{1, 1, 1, 0},
{0, 0, 1, 0},
},
"5": {
{1, 1, 1, 0},
{1, 0, 0, 0},
{1, 1, 0, 0},
{0, 0, 1, 0},
{1, 1, 0, 0},
},
"6": {
{0, 1, 1, 0},
{1, 0, 0, 0},
{1, 1, 1, 0},
{1, 0, 1, 0},
{1, 1, 1, 0},
},
"7": {
{1, 1, 1, 0},
{0, 0, 1, 0},
{0, 1, 0, 0},
{0, 1, 0, 0},
{0, 1, 0, 0},
},
"8": {
{1, 1, 1, 0},
{1, 0, 1, 0},
{1, 1, 1, 0},
{1, 0, 1, 0},
{1, 1, 1, 0},
},
"9": {
{1, 1, 1, 0},
{1, 0, 1, 0},
{1, 1, 1, 0},
{0, 0, 1, 0},
{0, 1, 1, 0},
},
"0": {
{0, 1, 0, 0},
{1, 0, 1, 0},
{1, 0, 1, 0},
{1, 0, 1, 0},
{0, 1, 0, 0},
},
"satoshi": {
{0, 1, 0, 0},
{1, 1, 1, 0},
{1, 1, 1, 0},
{1, 1, 1, 0},
{0, 1, 0, 0},
},
"dollar": {
{0, 1, 1, 1},
{1, 0, 1, 0},
{0, 1, 1, 0},
{0, 0, 1, 1},
{1, 1, 1, 0},
},
"height": {
{1, 1, 1, 0},
{0, 1, 0, 0},
{0, 1, 0, 0},
{0, 1, 0, 0},
{1, 1, 1, 0},
},
"low": {
{1, 0, 0, 0},
{1, 0, 0, 0},
{1, 0, 0, 0},
{1, 0, 0, 0},
{1, 1, 1, 0},
},
"medium": {
{1, 0, 1, 0},
{1, 1, 1, 0},
{1, 0, 1, 0},
{1, 0, 1, 0},
{1, 0, 1, 0},
},
"high": {
{1, 0, 1, 0},
{1, 0, 1, 0},
{1, 1, 1, 0},
{1, 0, 1, 0},
{1, 0, 1, 0},
},
"K": {
{1, 0, 1, 0},
{1, 0, 1, 0},
{1, 1, 0, 0},
{1, 0, 1, 0},
{1, 0, 1, 0},
},
".": {
{0, 0, 0, 0},
{0, 0, 0, 0},
{0, 0, 0, 0},
{0, 0, 0, 0},
{0, 1, 0, 0},
},
":": {
{0, 0, 0, 0},
{0, 1, 0, 0},
{0, 0, 0, 0},
{0, 1, 0, 0},
{0, 0, 0, 0},
},
}
)
+178
View File
@@ -0,0 +1,178 @@
package fonts
var (
Face7x5 = Font{
"1": {
{0, 1, 0, 0, 0},
{0, 1, 0, 0, 0},
{0, 1, 0, 0, 0},
{0, 1, 0, 0, 0},
{0, 1, 0, 0, 0},
{0, 1, 0, 0, 0},
{0, 1, 0, 0, 0},
},
"2": {
{0, 1, 1, 0, 0},
{1, 0, 0, 1, 0},
{0, 0, 0, 1, 0},
{0, 0, 1, 0, 0},
{0, 1, 0, 0, 0},
{1, 0, 0, 0, 0},
{1, 1, 1, 1, 0},
},
"3": {
{0, 1, 1, 0, 0},
{1, 0, 0, 1, 0},
{0, 0, 0, 1, 0},
{0, 0, 1, 0, 0},
{0, 0, 0, 1, 0},
{1, 0, 0, 1, 0},
{0, 1, 1, 0, 0},
},
"4": {
{0, 0, 0, 1, 0},
{0, 0, 1, 1, 0},
{0, 1, 0, 1, 0},
{1, 0, 0, 1, 0},
{1, 0, 0, 1, 0},
{1, 1, 1, 1, 0},
{0, 0, 0, 1, 0},
},
"5": {
{1, 1, 1, 1, 0},
{1, 0, 0, 0, 0},
{1, 0, 0, 0, 0},
{1, 1, 1, 0, 0},
{0, 0, 0, 1, 0},
{1, 0, 0, 1, 0},
{0, 1, 1, 0, 0},
},
"6": {
{0, 1, 1, 1, 0},
{1, 0, 0, 0, 0},
{1, 0, 0, 0, 0},
{1, 1, 1, 1, 0},
{1, 0, 0, 1, 0},
{1, 0, 0, 1, 0},
{0, 1, 1, 0, 0},
},
"7": {
{1, 1, 1, 1, 0},
{0, 0, 0, 1, 0},
{0, 0, 1, 1, 0},
{0, 0, 1, 0, 0},
{0, 1, 0, 0, 0},
{0, 1, 0, 0, 0},
{0, 1, 0, 0, 0},
},
"8": {
{0, 1, 1, 0, 0},
{1, 0, 0, 1, 0},
{1, 0, 0, 1, 0},
{0, 1, 1, 0, 0},
{1, 0, 0, 1, 0},
{1, 0, 0, 1, 0},
{0, 1, 1, 0, 0},
},
"9": {
{1, 1, 1, 1, 0},
{1, 0, 0, 1, 0},
{1, 0, 0, 1, 0},
{1, 1, 1, 1, 0},
{0, 0, 0, 1, 0},
{0, 0, 0, 1, 0},
{0, 1, 1, 1, 0},
},
"0": {
{0, 1, 1, 0, 0},
{1, 0, 0, 1, 0},
{1, 0, 1, 1, 0},
{1, 1, 0, 1, 0},
{1, 0, 0, 1, 0},
{1, 0, 0, 1, 0},
{0, 1, 1, 0, 0},
},
"satoshi": {
{0, 0, 1, 0, 0},
{1, 1, 1, 1, 1},
{0, 0, 0, 0, 0},
{1, 1, 1, 1, 1},
{0, 0, 0, 0, 0},
{1, 1, 1, 1, 1},
{0, 0, 1, 0, 0},
},
"dollar": {
{0, 0, 1, 0, 0},
{1, 1, 1, 1, 1},
{1, 0, 0, 0, 0},
{1, 1, 1, 1, 1},
{0, 0, 0, 0, 1},
{1, 1, 1, 1, 1},
{0, 0, 1, 0, 0},
},
"height": {
{1, 1, 1, 0, 0},
{0, 1, 0, 0, 0},
{0, 1, 0, 0, 0},
{0, 1, 0, 0, 0},
{0, 1, 0, 0, 0},
{0, 1, 0, 0, 0},
{1, 1, 1, 0, 0},
},
"low": {
{1, 0, 0, 0, 0},
{1, 0, 0, 0, 0},
{1, 0, 0, 0, 0},
{1, 0, 0, 0, 0},
{1, 0, 0, 0, 0},
{1, 0, 0, 0, 0},
{1, 1, 1, 1, 0},
},
"medium": {
{1, 0, 0, 1, 0},
{1, 1, 1, 1, 0},
{1, 0, 0, 1, 0},
{1, 0, 0, 1, 0},
{1, 0, 0, 1, 0},
{1, 0, 0, 1, 0},
{1, 0, 0, 1, 0},
},
"high": {
{1, 0, 0, 1, 0},
{1, 0, 0, 1, 0},
{1, 0, 0, 1, 0},
{1, 1, 1, 1, 0},
{1, 0, 0, 1, 0},
{1, 0, 0, 1, 0},
{1, 0, 0, 1, 0},
{1, 0, 0, 1, 0},
},
"K": {
{1, 0, 0, 1, 0},
{1, 0, 0, 1, 0},
{1, 0, 1, 0, 0},
{1, 1, 0, 0, 0},
{1, 0, 1, 0, 0},
{1, 0, 0, 1, 0},
{1, 0, 0, 1, 0},
},
".": {
{0, 0, 0, 0, 0},
{0, 0, 0, 0, 0},
{0, 0, 0, 0, 0},
{0, 0, 0, 0, 0},
{0, 0, 0, 0, 0},
{0, 0, 0, 0, 0},
{0, 1, 0, 0, 0},
},
":": {
{0, 0, 0, 0, 0},
{0, 1, 1, 0, 0},
{0, 1, 1, 0, 0},
{0, 0, 0, 0, 0},
{0, 1, 1, 0, 0},
{0, 1, 1, 0, 0},
{0, 0, 0, 0, 0},
},
}
)
+216
View File
@@ -0,0 +1,216 @@
package fonts
var (
Face9x6 = Font{
"1": {
{0, 0, 1, 0, 0, 0},
{0, 0, 1, 0, 0, 0},
{0, 0, 1, 0, 0, 0},
{0, 0, 1, 0, 0, 0},
{0, 0, 1, 0, 0, 0},
{0, 0, 1, 0, 0, 0},
{0, 0, 1, 0, 0, 0},
{0, 0, 1, 0, 0, 0},
{0, 0, 1, 0, 0, 0},
},
"2": {
{0, 1, 1, 1, 0, 0},
{1, 1, 0, 1, 1, 0},
{0, 0, 0, 0, 1, 0},
{0, 0, 0, 1, 1, 0},
{0, 0, 1, 1, 0, 0},
{0, 1, 1, 0, 0, 0},
{1, 1, 0, 0, 0, 0},
{1, 0, 0, 0, 0, 0},
{1, 1, 1, 1, 1, 0},
},
"3": {
{0, 1, 1, 0, 0, 0},
{1, 0, 0, 1, 0, 0},
{0, 0, 0, 0, 1, 0},
{0, 0, 0, 1, 0, 0},
{0, 0, 1, 0, 0, 0},
{0, 0, 0, 1, 0, 0},
{0, 0, 0, 0, 1, 0},
{1, 0, 0, 1, 0, 0},
{0, 1, 1, 0, 0, 0},
},
"4": {
{0, 0, 0, 0, 1, 0},
{0, 0, 0, 0, 1, 0},
{0, 0, 0, 1, 1, 0},
{0, 0, 1, 0, 1, 0},
{0, 1, 0, 0, 1, 0},
{1, 0, 0, 0, 1, 0},
{1, 0, 0, 0, 1, 0},
{1, 1, 1, 1, 1, 0},
{0, 0, 0, 0, 1, 0},
},
"5": {
{1, 1, 1, 1, 1, 0},
{1, 0, 0, 0, 0, 0},
{1, 0, 0, 0, 0, 0},
{1, 1, 1, 0, 0, 0},
{0, 0, 0, 1, 0, 0},
{0, 0, 0, 0, 1, 0},
{0, 0, 0, 0, 1, 0},
{1, 0, 0, 1, 0, 0},
{0, 1, 1, 0, 0, 0},
},
"6": {
{0, 0, 1, 1, 0, 0},
{0, 1, 0, 0, 1, 0},
{1, 0, 0, 0, 0, 0},
{1, 0, 0, 0, 0, 0},
{1, 0, 1, 1, 0, 0},
{1, 1, 0, 0, 1, 0},
{1, 0, 0, 0, 1, 0},
{1, 0, 0, 0, 1, 0},
{0, 1, 1, 1, 0, 0},
},
"7": {
{1, 1, 1, 1, 1, 0},
{0, 0, 0, 0, 1, 0},
{0, 0, 0, 0, 1, 0},
{0, 0, 0, 1, 0, 0},
{0, 0, 1, 0, 0, 0},
{0, 1, 0, 0, 0, 0},
{0, 1, 0, 0, 0, 0},
{0, 1, 0, 0, 0, 0},
{0, 1, 0, 0, 0, 0},
{0, 1, 0, 0, 0, 0},
},
"8": {
{0, 1, 1, 1, 0, 0},
{1, 0, 0, 0, 1, 0},
{1, 0, 0, 0, 1, 0},
{1, 0, 0, 0, 1, 0},
{0, 1, 1, 1, 0, 0},
{1, 0, 0, 0, 1, 0},
{1, 0, 0, 0, 1, 0},
{1, 0, 0, 0, 1, 0},
{0, 1, 1, 1, 0, 0},
},
"9": {
{0, 1, 1, 1, 0, 0},
{1, 0, 0, 0, 1, 0},
{1, 0, 0, 0, 1, 0},
{1, 0, 0, 0, 1, 0},
{0, 1, 1, 1, 1, 0},
{0, 0, 0, 0, 1, 0},
{0, 0, 0, 0, 1, 0},
{0, 1, 0, 0, 1, 0},
{0, 0, 1, 1, 0, 0},
},
"0": {
{0, 1, 1, 1, 0, 0},
{1, 0, 0, 0, 1, 0},
{1, 0, 0, 1, 1, 0},
{1, 0, 1, 0, 1, 0},
{1, 1, 0, 0, 1, 0},
{1, 0, 0, 0, 1, 0},
{1, 0, 0, 0, 1, 0},
{0, 1, 0, 0, 1, 0},
{0, 0, 1, 1, 0, 0},
},
"satoshi": {
{0, 0, 0, 0, 0, 0},
{0, 0, 1, 0, 0, 0},
{1, 1, 1, 1, 1, 0},
{0, 0, 0, 0, 0, 0},
{1, 1, 1, 1, 1, 0},
{0, 0, 0, 0, 0, 0},
{1, 1, 1, 1, 1, 0},
{0, 0, 1, 0, 0, 0},
{0, 0, 0, 0, 0, 0},
},
"dollar": {
{0, 1, 1, 1, 0, 0},
{1, 0, 1, 0, 1, 0},
{1, 0, 1, 0, 0, 0},
{0, 1, 1, 0, 0, 0},
{0, 0, 1, 0, 0, 0},
{0, 0, 1, 1, 0, 0},
{1, 0, 1, 0, 1, 0},
{1, 0, 1, 0, 1, 0},
{0, 1, 1, 1, 0, 0},
},
"height": {
{1, 1, 1, 1, 1, 0},
{0, 1, 1, 1, 0, 0},
{1, 0, 1, 0, 1, 0},
{0, 0, 1, 0, 0, 0},
{0, 0, 1, 0, 0, 0},
{0, 0, 1, 0, 0, 0},
{1, 0, 1, 0, 1, 0},
{0, 1, 1, 1, 0, 0},
{1, 1, 1, 1, 1, 0},
},
"low": {
{1, 0, 0, 0, 0, 0},
{1, 0, 0, 0, 0, 0},
{1, 0, 0, 0, 0, 0},
{1, 0, 0, 0, 0, 0},
{1, 0, 0, 0, 0, 0},
{1, 0, 0, 0, 0, 0},
{1, 0, 0, 0, 0, 0},
{1, 0, 0, 0, 0, 0},
{1, 1, 1, 1, 1, 0},
},
"medium": {
{1, 0, 0, 0, 1, 0},
{1, 1, 0, 1, 1, 0},
{1, 0, 1, 0, 1, 0},
{1, 0, 0, 0, 1, 0},
{1, 0, 0, 0, 1, 0},
{1, 0, 0, 0, 1, 0},
{1, 0, 0, 0, 1, 0},
{1, 0, 0, 0, 1, 0},
{1, 0, 0, 0, 1, 0},
},
"high": {
{1, 0, 0, 0, 1, 0},
{1, 0, 0, 0, 1, 0},
{1, 0, 0, 0, 1, 0},
{1, 0, 0, 0, 1, 0},
{1, 1, 1, 1, 1, 0},
{1, 0, 0, 0, 1, 0},
{1, 0, 0, 0, 1, 0},
{1, 0, 0, 0, 1, 0},
{1, 0, 0, 0, 1, 0},
},
"K": {
{1, 0, 0, 0, 1, 0},
{1, 0, 0, 0, 0, 0},
{1, 0, 0, 1, 0, 0},
{1, 0, 1, 0, 0, 0},
{1, 1, 1, 0, 0, 0},
{1, 1, 0, 0, 0, 0},
{1, 0, 1, 0, 0, 0},
{1, 0, 0, 1, 0, 0},
{1, 0, 0, 0, 1, 0},
},
".": {
{0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0},
{0, 1, 1, 0, 0, 0},
{0, 1, 1, 0, 0, 0},
},
":": {
{0, 0, 0, 0, 0, 0},
{0, 1, 1, 0, 0, 0},
{0, 1, 1, 0, 0, 0},
{0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0},
{0, 1, 1, 0, 0, 0},
{0, 1, 1, 0, 0, 0},
{0, 0, 0, 0, 0, 0},
},
}
)
+61
View File
@@ -0,0 +1,61 @@
package fonts
import (
"errors"
"fmt"
"image/color"
)
type Font map[string][][]byte
var (
ErrCharNotFound = errors.New("unrecognized character")
)
func (f Font) ToColor(char string, c color.RGBA) ([][]color.RGBA, error) {
bitmap, found := f[char]
if !found {
return nil, fmt.Errorf("%w: %s", ErrCharNotFound, char)
}
colorMappedChar := make([][]color.RGBA, 0, len(bitmap))
for _, row := range bitmap {
crow := make([]color.RGBA, 0, len(row))
for _, pixel := range row {
crowColor := c
crowColor.R = crowColor.R * pixel
crowColor.G = crowColor.G * pixel
crowColor.B = crowColor.B * pixel
crowColor.A = 0xff * pixel
crow = append(crow, crowColor)
}
colorMappedChar = append(colorMappedChar, crow)
}
return colorMappedChar, nil
}
var (
White = color.RGBA{
R: 255, G: 255, B: 255, A: 255,
}
Black = color.RGBA{
R: 0, G: 0, B: 0, A: 255,
}
DarkGrey = color.RGBA{
R: 70, G: 70, B: 70, A: 255,
}
Green = color.RGBA{
R: 34, G: 177, B: 76, A: 255,
}
Orange = color.RGBA{
R: 255, G: 126, B: 0, A: 255,
}
Red = color.RGBA{
R: 153, G: 0, B: 48, A: 255,
}
Blue = color.RGBA{
R: 0, G: 183, B: 239, A: 255,
}
)
+49
View File
@@ -0,0 +1,49 @@
package fonts
import (
"fmt"
"image/color"
"testing"
"github.com/stretchr/testify/assert"
)
func TestFont_ToColor(t *testing.T) {
tests := []struct {
name string
font Font
char string
color color.RGBA
wantMappedChar [][]color.RGBA
wantError error
}{
{
name: "it should error if char mapping doesn't exist",
font: Font{},
char: "not found",
wantError: fmt.Errorf("%w: %s", ErrCharNotFound, "not found"),
},
{
name: "it should produce a color mapped character",
font: Face5x4,
char: "1",
color: White,
wantMappedChar: [][]color.RGBA{
{{R: 255, G: 255, B: 255, A: 0}, {R: 255, G: 255, B: 255, A: 255}, {R: 255, G: 255, B: 255, A: 0}, {R: 255, G: 255, B: 255, A: 0}},
{{R: 255, G: 255, B: 255, A: 0}, {R: 255, G: 255, B: 255, A: 255}, {R: 255, G: 255, B: 255, A: 0}, {R: 255, G: 255, B: 255, A: 0}},
{{R: 255, G: 255, B: 255, A: 0}, {R: 255, G: 255, B: 255, A: 255}, {R: 255, G: 255, B: 255, A: 0}, {R: 255, G: 255, B: 255, A: 0}},
{{R: 255, G: 255, B: 255, A: 0}, {R: 255, G: 255, B: 255, A: 255}, {R: 255, G: 255, B: 255, A: 0}, {R: 255, G: 255, B: 255, A: 0}},
{{R: 255, G: 255, B: 255, A: 0}, {R: 255, G: 255, B: 255, A: 255}, {R: 255, G: 255, B: 255, A: 0}, {R: 255, G: 255, B: 255, A: 0}},
},
},
}
for _, test := range tests {
t.Run(test.name, func(t *testing.T) {
mappedChar, err := test.font.ToColor(test.char, test.color)
assert.Equal(t, test.wantMappedChar, mappedChar)
assert.Equal(t, test.wantError, err)
})
}
}