Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/blender/blenfont/intern')
-rw-r--r--source/blender/blenfont/intern/Makefile3
-rw-r--r--source/blender/blenfont/intern/blf.c269
-rw-r--r--source/blender/blenfont/intern/blf_font.c2
-rw-r--r--source/blender/blenfont/intern/blf_lang.c59
4 files changed, 164 insertions, 169 deletions
diff --git a/source/blender/blenfont/intern/Makefile b/source/blender/blenfont/intern/Makefile
index 38e76d03cad..d3a6e656028 100644
--- a/source/blender/blenfont/intern/Makefile
+++ b/source/blender/blenfont/intern/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2008 Blender Foundation.
# All rights reserved.
@@ -32,6 +32,7 @@ DIR = $(OCGDIR)/blender/blenfont
include nan_compile.mk
CFLAGS += $(LEVEL_1_C_WARNINGS)
+#CFLAGS += -O2 -Wall -Wno-char-subscripts
# OpenGL and Freetype2
CPPFLAGS += -I$(NAN_GLEW)/include
diff --git a/source/blender/blenfont/intern/blf.c b/source/blender/blenfont/intern/blf.c
index 9a65b15200f..f6b7c5f71e6 100644
--- a/source/blender/blenfont/intern/blf.c
+++ b/source/blender/blenfont/intern/blf.c
@@ -61,14 +61,18 @@ FontBLF *global_font[BLF_MAX_FONT];
/* Number of font. */
int global_font_num= 0;
-/* Current font. */
-int global_font_cur= 0;
-
/* Default size and dpi, for BLF_draw_default. */
int global_font_default= -1;
int global_font_points= 11;
int global_font_dpi= 72;
+static FontBLF *BLF_get(int fontid)
+{
+ if (fontid >= 0 && fontid < BLF_MAX_FONT)
+ return(global_font[fontid]);
+ return(NULL);
+}
+
int BLF_init(int points, int dpi)
{
int i;
@@ -149,11 +153,48 @@ int BLF_load(char *name)
return(i);
}
-void BLF_metrics_attach(unsigned char *mem, int mem_size)
+int BLF_load_unique(char *name)
{
FontBLF *font;
+ char *filename;
+ int i;
+
+ if (!name)
+ return(-1);
+
+ /* Don't search in the cache!! make a new
+ * object font, this is for keep fonts threads safe.
+ */
+ if (global_font_num+1 >= BLF_MAX_FONT) {
+ printf("Too many fonts!!!\n");
+ return(-1);
+ }
+
+ filename= blf_dir_search(name);
+ if (!filename) {
+ printf("Can't find font: %s\n", name);
+ return(-1);
+ }
+
+ font= blf_font_new(name, filename);
+ MEM_freeN(filename);
+
+ if (!font) {
+ printf("Can't load font: %s\n", name);
+ return(-1);
+ }
- font= global_font[global_font_cur];
+ global_font[global_font_num]= font;
+ i= global_font_num;
+ global_font_num++;
+ return(i);
+}
+
+void BLF_metrics_attach(int fontid, unsigned char *mem, int mem_size)
+{
+ FontBLF *font;
+
+ font= BLF_get(fontid);
if (font)
blf_font_attach_from_mem(font, mem, mem_size);
}
@@ -194,50 +235,91 @@ int BLF_load_mem(char *name, unsigned char *mem, int mem_size)
return(i);
}
-void BLF_set(int fontid)
+int BLF_load_mem_unique(char *name, unsigned char *mem, int mem_size)
{
- if (fontid >= 0 && fontid < BLF_MAX_FONT)
- global_font_cur= fontid;
+ FontBLF *font;
+ int i;
+
+ if (!name)
+ return(-1);
+
+ /*
+ * Don't search in the cache, make a new object font!
+ * this is to keep the font thread safe.
+ */
+ if (global_font_num+1 >= BLF_MAX_FONT) {
+ printf("Too many fonts!!!\n");
+ return(-1);
+ }
+
+ if (!mem || !mem_size) {
+ printf("Can't load font: %s from memory!!\n", name);
+ return(-1);
+ }
+
+ font= blf_font_new_from_mem(name, mem, mem_size);
+ if (!font) {
+ printf("Can't load font: %s from memory!!\n", name);
+ return(-1);
+ }
+
+ global_font[global_font_num]= font;
+ i= global_font_num;
+ global_font_num++;
+ return(i);
+}
+
+void BLF_enable(int fontid, int option)
+{
+ FontBLF *font;
+
+ font= BLF_get(fontid);
+ if (font)
+ font->flags |= option;
}
-int BLF_get(void)
+void BLF_disable(int fontid, int option)
{
- return(global_font_cur);
+ FontBLF *font;
+
+ font= BLF_get(fontid);
+ if (font)
+ font->flags &= ~option;
}
-void BLF_enable(int option)
+void BLF_enable_default(int option)
{
FontBLF *font;
- font= global_font[global_font_cur];
+ font= BLF_get(global_font_default);
if (font)
font->flags |= option;
}
-void BLF_disable(int option)
+void BLF_disable_default(int option)
{
FontBLF *font;
- font= global_font[global_font_cur];
+ font= BLF_get(global_font_default);
if (font)
font->flags &= ~option;
}
-void BLF_aspect(float aspect)
+void BLF_aspect(int fontid, float aspect)
{
FontBLF *font;
- font= global_font[global_font_cur];
+ font= BLF_get(fontid);
if (font)
font->aspect= aspect;
}
-void BLF_position(float x, float y, float z)
+void BLF_position(int fontid, float x, float y, float z)
{
FontBLF *font;
float remainder;
- font= global_font[global_font_cur];
+ font= BLF_get(fontid);
if (font) {
remainder= x - floor(x);
if (remainder > 0.4 && remainder < 0.6) {
@@ -261,29 +343,26 @@ void BLF_position(float x, float y, float z)
}
}
-void BLF_size(int size, int dpi)
+void BLF_size(int fontid, int size, int dpi)
{
FontBLF *font;
- font= global_font[global_font_cur];
+ font= BLF_get(fontid);
if (font)
blf_font_size(font, size, dpi);
}
-void BLF_blur(int size)
+void BLF_blur(int fontid, int size)
{
FontBLF *font;
- font= global_font[global_font_cur];
+ font= BLF_get(fontid);
if (font)
font->blur= size;
}
void BLF_draw_default(float x, float y, float z, char *str)
{
- FontBLF *font;
- int old_font=0, old_point=0, old_dpi=0;
-
if (!str)
return;
@@ -295,38 +374,21 @@ void BLF_draw_default(float x, float y, float z, char *str)
return;
}
- font= global_font[global_font_cur];
- if (font) {
- old_font= global_font_cur;
- old_point= font->size;
- old_dpi= font->dpi;
- }
-
- global_font_cur= global_font_default;
- BLF_size(global_font_points, global_font_dpi);
- BLF_position(x, y, z);
- BLF_draw(str);
-
- /* restore the old font. */
- if (font) {
- global_font_cur= old_font;
- BLF_size(old_point, old_dpi);
- }
+ BLF_size(global_font_default, global_font_points, global_font_dpi);
+ BLF_position(global_font_default, x, y, z);
+ BLF_draw(global_font_default, str);
}
-void BLF_default_rotation(float angle)
+void BLF_rotation_default(float angle)
{
-
- if (global_font_default>=0) {
- global_font[global_font_default]->angle= angle;
- if(angle)
- global_font[global_font_default]->flags |= BLF_ROTATION;
- else
- global_font[global_font_default]->flags &= ~BLF_ROTATION;
- }
+ FontBLF *font;
+
+ font= BLF_get(global_font_default);
+ if (font)
+ font->angle= angle;
}
-void BLF_draw(char *str)
+void BLF_draw(int fontid, char *str)
{
FontBLF *font;
@@ -334,7 +396,7 @@ void BLF_draw(char *str)
* The pixmap alignment hack is handle
* in BLF_position (old ui_rasterpos_safe).
*/
- font= global_font[global_font_cur];
+ font= BLF_get(fontid);
if (font) {
glEnable(GL_BLEND);
glEnable(GL_TEXTURE_2D);
@@ -355,39 +417,39 @@ void BLF_draw(char *str)
}
}
-void BLF_boundbox(char *str, rctf *box)
+void BLF_boundbox(int fontid, char *str, rctf *box)
{
FontBLF *font;
- font= global_font[global_font_cur];
+ font= BLF_get(fontid);
if (font)
blf_font_boundbox(font, str, box);
}
-void BLF_width_and_height(char *str, float *width, float *height)
+void BLF_width_and_height(int fontid, char *str, float *width, float *height)
{
FontBLF *font;
- font= global_font[global_font_cur];
+ font= BLF_get(fontid);
if (font)
blf_font_width_and_height(font, str, width, height);
}
-float BLF_width(char *str)
+float BLF_width(int fontid, char *str)
{
FontBLF *font;
- font= global_font[global_font_cur];
+ font= BLF_get(fontid);
if (font)
return(blf_font_width(font, str));
return(0.0f);
}
-float BLF_fixed_width(void)
+float BLF_fixed_width(int fontid)
{
FontBLF *font;
- font= global_font[global_font_cur];
+ font= BLF_get(fontid);
if (font)
return(blf_font_fixed_width(font));
return(0.0f);
@@ -395,9 +457,7 @@ float BLF_fixed_width(void)
float BLF_width_default(char *str)
{
- FontBLF *font;
float width;
- int old_font=0, old_point=0, old_dpi=0;
if (global_font_default == -1)
global_font_default= blf_search("default");
@@ -407,30 +467,16 @@ float BLF_width_default(char *str)
return(0.0f);
}
- font= global_font[global_font_cur];
- if (font) {
- old_font= global_font_cur;
- old_point= font->size;
- old_dpi= font->dpi;
- }
-
- global_font_cur= global_font_default;
- BLF_size(global_font_points, global_font_dpi);
- width= BLF_width(str);
-
- /* restore the old font. */
- if (font) {
- global_font_cur= old_font;
- BLF_size(old_point, old_dpi);
- }
+ BLF_size(global_font_default, global_font_points, global_font_dpi);
+ width= BLF_width(global_font_default, str);
return(width);
}
-float BLF_height(char *str)
+float BLF_height(int fontid, char *str)
{
FontBLF *font;
- font= global_font[global_font_cur];
+ font= BLF_get(fontid);
if (font)
return(blf_font_height(font, str));
return(0.0f);
@@ -438,9 +484,7 @@ float BLF_height(char *str)
float BLF_height_default(char *str)
{
- FontBLF *font;
float height;
- int old_font=0, old_point=0, old_dpi=0;
if (global_font_default == -1)
global_font_default= blf_search("default");
@@ -450,39 +494,38 @@ float BLF_height_default(char *str)
return(0.0f);
}
- font= global_font[global_font_cur];
- if (font) {
- old_font= global_font_cur;
- old_point= font->size;
- old_dpi= font->dpi;
- }
-
- global_font_cur= global_font_default;
- BLF_size(global_font_points, global_font_dpi);
- height= BLF_height(str);
-
- /* restore the old font. */
- if (font) {
- global_font_cur= old_font;
- BLF_size(old_point, old_dpi);
- }
+ BLF_size(global_font_default, global_font_points, global_font_dpi);
+ height= BLF_height(global_font_default, str);
return(height);
}
-void BLF_rotation(float angle)
+void BLF_rotation(int fontid, float angle)
{
FontBLF *font;
- font= global_font[global_font_cur];
+ font= BLF_get(fontid);
if (font)
font->angle= angle;
}
-void BLF_clipping(float xmin, float ymin, float xmax, float ymax)
+void BLF_clipping(int fontid, float xmin, float ymin, float xmax, float ymax)
+{
+ FontBLF *font;
+
+ font= BLF_get(fontid);
+ if (font) {
+ font->clip_rec.xmin= xmin;
+ font->clip_rec.ymin= ymin;
+ font->clip_rec.xmax= xmax;
+ font->clip_rec.ymax= ymax;
+ }
+}
+
+void BLF_clipping_default(float xmin, float ymin, float xmax, float ymax)
{
FontBLF *font;
- font= global_font[global_font_cur];
+ font= BLF_get(global_font_default);
if (font) {
font->clip_rec.xmin= xmin;
font->clip_rec.ymin= ymin;
@@ -491,11 +534,11 @@ void BLF_clipping(float xmin, float ymin, float xmax, float ymax)
}
}
-void BLF_shadow(int level, float r, float g, float b, float a)
+void BLF_shadow(int fontid, int level, float r, float g, float b, float a)
{
FontBLF *font;
- font= global_font[global_font_cur];
+ font= BLF_get(fontid);
if (font) {
font->shadow= level;
font->shadow_col[0]= r;
@@ -505,22 +548,22 @@ void BLF_shadow(int level, float r, float g, float b, float a)
}
}
-void BLF_shadow_offset(int x, int y)
+void BLF_shadow_offset(int fontid, int x, int y)
{
FontBLF *font;
- font= global_font[global_font_cur];
+ font= BLF_get(fontid);
if (font) {
font->shadow_x= x;
font->shadow_y= y;
}
}
-void BLF_buffer(float *fbuf, unsigned char *cbuf, unsigned int w, unsigned int h, int nch)
+void BLF_buffer(int fontid, float *fbuf, unsigned char *cbuf, unsigned int w, unsigned int h, int nch)
{
FontBLF *font;
- font= global_font[global_font_cur];
+ font= BLF_get(fontid);
if (font) {
font->b_fbuf= fbuf;
font->b_cbuf= cbuf;
@@ -530,11 +573,11 @@ void BLF_buffer(float *fbuf, unsigned char *cbuf, unsigned int w, unsigned int h
}
}
-void BLF_buffer_col(float r, float g, float b, float a)
+void BLF_buffer_col(int fontid, float r, float g, float b, float a)
{
FontBLF *font;
- font= global_font[global_font_cur];
+ font= BLF_get(fontid);
if (font) {
font->b_col[0]= r;
font->b_col[1]= g;
@@ -543,11 +586,11 @@ void BLF_buffer_col(float r, float g, float b, float a)
}
}
-void BLF_draw_buffer(char *str)
+void BLF_draw_buffer(int fontid, char *str)
{
FontBLF *font;
- font= global_font[global_font_cur];
+ font= BLF_get(fontid);
if (font)
blf_font_buffer(font, str);
}
diff --git a/source/blender/blenfont/intern/blf_font.c b/source/blender/blenfont/intern/blf_font.c
index f7c5531f0ac..a932682b027 100644
--- a/source/blender/blenfont/intern/blf_font.c
+++ b/source/blender/blenfont/intern/blf_font.c
@@ -38,10 +38,8 @@
#include "MEM_guardedalloc.h"
-#include "DNA_listBase.h"
#include "DNA_vec_types.h"
-#include "BKE_utildefines.h"
#include "BLI_blenlib.h"
#include "BLI_linklist.h" /* linknode */
diff --git a/source/blender/blenfont/intern/blf_lang.c b/source/blender/blenfont/intern/blf_lang.c
index bc2de70222d..7054d955faf 100644
--- a/source/blender/blenfont/intern/blf_lang.c
+++ b/source/blender/blenfont/intern/blf_lang.c
@@ -34,7 +34,6 @@
#include <locale.h>
#include "libintl.h"
-#include "MEM_guardedalloc.h"
#include "DNA_listBase.h"
#include "DNA_vec_types.h"
@@ -59,65 +58,19 @@ char global_messagepath[1024];
char global_language[32];
char global_encoding_name[32];
-#if defined(__APPLE__)
-void BLF_lang_init(void) /* Apple Only, todo - use BLI_gethome_folder */
-{
- char *bundlepath;
-
- strcpy(global_encoding_name, SYSTEM_ENCODING_DEFAULT);
-
- /* set messagepath directory */
-#ifndef LOCALEDIR
-#define LOCALEDIR "/usr/share/locale"
-#endif
-
- strcpy(global_messagepath, ".blender/locale");
-
- if (!BLI_exist(global_messagepath)) { /* locale not in current dir */
- BLI_make_file_string("/", global_messagepath, BLI_gethome(), ".blender/locale");
- if (!BLI_exist(global_messagepath)) { /* locale not in home dir */
- /* message catalogs are stored inside the application bundle */
- bundlepath= BLI_getbundle();
- strcpy(global_messagepath, bundlepath);
- strcat(global_messagepath, "/Contents/Resources/locale");
- if (!BLI_exist(global_messagepath)) { /* locale not in bundle (now that's odd..) */
- strcpy(global_messagepath, LOCALEDIR);
-
- if (!BLI_exist(global_messagepath)) { /* locale not in LOCALEDIR */
- strcpy(global_messagepath, "message"); /* old compatibility as last */
- }
- }
- }
- }
-}
-#elif defined(_WIN32)
-void BLF_lang_init(void) /* Windows Only, todo - use BLI_gethome_folder */
+void BLF_lang_init(void)
{
- strcpy(global_encoding_name, SYSTEM_ENCODING_DEFAULT);
+ char *messagepath= BLI_get_folder(BLENDER_DATAFILES, "locale");
- strcpy(global_messagepath, ".blender/locale");
-
- if (!BLI_exist(global_messagepath)) { /* locale not in current dir */
- BLI_make_file_string("/", global_messagepath, BLI_gethome(), ".blender/locale");
-
- if (!BLI_exist(global_messagepath)) { /* locale not in home dir */
- BLI_make_file_string("/", global_messagepath, BLI_gethome(), "/locale");
- }
- }
-}
-#else
-void BLF_lang_init(void) /* not win or mac */
-{
- char *messagepath= BLI_gethome_folder("locale", BLI_GETHOME_ALL);
+ BLI_strncpy(global_encoding_name, SYSTEM_ENCODING_DEFAULT, sizeof(global_encoding_name));
- if(messagepath)
- strncpy(global_messagepath, messagepath, sizeof(global_messagepath));
+ if (messagepath)
+ BLI_strncpy(global_messagepath, messagepath, sizeof(global_messagepath));
else
global_messagepath[0]= '\0';
-
}
-#endif
+
void BLF_lang_set(const char *str)
{