To end the issues with AA (International) Fonts; the .bfont.tff now is

compiled in (datatoc) and doesn't need installation anymore.

Also reviewed weird path conventions for searching AA fonts;

- U.fontdir is only used as standard search path for fileselecting
- U.fontname stores only full path to AA font if used one
- If a font cannot be found, it always falls back to the compiled in one
- If .B.blend is saved with default font, U.fontname is not set

Also added a button in usermenu "restore default".

When this works as expected, I'll commit changes for installation too.
This commit is contained in:
Ton Roosendaal 2004-11-08 15:46:57 +00:00
parent 5bba5035b0
commit 061cde65a6
12 changed files with 2160 additions and 111 deletions

@ -132,7 +132,7 @@ FTF_EXPORT void FTF_SetFontSize(char size);
* @param str * @param str
* @param size * @param size
*/ */
FTF_EXPORT int FTF_SetFont(char* str, int size); FTF_EXPORT int FTF_SetFont(const unsigned char* str, int datasize, int fontsize);
/** /**
* SetLanguage * SetLanguage

@ -132,14 +132,14 @@ FTF_EXPORT void FTF_GetBoundingBox(char* str, float *llx, float *lly, float *llz
/** /**
* added by phase * added by phase
* * changed by ton; to allow both file load as memory load (datasize!=0)
*/ */
FTF_EXPORT int FTF_SetFont(char* str, int size) FTF_EXPORT int FTF_SetFont(const unsigned char* str, int datasize, int fontsize)
{ {
return _FTF_GetFont()->SetFont(str, size); return _FTF_GetFont()->SetFont(str, datasize, fontsize);
} }
/* added bt ton */ /* added by ton */
FTF_EXPORT void FTF_SetFontSize(char size) FTF_EXPORT void FTF_SetFontSize(char size)
{ {

@ -159,7 +159,7 @@ void FTF_TTFont::SetFontSize(char size)
} }
int FTF_TTFont::SetFont(char* str, int size) int FTF_TTFont::SetFont(const unsigned char* str, int datasize, int fontsize)
{ {
int err = 0; int err = 0;
bool success = 0; bool success = 0;
@ -171,7 +171,9 @@ int FTF_TTFont::SetFont(char* str, int size)
fontm= NULL; fontm= NULL;
fontl= NULL; fontl= NULL;
font = new FTGLPixmapFont(str); if(datasize) font = new FTGLPixmapFont(str, datasize);
else font = new FTGLPixmapFont(str);
err = font->Error(); err = font->Error();
if(err) { if(err) {
@ -180,12 +182,15 @@ int FTF_TTFont::SetFont(char* str, int size)
} else { } else {
fontm= font; fontm= font;
fonts = new FTGLPixmapFont(str);
fontl = new FTGLPixmapFont(str); if(datasize) fonts = new FTGLPixmapFont(str, datasize);
else fonts = new FTGLPixmapFont(str);
if(datasize) fontl = new FTGLPixmapFont(str, datasize);
else fontl = new FTGLPixmapFont(str);
success = fonts->FaceSize(size-2<8?8:size-2); success = fonts->FaceSize(fontsize-2<8?8:fontsize-2);
success = fontm->FaceSize(size-1<8?8:size-1); success = fontm->FaceSize(fontsize-1<8?8:fontsize-1);
success = fontl->FaceSize(size); success = fontl->FaceSize(fontsize);
if(!success) return 0; if(!success) return 0;
success = fonts->CharMap(ft_encoding_unicode); success = fonts->CharMap(ft_encoding_unicode);
@ -197,7 +202,6 @@ int FTF_TTFont::SetFont(char* str, int size)
} }
} }
void FTF_TTFont::SetLanguage(char* str) void FTF_TTFont::SetLanguage(char* str)
{ {

@ -85,7 +85,7 @@ public:
*/ */
void SetFontSize(char size); void SetFontSize(char size);
int SetFont(char* str, int size); int SetFont(const unsigned char* str, int datasize, int fontsize);
void SetLanguage(char* str); void SetLanguage(char* str);

@ -275,27 +275,28 @@
/* INFO: 300 */ /* INFO: 300 */
/* watch: also in filesel.c and editobject.c */ /* watch: also in filesel.c and editobject.c */
#define B_INFOSCR 301 #define B_INFOSCR 301
#define B_INFODELSCR 302 #define B_INFODELSCR 302
#define B_INFOSCE 304 #define B_INFOSCE 304
#define B_INFODELSCE 305 #define B_INFODELSCE 305
#define B_FILEMENU 306 #define B_FILEMENU 306
#define B_PACKFILE 307 #define B_PACKFILE 307
#define B_CONSOLEOUT 308 #define B_CONSOLEOUT 308
#define B_CONSOLENUMLINES 309 #define B_CONSOLENUMLINES 309
#define B_USERPREF 310 #define B_USERPREF 310
#define B_LOADUIFONT 311 #define B_LOADUIFONT 311
#define B_SETLANGUAGE 312 #define B_SETLANGUAGE 312
#define B_SETFONTSIZE 313 #define B_SETFONTSIZE 313
#define B_SETENCODING 314 #define B_SETENCODING 314
#define B_SETTRANSBUTS 315 #define B_SETTRANSBUTS 315
#define B_DOLANGUIFONT 316 #define B_DOLANGUIFONT 316
#define B_RESTOREFONT 317
#define B_UITHEMECHANGED 317 #define B_UITHEMECHANGED 320
#define B_UITHEMECOLORMOD 318 #define B_UITHEMECOLORMOD 321
#define B_UITHEMERESET 319 #define B_UITHEMERESET 322
#define B_UITHEMEIMPORT 320 #define B_UITHEMEIMPORT 323
#define B_UITHEMEEXPORT 321 #define B_UITHEMEEXPORT 324
/* Definitions for the fileselect buttons in user prefs */ /* Definitions for the fileselect buttons in user prefs */
#define B_FONTDIRFILESEL 330 #define B_FONTDIRFILESEL 330

@ -47,6 +47,9 @@ extern char datatoc_blenderbuttons[];
extern int datatoc_Bfont_size; extern int datatoc_Bfont_size;
extern char datatoc_Bfont[]; extern char datatoc_Bfont[];
extern int datatoc_bfont_ttf_size;
extern char datatoc_bfont_ttf[];
extern int datatoc_cmap_tga_size; extern int datatoc_cmap_tga_size;
extern char datatoc_cmap_tga[]; extern char datatoc_cmap_tga[];

@ -8,6 +8,7 @@ src_env.Append (CCFLAGS = user_options_dict['SDL_CFLAGS'])
source_files = ['B.blend.c', source_files = ['B.blend.c',
'Bfont.c', 'Bfont.c',
'bfont.ttf.c',
'blenderbuttons.c', 'blenderbuttons.c',
'booleanops.c', 'booleanops.c',
'booleanops_mesh.c', 'booleanops_mesh.c',

File diff suppressed because it is too large Load Diff

@ -1564,6 +1564,12 @@ void do_global_buttons(unsigned short event)
allqueue(REDRAWALL, 0); allqueue(REDRAWALL, 0);
break; break;
case B_RESTOREFONT: /* is button from space.c *info* */
U.fontsize= 0;
start_interface_font();
allqueue(REDRAWALL, 0);
break;
case B_DOLANGUIFONT: /* is button from space.c *info* */ case B_DOLANGUIFONT: /* is button from space.c *info* */
if(U.transopts & USER_DOTRANSLATE) if(U.transopts & USER_DOTRANSLATE)
start_interface_font(); start_interface_font();

@ -446,29 +446,32 @@ static void ui_default_menu_arrows(float x1, float y1, float x2, float y2)
/* left/right arrows for number fields */ /* left/right arrows for number fields */
static void ui_default_num_arrows(float x1, float y1, float x2, float y2) static void ui_default_num_arrows(float x1, float y1, float x2, float y2)
{ {
glEnable( GL_POLYGON_SMOOTH ); if( x2-x1 > 25) { // 25 is a bit arbitrary, but small buttons cant have arrows
glEnable( GL_BLEND );
glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );
glShadeModel(GL_FLAT);
glBegin(GL_TRIANGLES);
glVertex2f((short)x1+5,(short)(y2-(y2-y1)/2));
glVertex2f((short)x1+10,(short)(y2-(y2-y1)/2)+4);
glVertex2f((short)x1+10,(short)(y2-(y2-y1)/2)-4);
glEnd();
/* right */ glEnable( GL_POLYGON_SMOOTH );
glShadeModel(GL_FLAT); glEnable( GL_BLEND );
glBegin(GL_TRIANGLES); glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );
glShadeModel(GL_FLAT);
glBegin(GL_TRIANGLES);
glVertex2f((short)x1+5,(short)(y2-(y2-y1)/2));
glVertex2f((short)x1+10,(short)(y2-(y2-y1)/2)+4);
glVertex2f((short)x1+10,(short)(y2-(y2-y1)/2)-4);
glEnd();
glVertex2f((short)x2-5,(short)(y2-(y2-y1)/2)); /* right */
glVertex2f((short)x2-10,(short)(y2-(y2-y1)/2)-4); glShadeModel(GL_FLAT);
glVertex2f((short)x2-10,(short)(y2-(y2-y1)/2)+4); glBegin(GL_TRIANGLES);
glEnd();
glVertex2f((short)x2-5,(short)(y2-(y2-y1)/2));
glDisable( GL_BLEND ); glVertex2f((short)x2-10,(short)(y2-(y2-y1)/2)-4);
glDisable( GL_POLYGON_SMOOTH ); glVertex2f((short)x2-10,(short)(y2-(y2-y1)/2)+4);
glEnd();
glDisable( GL_BLEND );
glDisable( GL_POLYGON_SMOOTH );
}
} }
/* changing black/white for TOG3 buts */ /* changing black/white for TOG3 buts */

@ -43,6 +43,7 @@
#include "BIF_language.h" #include "BIF_language.h"
#include "BIF_space.h" /* allqueue() */ #include "BIF_space.h" /* allqueue() */
#include "BIF_toolbox.h" /* error() */ #include "BIF_toolbox.h" /* error() */
#include "datatoc.h" /* std font */
#include "MEM_guardedalloc.h" /* vprintf, etc ??? */ #include "MEM_guardedalloc.h" /* vprintf, etc ??? */
@ -178,20 +179,18 @@ void lang_setlanguage(void)
/* called from fileselector */ /* called from fileselector */
void set_interface_font(char *str) void set_interface_font(char *str)
{ {
char di[FILE_MAXDIR];
/* this test needed because fileselect callback can happen after disable AA fonts */ /* this test needed because fileselect callback can happen after disable AA fonts */
if(U.transopts & USER_DOTRANSLATE) { if(U.transopts & USER_DOTRANSLATE) {
if(FTF_SetFont(str, U.fontsize)) { if(FTF_SetFont(str, 0, U.fontsize)) {
lang_setlanguage(); lang_setlanguage();
BLI_split_dirfile(str, di, U.fontname);
if(strlen(str) < FILE_MAXDIR) strcpy(U.fontname, str);
if(strlen(di) < FILE_MAXDIR) strcpy(U.fontdir, di);
G.ui_international = TRUE; G.ui_international = TRUE;
} else { }
sprintf(U.fontname, "Invalid font."); else {
G.ui_international = FALSE; U.fontname[0]= 0;
G.ui_international = TRUE; // this case will switch to standard font
} }
allqueue(REDRAWALL, 0); allqueue(REDRAWALL, 0);
} }
@ -200,69 +199,31 @@ void set_interface_font(char *str)
void start_interface_font(void) void start_interface_font(void)
{ {
char tstr[FILE_MAXDIR+FILE_MAXFILE];
int result = 0; int result = 0;
#ifdef __APPLE__
char *bundlepath; if(U.fontsize && U.fontname[0] ) { // we have saved user settings + fontpath
#endif
// try loading font from U.fontname = full path to font in usersettings
result = FTF_SetFont(U.fontname, 0, U.fontsize);
}
else if(U.fontsize) { // user settings, default
result = FTF_SetFont(datatoc_bfont_ttf, datatoc_bfont_ttf_size, U.fontsize);
}
/* hack to find out if we have saved language/font settings. if(result==0) { // use default
if not, set defaults and try .bfont.tff --phase */
if(U.fontsize != 0) { // we have saved user settings
// try load the font from the font dir
BLI_make_file_string("/", tstr, U.fontdir, U.fontname);
result = FTF_SetFont(tstr, U.fontsize);
if(!result) { // else try loading font from current dir
result = FTF_SetFont(U.fontname, U.fontsize);
}
// try home dir (special case for .bfont.ttf) (aphex)
if(!result) {
strcpy(tstr, BLI_gethome());
if (strstr(tstr,".blender") == 0) {
strcat(tstr,"/.blender/");
}
strcat(tstr, U.fontname);
result = FTF_SetFont(tstr, U.fontsize);
}
} else {
U.language= 0; U.language= 0;
U.fontsize= 11; U.fontsize= 11;
U.encoding= 0; U.encoding= 0;
U.fontname[0]= 0;
#if defined (__APPLE__) result = FTF_SetFont(datatoc_bfont_ttf, datatoc_bfont_ttf_size, U.fontsize);
bundlepath = BLI_getbundle();
strcpy(tstr, bundlepath);
strcat(tstr, "/Contents/Resources/");
strcat(tstr, ".bfont.ttf");
result = FTF_SetFont(tstr, U.fontsize);
//sprintf(U.fontname, ".blender/.bfont.ttf");
strncpy(U.fontname, tstr, 255);
#elif defined (WIN32)
strcpy(tstr, BLI_gethome());
strcat(tstr, "/.bfont.ttf\0");
result = FTF_SetFont(tstr, U.fontsize);
sprintf(U.fontname, "/.bfont.ttf\0");
#else
strcpy(tstr, BLI_gethome());
strcat(tstr, "/.blender/.bfont.ttf");
result = FTF_SetFont(tstr, U.fontsize);
strncpy(U.fontname, tstr, 255);
#endif
} }
if(result) { if(result) {
lang_setlanguage(); lang_setlanguage();
G.ui_international = TRUE; G.ui_international = TRUE;
} else { }
else {
printf("no font found for international support\n"); printf("no font found for international support\n");
G.ui_international = FALSE; G.ui_international = FALSE;
U.transopts &= ~USER_DOTRANSLATE; U.transopts &= ~USER_DOTRANSLATE;

@ -2464,25 +2464,29 @@ void drawinfospace(ScrArea *sa, void *spacedata)
} else if(U.userpref == 2) { /* language & colors */ } else if(U.userpref == 2) { /* language & colors */
#ifdef INTERNATIONAL #ifdef INTERNATIONAL
char curfont[320];
sprintf(curfont, "Interface Font: ");
strcat(curfont,U.fontname);
uiDefButBitS(block, TOG, USER_DOTRANSLATE, B_DOLANGUIFONT, "International Fonts", uiDefButBitS(block, TOG, USER_DOTRANSLATE, B_DOLANGUIFONT, "International Fonts",
xpos,y2,mpref,buth, xpos,y2,mpref,buth,
&(U.transopts), 0, 0, 0, 0, "Activate international interface"); &(U.transopts), 0, 0, 0, 0, "Activate international interface");
if(U.transopts & USER_DOTRANSLATE) { if(U.transopts & USER_DOTRANSLATE) {
char curfont[320];
sprintf(curfont, "Interface Font: ");
if(U.fontname[0]) strcat(curfont, U.fontname);
else strcat(curfont, "Built-in");
uiDefBut(block, LABEL,0,curfont, uiDefBut(block, LABEL,0,curfont,
(xpos+edgsp+mpref+midsp),y2,mpref,buth, (xpos),y3,4*mpref,buth,
0, 0, 0, 0, 0, ""); 0, 0, 0, 0, 0, "");
uiDefBut(block, BUT, B_LOADUIFONT, "Select Font", uiDefBut(block, BUT, B_LOADUIFONT, "Select Font",
xpos,y1,mpref,buth, xpos,y1,mpref,buth,
0, 0, 0, 0, 0, "Select a new font for the interface"); 0, 0, 0, 0, 0, "Select a new font for the interface");
uiDefButI(block, BUT, B_RESTOREFONT, "Restore to default",
(xpos+edgsp+mpref+midsp),y2,mpref,buth,
&U.fontsize, 0, 0, 0, 0, "Restores to using the default included antialised font");
uiDefButI(block, MENU|INT, B_SETFONTSIZE, fontsize_pup(), uiDefButI(block, MENU|INT, B_SETFONTSIZE, fontsize_pup(),
(xpos+edgsp+mpref+midsp),y1,mpref,buth, (xpos+edgsp+mpref+midsp),y1,mpref,buth,
&U.fontsize, 0, 0, 0, 0, "Current interface font size (points)"); &U.fontsize, 0, 0, 0, 0, "Current interface font size (points)");