[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [19912] branches/blender2.5/blender/source /blender: Move texture draw to blf_util.c, now both font used it.

Diego Borghetti bdiego at gmail.com
Thu Apr 23 23:57:41 CEST 2009


Revision: 19912
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=19912
Author:   bdiego
Date:     2009-04-23 23:57:41 +0200 (Thu, 23 Apr 2009)

Log Message:
-----------
Move texture draw to blf_util.c, now both font used it.

A little cleanup on the internal font, it's possible load the old
bmfont with: BLF_load_mem(name, NULL, 0) where name can be: helv,
helvb or scr.

Note that the internal font also support both draw, texture and bitmap,
by default always used texture.

Remove some old lang function that I left there and don't exist any more
because the locale are now in the RNA.

Small changes to Style's, so if we build without freetype2 by default
go back to the internal font, this is a little ugly (and have the old
problem of scale) but now blender always show text (need work a little
more there).

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/blenfont/BLF_api.h
    branches/blender2.5/blender/source/blender/blenfont/intern/blf.c
    branches/blender2.5/blender/source/blender/blenfont/intern/blf_glyph.c
    branches/blender2.5/blender/source/blender/blenfont/intern/blf_internal.c
    branches/blender2.5/blender/source/blender/blenfont/intern/blf_internal.h
    branches/blender2.5/blender/source/blender/blenfont/intern/blf_internal_types.h
    branches/blender2.5/blender/source/blender/blenfont/intern/blf_lang.c
    branches/blender2.5/blender/source/blender/blenfont/intern/blf_util.c
    branches/blender2.5/blender/source/blender/editors/interface/interface_style.c

Modified: branches/blender2.5/blender/source/blender/blenfont/BLF_api.h
===================================================================
--- branches/blender2.5/blender/source/blender/blenfont/BLF_api.h	2009-04-23 21:19:42 UTC (rev 19911)
+++ branches/blender2.5/blender/source/blender/blenfont/BLF_api.h	2009-04-23 21:57:41 UTC (rev 19912)
@@ -43,6 +43,12 @@
 void BLF_set(int fontid);
 int BLF_get(void);
 
+/*
+ * Return the font type, can be freetype2 or internal, -1 if
+ * some error happen (no current font).
+ */
+int BLF_type_get(void);
+
 void BLF_aspect(float aspect);
 void BLF_position(float x, float y, float z);
 void BLF_size(int size, int dpi);
@@ -74,26 +80,18 @@
 void BLF_enable(int option);
 void BLF_disable(int option);
 
-/* Read the .Blanguages file, return 1 on success or 0 if fails. */
-int BLF_lang_init(void);
+/*
+ * Search the path directory to the locale files, this try all
+ * the case for Linux, Win and Mac.
+ */
+void BLF_lang_init(void);
 
-/* Free the memory allocate for the .Blanguages. */
-void BLF_lang_exit(void);
+/* Set the current locale. */
+void BLF_lang_set(const char *);
 
-/* Set the current Language. */
-void BLF_lang_set(int id);
+/* Set the current encoding name. */
+void BLF_lang_encoding_name(const char *str);
 
-/* Return a string with all the Language available. */
-char *BLF_lang_pup(void);
-
-/* Return the number of invalid lines in the .Blanguages file,
- * zero means no error found.
- */
-int BLF_lang_error(void);
-
-/* Return the code string for the specified language code. */
-char *BLF_lang_find_code(short langid);
-
 /* Add a path to the font dir paths. */
 void BLF_dir_add(const char *path);
 
@@ -114,4 +112,8 @@
 #define BLF_MODE_TEXTURE 0
 #define BLF_MODE_BITMAP 1
 
+/* font->type */
+#define BLF_FONT_FREETYPE2 0
+#define BLF_FONT_INTERNAL 1
+
 #endif /* BLF_API_H */

Modified: branches/blender2.5/blender/source/blender/blenfont/intern/blf.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenfont/intern/blf.c	2009-04-23 21:19:42 UTC (rev 19911)
+++ branches/blender2.5/blender/source/blender/blenfont/intern/blf.c	2009-04-23 21:57:41 UTC (rev 19912)
@@ -185,7 +185,7 @@
 	if (!font) {
 #ifdef WITH_FREETYPE2
 		if (!mem || !mem_size) {
-			printf("Can't load font, %s from memory!!\n", name);
+			printf("Can't load font: %s from memory!!\n", name);
 			return(-1);
 		}
 
@@ -193,7 +193,7 @@
 #endif /* WITH_FREETYPE2 */
 
 		if (!font) {
-			printf("Can't load font, %s from memory!!\n", name);
+			printf("Can't load font: %s from memory!!\n", name);
 			return(-1);
 		}
 	}
@@ -215,6 +215,16 @@
 	return(global_font_cur);
 }
 
