- minor edits to font drawing/utf8, was needlessly casting int/unsigned int.
authorCampbell Barton <ideasman42@gmail.com>
Fri, 21 Oct 2011 00:48:02 +0000 (00:48 +0000)
committerCampbell Barton <ideasman42@gmail.com>
Fri, 21 Oct 2011 00:48:02 +0000 (00:48 +0000)
- also ifdef'd out more smoke function when the modifiers disabled.

source/blender/blenfont/intern/blf_font.c
source/blender/blenfont/intern/blf_internal.h
source/blender/blenfont/intern/blf_util.c
source/blender/blenkernel/intern/smoke.c
source/blender/blenlib/BLI_string_utf8.h
source/blender/blenlib/intern/string_utf8.c

index 5161761cf092bd5fb3bd828f18bbf8f45a019a84..9a7fb95dd78fef4278bfadd067babae9cf7c4790 100644 (file)
@@ -129,7 +129,7 @@ static void blf_font_ensure_ascii_table(FontBLF *font)
                g= (glyph_ascii_table)[c];                                            \
                i++;                                                                  \
        }                                                                         \
-       else if ((c= blf_utf8_next((unsigned char *)(str), &(i)))) {              \
+       else if ((c= blf_utf8_next((str), &(i))) != BLI_UTF8_ERR) {               \
                if ((g= blf_glyph_search((font)->glyph_cache, c)) == NULL) {          \
                        g= blf_glyph_add(font, FT_Get_Char_Index((font)->face, c), c);    \
                }                                                                     \
@@ -141,15 +141,20 @@ static void blf_font_ensure_ascii_table(FontBLF *font)
        const FT_UInt kern_mode= (has_kerning == 0) ? 0 :                         \
                                 (((_font)->flags & BLF_KERNING_DEFAULT) ?        \
                                  ft_kerning_default : FT_KERNING_UNFITTED)       \
-                                                                                 \
 
 
 #define BLF_KERNING_STEP(_font, kern_mode, g_prev, g, delta, pen_x)           \
 {                                                                             \
        if (g_prev) {                                                             \
                delta.x= delta.y= 0;                                                  \
-               if (FT_Get_Kerning((_font)->face, g_prev->idx, g->idx, kern_mode, &delta) == 0) \
+               if (FT_Get_Kerning((_font)->face,                                     \
+                                  (g_prev)->idx,                                     \
+                                  (g)->idx,                                          \
+                                  kern_mode,                                         \
+                                  &(delta)) == 0)                                    \
+               {                                                                     \
                        pen_x += delta.x >> 6;                                            \
+               }                                                                     \
        }                                                                         \
 }                                                                             \
 
@@ -159,7 +164,7 @@ void blf_font_draw(FontBLF *font, const char *str, unsigned int len)
        GlyphBLF *g, *g_prev= NULL;
        FT_Vector delta;
        int pen_x= 0, pen_y= 0;
-       unsigned int i= 0;
+       size_t i= 0;
        GlyphBLF **glyph_ascii_table= font->glyph_cache->glyph_ascii_table;
 
        BLF_KERNING_VARS(font, has_kerning, kern_mode);
@@ -170,9 +175,9 @@ void blf_font_draw(FontBLF *font, const char *str, unsigned int len)
 
                BLF_UTF8_NEXT_FAST(font, g, str, i, c, glyph_ascii_table);
 
-               if (c == 0)      break;
-               if (g == NULL)   continue;
-               if (has_kerning) BLF_KERNING_STEP(font, kern_mode, g_prev, g, delta, pen_x);
+               if (c == BLI_UTF8_ERR)  break;
+               if (g == NULL)          continue;
+               if (has_kerning)        BLF_KERNING_STEP(font, kern_mode, g_prev, g, delta, pen_x);
 
                /* do not return this loop if clipped, we want every character tested */
                blf_glyph_render(font, g, (float)pen_x, (float)pen_y);
@@ -214,7 +219,7 @@ void blf_font_buffer(FontBLF *font, const char *str)
        GlyphBLF *g, *g_prev= NULL;
        FT_Vector delta;
        int pen_x= (int)font->pos[0], pen_y= 0;
-       unsigned int i= 0;
+       size_t i= 0;
        GlyphBLF **glyph_ascii_table= font->glyph_cache->glyph_ascii_table;
 
        /* buffer specific vars*/
@@ -235,9 +240,9 @@ void blf_font_buffer(FontBLF *font, const char *str)
 
                BLF_UTF8_NEXT_FAST(font, g, str, i, c, glyph_ascii_table);
 
-               if (c == 0)      break;
-               if (g == NULL)   continue;
-               if (has_kerning) BLF_KERNING_STEP(font, kern_mode, g_prev, g, delta, pen_x);
+               if (c == BLI_UTF8_ERR)  break;
+               if (g == NULL)          continue;
+               if (has_kerning)        BLF_KERNING_STEP(font, kern_mode, g_prev, g, delta, pen_x);
 
                chx= pen_x + ((int)g->pos_x);
                chy= (int)font->pos[1] + g->height;
@@ -340,7 +345,7 @@ void blf_font_boundbox(FontBLF *font, const char *str, rctf *box)
        GlyphBLF *g, *g_prev= NULL;
        FT_Vector delta;
        int pen_x= 0, pen_y= 0;
-       unsigned int i= 0;
+       size_t i= 0;
        GlyphBLF **glyph_ascii_table= font->glyph_cache->glyph_ascii_table;
 
        rctf gbox;
@@ -358,9 +363,9 @@ void blf_font_boundbox(FontBLF *font, const char *str, rctf *box)
 
                BLF_UTF8_NEXT_FAST(font, g, str, i, c, glyph_ascii_table);
 
-               if (c == 0)      break;
-               if (g == NULL)   continue;
-               if (has_kerning) BLF_KERNING_STEP(font, kern_mode, g_prev, g, delta, pen_x);
+               if (c == BLI_UTF8_ERR)  break;
+               if (g == NULL)          continue;
+               if (has_kerning)        BLF_KERNING_STEP(font, kern_mode, g_prev, g, delta, pen_x);
 
                gbox.xmin= pen_x;
                gbox.xmax= pen_x + g->advance;
index ba0b9985dd4f6f666915cf1e90d982b3d035957c..4c830910e3668a352a8a38b56db6837198916ebd 100644 (file)
@@ -40,7 +40,7 @@ struct rctf;
 
 unsigned int blf_next_p2(unsigned int x);
 unsigned int blf_hash(unsigned int val);
-int blf_utf8_next(unsigned char *buf, unsigned int *iindex);
+unsigned int blf_utf8_next(const char *buf, size_t *iindex);
 
 char *blf_dir_search(const char *file);
 char *blf_dir_metrics_search(const char *filename);
index cfe77887674a4ba00700681ed91f57e8fd588e32..aef97b6f1cc3e198b4858c7db36900ba2d5822bd 100644 (file)
@@ -37,6 +37,8 @@
 
 #include "blf_internal.h"
 
+#include "BLI_string_utf8.h"
+
 unsigned int blf_next_p2(unsigned int x)
 {
        x -= 1;
@@ -72,7 +74,7 @@ unsigned int blf_hash(unsigned int val)
  * The original name: imlib_font_utf8_get_next
  * more info here: http://docs.enlightenment.org/api/imlib2/html/
  */
-int blf_utf8_next(unsigned char *buf, unsigned int *iindex)
+unsigned int blf_utf8_next(const char *buf, size_t *iindex)
 {
        /* Reads UTF8 bytes from 'buf', starting at 'index' and
         * returns the code point of the next valid code point.
@@ -85,7 +87,7 @@ int blf_utf8_next(unsigned char *buf, unsigned int *iindex)
 
        d= buf[index++];
        if (!d)
-               return 0;
+               return BLI_UTF8_ERR;
 
        while (buf[index] && ((buf[index] & 0xc0) == 0x80))
                index++;
index 49c8831f06c5685a38bd05db31e8c2a4c618ad01..c1833b39b8b3dde6486f0e0787162cfbbcd88d0b 100644 (file)
@@ -131,15 +131,15 @@ struct Scene;
 struct DerivedMesh;
 struct SmokeModifierData;
 
-// forward declerations
-static void get_cell(float *p0, int res[3], float dx, float *pos, int *cell, int correct);
-void calcTriangleDivs(Object *ob, MVert *verts, int numverts, MFace *tris, int numfaces, int numtris, int **tridivs, float cell_len);
-static void fill_scs_points(Object *ob, DerivedMesh *dm, SmokeCollSettings *scs);
-
 #define TRI_UVOFFSET (1./4.)
 
+#ifdef WITH_SMOKE
+/* forward declerations */
+static void calcTriangleDivs(Object *ob, MVert *verts, int numverts, MFace *tris, int numfaces, int numtris, int **tridivs, float cell_len);
+static void get_cell(float *p0, int res[3], float dx, float *pos, int *cell, int correct);
+static void fill_scs_points(Object *ob, DerivedMesh *dm, SmokeCollSettings *scs);
+#else /* WITH_SMOKE */
 /* Stubs to use when smoke is disabled */
-#ifndef WITH_SMOKE
 struct WTURBULENCE *smoke_turbulence_init(int *UNUSED(res), int UNUSED(amplify), int UNUSED(noisetype)) { return NULL; }
 struct FLUID_3D *smoke_init(int *UNUSED(res), float *UNUSED(p0)) { return NULL; }
 void smoke_free(struct FLUID_3D *UNUSED(fluid)) {}
@@ -148,9 +148,9 @@ void smoke_initWaveletBlenderRNA(struct WTURBULENCE *UNUSED(wt), float *UNUSED(s
 void smoke_initBlenderRNA(struct FLUID_3D *UNUSED(fluid), float *UNUSED(alpha), float *UNUSED(beta), float *UNUSED(dt_factor), float *UNUSED(vorticity), int *UNUSED(border_colli)) {}
 long long smoke_get_mem_req(int UNUSED(xres), int UNUSED(yres), int UNUSED(zres), int UNUSED(amplify)) { return 0; }
 void smokeModifier_do(SmokeModifierData *UNUSED(smd), Scene *UNUSED(scene), Object *UNUSED(ob), DerivedMesh *UNUSED(dm)) {}
-#endif // WITH_SMOKE
-
+#endif /* WITH_SMOKE */
 
+#ifdef WITH_SMOKE
 static int smokeModifier_init (SmokeModifierData *smd, Object *ob, Scene *scene, DerivedMesh *dm)
 {
        if((smd->type & MOD_SMOKE_TYPE_DOMAIN) && smd->domain && !smd->domain->fluid)
@@ -455,7 +455,7 @@ static void fill_scs_points(Object *ob, DerivedMesh *dm, SmokeCollSettings *scs)
 }
 
 /*! init triangle divisions */
-void calcTriangleDivs(Object *ob, MVert *verts, int UNUSED(numverts), MFace *faces, int numfaces, int numtris, int **tridivs, float cell_len) 
+static void calcTriangleDivs(Object *ob, MVert *verts, int UNUSED(numverts), MFace *faces, int numfaces, int numtris, int **tridivs, float cell_len)
 {
        // mTriangleDivs1.resize( faces.size() );
        // mTriangleDivs2.resize( faces.size() );
@@ -554,6 +554,8 @@ void calcTriangleDivs(Object *ob, MVert *verts, int UNUSED(numverts), MFace *fac
        }
 }
 
+#endif /* WITH_SMOKE */
+
 static void smokeModifier_freeDomain(SmokeModifierData *smd)
 {
        if(smd->domain)
@@ -1659,4 +1661,4 @@ static void smoke_calc_transparency(float *result, float *input, float *p0, floa
        }
 }
 
-#endif // WITH_SMOKE
+#endif /* WITH_SMOKE */
index b53d9d3203b3b367c6f6d34ad5e5c70306b70448..765ae93828eb7fa7f86d650dd6d18e6e70d25ffc 100644 (file)
@@ -53,7 +53,8 @@ size_t       BLI_strlen_utf8(const char *strc);
 size_t       BLI_strncpy_wchar_as_utf8(char *dst, const wchar_t *src, const size_t maxcpy);
 size_t       BLI_strncpy_wchar_from_utf8(wchar_t *dst, const char *src, const size_t maxcpy);
 
-#define BLI_STRING_MAX_UTF8 6
+#define      BLI_UTF8_MAX 6
+#define      BLI_UTF8_ERR ((unsigned int)-1)
 
 #ifdef __cplusplus
 }
index 7dc2b2bcc52a6a836b5205dceb0ff3b04873b468..25a0e67fd38fdba21c6d5a2685d73711463767e8 100644 (file)
@@ -246,7 +246,7 @@ size_t BLI_strncpy_wchar_from_utf8(wchar_t *dst_w, const char *src_c, const size
        while(*src_c && len < maxcpy) {
                size_t step= 0;
                unsigned int unicode= BLI_str_utf8_as_unicode_and_size(src_c, &step);
-               if (unicode != (unsigned int)-1) {
+               if (unicode != BLI_UTF8_ERR) {
                        *dst_w= (wchar_t)unicode;
                        src_c += step;
                }
@@ -331,7 +331,7 @@ unsigned int BLI_str_utf8_as_unicode(const char *p)
 
   UTF8_COMPUTE (c, mask, len);
   if (len == -1)
-    return (unsigned int)-1;
+    return BLI_UTF8_ERR;
   UTF8_GET (result, p, i, mask, len);
 
   return result;
@@ -346,7 +346,7 @@ unsigned int BLI_str_utf8_as_unicode_and_size(const char *p, size_t *index)
 
        UTF8_COMPUTE (c, mask, len);
        if (len == -1)
-               return (unsigned int)-1;
+               return BLI_UTF8_ERR;
        UTF8_GET (result, p, i, mask, len);
        *index += len;
        return result;
@@ -370,7 +370,7 @@ unsigned int BLI_str_utf8_as_unicode_step(const char *p, size_t *index)
                /* will never return the same pointer unless '\0',
                 * eternal loop is prevented */
                *index += (size_t)(p_next - p);
-               return (unsigned int)-1;
+               return BLI_UTF8_ERR;
        }
        UTF8_GET (result, p, i, mask, len);
        *index += len;