cvar_t r_font_postprocess_shadow_z = {CF_CLIENT | CF_ARCHIVE, "r_font_postprocess_shadow_z", "0", "font shadow Z shift amount, applied during blurring"};
cvar_t r_font_hinting = {CF_CLIENT | CF_ARCHIVE, "r_font_hinting", "3", "0 = no hinting, 1 = light autohinting, 2 = full autohinting, 3 = full hinting"};
cvar_t r_font_antialias = {CF_CLIENT | CF_ARCHIVE, "r_font_antialias", "1", "0 = monochrome, 1 = grey" /* , 2 = rgb, 3 = bgr" */};
+cvar_t r_font_always_reload = {CF_CLIENT | CF_ARCHIVE, "r_font_always_reload", "0", "reload a font even given the same loadfont command. useful for trying out different versions of the same font file"};
cvar_t r_nearest_2d = {CF_CLIENT | CF_ARCHIVE, "r_nearest_2d", "0", "use nearest filtering on all 2d textures (including conchars)"};
cvar_t r_nearest_conchars = {CF_CLIENT | CF_ARCHIVE, "r_nearest_conchars", "0", "use nearest filtering on conchars texture"};
Con_DPrintf("Draw_CachePic(\"%s\"): frame %i: loading pic%s\n", path, draw_frame, (cachepicflags & CACHEPICFLAG_NOTPERSISTENT) ? " notpersist" : "");
pic = cachepics + (numcachepics++);
memset(pic, 0, sizeof(*pic));
- strlcpy (pic->name, path, sizeof(pic->name));
+ dp_strlcpy (pic->name, path, sizeof(pic->name));
// link into list
pic->chain = cachepichash[hashkey];
cachepichash[hashkey] = pic;
Con_DPrintf("Draw_NewPic(\"%s\"): frame %i: creating new cachepic\n", picname, draw_frame);
pic = cachepics + (numcachepics++);
memset(pic, 0, sizeof(*pic));
- strlcpy (pic->name, picname, sizeof(pic->name));
+ dp_strlcpy (pic->name, picname, sizeof(pic->name));
// link into list
pic->chain = cachepichash[hashkey];
cachepichash[hashkey] = pic;
if(override || !fnt->texpath[0])
{
- strlcpy(fnt->texpath, name, sizeof(fnt->texpath));
+ dp_strlcpy(fnt->texpath, name, sizeof(fnt->texpath));
// load the cvars when the font is FIRST loader
fnt->settings.scale = scale;
fnt->settings.voffset = voffset;
fnt->settings.shadowy = r_font_postprocess_shadow_y.value;
fnt->settings.shadowz = r_font_postprocess_shadow_z.value;
}
+
// fix bad scale
if (fnt->settings.scale <= 0)
fnt->settings.scale = 1;
if(fnt->ft2)
{
- // clear previous freetype font to prevent leaking memory
+ // we are going to reload. clear old ft2 data
Font_UnloadFont(fnt->ft2);
Mem_Free(fnt->ft2);
fnt->ft2 = NULL;
if(!Draw_IsPicLoaded(fnt->pic))
{
fnt->pic = Draw_CachePic_Flags("gfx/conchars", CACHEPICFLAG_NOCOMPRESSION | (r_nearest_conchars.integer ? CACHEPICFLAG_NEAREST : 0));
- strlcpy(widthfile, "gfx/conchars.width", sizeof(widthfile));
+ dp_strlcpy(widthfile, "gfx/conchars.width", sizeof(widthfile));
}
else
dpsnprintf(widthfile, sizeof(widthfile), "%s.width", fnt->fallbacks[i]);
{
if(!strcmp(dp_fonts.f[i].title, ""))
{
- strlcpy(dp_fonts.f[i].title, title, sizeof(dp_fonts.f[i].title));
+ dp_strlcpy(dp_fonts.f[i].title, title, sizeof(dp_fonts.f[i].title));
return &dp_fonts.f[i];
}
}
if (dp_fonts.f[i].ft2)
dp_fonts.f[i].ft2->settings = &dp_fonts.f[i].settings;
// register a font in first expanded slot
- strlcpy(dp_fonts.f[oldsize].title, title, sizeof(dp_fonts.f[oldsize].title));
+ dp_strlcpy(dp_fonts.f[oldsize].title, title, sizeof(dp_fonts.f[oldsize].title));
return &dp_fonts.f[oldsize];
}
return NULL;
Con_Printf("font function not found\n");
return;
}
+ else
+ {
+ if (strcmp(cmd->cmdline, f->cmdline) != 0 || r_font_always_reload.integer)
+ dp_strlcpy(f->cmdline, cmd->cmdline, MAX_FONT_CMDLINE);
+ else
+ {
+ Con_DPrintf("LoadFont: font %s is unchanged\n", Cmd_Argv(cmd, 1));
+ return;
+ }
+ }
if(Cmd_Argc(cmd) < 3)
filelist = "gfx/conchars";
}
if(!c || (c - filelist) >= MAX_QPATH)
- strlcpy(mainfont, filelist, sizeof(mainfont));
+ dp_strlcpy(mainfont, filelist, sizeof(mainfont));
else
{
memcpy(mainfont, filelist, c - filelist);
}
if(!c || (c-filelist) >= MAX_QPATH)
{
- strlcpy(f->fallbacks[i], filelist, sizeof(mainfont));
+ dp_strlcpy(f->fallbacks[i], filelist, sizeof(mainfont));
}
else
{
Cvar_RegisterVariable(&r_font_postprocess_shadow_z);
Cvar_RegisterVariable(&r_font_hinting);
Cvar_RegisterVariable(&r_font_antialias);
+ Cvar_RegisterVariable(&r_font_always_reload);
Cvar_RegisterVariable(&r_textshadow);
Cvar_RegisterVariable(&r_textbrightness);
Cvar_RegisterVariable(&r_textcontrast);
memset(dp_fonts.f, 0, sizeof(dp_font_t) * dp_fonts.maxsize);
// assign starting font names
- strlcpy(FONT_DEFAULT->title, "default", sizeof(FONT_DEFAULT->title));
- strlcpy(FONT_DEFAULT->texpath, "gfx/conchars", sizeof(FONT_DEFAULT->texpath));
- strlcpy(FONT_CONSOLE->title, "console", sizeof(FONT_CONSOLE->title));
- strlcpy(FONT_SBAR->title, "sbar", sizeof(FONT_SBAR->title));
- strlcpy(FONT_NOTIFY->title, "notify", sizeof(FONT_NOTIFY->title));
- strlcpy(FONT_CHAT->title, "chat", sizeof(FONT_CHAT->title));
- strlcpy(FONT_CENTERPRINT->title, "centerprint", sizeof(FONT_CENTERPRINT->title));
- strlcpy(FONT_INFOBAR->title, "infobar", sizeof(FONT_INFOBAR->title));
- strlcpy(FONT_MENU->title, "menu", sizeof(FONT_MENU->title));
+ dp_strlcpy(FONT_DEFAULT->title, "default", sizeof(FONT_DEFAULT->title));
+ dp_strlcpy(FONT_DEFAULT->texpath, "gfx/conchars", sizeof(FONT_DEFAULT->texpath));
+ dp_strlcpy(FONT_CONSOLE->title, "console", sizeof(FONT_CONSOLE->title));
+ dp_strlcpy(FONT_SBAR->title, "sbar", sizeof(FONT_SBAR->title));
+ dp_strlcpy(FONT_NOTIFY->title, "notify", sizeof(FONT_NOTIFY->title));
+ dp_strlcpy(FONT_CHAT->title, "chat", sizeof(FONT_CHAT->title));
+ dp_strlcpy(FONT_CENTERPRINT->title, "centerprint", sizeof(FONT_CENTERPRINT->title));
+ dp_strlcpy(FONT_INFOBAR->title, "infobar", sizeof(FONT_INFOBAR->title));
+ dp_strlcpy(FONT_MENU->title, "menu", sizeof(FONT_MENU->title));
for(i = 0, j = 0; i < MAX_USERFONTS; ++i)
if(!FONT_USER(i)->title[0])
dpsnprintf(FONT_USER(i)->title, sizeof(FONT_USER(i)->title), "user%d", j++);