+int BLF_type_get(void)
+{
+	FontBLF *font;
+
+	font= global_font[global_font_cur];
+	if (font)
+		return(font->type);
+	return(-1);
+}
+
 void BLF_enable(int option)
 {
 	FontBLF *font;

Modified: branches/blender2.5/blender/source/blender/blenfont/intern/blf_glyph.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenfont/intern/blf_glyph.c	2009-04-23 21:19:42 UTC (rev 19911)
+++ branches/blender2.5/blender/source/blender/blenfont/intern/blf_glyph.c	2009-04-23 21:57:41 UTC (rev 19912)
@@ -433,69 +433,6 @@
 	MEM_freeN(g);
 }
 
-static void blf_glyph_texture_draw(float uv[2][2], float dx, float y1, float dx1, float y2)
-{
-	
-	glBegin(GL_QUADS);
-	glTexCoord2f(uv[0][0], uv[0][1]);
-	glVertex2f(dx, y1);
-	
-	glTexCoord2f(uv[0][0], uv[1][1]);
-	glVertex2f(dx, y2);
-	
-	glTexCoord2f(uv[1][0], uv[1][1]);
-	glVertex2f(dx1, y2);
-	
-	glTexCoord2f(uv[1][0], uv[0][1]);
-	glVertex2f(dx1, y1);
-	glEnd();
-	
-}
-
-static void blf_glyph_texture5_draw(float uv[2][2], float x1, float y1, float x2, float y2)
-{
-	float soft[25]= {
-		1/60.0f, 1/60.0f, 2/60.0f, 1/60.0f, 1/60.0f, 
-		1/60.0f, 3/60.0f, 5/60.0f, 3/60.0f, 1/60.0f, 
-		2/60.0f, 5/60.0f, 8/60.0f, 5/60.0f, 2/60.0f, 
-		1/60.0f, 3/60.0f, 5/60.0f, 3/60.0f, 1/60.0f, 
-		1/60.0f, 1/60.0f, 2/60.0f, 1/60.0f, 1/60.0f};
-	
-	float color[4], *fp= soft;
-	int dx, dy;
-	
-	glGetFloatv(GL_CURRENT_COLOR, color);
-	
-	for(dx=-2; dx<3; dx++) {
-		for(dy=-2; dy<3; dy++, fp++) {
-			glColor4f(color[0], color[1], color[2], fp[0]*color[3]);
-			blf_glyph_texture_draw(uv, x1+dx, y1+dy, x2+dx, y2+dy);
-		}
-	}
-	
-	glColor4fv(color);
-}
-
-static void blf_glyph_texture3_draw(float uv[2][2], float x1, float y1, float x2, float y2)
-{
-	float soft[9]= {1/16.0f, 2/16.0f, 1/16.0f, 2/16.0f, 4/16.0f, 2/16.0f, 1/16.0f, 2/16.0f, 1/16.0f};
-	float color[4], *fp= soft;
-	int dx, dy;
-	
-	glGetFloatv(GL_CURRENT_COLOR, color);
-	
-	for(dx=-1; dx<2; dx++) {
-		for(dy=-1; dy<2; dy++, fp++) {
-			glColor4f(color[0], color[1], color[2], fp[0]*color[3]);
-			blf_glyph_texture_draw(uv, x1+dx, y1+dy, x2+dx, y2+dy);
-		}
-	}
-	
-	glColor4fv(color);
-}
-
-
-
 int blf_glyph_texture_render(FontBLF *font, GlyphBLF *g, float x, float y)
 {
 	GlyphTextureBLF *gt;
@@ -525,11 +462,11 @@
 		glBindTexture(GL_TEXTURE_2D, gt->tex);
 
 	if (font->blur==3)
-		blf_glyph_texture3_draw(gt->uv, dx, y1, dx1, y2);
+		blf_texture3_draw(gt->uv, dx, y1, dx1, y2);
 	else if (font->blur==5)
-		blf_glyph_texture5_draw(gt->uv, dx, y1, dx1, y2);
+		blf_texture5_draw(gt->uv, dx, y1, dx1, y2);
 	else
-		blf_glyph_texture_draw(gt->uv, dx, y1, dx1, y2);
+		blf_texture_draw(gt->uv, dx, y1, dx1, y2);
 	
 	return(1);
 }

