Commit e20ab691c357c548e7c90eaca3721f382d5c116e

Werner Lemberg 2003-06-02T07:24:33

* src/winfonts/winfnt.c (FNT_Load_Glyph): Revert change from 2003-03-20.

diff --git a/ChangeLog b/ChangeLog
index ea05487..6449172 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2003-06-01  Werner Lemberg  <wl@gnu.org>
+
+	* src/winfonts/winfnt.c (FNT_Load_Glyph): Revert change from
+	2003-03-20.
+
 2003-05-31  Werner Lemberg  <wl@gnu.org>
 
 	* include/freetype/fttrigon.h (FT_Vector_Normalize): Removed.
diff --git a/src/base/ftobjs.c b/src/base/ftobjs.c
index 66e8286..13f7929 100644
--- a/src/base/ftobjs.c
+++ b/src/base/ftobjs.c
@@ -198,6 +198,7 @@
     return error;
   }
 
+
   FT_BASE_DEF( void )
   ft_glyphslot_free_bitmap( FT_GlyphSlot  slot )
   {
diff --git a/src/winfonts/winfnt.c b/src/winfonts/winfnt.c
index a8dfcdf..c916ebc 100644
--- a/src/winfonts/winfnt.c
+++ b/src/winfonts/winfnt.c
@@ -618,18 +618,34 @@
 
     /* allocate and build bitmap */
     {
-      FT_Int  pitch  = ( bitmap->width + 7 ) >> 3;
+      FT_Memory  memory = FT_FACE_MEMORY( slot->face );
+      FT_Int     pitch  = ( bitmap->width + 7 ) >> 3;
+      FT_Byte*   column;
+      FT_Byte*   write;
 
 
       bitmap->pitch      = pitch;
       bitmap->rows       = font->header.pixel_height;
       bitmap->pixel_mode = FT_PIXEL_MODE_MONO;
 
-      /* note: we don't allocate a new buffer for the bitmap since we */
-      /*       already store the images in the FT_Face                */
-      ft_glyphslot_set_bitmap( slot, p );
+      /* note: since glyphs are stored in columns and not in rows we */
+      /*       can't use ft_glyphslot_set_bitmap                     */
+      if ( FT_ALLOC( bitmap->buffer, pitch * bitmap->rows ) )
+        goto Exit;
+
+      column = (FT_Byte*)bitmap->buffer;
+
+      for ( ; pitch > 0; pitch--, column++ )
+      {
+        FT_Byte*  limit = p + bitmap->rows;
+
+
+        for ( write = column; p < limit; p++, write += bitmap->pitch )
+          *write = *p;
+      }
     }
 
+    slot->flags       = FT_GLYPH_OWN_BITMAP;
     slot->bitmap_left = 0;
     slot->bitmap_top  = font->header.ascent;
     slot->format      = FT_GLYPH_FORMAT_BITMAP;