/[hegemonie]/hegemonie/Interface/UiText.m
ViewVC logotype

Diff of /hegemonie/Interface/UiText.m

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.2 by dam, Thu May 29 16:00:03 2003 UTC revision 1.3 by dam, Thu May 29 20:39:42 2003 UTC
# Line 172  static FT_Face    _face; Line 172  static FT_Face    _face;
172    return self;    return self;
173  }  }
174    
175  static void  static int inline
176  _draw_bitmap (const FT_Bitmap *bitmap, FT_Int left, FT_Int top)  _texture_size (int size)
177    {
178      NSCParameterAssert (size > 0);
179    
180      int texture_size = 2;
181      while (texture_size < size)
182        texture_size = texture_size << 1;
183    
184      return texture_size;
185    }
186    
187    static void inline
188    _generate_texture (const FT_Bitmap *bitmap)
189  {  {
190    NSCParameterAssert (bitmap);    NSCParameterAssert (bitmap);
191    NSCParameterAssert (bitmap->pixel_mode == FT_PIXEL_MODE_GRAY);    NSCParameterAssert (bitmap->pixel_mode == FT_PIXEL_MODE_GRAY);
192    NSCParameterAssert (bitmap->num_grays == 256);    NSCParameterAssert (bitmap->num_grays == 256);
193    NSCParameterAssert (bitmap->palette_mode == 0);    NSCParameterAssert (bitmap->palette_mode == 0);
194      NSCParameterAssert (bitmap->width == bitmap->pitch); /* FIXME */
195    
196    glPixelStorei (GL_UNPACK_ALIGNMENT, 1);    glPixelStorei (GL_UNPACK_ALIGNMENT, 1);
197      glTexParameterf (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
198    
199      glTexImage2D (GL_TEXTURE_2D, 0, GL_ALPHA,
200                    _texture_size (bitmap->width),
201                    _texture_size (bitmap->rows), 0,
202                    GL_ALPHA, GL_UNSIGNED_BYTE, NULL);
203    
204      glTexSubImage2D (GL_TEXTURE_2D, 0,
205                       0, 0, bitmap->width, bitmap->rows,
206                       GL_ALPHA, GL_UNSIGNED_BYTE, bitmap->buffer);
207    }
208    
209    GLubyte flipped_bitmap[bitmap->width * bitmap->rows];  static void inline
210    int row;  _draw_bitmap (const FT_Bitmap *bitmap, FT_Int left, FT_Int top)
211    for (row = 0; row < bitmap->rows; row++)  {
212      {    NSCParameterAssert (bitmap);
213        memcpy (&flipped_bitmap[(bitmap->rows - row - 1) * bitmap->width],  
214                &bitmap->buffer[row * bitmap->pitch],    _generate_texture (bitmap);
215                bitmap->width * sizeof (GLubyte));  
216      }    glPushMatrix();
217      glTranslatef (left, top, 0);
218    
   glEnable (GL_BLEND);  
219    glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);    glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
220    glRasterPos2i (left, top);    glEnable (GL_TEXTURE_2D);
221    glDrawPixels (bitmap->width, bitmap->rows,    glEnable (GL_BLEND);
222                  GL_ALPHA, GL_UNSIGNED_BYTE, flipped_bitmap);  
223      double x_ratio = (double)bitmap->width/ (double)_texture_size(bitmap->width);
224      double y_ratio = (double)bitmap->rows / (double)_texture_size(bitmap->rows);
225    
226      glBegin (GL_POLYGON);
227      glTexCoord2f (0.0, y_ratio); glVertex2f (0.0, 0.0);
228      glTexCoord2f (x_ratio, y_ratio); glVertex2f (bitmap->width, 0.0);
229      glTexCoord2f (x_ratio, 0.0); glVertex2f (bitmap->width, bitmap->rows);
230      glTexCoord2f (0.0, 0.0); glVertex2f (0.0, bitmap->rows);
231      glEnd ();
232      
233    glDisable (GL_BLEND);    glDisable (GL_BLEND);
234      glDisable (GL_TEXTURE_2D);
235    
236      glPopMatrix();
237  }  }
238    
239    

Legend:
Removed from v.1.2  
changed lines
  Added in v.1.3

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26