diff --git a/4ed.cpp b/4ed.cpp index 8153dc99..d97bf848 100644 --- a/4ed.cpp +++ b/4ed.cpp @@ -1357,6 +1357,7 @@ enum Command_Line_Action{ CLAct_WindowMaximize, CLAct_WindowPosition, CLAct_FontSize, + CLAct_FontStopHinting, CLAct_Count }; @@ -1378,19 +1379,20 @@ init_command_line_settings(App_Settings *settings, Plat_Settings *plat_settings, if (arg[0] == '-'){ action = CLAct_Ignore; switch (arg[1]){ - case 'u': action = CLAct_UserFile; strict = 0; break; - case 'U': action = CLAct_UserFile; strict = 1; break; + case 'u': action = CLAct_UserFile; strict = false; break; + case 'U': action = CLAct_UserFile; strict = true; break; - case 'd': action = CLAct_CustomDLL; strict = 0; break; - case 'D': action = CLAct_CustomDLL; strict = 1; break; + case 'd': action = CLAct_CustomDLL; strict = false;break; + case 'D': action = CLAct_CustomDLL; strict = true; break; case 'i': action = CLAct_InitialFilePosition; break; case 'w': action = CLAct_WindowSize; break; - case 'W': action = CLAct_WindowMaximize; break; + case 'W': action = CLAct_WindowMaximize; break; case 'p': action = CLAct_WindowPosition; break; - case 'f': action = CLAct_FontSize; break; + case 'f': action = CLAct_FontSize; break; + case 'h': action = CLAct_FontStopHinting; --i; break; } } else if (arg[0] != 0){ @@ -1430,7 +1432,7 @@ init_command_line_settings(App_Settings *settings, Plat_Settings *plat_settings, case CLAct_WindowSize: { if (i + 1 < clparams.argc){ - plat_settings->set_window_size = 1; + plat_settings->set_window_size = true; plat_settings->window_w = str_to_int(clparams.argv[i]); plat_settings->window_h = str_to_int(clparams.argv[i+1]); @@ -1442,14 +1444,14 @@ init_command_line_settings(App_Settings *settings, Plat_Settings *plat_settings, case CLAct_WindowMaximize: { --i; - plat_settings->maximize_window = 1; + plat_settings->maximize_window = true; action = CLAct_Nothing; }break; case CLAct_WindowPosition: { if (i + 1 < clparams.argc){ - plat_settings->set_window_pos = 1; + plat_settings->set_window_pos = true; plat_settings->window_x = str_to_int(clparams.argv[i]); plat_settings->window_y = str_to_int(clparams.argv[i+1]); @@ -1465,6 +1467,12 @@ init_command_line_settings(App_Settings *settings, Plat_Settings *plat_settings, } action = CLAct_Nothing; }break; + + case CLAct_FontStopHinting: + { + plat_settings->use_hinting = true; + action = CLAct_Nothing; + }break; } } } @@ -1488,22 +1496,6 @@ app_setup_memory(Application_Memory *memory){ return(vars); } -internal i32 -execute_special_tool(void *memory, i32 size, Command_Line_Parameters clparams){ - i32 result; - char message[] = "tool was not specified or is invalid"; - result = sizeof(message) - 1; - memcpy(memory, message, result); - if (clparams.argc > 2){ - if (match(clparams.argv[2], "version")){ - result = sizeof(VERSION) - 1; - memcpy(memory, VERSION, result); - ((char*)memory)[result++] = '\n'; - } - } - return(result); -} - inline App_Settings app_settings_zero(){ App_Settings settings={0}; @@ -1511,28 +1503,20 @@ app_settings_zero(){ } App_Read_Command_Line_Sig(app_read_command_line){ - App_Vars *vars; - App_Settings *settings; i32 out_size = 0; + App_Vars *vars = app_setup_memory(memory); + App_Settings *settings = &vars->models.settings; - if (clparams.argc > 1 && match(clparams.argv[1], "-T")){ - out_size = execute_special_tool(memory->target_memory, memory->target_memory_size, clparams); - } - else{ - vars = app_setup_memory(memory); - - settings = &vars->models.settings; - *settings = app_settings_zero(); - settings->font_size = 16; - - if (clparams.argc > 1){ - init_command_line_settings(&vars->models.settings, plat_settings, clparams); - } - - *files = vars->models.settings.init_files; - *file_count = &vars->models.settings.init_files_count; + *settings = app_settings_zero(); + settings->font_size = 16; + + if (clparams.argc > 1){ + init_command_line_settings(&vars->models.settings, plat_settings, clparams); } + *files = vars->models.settings.init_files; + *file_count = &vars->models.settings.init_files_count; + return(out_size); } diff --git a/4ed.h b/4ed.h index 7dd0a927..7997ba11 100644 --- a/4ed.h +++ b/4ed.h @@ -67,11 +67,12 @@ struct Command_Line_Parameters{ struct Plat_Settings{ char *custom_dll; b32 custom_dll_is_strict; - + i32 window_w, window_h; i32 window_x, window_y; b8 set_window_pos, set_window_size; b8 maximize_window; + b8 use_hinting; }; #define App_Read_Command_Line_Sig(name) \ diff --git a/4ed_rendering.cpp b/4ed_rendering.cpp index 458049d9..e966bcc0 100644 --- a/4ed_rendering.cpp +++ b/4ed_rendering.cpp @@ -494,10 +494,7 @@ stb_font_load(Partition *part, // NOTE(allen): Thanks to insofaras. // This is copy-pasted from some work he -// did to get free type working on linux. -// Once it is working on both sides it might -// be possible to pull some parts out as -// portable FT rendering. +// did to get free type working on Linux. #undef internal #include @@ -524,7 +521,8 @@ font_load_freetype(Partition *part, Render_Font *rf, char *filename, i32 pt_size, - i32 tab_width){ + i32 tab_width, + b32 use_hinting){ memset(rf, 0, sizeof(*rf)); @@ -584,10 +582,18 @@ font_load_freetype(Partition *part, u32* pixels = push_array(part, u32, tex_width * tex_height); memset(pixels, 0, tex_width * tex_height * sizeof(u32)); - // XXX: test if AUTOHINT looks better or not - // NOTE(allen): As of now FT_LOAD_FORCE_AUTOHINT looks much better for - // Liberation Mono which is one of the included 4coder fonts. - const u32 ft_extra_flags = use_lcd_filter ? FT_LOAD_TARGET_LCD : FT_LOAD_FORCE_AUTOHINT; + u32 ft_extra_flags = 0; + if (use_lcd_filter){ + ft_extra_flags = FT_LOAD_TARGET_LCD; + } + else{ + if (use_hinting){ + ft_extra_flags = FT_LOAD_FORCE_AUTOHINT; + } + else{ + ft_extra_flags = (FT_LOAD_NO_AUTOHINT | FT_LOAD_NO_HINTING); + } + } for(int i = 0; i < NUM_GLYPHS; ++i){ if(FT_Load_Char(face, i, FT_LOAD_RENDER | ft_extra_flags) != 0) continue; diff --git a/win32_4ed.cpp b/win32_4ed.cpp index d3b066c8..3f41fdc0 100644 --- a/win32_4ed.cpp +++ b/win32_4ed.cpp @@ -1124,7 +1124,8 @@ Font_Load_Sig(system_draw_font_load){ font_out, filename, pt_size, - tab_width); + tab_width, + win32vars.settings.use_hinting); #else diff --git a/win32_ft_font.cpp b/win32_ft_font.cpp index c7cbef50..8c1f7079 100644 --- a/win32_ft_font.cpp +++ b/win32_ft_font.cpp @@ -6,7 +6,8 @@ // portable FT rendering. internal b32 -win32_ft_font_load(Partition *part, Render_Font *rf, char *name, i32 pt_size, i32 tab_width){ +win32_ft_font_load(Partition *part, Render_Font *rf, char *name, + i32 pt_size, i32 tab_width, b32 use_hinting){ b32 result = 0; @@ -18,7 +19,7 @@ win32_ft_font_load(Partition *part, Render_Font *rf, char *name, i32 pt_size, i3 String str = make_string(filename, 0, 256); sysshared_to_binary_path(&str, name); - result = font_load_freetype(part, rf, filename, pt_size, tab_width); + result = font_load_freetype(part, rf, filename, pt_size, tab_width, use_hinting); } end_temp_memory(temp);