Revision: 21108
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=21108
Author:   bdiego
Date:     2009-06-23 18:27:35 +0200 (Tue, 23 Jun 2009)

Log Message:
-----------
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.

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_types.h
    
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-06-23 13:34:45 UTC (rev 21107)
+++ branches/blender2.5/blender/source/blender/blenfont/BLF_api.h       
2009-06-23 16:27:35 UTC (rev 21108)
@@ -91,6 +91,21 @@
 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 @@
 #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

Modified: branches/blender2.5/blender/source/blender/blenfont/intern/blf.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenfont/intern/blf.c    
2009-06-23 13:34:45 UTC (rev 21107)
+++ branches/blender2.5/blender/source/blender/blenfont/intern/blf.c    
2009-06-23 16:27:35 UTC (rev 21108)
@@ -500,3 +500,28 @@
        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;
+       }
+}

Modified: branches/blender2.5/blender/source/blender/blenfont/intern/blf_glyph.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenfont/intern/blf_glyph.c      
2009-06-23 13:34:45 UTC (rev 21107)
+++ branches/blender2.5/blender/source/blender/blenfont/intern/blf_glyph.c      
2009-06-23 16:27:35 UTC (rev 21108)
@@ -496,8 +496,18 @@
        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 @@
        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)

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-06-23 13:34:45 UTC (rev 21107)
+++ 
branches/blender2.5/blender/source/blender/blenfont/intern/blf_internal_types.h 
    2009-06-23 16:27:35 UTC (rev 21108)
@@ -154,6 +154,16 @@
        
        /* 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];

Modified: 
branches/blender2.5/blender/source/blender/editors/interface/interface_style.c
===================================================================
--- 
branches/blender2.5/blender/source/blender/editors/interface/interface_style.c  
    2009-06-23 13:34:45 UTC (rev 21107)
+++ 
branches/blender2.5/blender/source/blender/editors/interface/interface_style.c  
    2009-06-23 16:27:35 UTC (rev 21108)
@@ -145,22 +145,6 @@
 
 /* *************** 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 @@
        /* 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 ************************ */


_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to