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