* src/winfonts/winfnt.c (FNT_Load_Glyph): Revert change from 2003-03-20.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
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;