diff options
author | Diego Borghetti <bdiego@gmail.com> | 2009-06-23 20:27:35 +0400 |
---|---|---|
committer | Diego Borghetti <bdiego@gmail.com> | 2009-06-23 20:27:35 +0400 |
commit | cb59bf722e597899c0653777f72bcc85ab476eca (patch) | |
tree | 1fc9a3f2ed1b1e7e12356191fe1bc93c228d42a3 /source/blender/blenfont | |
parent | eb22a7b2102cceb432e3545cd342956e92873a49 (diff) |
Move shadow option (for text) from editor/interface to blenfont.
Two new function:
BLF_shadow: set the level (for blur) and the shadow color.
BLF_shadow_offset: set the x and y offset for shadow.
(this is the current position plus offset)
By default shadow is not enable in the font, so before draw the
text you need call BLF_enable(BLF_SHADOW), also remember disable
the option in the end.
Diffstat (limited to 'source/blender/blenfont')
-rw-r--r-- | source/blender/blenfont/BLF_api.h | 16 | ||||
-rw-r--r-- | source/blender/blenfont/intern/blf.c | 25 | ||||
-rw-r--r-- | source/blender/blenfont/intern/blf_glyph.c | 31 | ||||
-rw-r--r-- | source/blender/blenfont/intern/blf_internal_types.h | 10 |
4 files changed, 82 insertions, 0 deletions
diff --git a/source/blender/blenfont/BLF_api.h b/source/blender/blenfont/BLF_api.h index e871de490f3..cb64615d64c 100644 --- a/source/blender/blenfont/BLF_api.h +++ b/source/blender/blenfont/BLF_api.h @@ -91,6 +91,21 @@ void BLF_enable(int option); void BLF_disable(int option); /* + * Shadow options, level is the blur level, can be 3, 5 or 0 and + * the other argument are the rgba color. + * Take care that shadow need to be enable using BLF_enable!!. + */ +void BLF_shadow(int level, float r, float g, float b, float a); + +/* + * Set the offset for shadow text, this is the current cursor + * position plus this offset, don't need call BLF_position before + * this function, the current position is calculate only on + * BLF_draw, so it's safe call this whenever you like. + */ +void BLF_shadow_offset(int x, int y); + +/* * Search the path directory to the locale files, this try all * the case for Linux, Win and Mac. */ @@ -119,6 +134,7 @@ void BLF_dir_free(char **dirs, int count); #define BLF_CLIPPING (1<<1) #define BLF_FONT_KERNING (1<<2) #define BLF_USER_KERNING (1<<3) +#define BLF_SHADOW (1<<4) /* font->mode. */ #define BLF_MODE_TEXTURE 0 diff --git a/source/blender/blenfont/intern/blf.c b/source/blender/blenfont/intern/blf.c index f06c7fb0d28..9dad5a4bfa0 100644 --- a/source/blender/blenfont/intern/blf.c +++ b/source/blender/blenfont/intern/blf.c @@ -500,3 +500,28 @@ void BLF_kerning(float space) if (font) font->kerning= space; } + +void BLF_shadow(int level, float r, float g, float b, float a) +{ + FontBLF *font; + + font= global_font[global_font_cur]; + if (font) { + font->shadow= level; + font->shadow_col[0]= r; + font->shadow_col[1]= g; + font->shadow_col[2]= b; + font->shadow_col[3]= a; + } +} + +void BLF_shadow_offset(int x, int y) +{ + FontBLF *font; + + font= global_font[global_font_cur]; + if (font) { + font->shadow_x= x; + font->shadow_y= y; + } +} diff --git a/source/blender/blenfont/intern/blf_glyph.c b/source/blender/blenfont/intern/blf_glyph.c index 33a435cc5be..5e0868ea680 100644 --- a/source/blender/blenfont/intern/blf_glyph.c +++ b/source/blender/blenfont/intern/blf_glyph.c @@ -496,8 +496,18 @@ int blf_glyph_texture_render(FontBLF *font, GlyphBLF *g, float x, float y) GLint cur_tex; float dx, dx1; float y1, y2; + float xo, yo; + float color[4]; gt= g->tex_data; + + if (font->flags & BLF_SHADOW) { + xo= x; + yo= y; + x += font->shadow_x; + y += font->shadow_y; + } + dx= floor(x + gt->pos_x); dx1= dx + gt->width; y1= y + gt->pos_y; @@ -518,6 +528,27 @@ int blf_glyph_texture_render(FontBLF *font, GlyphBLF *g, float x, float y) if (cur_tex != gt->tex) glBindTexture(GL_TEXTURE_2D, gt->tex); + if (font->flags & BLF_SHADOW) { + glGetFloatv(GL_CURRENT_COLOR, color); + glColor4fv(font->shadow_col); + + if (font->shadow == 3) + blf_texture3_draw(gt->uv, dx, y1, dx1, y2); + else if (font->shadow == 5) + blf_texture5_draw(gt->uv, dx, y1, dx1, y2); + else + blf_texture_draw(gt->uv, dx, y1, dx1, y2); + + glColor4fv(color); + x= xo; + y= yo; + + dx= floor(x + gt->pos_x); + dx1= dx + gt->width; + y1= y + gt->pos_y; + y2= y + gt->pos_y - gt->height; + } + if (font->blur==3) blf_texture3_draw(gt->uv, dx, y1, dx1, y2); else if (font->blur==5) diff --git a/source/blender/blenfont/intern/blf_internal_types.h b/source/blender/blenfont/intern/blf_internal_types.h index 60446aa93b2..5382ac19aae 100644 --- a/source/blender/blenfont/intern/blf_internal_types.h +++ b/source/blender/blenfont/intern/blf_internal_types.h @@ -154,6 +154,16 @@ typedef struct FontBLF { /* blur: 3 or 5 large kernel */ int blur; + + /* shadow level. */ + int shadow; + + /* and shadow offset. */ + int shadow_x; + int shadow_y; + + /* shadow color. */ + float shadow_col[4]; /* this is the matrix that we load before rotate/scale/translate. */ float mat[4][4]; |