-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgui.c
executable file
·55 lines (52 loc) · 3.28 KB
/
gui.c
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
#include "gui.h"
u64 global_font[128] = {
0x2200880022008800, 0x2288228822882288, 0x11AA44AA11AA44AA, 0x55AA55AA55AA55AA,
0x55BB55EE55BB55EE, 0x77DD77DD77DD77DD, 0xFF77FFDDFF77FFDD, 0xFFFFFFFFFFFFFFFF,
0x00002060FF602000, 0x10387C1010101010, 0x00000406FF060400, 0x10101010107C3810,
0x0000482412244800, 0x0000122448241200, 0x0000001818000000, 0x00003C3C3C3C0000,
0x00003C24243C0000, 0x0010301010380000, 0x00182408103C0000, 0x0030083008300000,
0x0028380808000000, 0x0000241428240000, 0x00023E5414141400, 0x0101020224140800,
0x00000000000000FF, 0x007E301818307E00, 0x0030490630490600, 0x00081C08001C0000,
0x0020180418207E00, 0x0004182018047E00, 0x6090906000000000, 0x0000006666000000,
0x0000000000000000, 0x183C3C1818001800, 0x0024242400000000, 0x00247E24247E2400,
0x103C403804781000, 0x0062640810264600, 0x003048304A443A00, 0x0010101000000000,
0x0002040404040200, 0x0040202020204000, 0x000024187E182400, 0x000010107C101000,
0x0000000000101020, 0x000000007E000000, 0x0000000000001818, 0x0004080810102000,
0x0018242424241800, 0x0008180808081C00, 0x0038440438407C00, 0x0038441804443800,
0x00040C14247E0400, 0x003E203C02221C00, 0x0038407844443800, 0x003E020404080800,
0x0018241824241800, 0x003844443C043800, 0x0018180000181800, 0x0018180000180810,
0x0008102010080000, 0x0000003C003C0000, 0x0010080408100000, 0x003C24040C180018,
0x003C425A5A4C2000, 0x003844447C444400, 0x0078447844447800, 0x0038444040443800,
0x0078444444447800, 0x003C20203C203C00, 0x003C203820202000, 0x0038404C44443800,
0x0024243C24242400, 0x007C101010107C00, 0x003C080808083000, 0x00444C5870584C00,
0x0020202020203C00, 0x00446C5444444400, 0x004262524A464200, 0x0038444444443800,
0x0078444478404000, 0x003C42424A443A00, 0x003824382C242400, 0x003C403804443800,
0x007C101010101000, 0x0042424242423C00, 0x0042426624241800, 0x00424242425A2400,
0x0042242418244200, 0x0044281010101000, 0x007E020C30407E00, 0x0018101010101800,
0x0020101008080400, 0x0018080808081800, 0x0010284400000000, 0x000000000000007E,
0x0010080000000000, 0x0038043C44443C00, 0x0040407844447800, 0x0000384440443800,
0x0004043C44443C00, 0x00003C427E403C00, 0x000C10103C101000, 0x003C44443C043800,
0x0040407844444400, 0x0010003010103800, 0x0008000808283800, 0x0000242830282400,
0x0010101010100C00, 0x0000785454545400, 0x0000784444444400, 0x0000384444443800,
0x0000784444784000, 0x00003C44443C0400, 0x00004C5060404000, 0x00003C403C023C00,
0x0010381010100C00, 0x0000444444443800, 0x0000424224241800, 0x00004242425A2400,
0x0000442810284400, 0x000044443C043800, 0x00007C0810207C00, 0x0002040408040402,
0x0010101010101000, 0x0040202010202040, 0x0060920C00000000, 0xFF818181818181FF
};
void GrText(gr *buf, int x, int y, u32 w, u32 h, u32 len, color clr, char *str) {
u32 scale_x = (w >> 2) / len, scale_y = h >> 2; //also multiply by 2 to do rounding after
scale_x = (scale_x >> 1) + (scale_x & 1), scale_y = (scale_y >> 1) + (scale_y & 1); //round
for (u32 i=0; i<len; i++) { //per character
u8 str_ch = str[i];
u64 character = str_ch > 127 ? global_font[127] : global_font[str_ch];
for (u32 j=0; j < 8; j++)
for (u32 k=0; k < 8; k++)
if ((character >> (63-j*8-k)) & 1) {
int px = x + (k + (i << 3)) * scale_x, py = y + j * scale_y;
for (u32 sy=0; sy < scale_y; sy++)
for (u32 sx=0; sx < scale_x; sx++) {
GrPixel(buf, px + sx, py + sy, clr);
}
}
}
}