finished font folder system on windows build, fixed mouse wheel on windows build
parent
fbe5c3ff4f
commit
7521c2f436
|
@ -78,6 +78,13 @@ partition_allocate(Partition *data, i32_4tech size){
|
|||
return ret;
|
||||
}
|
||||
|
||||
inline void
|
||||
partition_reduce(Partition *data, i32_4tech size){
|
||||
if (size > 0 && size <= data->pos){
|
||||
data->pos -= size;
|
||||
}
|
||||
}
|
||||
|
||||
inline void
|
||||
partition_align(Partition *data, u32_4tech boundary){
|
||||
--boundary;
|
||||
|
|
|
@ -703,6 +703,14 @@ font_load(System_Functions *system, Partition *part, Render_Font *font, i32 pt_s
|
|||
FT_Request_Size(face, &size);
|
||||
|
||||
// set size & metrics
|
||||
char *name = face->family_name;
|
||||
u32 name_len = 0;
|
||||
for (;name[name_len];++name_len);
|
||||
name_len = clamp_top(name_len, sizeof(font->name)-1);
|
||||
memcpy(font->name, name, name_len);
|
||||
font->name[name_len] = 0;
|
||||
font->name_len = name_len;
|
||||
|
||||
font->ascent = ceil32 (face->size->metrics.ascender / 64.0f);
|
||||
font->descent = floor32 (face->size->metrics.descender / 64.0f);
|
||||
font->advance = ceil32 (face->size->metrics.max_advance / 64.0f);
|
||||
|
@ -762,28 +770,30 @@ system_set_page(System_Functions *system, Partition *part, Render_Font *font, Gl
|
|||
}
|
||||
|
||||
internal void
|
||||
system_set_font(System_Functions *system, Partition *part, Render_Font *font, String filename, String name, u32 pt_size, b32 use_hinting){
|
||||
system_set_font(System_Functions *system, Partition *part, Render_Font *font, char *filename, u32 pt_size, b32 use_hinting){
|
||||
memset(font, 0, sizeof(*font));
|
||||
|
||||
copy_partial_cs(font->filename, sizeof(font->filename)-1, filename);
|
||||
font->filename_len = filename.size;
|
||||
font->filename[font->filename_len] = 0;
|
||||
copy_partial_cs(font->name, sizeof(font->name)-1, name);
|
||||
font->name_len = name.size;
|
||||
font->name[font->name_len] = 0;
|
||||
u32 filename_len = 0;
|
||||
for (;filename[filename_len];++filename_len);
|
||||
|
||||
if (part->base == 0){
|
||||
*part = sysshared_scratch_partition(MB(8));
|
||||
}
|
||||
|
||||
b32 success = false;
|
||||
for (u32 R = 0; R < 3; ++R){
|
||||
success = font_load(system, part, font, pt_size, use_hinting);
|
||||
if (success){
|
||||
break;
|
||||
if (filename_len <= sizeof(font->filename)-1){
|
||||
memcpy(font->filename, filename, filename_len);
|
||||
font->filename[filename_len] = 0;
|
||||
font->filename_len = filename_len;
|
||||
|
||||
if (part->base == 0){
|
||||
*part = sysshared_scratch_partition(MB(8));
|
||||
}
|
||||
else{
|
||||
sysshared_partition_double(part);
|
||||
|
||||
b32 success = false;
|
||||
for (u32 R = 0; R < 3; ++R){
|
||||
success = font_load(system, part, font, pt_size, use_hinting);
|
||||
if (success){
|
||||
break;
|
||||
}
|
||||
else{
|
||||
sysshared_partition_double(part);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1833,7 +1833,7 @@ Win32Callback(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam){
|
|||
case WM_MOUSEWHEEL:
|
||||
{
|
||||
win32vars.got_useful_event = 1;
|
||||
Font_ID rotation = GET_WHEEL_DELTA_WPARAM(wParam);
|
||||
i32 rotation = GET_WHEEL_DELTA_WPARAM(wParam);
|
||||
if (rotation > 0){
|
||||
win32vars.input_chunk.trans.mouse_wheel = 1;
|
||||
}
|
||||
|
|
|
@ -24,7 +24,7 @@ global Win32_Fonts win32_fonts = {0};
|
|||
|
||||
internal
|
||||
Sys_Font_Get_Count_Sig(system_font_get_count){
|
||||
return(5);
|
||||
return(win32_fonts.font_count);
|
||||
}
|
||||
|
||||
internal
|
||||
|
@ -101,6 +101,7 @@ Sys_Font_Init_Sig(system_font_init){
|
|||
|
||||
font_size = clamp_bottom(8, font_size);
|
||||
|
||||
#if 0
|
||||
struct TEST_DATA{
|
||||
char *c_filename;
|
||||
i32 filename_len;
|
||||
|
@ -115,17 +116,6 @@ Sys_Font_Init_Sig(system_font_init){
|
|||
{literal("fonts/Inconsolata-Regular.ttf"), literal("Inconsolata"), },
|
||||
};
|
||||
|
||||
struct Font_Setup{
|
||||
Font_Setup *next_font;
|
||||
char *c_filename;
|
||||
char *c_name;
|
||||
i32 filename_len;
|
||||
i32 name_len;
|
||||
};
|
||||
|
||||
Font_Setup *first_setup = 0;
|
||||
Font_Setup *head_setup = 0;
|
||||
|
||||
u32 TEST_COUNT = ArrayCount(TEST_SETUP);
|
||||
for (u32 i = 0; i < TEST_COUNT; ++i){
|
||||
if (first_setup == 0){
|
||||
|
@ -149,21 +139,68 @@ Sys_Font_Init_Sig(system_font_init){
|
|||
|
||||
partition_align(scratch, 8);
|
||||
}
|
||||
#endif
|
||||
|
||||
struct Font_Setup{
|
||||
Font_Setup *next_font;
|
||||
char *c_filename;
|
||||
};
|
||||
|
||||
Font_Setup *first_setup = 0;
|
||||
Font_Setup *head_setup = 0;
|
||||
|
||||
u32 dir_max = KB(32);
|
||||
u8 *directory = push_array(scratch, u8, dir_max);
|
||||
DWORD dir_len = GetModuleFileName_utf8(0, directory, dir_max-1);
|
||||
Assert(dir_len < dir_max);
|
||||
|
||||
{
|
||||
String dir_str = make_string_cap(directory, dir_len, dir_max);
|
||||
remove_last_folder(&dir_str);
|
||||
set_last_folder_sc(&dir_str, "fonts", '\\');
|
||||
terminate_with_null(&dir_str);
|
||||
dir_len = dir_str.size;
|
||||
}
|
||||
|
||||
partition_reduce(scratch, dir_max - dir_len - 1);
|
||||
partition_align(scratch, 8);
|
||||
|
||||
File_List file_list = {0};
|
||||
system_set_file_list(&file_list, (char*)directory, 0, 0, 0);
|
||||
|
||||
for (u32 i = 0; i < file_list.count; ++i){
|
||||
File_Info *info = &file_list.infos[i];
|
||||
if (first_setup == 0){
|
||||
first_setup = push_struct(scratch, Font_Setup);
|
||||
head_setup = first_setup;
|
||||
}
|
||||
else{
|
||||
head_setup->next_font = push_struct(scratch, Font_Setup);
|
||||
head_setup = head_setup->next_font;
|
||||
}
|
||||
head_setup->next_font = 0;
|
||||
|
||||
char *filename = info->filename;
|
||||
u32 len = 0;
|
||||
for (;filename[len];++len);
|
||||
|
||||
head_setup->c_filename = push_array(scratch, char, dir_len+len+1);
|
||||
memcpy(head_setup->c_filename, directory, dir_len);
|
||||
memcpy(head_setup->c_filename + dir_len, filename, len+1);
|
||||
|
||||
partition_align(scratch, 8);
|
||||
}
|
||||
|
||||
system_set_file_list(&file_list, 0, 0, 0, 0);
|
||||
|
||||
u32 font_count_max = ArrayCount(win32_fonts.fonts);
|
||||
u32 font_count = 0;
|
||||
u32 i = 0;
|
||||
for (Font_Setup *ptr = first_setup; ptr != 0; ptr = ptr->next_font, ++i){
|
||||
if (i < font_count_max){
|
||||
String filename = make_string(ptr->c_filename, ptr->filename_len);
|
||||
String name = make_string(ptr->c_name, ptr->name_len);
|
||||
Render_Font *render_font = &win32_fonts.fonts[i];
|
||||
|
||||
char full_filename_space[256];
|
||||
String full_filename = make_fixed_width_string(full_filename_space);
|
||||
sysshared_to_binary_path(&full_filename, filename.str);
|
||||
|
||||
system_set_font(&win32vars.system, &win32_fonts.part, render_font, full_filename, name, font_size, use_hinting);
|
||||
system_set_font(&win32vars.system, &win32_fonts.part, render_font, ptr->c_filename, font_size, use_hinting);
|
||||
}
|
||||
|
||||
++font_count;
|
||||
|
|
Loading…
Reference in New Issue