forked from bartvdbraak/blender
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:
parent
5bba5035b0
commit
061cde65a6
@ -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',
|
||||||
|
2066
source/blender/src/bfont.ttf.c
Normal file
2066
source/blender/src/bfont.ttf.c
Normal file
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)");
|
||||||
|
Loading…
Reference in New Issue
Block a user