finished torching the old font system
parent
4a5bfa59b7
commit
e62da80982
12
4ed.cpp
12
4ed.cpp
|
@ -634,7 +634,7 @@ app_hardcode_styles(Models *models){
|
|||
Style *style = styles + 1;
|
||||
|
||||
i16 fonts = 1;
|
||||
models->global_font.font_id = fonts + 0;
|
||||
models->global_font_id = fonts + 0;
|
||||
|
||||
/////////////////
|
||||
style_set_name(style, make_lit_string("4coder"));
|
||||
|
@ -1215,11 +1215,8 @@ App_Init_Sig(app_init){
|
|||
models->app_links.cmd_context = &vars->command_data;
|
||||
|
||||
partition = &models->mem.part;
|
||||
target->partition = partition;
|
||||
|
||||
{
|
||||
i32 i;
|
||||
|
||||
panel_max_count = models->layout.panel_max_count = MAX_VIEWS;
|
||||
divider_max_count = panel_max_count - 1;
|
||||
models->layout.panel_count = 0;
|
||||
|
@ -1231,7 +1228,7 @@ App_Init_Sig(app_init){
|
|||
dll_init_sentinel(&models->layout.used_sentinel);
|
||||
|
||||
panel = panels;
|
||||
for (i = 0; i < panel_max_count; ++i, ++panel){
|
||||
for (i32 i = 0; i < panel_max_count; ++i, ++panel){
|
||||
dll_insert(&models->layout.free_sentinel, panel);
|
||||
}
|
||||
|
||||
|
@ -1239,7 +1236,7 @@ App_Init_Sig(app_init){
|
|||
models->layout.dividers = dividers;
|
||||
|
||||
div = dividers;
|
||||
for (i = 0; i < divider_max_count-1; ++i, ++div){
|
||||
for (i32 i = 0; i < divider_max_count-1; ++i, ++div){
|
||||
div->next = (div + 1);
|
||||
}
|
||||
div->next = 0;
|
||||
|
@ -1460,6 +1457,7 @@ App_Init_Sig(app_init){
|
|||
setup_ui_commands(&models->map_ui, &models->mem.part, global_map);
|
||||
}
|
||||
|
||||
#if 0
|
||||
// NOTE(allen): font setup
|
||||
{
|
||||
models->font_set = &target->font_set;
|
||||
|
@ -1510,6 +1508,7 @@ App_Init_Sig(app_init){
|
|||
font_set_add(models->font_set, file_name, name, pt_size);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
// NOTE(allen): file setup
|
||||
working_set_init(&models->working_set, partition, &vars->models.mem.general);
|
||||
|
@ -1659,7 +1658,6 @@ App_Step_Sig(app_step){
|
|||
|
||||
App_Vars *vars = (App_Vars*)memory->vars_memory;
|
||||
Models *models = &vars->models;
|
||||
target->partition = &models->mem.part;
|
||||
|
||||
// NOTE(allen): OS clipboard event handling
|
||||
String clipboard = input->clipboard;
|
||||
|
|
|
@ -877,9 +877,10 @@ DOC_SEE(Buffer_Setting_ID)
|
|||
new_value = 48;
|
||||
}
|
||||
if (new_value != file->settings.display_width){
|
||||
i16 font_id = file->settings.font_id;
|
||||
Font_Info *font_info = get_font_info(models->font_set, font_id);
|
||||
Render_Font *font = font_info->font;
|
||||
//i16 font_id = file->settings.font_id;
|
||||
//Font_Info *font_info = get_font_info(models->font_set, font_id);
|
||||
//Render_Font *font = font_info->font;
|
||||
Render_Font *font = 0;
|
||||
file_set_width(models, file, new_value, font);
|
||||
}
|
||||
}break;
|
||||
|
@ -891,8 +892,9 @@ DOC_SEE(Buffer_Setting_ID)
|
|||
new_value = 0;
|
||||
}
|
||||
if (new_value != file->settings.minimum_base_display_width){
|
||||
i16 font_id = file->settings.font_id;
|
||||
Render_Font *font = get_font_info(models->font_set, font_id)->font;
|
||||
//i16 font_id = file->settings.font_id;
|
||||
//Render_Font *font = get_font_info(models->font_set, font_id)->font;
|
||||
Render_Font *font = 0;
|
||||
file_set_min_base_width(models, file, new_value, font);
|
||||
}
|
||||
}break;
|
||||
|
@ -977,8 +979,9 @@ DOC_SEE(Buffer_Setting_ID)
|
|||
}
|
||||
|
||||
if (full_remeasure){
|
||||
i16 font_id = file->settings.font_id;
|
||||
Render_Font *font = get_font_info(models->font_set, font_id)->font;
|
||||
//i16 font_id = file->settings.font_id;
|
||||
//Render_Font *font = get_font_info(models->font_set, font_id)->font;
|
||||
Render_Font *font = 0;
|
||||
|
||||
file_allocate_character_starts_as_needed(&models->mem.general, file);
|
||||
buffer_measure_character_starts(&file->state.buffer, file->state.character_starts, 0, file->settings.virtual_white);
|
||||
|
@ -2095,6 +2098,8 @@ DOC_PARAM(apply_to_all_files, If this is set all open files change to this font.
|
|||
durring the start hook because several files already exist at that time.)
|
||||
DOC(This call changes 4coder's default font to one of the built in fonts.)
|
||||
*/{
|
||||
|
||||
#if 0
|
||||
Command_Data *cmd = (Command_Data*)app->cmd_context;
|
||||
Font_Set *set = cmd->models->font_set;
|
||||
|
||||
|
@ -2110,6 +2115,8 @@ DOC(This call changes 4coder's default font to one of the built in fonts.)
|
|||
global_font->font_id = font_id;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
API_EXPORT void
|
||||
|
@ -2120,6 +2127,8 @@ DOC_PARAM(name, The name parameter specifies the name of the font to begin using
|
|||
DOC_PARAM(len, The len parameter specifies the length of the name string.)
|
||||
DOC(This call sets the display font of a particular buffer.)
|
||||
*/{
|
||||
|
||||
#if 0
|
||||
Command_Data *cmd = (Command_Data*)app->cmd_context;
|
||||
Models *models = cmd->models;
|
||||
Editing_File *file = imp_get_file(cmd, buffer);
|
||||
|
@ -2133,6 +2142,8 @@ DOC(This call sets the display font of a particular buffer.)
|
|||
file_set_font(models, file, font_id);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
API_EXPORT bool32
|
||||
|
@ -2144,18 +2155,21 @@ DOC_PARAM(name_max, the capacity of name_out)
|
|||
DOC_RETURN(returns non-zero on success)
|
||||
*/
|
||||
{
|
||||
bool32 result = false;
|
||||
|
||||
#if 0
|
||||
Command_Data *cmd = (Command_Data*)app->cmd_context;
|
||||
Models *models = cmd->models;
|
||||
Editing_File *file = imp_get_file(cmd, buffer);
|
||||
|
||||
bool32 result = 0;
|
||||
if (file){
|
||||
Font_Set *set = models->font_set;
|
||||
String name = make_string_cap(name_out, 0, name_max);
|
||||
if (font_set_get_name(set, file->settings.font_id, &name)){
|
||||
result = name.size;
|
||||
result = (name.size > 0);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
return(result);
|
||||
}
|
||||
|
|
|
@ -50,6 +50,8 @@ struct Models{
|
|||
Mem_Options mem;
|
||||
App_Settings settings;
|
||||
|
||||
i16 global_font_id;
|
||||
|
||||
Command_Map map_top;
|
||||
Command_Map map_file;
|
||||
Command_Map map_ui;
|
||||
|
|
|
@ -1951,7 +1951,7 @@ file_set_min_base_width(Models *models, Editing_File *file, i32 minimum_base_dis
|
|||
internal void
|
||||
file_create_from_string(System_Functions *system, Models *models, Editing_File *file, String val, b8 read_only = 0){
|
||||
|
||||
Font_Set *font_set = models->font_set;
|
||||
//Font_Set *font_set = models->font_set;
|
||||
General_Memory *general = &models->mem.general;
|
||||
Partition *part = &models->mem.part;
|
||||
Open_File_Hook_Function *hook_open_file = models->hook_open_file;
|
||||
|
@ -1986,9 +1986,10 @@ file_create_from_string(System_Functions *system, Models *models, Editing_File *
|
|||
file_allocate_character_starts_as_needed(general, file);
|
||||
buffer_measure_character_starts(&file->state.buffer, file->state.character_starts, 0, file->settings.virtual_white);
|
||||
|
||||
i16 font_id = models->global_font.font_id;
|
||||
i16 font_id = models->global_font_id;
|
||||
file->settings.font_id = font_id;
|
||||
Render_Font *font = get_font_info(font_set, font_id)->font;
|
||||
//Render_Font *font = get_font_info(font_set, font_id)->font;
|
||||
Render_Font *font = 0;
|
||||
|
||||
file_measure_wraps(models, file, font);
|
||||
|
||||
|
@ -2799,7 +2800,8 @@ file_view_nullify_file(View *view){
|
|||
|
||||
internal void
|
||||
update_view_line_height(Models *models, View *view, i16 font_id){
|
||||
Render_Font *font = get_font_info(models->font_set, font_id)->font;
|
||||
//Render_Font *font = get_font_info(models->font_set, font_id)->font;
|
||||
Render_Font *font = 0;
|
||||
view->line_height = font->height;
|
||||
}
|
||||
|
||||
|
@ -3278,7 +3280,8 @@ file_do_single_edit(System_Functions *system, Models *models, Editing_File *file
|
|||
i32 new_line_count = buffer_count_newlines(&file->state.buffer, start, start+str_len);
|
||||
i32 line_shift = new_line_count - replaced_line_count;
|
||||
|
||||
Render_Font *font = get_font_info(models->font_set, file->settings.font_id)->font;
|
||||
//Render_Font *font = get_font_info(models->font_set, file->settings.font_id)->font;
|
||||
Render_Font *font = 0;
|
||||
file_grow_starts_as_needed(general, buffer, line_shift);
|
||||
buffer_remeasure_starts(buffer, line_start, line_end, line_shift, shift_amount);
|
||||
|
||||
|
@ -3404,7 +3407,8 @@ file_do_batch_edit(System_Functions *system, Models *models, Editing_File *file,
|
|||
file_allocate_character_starts_as_needed(&models->mem.general, file);
|
||||
buffer_measure_character_starts(&file->state.buffer, file->state.character_starts, 0, file->settings.virtual_white);
|
||||
|
||||
Render_Font *font = get_font_info(models->font_set, file->settings.font_id)->font;
|
||||
//Render_Font *font = get_font_info(models->font_set, file->settings.font_id)->font;
|
||||
Render_Font *font = 0;
|
||||
file_measure_wraps(models, file, font);
|
||||
|
||||
// NOTE(allen): cursor fixing
|
||||
|
@ -3684,8 +3688,9 @@ style_get_color(Style *style, Cpp_Token token){
|
|||
internal void
|
||||
file_set_font(Models *models, Editing_File *file, i16 font_id){
|
||||
file->settings.font_id = font_id;
|
||||
Font_Info *font_info = get_font_info(models->font_set, file->settings.font_id);
|
||||
Render_Font *font = font_info->font;
|
||||
//Font_Info *font_info = get_font_info(models->font_set, file->settings.font_id);
|
||||
//Render_Font *font = font_info->font;
|
||||
Render_Font *font = 0;
|
||||
file_measure_wraps_and_fix_cursor(models, file, font);
|
||||
|
||||
Editing_Layout *layout = &models->layout;
|
||||
|
@ -3704,8 +3709,7 @@ global_set_font(Models *models, i16 font_id){
|
|||
Editing_File *file = (Editing_File*)node;
|
||||
file_set_font(models, file, font_id);
|
||||
}
|
||||
|
||||
models->global_font.font_id = font_id;
|
||||
models->global_font_id = font_id;
|
||||
}
|
||||
|
||||
inline void
|
||||
|
@ -4738,7 +4742,7 @@ step_file_view(System_Functions *system, View *view, View *active_view, Input_Su
|
|||
}
|
||||
|
||||
message = make_lit_string("Set Global Font");
|
||||
id.id[0] = (u64)(&models->global_font);
|
||||
id.id[0] = (u64)(&models->global_font_id);
|
||||
|
||||
if (gui_do_button(target, id, message)){
|
||||
view->color_mode = CV_Mode_Global_Font;
|
||||
|
@ -4774,10 +4778,8 @@ step_file_view(System_Functions *system, View *view, View *active_view, Input_Su
|
|||
{
|
||||
Assert(view->file_data.file);
|
||||
|
||||
Font_Set *font_set = models->font_set;
|
||||
Font_Info *info = 0;
|
||||
|
||||
i16 i = 1, count = (i16)models->font_set->count + 1;
|
||||
//Font_Set *font_set = models->font_set;
|
||||
//Font_Info *info = 0;
|
||||
|
||||
String message = make_lit_string("Back");
|
||||
|
||||
|
@ -4786,18 +4788,18 @@ step_file_view(System_Functions *system, View *view, View *active_view, Input_Su
|
|||
view->color_mode = CV_Mode_Library;
|
||||
}
|
||||
|
||||
i16 font_id = models->global_font.font_id;
|
||||
i16 font_id = models->global_font_id;
|
||||
if (view->color_mode == CV_Mode_Font){
|
||||
font_id = view->file_data.file->settings.font_id;
|
||||
}
|
||||
|
||||
i16 new_font_id = font_id;
|
||||
|
||||
for (i = 1; i < count; ++i){
|
||||
info = get_font_info(font_set, i);
|
||||
i16 count = 2;
|
||||
for (i16 i = 1; i < count; ++i){
|
||||
String font_name = {0};
|
||||
id.id[0] = (u64)i;
|
||||
if (i != font_id){
|
||||
if (gui_do_font_button(target, id, i, info->name)){
|
||||
if (gui_do_font_button(target, id, i, font_name)){
|
||||
new_font_id = i;
|
||||
}
|
||||
}
|
||||
|
@ -4805,7 +4807,7 @@ step_file_view(System_Functions *system, View *view, View *active_view, Input_Su
|
|||
char message_space[256];
|
||||
message = make_fixed_width_string(message_space);
|
||||
copy_ss(&message, make_lit_string("currently selected: "));
|
||||
append_ss(&message, info->name);
|
||||
append_ss(&message, font_name);
|
||||
gui_do_font_button(target, id, i, message);
|
||||
}
|
||||
}
|
||||
|
@ -5939,7 +5941,8 @@ draw_file_loaded(View *view, i32_Rect rect, b32 is_active, Render_Target *target
|
|||
Buffer_Render_Item *items = push_array(part, Buffer_Render_Item, max);
|
||||
|
||||
i16 font_id = file->settings.font_id;
|
||||
Render_Font *font = get_font_info(models->font_set, font_id)->font;
|
||||
//Render_Font *font = get_font_info(models->font_set, font_id)->font;
|
||||
Render_Font *font = 0;
|
||||
|
||||
f32 scroll_x = view->edit_pos->scroll.scroll_x;
|
||||
f32 scroll_y = view->edit_pos->scroll.scroll_y;
|
||||
|
@ -6181,18 +6184,20 @@ draw_text_with_cursor(Render_Target *target, View *view, i16 font_id, i32_Rect r
|
|||
draw_rectangle(target, rect, back_color);
|
||||
|
||||
if (pos >= 0 && pos < s.size){
|
||||
String part1, part2, part3;
|
||||
i32_Rect cursor_rect;
|
||||
Render_Font *font = get_font_info(models->font_set, font_id)->font;
|
||||
//Render_Font *font = get_font_info(models->font_set, font_id)->font;
|
||||
Render_Font *font = 0; AllowLocal(font);
|
||||
|
||||
part1 = substr(s, 0, pos);
|
||||
part2 = substr(s, pos, 1);
|
||||
part3 = substr(s, pos+1, s.size-pos-1);
|
||||
String part1 = substr(s, 0, pos);
|
||||
String part2 = substr(s, pos, 1);
|
||||
String part3 = substr(s, pos+1, s.size-pos-1);
|
||||
|
||||
x = draw_string(target, font_id, part1, floor32(x), y, text_color);
|
||||
|
||||
//f32 adv = get_codepoint_advance(font, s.str[pos]);
|
||||
f32 adv = 2.f;
|
||||
i32_Rect cursor_rect;
|
||||
cursor_rect.x0 = floor32(x);
|
||||
cursor_rect.x1 = floor32(x) + ceil32(get_codepoint_advance(font, s.str[pos]));
|
||||
cursor_rect.x1 = floor32(x) + ceil32(adv);
|
||||
cursor_rect.y0 = y;
|
||||
cursor_rect.y1 = y + view->line_height;
|
||||
draw_rectangle(target, cursor_rect, cursor_color);
|
||||
|
@ -6400,10 +6405,12 @@ draw_button(GUI_Target *gui_target, Render_Target *target, View *view, i16 font_
|
|||
|
||||
internal void
|
||||
draw_style_preview(GUI_Target *gui_target, Render_Target *target, View *view, i16 font_id, i32_Rect rect, GUI_id id, Style *style){
|
||||
Models *models = view->persistent.models;
|
||||
Models *models = view->persistent.models; AllowLocal(models);
|
||||
|
||||
i32 active_level = gui_active_level(gui_target, id);
|
||||
Font_Info *info = get_font_info(models->font_set, font_id);
|
||||
//Font_Info *info = get_font_info(models->font_set, font_id);
|
||||
String font_name = {0};
|
||||
Render_Font *font = 0;
|
||||
|
||||
i32_Rect inner = get_inner_rect(rect, 3);
|
||||
|
||||
|
@ -6420,12 +6427,12 @@ draw_style_preview(GUI_Target *gui_target, Render_Target *target, View *view, i1
|
|||
i32 y = inner.y0;
|
||||
i32 x = inner.x0;
|
||||
x = ceil32(draw_string(target, font_id, style->name.str, x, y, text_color));
|
||||
i32 font_x = (i32)(inner.x1 - font_string_width(target, font_id, info->name.str));
|
||||
i32 font_x = (i32)(inner.x1 - font_string_width(target, font_id, font_name));
|
||||
if (font_x > x + 10){
|
||||
draw_string(target, font_id, info->name.str, font_x, y, text_color);
|
||||
draw_string(target, font_id, font_name, font_x, y, text_color);
|
||||
}
|
||||
|
||||
i32 height = info->font->height;
|
||||
i32 height = font->height;
|
||||
x = inner.x0;
|
||||
y += height;
|
||||
x = ceil32(draw_string(target, font_id, "if", x, y, keyword_color));
|
||||
|
|
25
4ed_system.h
25
4ed_system.h
|
@ -21,21 +21,14 @@ handle_equal(Plat_Handle a, Plat_Handle b){
|
|||
return(result);
|
||||
}
|
||||
|
||||
// files
|
||||
#define Sys_Set_File_List_Sig(name) void name(File_List *file_list, char *directory, char *canon_directory_out, u32 *canon_directory_size_out, u32 canon_directory_max)
|
||||
typedef Sys_Set_File_List_Sig(System_Set_File_List);
|
||||
|
||||
#define Sys_Get_Canonical_Sig(name) u32 name(char *filename, u32 len, char *buffer, u32 max)
|
||||
typedef Sys_Get_Canonical_Sig(System_Get_Canonical);
|
||||
|
||||
#define Sys_Add_Listener_Sig(name) b32 name(char *filename)
|
||||
typedef Sys_Add_Listener_Sig(System_Add_Listener);
|
||||
|
||||
#define Sys_Remove_Listener_Sig(name) b32 name(char *filename)
|
||||
typedef Sys_Remove_Listener_Sig(System_Remove_Listener);
|
||||
|
||||
#define Sys_Get_File_Change_Sig(name) i32 name(char *buffer, i32 max, b32 *mem_too_small, i32 *required_size)
|
||||
typedef Sys_Get_File_Change_Sig(System_Get_File_Change);
|
||||
|
||||
// file load/save
|
||||
#define Sys_Load_Handle_Sig(name) b32 name(char *filename, Plat_Handle *handle_out)
|
||||
typedef Sys_Load_Handle_Sig(System_Load_Handle);
|
||||
|
||||
|
@ -51,10 +44,21 @@ typedef Sys_Load_Close_Sig(System_Load_Close);
|
|||
#define Sys_Save_File_Sig(name) b32 name(char *filename, char *buffer, u32 size)
|
||||
typedef Sys_Save_File_Sig(System_Save_File);
|
||||
|
||||
// file changes
|
||||
#define Sys_Add_Listener_Sig(name) b32 name(char *filename)
|
||||
typedef Sys_Add_Listener_Sig(System_Add_Listener);
|
||||
|
||||
#define Sys_Remove_Listener_Sig(name) b32 name(char *filename)
|
||||
typedef Sys_Remove_Listener_Sig(System_Remove_Listener);
|
||||
|
||||
#define Sys_Get_File_Change_Sig(name) i32 name(char *buffer, i32 max, b32 *mem_too_small, i32 *required_size)
|
||||
typedef Sys_Get_File_Change_Sig(System_Get_File_Change);
|
||||
|
||||
// time
|
||||
#define Sys_Now_Time_Sig(name) u64 name()
|
||||
typedef Sys_Now_Time_Sig(System_Now_Time);
|
||||
|
||||
|
||||
// clipboard
|
||||
#define Sys_Post_Clipboard_Sig(name) void name(String str)
|
||||
typedef Sys_Post_Clipboard_Sig(System_Post_Clipboard);
|
||||
|
||||
|
@ -80,7 +84,6 @@ typedef Sys_CLI_Update_Step_Sig(System_CLI_Update_Step);
|
|||
typedef Sys_CLI_End_Update_Sig(System_CLI_End_Update);
|
||||
|
||||
// coroutine
|
||||
|
||||
#define Coroutine_Function_Sig(name) void name(struct Coroutine *coroutine)
|
||||
typedef Coroutine_Function_Sig(Coroutine_Function);
|
||||
|
||||
|
|
|
@ -10,8 +10,7 @@
|
|||
// TOP
|
||||
|
||||
//
|
||||
// Standard implementation of file system stuff
|
||||
// based on the file track layer.
|
||||
// Standard implementation of file system stuff based on the file track layer.
|
||||
//
|
||||
|
||||
struct Shared_Vars{
|
||||
|
@ -422,6 +421,8 @@ get_exact_render_quad(Glyph_Bounds *b, i32 pw, i32 ph, float xpos, float ypos){
|
|||
|
||||
inline void
|
||||
private_draw_glyph(Render_Target *target, Render_Font *font, u32 character, f32 x, f32 y, u32 color){
|
||||
|
||||
#if 0
|
||||
Glyph_Data glyph = {0};
|
||||
if (get_codepoint_glyph_data(font, character, &glyph)){
|
||||
Render_Quad q = get_render_quad(&glyph.bounds, glyph.tex_width, glyph.tex_height, x, y);
|
||||
|
@ -437,10 +438,14 @@ private_draw_glyph(Render_Target *target, Render_Font *font, u32 character, f32
|
|||
}
|
||||
glEnd();
|
||||
}
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
inline void
|
||||
private_draw_glyph_mono(Render_Target *target, Render_Font *font, u8 character, f32 x, f32 y, f32 advance, u32 color){
|
||||
|
||||
#if 0
|
||||
Glyph_Data glyph = {0};
|
||||
if (get_codepoint_glyph_data(font, character, &glyph)){
|
||||
f32 left = glyph.bounds.x0;
|
||||
|
@ -463,6 +468,8 @@ private_draw_glyph_mono(Render_Target *target, Render_Font *font, u8 character,
|
|||
}
|
||||
glEnd();
|
||||
}
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
inline void
|
||||
|
@ -500,32 +507,38 @@ launch_rendering(Render_Target *target){
|
|||
|
||||
case piece_type_glyph:
|
||||
{
|
||||
#if 0
|
||||
Render_Piece_Glyph *glyph = ExtractStruct(Render_Piece_Glyph);
|
||||
|
||||
Render_Font *font = get_font_info(&target->font_set, glyph->font_id)->font;
|
||||
if (font){
|
||||
private_draw_glyph(target, font, glyph->character, glyph->pos.x, glyph->pos.y, glyph->color);
|
||||
}
|
||||
#endif
|
||||
}break;
|
||||
|
||||
case piece_type_mono_glyph:
|
||||
{
|
||||
#if 0
|
||||
Render_Piece_Glyph *glyph = ExtractStruct(Render_Piece_Glyph);
|
||||
|
||||
Render_Font *font = get_font_info(&target->font_set, glyph->font_id)->font;
|
||||
if (font){
|
||||
private_draw_glyph_mono(target, font, glyph->character, glyph->pos.x, glyph->pos.y, glyph->color);
|
||||
}
|
||||
#endif
|
||||
}break;
|
||||
|
||||
case piece_type_mono_glyph_advance:
|
||||
{
|
||||
#if 0
|
||||
Render_Piece_Glyph_Advance *glyph = ExtractStruct(Render_Piece_Glyph_Advance);
|
||||
|
||||
Render_Font *font = get_font_info(&target->font_set, glyph->font_id)->font;
|
||||
if (font){
|
||||
private_draw_glyph_mono(target, font, glyph->character, glyph->pos.x, glyph->pos.y, glyph->advance, glyph->color);
|
||||
}
|
||||
#endif
|
||||
}break;
|
||||
|
||||
case piece_type_change_clip:
|
||||
|
@ -586,8 +599,11 @@ font_load_freetype_page_inner(Partition *part, Render_Font *font, FT_Library ft,
|
|||
|
||||
// fill the texture
|
||||
u32 base_codepoint = (page_number << 8);
|
||||
Glyph_Bounds *glyph_ptr = &page->glyphs[0];
|
||||
f32 *advance_ptr = &page->advance[0];
|
||||
Glyph_Bounds *glyphs = &page->glyphs[0];
|
||||
Glyph_Bounds *glyph_ptr = glyphs;
|
||||
|
||||
f32 *advances = &page->advance[0];
|
||||
f32 *advance_ptr = advances;
|
||||
for(u32 i = 0; i < ITEM_PER_FONT_PAGE; ++i, ++glyph_ptr, ++advance_ptr){
|
||||
u32 codepoint = i + base_codepoint;
|
||||
|
||||
|
@ -656,38 +672,22 @@ font_load_freetype_page_inner(Partition *part, Render_Font *font, FT_Library ft,
|
|||
|
||||
// whitespace spacing stuff
|
||||
if (page_number == 0){
|
||||
f32 space_adv = get_codepoint_advance(font, ' ');
|
||||
f32 backslash_adv = get_codepoint_advance(font, '\\');
|
||||
f32 r_adv = get_codepoint_advance(font, 'r');
|
||||
f32 space_adv = advances[' '];
|
||||
f32 backslash_adv = advances['\\'];
|
||||
f32 r_adv = advances['r'];
|
||||
|
||||
set_codepoint_advance(font, '\n', space_adv);
|
||||
set_codepoint_advance(font, '\r', backslash_adv + r_adv);
|
||||
set_codepoint_advance(font, '\t', space_adv*tab_width);
|
||||
advances['\n'] = space_adv;
|
||||
advances['\r'] = backslash_adv + r_adv;
|
||||
advances['\t'] = space_adv*tab_width;
|
||||
}
|
||||
}
|
||||
|
||||
internal b32
|
||||
font_load_freetype_page(Partition *part, Render_Font *font, char *filename, i32 pt_size, b32 use_hinting, u32 page_number, i32 tab_width){
|
||||
|
||||
// TODO(allen): Stop redoing all this init for each call.
|
||||
FT_Library ft;
|
||||
FT_Init_FreeType(&ft);
|
||||
|
||||
FT_Face face;
|
||||
FT_New_Face(ft, filename, 0, &face);
|
||||
|
||||
Glyph_Page *page = font_get_or_make_page(font, page_number);
|
||||
font_load_freetype_page_inner(part, font, ft, face, use_hinting, page_number, tab_width);
|
||||
FT_Done_FreeType(ft);
|
||||
|
||||
return(true);
|
||||
}
|
||||
|
||||
internal b32
|
||||
font_load_freetype(Partition *part, Render_Font *font, char *filename, i32 pt_size, i32 tab_width, b32 use_hinting){
|
||||
|
||||
memset(font, 0, sizeof(*font));
|
||||
|
||||
#if 0
|
||||
// TODO(allen): Stop redoing all this init for each call.
|
||||
FT_Library ft;
|
||||
FT_Init_FreeType(&ft);
|
||||
|
@ -734,10 +734,12 @@ font_load_freetype(Partition *part, Render_Font *font, char *filename, i32 pt_si
|
|||
font->byte_advance = backslash_adv + max_hex_advance*2;
|
||||
|
||||
FT_Done_FreeType(ft);
|
||||
#endif
|
||||
|
||||
return(true);
|
||||
}
|
||||
|
||||
#if 0
|
||||
internal
|
||||
Release_Font_Sig(draw_release_font){
|
||||
for (u32 i = 0; i < ArrayCount(font->pages); ++i){
|
||||
|
@ -749,6 +751,7 @@ Release_Font_Sig(draw_release_font){
|
|||
FREE(font->pages);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
// BOTTOM
|
||||
|
||||
|
|
|
@ -64,6 +64,7 @@
|
|||
#define GL_TEXTURE_MAX_LEVEL 0x813D
|
||||
|
||||
#include "filetrack/4tech_file_track_win32.c"
|
||||
#include "font/4coder_font_data.h"
|
||||
#include "4ed_system_shared.h"
|
||||
|
||||
#define SUPPORT_DPI 1
|
||||
|
@ -1402,6 +1403,7 @@ size_change(i32 dpi_x, i32 dpi_y){
|
|||
return(size_max);
|
||||
}
|
||||
|
||||
#if 0
|
||||
internal
|
||||
Font_Load_Sig(font_load){
|
||||
if (win32vars.font_part.base == 0){
|
||||
|
@ -1427,6 +1429,7 @@ Font_Load_Sig(font_load){
|
|||
|
||||
return(success);
|
||||
}
|
||||
#endif
|
||||
|
||||
//
|
||||
// Linkage to Custom and Application
|
||||
|
@ -1507,8 +1510,10 @@ Win32LoadRenderCode(){
|
|||
win32vars.target.pop_clip = draw_pop_clip;
|
||||
win32vars.target.push_piece = draw_push_piece;
|
||||
|
||||
#if 0
|
||||
win32vars.target.font_set.font_load = font_load;
|
||||
win32vars.target.font_set.release_font = draw_release_font;
|
||||
#endif
|
||||
}
|
||||
|
||||
//
|
||||
|
|
Loading…
Reference in New Issue