-h flag to enable hinting
This commit is contained in:
parent
eec3475ee2
commit
6599cac5e9
68
4ed.cpp
68
4ed.cpp
|
@ -1357,6 +1357,7 @@ enum Command_Line_Action{
|
||||||
CLAct_WindowMaximize,
|
CLAct_WindowMaximize,
|
||||||
CLAct_WindowPosition,
|
CLAct_WindowPosition,
|
||||||
CLAct_FontSize,
|
CLAct_FontSize,
|
||||||
|
CLAct_FontStopHinting,
|
||||||
CLAct_Count
|
CLAct_Count
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1378,19 +1379,20 @@ init_command_line_settings(App_Settings *settings, Plat_Settings *plat_settings,
|
||||||
if (arg[0] == '-'){
|
if (arg[0] == '-'){
|
||||||
action = CLAct_Ignore;
|
action = CLAct_Ignore;
|
||||||
switch (arg[1]){
|
switch (arg[1]){
|
||||||
case 'u': action = CLAct_UserFile; strict = 0; break;
|
case 'u': action = CLAct_UserFile; strict = false; break;
|
||||||
case 'U': action = CLAct_UserFile; strict = 1; break;
|
case 'U': action = CLAct_UserFile; strict = true; break;
|
||||||
|
|
||||||
case 'd': action = CLAct_CustomDLL; strict = 0; break;
|
case 'd': action = CLAct_CustomDLL; strict = false;break;
|
||||||
case 'D': action = CLAct_CustomDLL; strict = 1; break;
|
case 'D': action = CLAct_CustomDLL; strict = true; break;
|
||||||
|
|
||||||
case 'i': action = CLAct_InitialFilePosition; break;
|
case 'i': action = CLAct_InitialFilePosition; break;
|
||||||
|
|
||||||
case 'w': action = CLAct_WindowSize; 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 '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){
|
else if (arg[0] != 0){
|
||||||
|
@ -1430,7 +1432,7 @@ init_command_line_settings(App_Settings *settings, Plat_Settings *plat_settings,
|
||||||
case CLAct_WindowSize:
|
case CLAct_WindowSize:
|
||||||
{
|
{
|
||||||
if (i + 1 < clparams.argc){
|
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_w = str_to_int(clparams.argv[i]);
|
||||||
plat_settings->window_h = str_to_int(clparams.argv[i+1]);
|
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:
|
case CLAct_WindowMaximize:
|
||||||
{
|
{
|
||||||
--i;
|
--i;
|
||||||
plat_settings->maximize_window = 1;
|
plat_settings->maximize_window = true;
|
||||||
action = CLAct_Nothing;
|
action = CLAct_Nothing;
|
||||||
}break;
|
}break;
|
||||||
|
|
||||||
case CLAct_WindowPosition:
|
case CLAct_WindowPosition:
|
||||||
{
|
{
|
||||||
if (i + 1 < clparams.argc){
|
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_x = str_to_int(clparams.argv[i]);
|
||||||
plat_settings->window_y = str_to_int(clparams.argv[i+1]);
|
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;
|
action = CLAct_Nothing;
|
||||||
}break;
|
}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);
|
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
|
inline App_Settings
|
||||||
app_settings_zero(){
|
app_settings_zero(){
|
||||||
App_Settings settings={0};
|
App_Settings settings={0};
|
||||||
|
@ -1511,27 +1503,19 @@ app_settings_zero(){
|
||||||
}
|
}
|
||||||
|
|
||||||
App_Read_Command_Line_Sig(app_read_command_line){
|
App_Read_Command_Line_Sig(app_read_command_line){
|
||||||
App_Vars *vars;
|
|
||||||
App_Settings *settings;
|
|
||||||
i32 out_size = 0;
|
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")){
|
*settings = app_settings_zero();
|
||||||
out_size = execute_special_tool(memory->target_memory, memory->target_memory_size, clparams);
|
settings->font_size = 16;
|
||||||
|
|
||||||
|
if (clparams.argc > 1){
|
||||||
|
init_command_line_settings(&vars->models.settings, plat_settings, clparams);
|
||||||
}
|
}
|
||||||
else{
|
|
||||||
vars = app_setup_memory(memory);
|
|
||||||
|
|
||||||
settings = &vars->models.settings;
|
*files = vars->models.settings.init_files;
|
||||||
*settings = app_settings_zero();
|
*file_count = &vars->models.settings.init_files_count;
|
||||||
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);
|
return(out_size);
|
||||||
}
|
}
|
||||||
|
|
1
4ed.h
1
4ed.h
|
@ -72,6 +72,7 @@ struct Plat_Settings{
|
||||||
i32 window_x, window_y;
|
i32 window_x, window_y;
|
||||||
b8 set_window_pos, set_window_size;
|
b8 set_window_pos, set_window_size;
|
||||||
b8 maximize_window;
|
b8 maximize_window;
|
||||||
|
b8 use_hinting;
|
||||||
};
|
};
|
||||||
|
|
||||||
#define App_Read_Command_Line_Sig(name) \
|
#define App_Read_Command_Line_Sig(name) \
|
||||||
|
|
|
@ -494,10 +494,7 @@ stb_font_load(Partition *part,
|
||||||
|
|
||||||
// NOTE(allen): Thanks to insofaras.
|
// NOTE(allen): Thanks to insofaras.
|
||||||
// This is copy-pasted from some work he
|
// This is copy-pasted from some work he
|
||||||
// did to get free type working on linux.
|
// 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.
|
|
||||||
|
|
||||||
#undef internal
|
#undef internal
|
||||||
#include <ft2build.h>
|
#include <ft2build.h>
|
||||||
|
@ -524,7 +521,8 @@ font_load_freetype(Partition *part,
|
||||||
Render_Font *rf,
|
Render_Font *rf,
|
||||||
char *filename,
|
char *filename,
|
||||||
i32 pt_size,
|
i32 pt_size,
|
||||||
i32 tab_width){
|
i32 tab_width,
|
||||||
|
b32 use_hinting){
|
||||||
|
|
||||||
memset(rf, 0, sizeof(*rf));
|
memset(rf, 0, sizeof(*rf));
|
||||||
|
|
||||||
|
@ -584,10 +582,18 @@ font_load_freetype(Partition *part,
|
||||||
u32* pixels = push_array(part, u32, tex_width * tex_height);
|
u32* pixels = push_array(part, u32, tex_width * tex_height);
|
||||||
memset(pixels, 0, tex_width * tex_height * sizeof(u32));
|
memset(pixels, 0, tex_width * tex_height * sizeof(u32));
|
||||||
|
|
||||||
// XXX: test if AUTOHINT looks better or not
|
u32 ft_extra_flags = 0;
|
||||||
// NOTE(allen): As of now FT_LOAD_FORCE_AUTOHINT looks much better for
|
if (use_lcd_filter){
|
||||||
// Liberation Mono which is one of the included 4coder fonts.
|
ft_extra_flags = FT_LOAD_TARGET_LCD;
|
||||||
const u32 ft_extra_flags = use_lcd_filter ? FT_LOAD_TARGET_LCD : FT_LOAD_FORCE_AUTOHINT;
|
}
|
||||||
|
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){
|
for(int i = 0; i < NUM_GLYPHS; ++i){
|
||||||
if(FT_Load_Char(face, i, FT_LOAD_RENDER | ft_extra_flags) != 0) continue;
|
if(FT_Load_Char(face, i, FT_LOAD_RENDER | ft_extra_flags) != 0) continue;
|
||||||
|
|
|
@ -1124,7 +1124,8 @@ Font_Load_Sig(system_draw_font_load){
|
||||||
font_out,
|
font_out,
|
||||||
filename,
|
filename,
|
||||||
pt_size,
|
pt_size,
|
||||||
tab_width);
|
tab_width,
|
||||||
|
win32vars.settings.use_hinting);
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,8 @@
|
||||||
// portable FT rendering.
|
// portable FT rendering.
|
||||||
|
|
||||||
internal b32
|
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;
|
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);
|
String str = make_string(filename, 0, 256);
|
||||||
sysshared_to_binary_path(&str, name);
|
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);
|
end_temp_memory(temp);
|
||||||
|
|
Loading…
Reference in New Issue