1 #ifndef DRAW_16SEG_H
2 #define DRAW_16SEG_H
3 #include<stdint.h>
4 #include"draw_rgbLED.h"
cairo_code_draw_rgb5x7_get_width()5 inline int cairo_code_draw_rgb5x7_get_width()
6 {
7     return cairo_code_draw_rgbLED_get_width()*5*1.3;
8 }
cairo_code_draw_rgb5x7_get_height()9 inline int cairo_code_draw_rgb5x7_get_height()
10 {
11     return cairo_code_draw_rgbLED_get_height()*7*1.3;
12 }
13 
14 //just subtract 32 from the char and you get the index here
15 //each byte is a column and msb to lsb is bottom to top row, msb not used
16 static const uint8_t Font5x7[][5]  =
17 {
18     {0x00, 0x00, 0x00, 0x00, 0x00},// (space)
19     {0x00, 0x00, 0x5F, 0x00, 0x00},// !
20     {0x00, 0x07, 0x00, 0x07, 0x00},// "
21     {0x14, 0x7F, 0x14, 0x7F, 0x14},// #
22     {0x24, 0x2A, 0x7F, 0x2A, 0x12},// $
23     {0x23, 0x13, 0x08, 0x64, 0x62},// %
24     {0x36, 0x49, 0x55, 0x22, 0x50},// &
25     {0x00, 0x05, 0x03, 0x00, 0x00},// '
26     {0x00, 0x1C, 0x22, 0x41, 0x00},// (
27     {0x00, 0x41, 0x22, 0x1C, 0x00},// )
28     {0x08, 0x2A, 0x1C, 0x2A, 0x08},// *
29     {0x08, 0x08, 0x3E, 0x08, 0x08},// +
30     {0x00, 0x50, 0x30, 0x00, 0x00},// ,
31     {0x08, 0x08, 0x08, 0x08, 0x08},// -
32     {0x00, 0x60, 0x60, 0x00, 0x00},// .
33     {0x20, 0x10, 0x08, 0x04, 0x02},// /
34     {0x3E, 0x51, 0x49, 0x45, 0x3E},// 0
35     {0x00, 0x42, 0x7F, 0x40, 0x00},// 1
36     {0x42, 0x61, 0x51, 0x49, 0x46},// 2
37     {0x21, 0x41, 0x45, 0x4B, 0x31},// 3
38     {0x18, 0x14, 0x12, 0x7F, 0x10},// 4
39     {0x27, 0x45, 0x45, 0x45, 0x39},// 5
40     {0x3C, 0x4A, 0x49, 0x49, 0x30},// 6
41     {0x01, 0x71, 0x09, 0x05, 0x03},// 7
42     {0x36, 0x49, 0x49, 0x49, 0x36},// 8
43     {0x06, 0x49, 0x49, 0x29, 0x1E},// 9
44     {0x00, 0x36, 0x36, 0x00, 0x00},// :
45     {0x00, 0x56, 0x36, 0x00, 0x00},// ;
46     {0x00, 0x08, 0x14, 0x22, 0x41},// <
47     {0x14, 0x14, 0x14, 0x14, 0x14},// =
48     {0x41, 0x22, 0x14, 0x08, 0x00},// >
49     {0x02, 0x01, 0x51, 0x09, 0x06},// ?
50     {0x32, 0x49, 0x79, 0x41, 0x3E},// @
51     {0x7E, 0x11, 0x11, 0x11, 0x7E},// A
52     {0x7F, 0x49, 0x49, 0x49, 0x36},// B
53     {0x3E, 0x41, 0x41, 0x41, 0x22},// C
54     {0x7F, 0x41, 0x41, 0x22, 0x1C},// D
55     {0x7F, 0x49, 0x49, 0x49, 0x41},// E
56     {0x7F, 0x09, 0x09, 0x01, 0x01},// F
57     {0x3E, 0x41, 0x41, 0x51, 0x32},// G
58     {0x7F, 0x08, 0x08, 0x08, 0x7F},// H
59     {0x00, 0x41, 0x7F, 0x41, 0x00},// I
60     {0x20, 0x40, 0x41, 0x3F, 0x01},// J
61     {0x7F, 0x08, 0x14, 0x22, 0x41},// K
62     {0x7F, 0x40, 0x40, 0x40, 0x40},// L
63     {0x7F, 0x02, 0x04, 0x02, 0x7F},// M
64     {0x7F, 0x04, 0x08, 0x10, 0x7F},// N
65     {0x3E, 0x41, 0x41, 0x41, 0x3E},// O
66     {0x7F, 0x09, 0x09, 0x09, 0x06},// P
67     {0x3E, 0x41, 0x51, 0x21, 0x5E},// Q
68     {0x7F, 0x09, 0x19, 0x29, 0x46},// R
69     {0x46, 0x49, 0x49, 0x49, 0x31},// S
70     {0x01, 0x01, 0x7F, 0x01, 0x01},// T
71     {0x3F, 0x40, 0x40, 0x40, 0x3F},// U
72     {0x1F, 0x20, 0x40, 0x20, 0x1F},// V
73     {0x7F, 0x20, 0x18, 0x20, 0x7F},// W
74     {0x63, 0x14, 0x08, 0x14, 0x63},// X
75     {0x03, 0x04, 0x78, 0x04, 0x03},// Y
76     {0x61, 0x51, 0x49, 0x45, 0x43},// Z
77     {0x00, 0x00, 0x7F, 0x41, 0x41},// [
78     {0x02, 0x04, 0x08, 0x10, 0x20},// "\"
79     {0x41, 0x41, 0x7F, 0x00, 0x00},// ]
80     {0x04, 0x02, 0x01, 0x02, 0x04},// ^
81     {0x40, 0x40, 0x40, 0x40, 0x40},// _
82     {0x00, 0x01, 0x02, 0x04, 0x00},// `
83     {0x20, 0x54, 0x54, 0x54, 0x78},// a
84     {0x7F, 0x48, 0x44, 0x44, 0x38},// b
85     {0x38, 0x44, 0x44, 0x44, 0x20},// c
86     {0x38, 0x44, 0x44, 0x48, 0x7F},// d
87     {0x38, 0x54, 0x54, 0x54, 0x18},// e
88     {0x08, 0x7E, 0x09, 0x01, 0x02},// f
89     {0x08, 0x14, 0x54, 0x54, 0x3C},// g
90     {0x7F, 0x08, 0x04, 0x04, 0x78},// h
91     {0x00, 0x44, 0x7D, 0x40, 0x00},// i
92     {0x20, 0x40, 0x44, 0x3D, 0x00},// j
93     {0x00, 0x7F, 0x10, 0x28, 0x44},// k
94     {0x00, 0x41, 0x7F, 0x40, 0x00},// l
95     {0x7C, 0x04, 0x18, 0x04, 0x78},// m
96     {0x7C, 0x08, 0x04, 0x04, 0x78},// n
97     {0x38, 0x44, 0x44, 0x44, 0x38},// o
98     {0x7C, 0x14, 0x14, 0x14, 0x08},// p
99     {0x08, 0x14, 0x14, 0x18, 0x7C},// q
100     {0x7C, 0x08, 0x04, 0x04, 0x08},// r
101     {0x48, 0x54, 0x54, 0x54, 0x20},// s
102     {0x04, 0x3F, 0x44, 0x40, 0x20},// t
103     {0x3C, 0x40, 0x40, 0x20, 0x7C},// u
104     {0x1C, 0x20, 0x40, 0x20, 0x1C},// v
105     {0x3C, 0x40, 0x30, 0x40, 0x3C},// w
106     {0x44, 0x28, 0x10, 0x28, 0x44},// x
107     {0x0C, 0x50, 0x50, 0x50, 0x3C},// y
108     {0x44, 0x64, 0x54, 0x4C, 0x44},// z
109     {0x00, 0x08, 0x36, 0x41, 0x00},// {
110     {0x00, 0x00, 0x7F, 0x00, 0x00},// |
111     {0x00, 0x41, 0x36, 0x08, 0x00},// }
112     {0x08, 0x08, 0x2A, 0x1C, 0x08},// ->//should be tilde
113     {0x08, 0x1C, 0x2A, 0x08, 0x08} // <-
114 };
115 
cairo_code_draw_rgb5x7_render(cairo_t * cr,char num,float r,float g,float b)116 inline void cairo_code_draw_rgb5x7_render(cairo_t *cr, char num, float r, float g, float b)
117 {
118 
119     float offset = 1.3*cairo_code_draw_rgbLED_get_width();//1.3 so there is a space between
120     for (int i=0; i<7; i++)
121     {
122         for (int j=0; j<5; j++)
123         {
124             cairo_save( cr );
125             //move
126             cairo_translate(cr,j*offset,i*offset);//origin is left upper corner
127             //draw led
128             cairo_code_draw_rgbLED_render(cr, Font5x7[num-32][j]&(0x01<<i), r,g,b);
129             cairo_restore(cr);
130         }
131     }
132     //todo bounding box?
133 
134 }
135 
cairo_code_draw_red5x7_render(cairo_t * cr,char num)136 inline void cairo_code_draw_red5x7_render(cairo_t *cr, char num)
137 {
138     cairo_code_draw_rgb5x7_render(cr, num, 1, 0, 0);
139 }
cairo_code_draw_blue5x7_render(cairo_t * cr,char num)140 inline void cairo_code_draw_blue5x7_render(cairo_t *cr, char num)
141 {
142     cairo_code_draw_rgb5x7_render(cr, num, .1, .2, 1);
143 }
cairo_code_draw_green5x7_render(cairo_t * cr,char num)144 inline void cairo_code_draw_green5x7_render(cairo_t *cr, char num)
145 {
146     cairo_code_draw_rgb5x7_render(cr, num, 1, 0.88235, 0);
147 }
cairo_code_draw_orange5x7_render(cairo_t * cr,char num)148 inline void cairo_code_draw_orange5x7_render(cairo_t *cr, char num)
149 {
150     cairo_code_draw_rgb5x7_render(cr, num, 1, .33333, 0);
151 }
cairo_code_draw_yellow5x7_render(cairo_t * cr,char num)152 inline void cairo_code_draw_yellow5x7_render(cairo_t *cr, char num)
153 {
154     cairo_code_draw_rgb5x7_render(cr, num, 0.92157, 0.92157, 0);
155 }
cairo_code_draw_purple5x7_render(cairo_t * cr,char num)156 inline void cairo_code_draw_purple5x7_render(cairo_t *cr, char num)
157 {
158     cairo_code_draw_rgb5x7_render(cr, num, 0.78431, 0, 1);
159 }
cairo_code_draw_white5x7_render(cairo_t * cr,char num)160 inline void cairo_code_draw_white5x7_render(cairo_t *cr, char num)
161 {
162     cairo_code_draw_rgb5x7_render(cr, num, 1, 1, 1);
163 }
164 #endif
165