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:
authorDiego Borghetti <bdiego@gmail.com>2010-12-09 07:36:58 +0300
committerDiego Borghetti <bdiego@gmail.com>2010-12-09 07:36:58 +0300
commitb25c32393d42c314c073ef2244cde1fabb7b64af (patch)
treea295abf9b556d1fdc8ed2d8d555f602bc1f874ce /source/blender/blenfont
parent36175f37c9d3ea128cfdcebd1c1b438494b34433 (diff)
Add the possibility to set a 4x4 matrix to be used on blf.
This option allow the user to set a 4x4 matrix to be multiplied before draw the text, for example: double *m; /* Get the matrix or build it! */ BLF_matrix(m); BLF_enable(BLF_MATRIX); /* set color, size, etc and draw! */ BLF_disable(BLF_MATRIX); You don't need the last line (disable), but remember that if you use the font to draw in any other place, the matrix will be used!. The GL code is: glPushMatrix(); glMultMatrixd(m); glTranslatef(); glScalef(); glRotatef(); glPopMatrix(); Let's Dalai test this!!! :D
Diffstat (limited to 'source/blender/blenfont')
-rw-r--r--source/blender/blenfont/BLF_api.h15
-rw-r--r--source/blender/blenfont/intern/blf.c16
-rw-r--r--source/blender/blenfont/intern/blf_font.c7
-rw-r--r--source/blender/blenfont/intern/blf_internal_types.h6
4 files changed, 41 insertions, 3 deletions
diff --git a/source/blender/blenfont/BLF_api.h b/source/blender/blenfont/BLF_api.h
index d32922f2429..84086742b15 100644
--- a/source/blender/blenfont/BLF_api.h
+++ b/source/blender/blenfont/BLF_api.h
@@ -49,6 +49,20 @@ void BLF_aspect(int fontid, float aspect);
void BLF_position(int fontid, float x, float y, float z);
void BLF_size(int fontid, int size, int dpi);
+/* Set a 4x4 matrix to be multiplied before draw the text.
+ * Remember that you need call BLF_enable(BLF_MATRIX)
+ * to enable this.
+ *
+ * The order of the matrix is like GL:
+
+ | m[0] m[4] m[8] m[12] |
+ | m[1] m[5] m[9] m[13] |
+ | m[2] m[6] m[10] m[14] |
+ | m[3] m[7] m[11] m[15] |
+
+ */
+void BLF_matrix(int fontid, double *m);
+
/* Draw the string using the default font, size and dpi. */
void BLF_draw_default(float x, float y, float z, const char *str, size_t len);
void BLF_draw_default_ascii(float x, float y, float z, const char *str, size_t len);
@@ -180,6 +194,7 @@ void BLF_dir_free(char **dirs, int count);
#define BLF_CLIPPING (1<<1)
#define BLF_SHADOW (1<<2)
#define BLF_KERNING_DEFAULT (1<<3)
+#define BLF_MATRIX (1<<4)
// XXX, bad design
extern int blf_mono_font;
diff --git a/source/blender/blenfont/intern/blf.c b/source/blender/blenfont/intern/blf.c
index febd3d9d6f7..d9a02b09336 100644
--- a/source/blender/blenfont/intern/blf.c
+++ b/source/blender/blenfont/intern/blf.c
@@ -330,6 +330,18 @@ void BLF_aspect(int fontid, float aspect)
font->aspect= aspect;
}
+void BLF_matrix(int fontid, double *m)
+{
+ FontBLF *font;
+ int i;
+
+ font= BLF_get(fontid);
+ if (font) {
+ for (i= 0; i < 16; i++)
+ font->m[i]= m[i];
+ }
+}
+
void BLF_position(int fontid, float x, float y, float z)
{
FontBLF *font;
@@ -435,6 +447,10 @@ static void blf_draw__start(FontBLF *font)
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glPushMatrix();
+
+ if (font->flags & BLF_MATRIX)
+ glMultMatrixd((GLdouble *)&font->m);
+
glTranslatef(font->pos[0], font->pos[1], font->pos[2]);
glScalef(font->aspect, font->aspect, 1.0);
diff --git a/source/blender/blenfont/intern/blf_font.c b/source/blender/blenfont/intern/blf_font.c
index 1ae654cc5bc..3adda7bb6f1 100644
--- a/source/blender/blenfont/intern/blf_font.c
+++ b/source/blender/blenfont/intern/blf_font.c
@@ -493,11 +493,16 @@ void blf_font_free(FontBLF *font)
static void blf_font_fill(FontBLF *font)
{
+ int i;
+
font->aspect= 1.0f;
font->pos[0]= 0.0f;
font->pos[1]= 0.0f;
font->angle= 0.0f;
- unit_m4(font->mat);
+
+ for (i= 0; i < 16; i++)
+ font->m[i]= 0;
+
font->clip_rec.xmin= 0.0f;
font->clip_rec.xmax= 0.0f;
font->clip_rec.ymin= 0.0f;
diff --git a/source/blender/blenfont/intern/blf_internal_types.h b/source/blender/blenfont/intern/blf_internal_types.h
index 70318c51823..04afaeb2e97 100644
--- a/source/blender/blenfont/intern/blf_internal_types.h
+++ b/source/blender/blenfont/intern/blf_internal_types.h
@@ -154,8 +154,10 @@ typedef struct FontBLF {
/* shadow color. */
float shadow_col[4];
- /* this is the matrix that we load before rotate/scale/translate. */
- float mat[4][4];
+ /* Multiplied this matrix with the current one before
+ * draw the text! see blf_draw__start.
+ */
+ double m[16];
/* clipping rectangle. */
rctf clip_rec;