From e20ab691c357c548e7c90eaca3721f382d5c116e Mon Sep 17 00:00:00 2001 From: Werner Lemberg Date: Mon, 2 Jun 2003 07:24:33 +0000 Subject: [PATCH] * src/winfonts/winfnt.c (FNT_Load_Glyph): Revert change from 2003-03-20. --- ChangeLog | 5 +++++ src/base/ftobjs.c | 1 + src/winfonts/winfnt.c | 24 ++++++++++++++++++++---- 3 files changed, 26 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index ea05487f9..6449172ca 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2003-06-01 Werner Lemberg + + * src/winfonts/winfnt.c (FNT_Load_Glyph): Revert change from + 2003-03-20. + 2003-05-31 Werner Lemberg * include/freetype/fttrigon.h (FT_Vector_Normalize): Removed. diff --git a/src/base/ftobjs.c b/src/base/ftobjs.c index 66e828646..13f792907 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 a8dfcdfb4..c916ebcf0 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;