Modified: branches/blender2.5/blender/source/blender/blenfont/intern/blf_internal.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenfont/intern/blf_internal.c	2009-04-23 21:19:42 UTC (rev 19911)
+++ branches/blender2.5/blender/source/blender/blenfont/intern/blf_internal.c	2009-04-23 21:57:41 UTC (rev 19912)
@@ -141,7 +141,58 @@
 
 void blf_internal_size(FontBLF *font, int size, int dpi)
 {
-	return;
+	/* dpi don't work here and size is limit to:
+	 * helv: 10, 12
+	 * helvb: 8, 10, 12
+	 * scr: 12, 14, 15
+	 */
+	font->dpi= dpi;
+
+	if (font->size != size) {
+		if (!strcmp(font->name, "helv")) {
+			if (size == 12) {
+				font->engine= (void *)&blf_font_helv12;
+				font->size= 12;
+			}
+			else {
+				font->engine= (void *)&blf_font_helv10;
+				font->size= 10;
+			}
+		}
+		else if (!strcmp(font->name, "helvb")) {
+			if (size == 10) {
+				font->engine= (void *)&blf_font_helvb10;
+				font->size= 10;
+			}
+			else if (size == 12) {
+				font->engine= (void *)&blf_font_helvb12;
+				font->size= 12;
+			}
+			else {
+				font->engine= (void *)&blf_font_helvb8;
+				font->size= 8;
+			}
+		}
+		else { /* scr */
+			if (size == 14) {
+				font->engine= (void *)&blf_font_scr14;
+				font->size= 14;
+			}
+			else if (size == 15) {
+				font->engine= (void *)&blf_font_scr15;
+				font->size= 15;
+			}
+			else {
+				font->engine= (void *)&blf_font_scr12;
+				font->size= 12;
+			}
+		}
+
+		if (font->mode == BLF_MODE_TEXTURE) {
+			if (blf_internal_get_texture(font) != 0)
+				printf("Can't create texture font!!\n");
+		}
+	}
 }
 
 void blf_internal_texture_draw(FontBLF *font, char *str)
@@ -149,7 +200,8 @@
 	FontDataBLF *data;
 	CharDataBLF *cd;
 	unsigned char c;
-	float pos, cell_x, cell_y, x, y, z;
+	float pos, x, y;
+	float uv[2][2];
 	int base_line;
 	GLint cur_tex;
 	float dx, dx1, dy, dy1;
@@ -159,7 +211,6 @@
 	pos= 0;
 	x= 0.0f;
 	y= 0.0f;
-	z= 0.0f;
 
 	glGetIntegerv(GL_TEXTURE_2D_BINDING_EXT, &cur_tex);
 	if (cur_tex != data->texid)
@@ -169,8 +220,10 @@
 		cd= &data->chars[c];
 
 		if (cd->data_offset != -1) {
-			cell_x= (c%16)/16.0;
-			cell_y= (c/16)/16.0;
+			uv[0][0]= ((c%16)/16.0) + 1.0/16.0;
+			uv[0][1]= (c/16)/16.0;
+			uv[1][0]= (c%16)/16.0;
+			uv[1][1]= ((c/16)/16.0) + 1.0/16.0;
 
 			dx= x + pos + 16.0;
 			dx1= x + pos + 0.0;
@@ -189,19 +242,12 @@
 					goto next_tex_char;
 			}
 
