3 #define STB_IMAGE_IMPLEMENTATION
4 #include "submodules/stb/stb_image.h"
6 void vg_build_font_face_run( vg_font_face
*face
,
7 char first
, char last
, i16 x
, i16 y
)
9 u32 uf
= *((u8
*)&first
),
13 for( u32 i
=0; i
<=count
; i
++ )
16 face
->map
[index
].x
= x
+(i
*face
->cw
);
17 face
->map
[index
].y
= y
;
21 void vg_build_write_font_face( FILE *fp
, vg_font_face
*face
)
23 fprintf( fp
, "vg_font_face %s = {\n", face
->name
);
24 fprintf( fp
, " .name=\"%s\",\n", face
->name
);
25 fprintf( fp
, " .cw=%hd,.ch=%hd,\n", face
->cw
,face
->ch
);
26 fprintf( fp
, " .sx=%hd,.sy=%hd,\n", face
->sx
,face
->sy
);
27 fprintf( fp
, " .baseline=%hd,\n", face
->baseline
);
28 fprintf( fp
, " .map={\n" );
32 for( u32 i
=0; i
<256; i
++ )
34 if( face
->map
[i
].x
|| face
->map
[i
].y
)
36 chars
+= fprintf( fp
, "[%u]={%hd,%hd},",
37 i
, face
->map
[i
].x
, face
->map
[i
].y
);
47 fprintf( fp
, "\n}};\n\n" );
50 void vg_build_font_sheet( FILE *fp
, char *name
, const char *source
)
53 unsigned char *data
= stbi_load( source
, &x
, &y
, &n
, 4 );
57 vg_error( "Couldn't open source file\n" );
61 fprintf( fp
, "vg_font_sheet %s = {\n", name
);
62 fprintf( fp
, " .w=%d, .h=%d,\n", x
,y
);
63 fprintf( fp
, " .bitmap={\n" );
66 u32 pixel
= 0, chars
= 0;
70 for( int b
= 31; b
>= 0; b
-- )
72 buff
|= data
[pixel
*4]>128?0x1<<b
:0;
75 if( pixel
>= pixel_max
)
82 chars
+= fprintf( fp
, "%#x,", buff
);
90 fprintf( fp
, "\n}};\n" );
94 void vg_build_default_font(void)
96 FILE *fp
= fopen( "vg/vg_default_font.gc", "w" );
97 vg_build_font_sheet( fp
, "vg_default_font_sheet",
98 "vg/src/fonts/vg_font_thin_3.png" );
101 .name
= "vgf_default_small",
106 vg_build_font_face_run( &small
, '!', '/', 8, 0 );
107 vg_build_font_face_run( &small
, '[', '`', 128,0 );
108 vg_build_font_face_run( &small
, '{', '~', 176,0 );
109 vg_build_font_face_run( &small
, ':', '@', 208,0 );
110 vg_build_font_face_run( &small
, 'A', 'Z', 0, 14 );
111 vg_build_font_face_run( &small
, 'a', 'z', 0, 28 );
112 vg_build_font_face_run( &small
, '0', '9', 208,14 );
113 vg_build_font_face_run( &small
, 0x7f, 0xa4, 0,42 );
114 vg_build_font_face_run( &small
, 0xb0, 0xb3, 208,28 );
115 vg_build_write_font_face( fp
, &small
);
119 .name
= "vgf_default_large",
124 vg_build_font_face_run( &large
, '!', '/', 12, 56 );
125 vg_build_font_face_run( &large
, '[', '`', 192,56 );
126 vg_build_font_face_run( &large
, '{', '~', 264,56 );
127 vg_build_font_face_run( &large
, ':', '@', 312,56 );
128 vg_build_font_face_run( &large
, 'A', 'Z', 0, 77 );
129 vg_build_font_face_run( &large
, 'a', 'z', 0, 98 );
130 vg_build_font_face_run( &large
, '0', '9', 312,77 );
131 vg_build_font_face_run( &large
, 0x7f, 0xa4, 0,119 );
132 vg_build_font_face_run( &large
, 0xb0, 0xb3, 312,98 );
133 vg_build_write_font_face( fp
, &large
);
137 .name
= "vgf_default_title",
142 vg_build_font_face_run( &title
, '!', '/', 24, 140 );
143 vg_build_font_face_run( &title
, '[', '_', 384,140 );
144 vg_build_font_face_run( &title
, '`', '`', 0, 182 );
145 vg_build_font_face_run( &title
, '{', '~', 24, 182 );
146 vg_build_font_face_run( &title
, ':', '@', 120,182 );
147 vg_build_font_face_run( &title
, 'A', 'U', 0, 224 );
148 vg_build_font_face_run( &title
, 'V', 'Z', 0, 308 );
149 vg_build_font_face_run( &title
, 'a', 'u', 0, 266 );
150 vg_build_font_face_run( &title
, 'v', 'z', 0, 350 );
151 vg_build_font_face_run( &title
, '0', '9', 120,308 );
152 vg_build_font_face_run( &title
, 0x89, 0x8c, 409,182 );
153 vg_build_font_face_run( &title
, 0x8d, 0x92, 360,308 );
154 vg_build_font_face_run( &title
, 0x7f, 0x88, 120,350 );
155 vg_build_font_face_run( &title
, 0x93, 0x98, 360,350 );
156 vg_build_font_face_run( &title
, 0x99, 0xa4, 0,392 );
157 vg_build_font_face_run( &title
, 0xb0, 0xb2, 288,392 );
158 vg_build_write_font_face( fp
, &title
);