30 ft_raster1_init( FT_Module module )
32 FT_Renderer render = (FT_Renderer)module;
35 render->clazz->raster_class->raster_reset( render->raster, NULL, 0 );
43 ft_raster1_set_mode( FT_Renderer render,
48 return render->clazz->raster_class->raster_set_mode( render->raster,
56 ft_raster1_transform( FT_Renderer render,
58 const FT_Matrix* matrix,
59 const FT_Vector* delta )
61 FT_Error error = FT_Err_Ok;
64 if ( slot->format != render->glyph_format )
66 error = FT_THROW( Invalid_Argument );
71 FT_Outline_Transform( &slot->outline, matrix );
74 FT_Outline_Translate( &slot->outline, delta->x, delta->y );
83 ft_raster1_get_cbox( FT_Renderer render,
89 if ( slot->format == render->glyph_format )
90 FT_Outline_Get_CBox( &slot->outline, cbox );
96 ft_raster1_render( FT_Renderer render,
99 const FT_Vector* origin )
101 FT_Error error = FT_Err_Ok;
102 FT_Outline* outline = &slot->outline;
103 FT_Bitmap* bitmap = &slot->bitmap;
104 FT_Memory memory = render->root.memory;
108 FT_Raster_Params params;
112 if ( slot->format != render->glyph_format )
114 error = FT_THROW( Invalid_Argument );
119 if ( mode != FT_RENDER_MODE_MONO )
122 return FT_THROW( Cannot_Render_Glyph );
126 if ( slot->internal->flags & FT_GLYPH_OWN_BITMAP )
128 FT_FREE( bitmap->buffer );
129 slot->internal->flags &= ~FT_GLYPH_OWN_BITMAP;
132 if ( ft_glyphslot_preset_bitmap( slot, mode, origin ) )
134 error = FT_THROW( Raster_Overflow );
139 if ( FT_ALLOC_MULT( bitmap->buffer, bitmap->rows, bitmap->pitch ) )
142 slot->internal->flags |= FT_GLYPH_OWN_BITMAP;
144 x_shift = -slot->bitmap_left * 64;
145 y_shift = ( (FT_Int)bitmap->rows - slot->bitmap_top ) * 64;
149 x_shift += origin->x;
150 y_shift += origin->y;
154 if ( x_shift || y_shift )
155 FT_Outline_Translate( outline, x_shift, y_shift );
158 params.target = bitmap;
159 params.source = outline;
160 params.flags = FT_RASTER_FLAG_DEFAULT;
163 error = render->raster_render( render->raster, ¶ms );
168 slot->format = FT_GLYPH_FORMAT_BITMAP;
169 else if ( slot->internal->flags & FT_GLYPH_OWN_BITMAP )
171 FT_FREE( bitmap->buffer );
172 slot->internal->flags &= ~FT_GLYPH_OWN_BITMAP;
175 if ( x_shift || y_shift )
176 FT_Outline_Translate( outline, -x_shift, -y_shift );
183 ft_raster1_renderer_class,
186 sizeof ( FT_RendererRec ),
198 FT_GLYPH_FORMAT_OUTLINE,
201 ft_raster1_transform,