http://www.jwz.org/xscreensaver/xscreensaver-5.09.tar.gz
[xscreensaver] / hacks / glx / texfont.c
index 15822a4924369e413f705366139277219e92fdec..6a593d03786a43060fe665f2b30065eb0524505c 100644 (file)
@@ -257,13 +257,13 @@ load_texture_font (Display *dpy, char *res)
 
           /* See comment in print_texture_string for bit layout explanation.
            */
-          int lbearing = (f->per_char
+          int lbearing = (f->per_char && ii >= f->min_char_or_byte2
                           ? f->per_char[ii - f->min_char_or_byte2].lbearing
                           : f->min_bounds.lbearing);
-          int ascent   = (f->per_char
+          int ascent   = (f->per_char && ii >= f->min_char_or_byte2
                           ? f->per_char[ii - f->min_char_or_byte2].ascent
                           : f->max_bounds.ascent);
-          int width    = (f->per_char
+          int width    = (f->per_char && ii >= f->min_char_or_byte2
                           ? f->per_char[ii - f->min_char_or_byte2].width
                           : f->max_bounds.width);
 
@@ -334,7 +334,7 @@ texture_string_width (texture_font_data *data, const char *c,
   while (*c)
     {
       int cc = *((unsigned char *) c);
-      w += (f->per_char
+      w += (f->per_char && cc >= f->min_char_or_byte2
             ? f->per_char[cc-f->min_char_or_byte2].width
             : f->max_bounds.width);
       c++;
@@ -430,19 +430,19 @@ print_texture_string (texture_font_data *data, const char *string)
              We want to make a quad from point A to point C.
              We want to position that quad so that point B lies at x,y.
            */
-          int lbearing = (f->per_char
+          int lbearing = (f->per_char && c >= f->min_char_or_byte2
                           ? f->per_char[c - f->min_char_or_byte2].lbearing
                           : f->min_bounds.lbearing);
-          int rbearing = (f->per_char
+          int rbearing = (f->per_char && c >= f->min_char_or_byte2
                           ? f->per_char[c - f->min_char_or_byte2].rbearing
                           : f->max_bounds.rbearing);
-          int ascent   = (f->per_char
+          int ascent   = (f->per_char && c >= f->min_char_or_byte2
                           ? f->per_char[c - f->min_char_or_byte2].ascent
                           : f->max_bounds.ascent);
-          int descent  = (f->per_char
+          int descent  = (f->per_char && c >= f->min_char_or_byte2
                           ? f->per_char[c - f->min_char_or_byte2].descent
                           : f->max_bounds.descent);
-          int cwidth   = (f->per_char
+          int cwidth   = (f->per_char && c >= f->min_char_or_byte2
                           ? f->per_char[c - f->min_char_or_byte2].width
                           : f->max_bounds.width);