proper vertical alignment
authorDerek Foreman <manmower@gmail.com>
Thu, 29 May 2003 23:38:50 +0000 (23:38 +0000)
committerDerek Foreman <manmower@gmail.com>
Thu, 29 May 2003 23:38:50 +0000 (23:38 +0000)
glft/font.h
glft/render.c

index 12fa6d0f26917cad0671274b459c4b680d5928e9..7842ff84b316167ffec21092c1d8d204a9c773f0 100644 (file)
@@ -59,6 +59,7 @@ struct GlftGlyph {
 
     int padx, pady;
     int texw, texh;
+    int left, yoff;
 };
 
 /*! Takes a character in UTF-8 encoding and returns an OpenGL display list
index fa7c33ecd3c2d40a960e2281025adcca8ab11a6c..153437b21528cbff6eeba7830288d90f48bbeafb 100644 (file)
@@ -20,6 +20,9 @@ void GlftRenderGlyph(FT_Face face, struct GlftGlyph *g)
     g->texw = slot->bitmap.width;
     g->texh = slot->bitmap.rows;
 
+    g->left = slot->bitmap_left;
+
+    g->yoff = slot->bitmap.rows - slot->bitmap_top;
     g->padx = 1;
     while (g->padx < slot->bitmap.width)
        g->padx <<= 1;
@@ -29,7 +32,6 @@ void GlftRenderGlyph(FT_Face face, struct GlftGlyph *g)
        g->pady <<= 1;
 
     padbuf = g_new0(unsigned char, g->padx * g->pady);
-printf("glyph rendered to %d wide\n", slot->bitmap.width);
     for (i = 0; i < slot->bitmap.rows; i++)
         memcpy(padbuf + i*g->padx,
                slot->bitmap.buffer + i*slot->bitmap.width,
@@ -64,23 +66,22 @@ void GlftRenderString(struct GlftFont *font, const char *str, int bytes,
     while (c - str < bytes) {
         g = GlftFontGlyph(font, c);
         if (g) {
-printf("glyph width %d(%d)\n", g->width, g->x);
             glTranslatef(GlftFontAdvance(font, p, g), 0.0, 0.0);
             glBindTexture(GL_TEXTURE_2D, g->tnum);
             glBegin(GL_QUADS);
-            glColor3f(0.0, 0.0, 0.0);
+            glColor3f(1.0, 1.0, 1.0);
 
             glTexCoord2f(0, g->texh/(float)g->pady);
-            glVertex2i(0, 0);
+            glVertex2i(g->left, 0 - g->yoff);
 
             glTexCoord2f(g->texw/(float)g->padx, g->texh/(float)g->pady);
-            glVertex2i(0 + g->texw, 0);
+            glVertex2i(g->left + g->texw, 0 - g->yoff);
 
             glTexCoord2f(g->texw/(float)g->padx, 0);
-            glVertex2i(0 + g->texw, 0 + g->texh);
+            glVertex2i(g->left + g->texw, g->texh - g->yoff);
 
             glTexCoord2f(0, 0);
-            glVertex2i(0, 0 + g->texh);
+            glVertex2i(g->left, g->texh - g->yoff);
             glEnd();
         } else
             glTranslatef(font->max_advance_width, 0.0, 0.0);