-			glBegin(GL_QUADS);
-			glTexCoord2f(cell_x + 1.0/16.0, cell_y);
-			glVertex3f(dx, dy, z);
-
-			glTexCoord2f(cell_x + 1.0/16.0, cell_y + 1.0/16.0);
-			glVertex3f(dx, dy1, z);
-
-			glTexCoord2f(cell_x, cell_y + 1.0/16.0);
-			glVertex3f(dx1, dy1, z);
-
-			glTexCoord2f(cell_x, cell_y);
-			glVertex3f(dx1, dy, z);
-			glEnd();
+			if (font->blur == 3)
+				blf_texture3_draw(uv, dx, dy, dx1, dy1);
+			else if (font->blur == 5)
+				blf_texture5_draw(uv, dx, dy, dx1, dy1);
+			else
+				blf_texture_draw(uv, dx, dy, dx1, dy1);
 		}
 next_tex_char:
 		pos += cd->advance;
@@ -328,39 +374,19 @@
 	font->name= BLI_strdup(name);
 	font->filename= NULL;
 
-	if (!strcmp(name, "helv10")) {
+	if (!strcmp(name, "helv")) {
 		font->engine= (void *)&blf_font_helv10;
 		font->size= 10;
 	}
 #ifndef BLF_INTERNAL_MINIMAL
-	else if (!strcmp(name, "helv12")) {
-		font->engine= (void *)&blf_font_helv12;
-		font->size= 12;
-	}
-	else if (!strcmp(name, "helvb8")) {
+	else if (!strcmp(name, "helvb")) {
 		font->engine= (void *)&blf_font_helvb8;
 		font->size= 8;
 	}
-	else if (!strcmp(name, "helvb10")) {
-		font->engine= (void *)&blf_font_helvb10;
-		font->size= 10;
-	}
-	else if (!strcmp(name, "helvb12")) {
-		font->engine= (void *)&blf_font_helvb12;
-		font->size= 12;
-	}
-	else if (!strcmp(name, "scr12")) {
+	else if (!strcmp(name, "scr")) {
 		font->engine= (void *)&blf_font_scr12;
 		font->size= 12;
 	}
-	else if (!strcmp(name, "scr14")) {
-		font->engine= (void *)&blf_font_scr14;
-		font->size= 14;
-	}
-	else if (!strcmp(name, "scr15")) {
-		font->engine= (void *)&blf_font_scr15;
-		font->size= 15;
-	}
 #endif
 	else
 		font->engine= NULL;

Modified: branches/blender2.5/blender/source/blender/blenfont/intern/blf_internal.h
===================================================================
--- branches/blender2.5/blender/source/blender/blenfont/intern/blf_internal.h	2009-04-23 21:19:42 UTC (rev 19911)
+++ branches/blender2.5/blender/source/blender/blenfont/intern/blf_internal.h	2009-04-23 21:57:41 UTC (rev 19912)
@@ -32,6 +32,10 @@
 unsigned int blf_hash(unsigned int val);
 int blf_utf8_next(unsigned char *buf, int *iindex);
 
+void blf_texture_draw(float uv[2][2], float dx, float y1, float dx1, float y2);
+void blf_texture5_draw(float uv[2][2], float x1, float y1, float x2, float y2);
+void blf_texture3_draw(float uv[2][2], float x1, float y1, float x2, float y2);
+
 char *blf_dir_search(const char *file);
 int blf_dir_split(const char *str, char *file, int *size);
 

Modified: branches/blender2.5/blender/source/blender/blenfont/intern/blf_internal_types.h
===================================================================
--- branches/blender2.5/blender/source/blender/blenfont/intern/blf_internal_types.h	2009-04-23 21:19:42 UTC (rev 19911)

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list