diff --git a/4ed.cpp b/4ed.cpp index 6c38214c..59496d32 100644 --- a/4ed.cpp +++ b/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; diff --git a/4ed_api_implementation.cpp b/4ed_api_implementation.cpp index 0c92f83b..71a9cbe4 100644 --- a/4ed_api_implementation.cpp +++ b/4ed_api_implementation.cpp @@ -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); } diff --git a/4ed_app_models.h b/4ed_app_models.h index 2c2efe99..929109b5 100644 --- a/4ed_app_models.h +++ b/4ed_app_models.h @@ -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; diff --git a/4ed_file_view.cpp b/4ed_file_view.cpp index 9f1559d8..deb71e3b 100644 --- a/4ed_file_view.cpp +++ b/4ed_file_view.cpp @@ -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)); diff --git a/4ed_system.h b/4ed_system.h index 49c6cf38..25f165ce 100644 --- a/4ed_system.h +++ b/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); diff --git a/4ed_system_shared.cpp b/4ed_system_shared.cpp index 4e75350e..330d98d0 100644 --- a/4ed_system_shared.cpp +++ b/4ed_system_shared.cpp @@ -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 diff --git a/win32_4ed.cpp b/win32_4ed.cpp index 30518aa2..056125ae 100644 --- a/win32_4ed.cpp +++ b/win32_4ed.cpp @@ -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 } //