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.
This commit is contained in:
parent
eb22a7b210
commit
cb59bf722e
|
@ -90,6 +90,21 @@ void BLF_kerning(float space);
|
|||
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
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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];
|
||||
|
|
|
@ -145,22 +145,6 @@ static uiFont *uifont_to_blfont(int id)
|
|||
|
||||
/* *************** draw ************************ */
|
||||
|
||||
static void ui_font_shadow_draw(uiFontStyle *fs, int x, int y, char *str)
|
||||
{
|
||||
float color[4];
|
||||
|
||||
glGetFloatv(GL_CURRENT_COLOR, color);
|
||||
|
||||
glColor4f(fs->shadowcolor, fs->shadowcolor, fs->shadowcolor, fs->shadowalpha);
|
||||
|
||||
BLF_blur(fs->shadow);
|
||||
BLF_position(x+fs->shadx, y+fs->shady, 0.0f);
|
||||
BLF_draw(str);
|
||||
BLF_blur(0);
|
||||
|
||||
glColor4fv(color);
|
||||
}
|
||||
|
||||
void uiStyleFontDraw(uiFontStyle *fs, rcti *rect, char *str)
|
||||
{
|
||||
float height;
|
||||
|
@ -179,14 +163,18 @@ void uiStyleFontDraw(uiFontStyle *fs, rcti *rect, char *str)
|
|||
/* clip is very strict, so we give it some space */
|
||||
BLF_clipping(rect->xmin-1, rect->ymin-4, rect->xmax+1, rect->ymax+4);
|
||||
BLF_enable(BLF_CLIPPING);
|
||||
|
||||
if(fs->shadow)
|
||||
ui_font_shadow_draw(fs, rect->xmin+xofs, rect->ymin+yofs, str);
|
||||
|
||||
BLF_position(rect->xmin+xofs, rect->ymin+yofs, 0.0f);
|
||||
BLF_draw(str);
|
||||
|
||||
if (fs->shadow) {
|
||||
BLF_enable(BLF_SHADOW);
|
||||
BLF_shadow(fs->shadow, fs->shadowcolor, fs->shadowcolor, fs->shadowcolor, fs->shadowalpha);
|
||||
BLF_shadow_offset(fs->shadx, fs->shady);
|
||||
}
|
||||
|
||||
BLF_draw(str);
|
||||
BLF_disable(BLF_CLIPPING);
|
||||
if (fs->shadow)
|
||||
BLF_disable(BLF_SHADOW);
|
||||
}
|
||||
|
||||
/* ************** helpers ************************ */
|
||||
|
|
Loading…
Reference in New Issue