ftrend1.c revision 049d6fea481044fcc000e7782e5bc7046fc70844
1049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/***************************************************************************/
2049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/*                                                                         */
3049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/*  ftrend1.c                                                              */
4049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/*                                                                         */
5049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/*    The FreeType glyph rasterizer interface (body).                      */
6049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/*                                                                         */
7049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/*  Copyright 1996-2001, 2002, 2003, 2005, 2006 by                         */
8049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
9049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/*                                                                         */
10049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/*  This file is part of the FreeType project, and may only be used,       */
11049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/*  modified, and distributed under the terms of the FreeType project      */
12049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
13049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/*  this file you indicate that you have read the license and              */
14049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/*  understand and accept it fully.                                        */
15049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/*                                                                         */
16049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/***************************************************************************/
17049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
18049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
19049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include <ft2build.h>
20049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include FT_INTERNAL_OBJECTS_H
21049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include FT_OUTLINE_H
22049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include "ftrend1.h"
23049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include "ftraster.h"
24049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
25049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include "rasterrs.h"
26049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
27049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
28049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /* initialize renderer -- init its raster */
29049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  static FT_Error
30049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  ft_raster1_init( FT_Renderer  render )
31049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  {
32049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_Library  library = FT_MODULE_LIBRARY( render );
33049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
34049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
35049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    render->clazz->raster_class->raster_reset( render->raster,
36049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project                                               library->raster_pool,
37049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project                                               library->raster_pool_size );
38049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
39049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    return Raster_Err_Ok;
40049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  }
41049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
42049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
43049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /* set render-specific mode */
44049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  static FT_Error
45049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  ft_raster1_set_mode( FT_Renderer  render,
46049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project                       FT_ULong     mode_tag,
47049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project                       FT_Pointer   data )
48049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  {
49049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    /* we simply pass it to the raster */
50049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    return render->clazz->raster_class->raster_set_mode( render->raster,
51049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project                                                         mode_tag,
52049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project                                                         data );
53049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  }
54049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
55049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
56049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /* transform a given glyph image */
57049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  static FT_Error
58049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  ft_raster1_transform( FT_Renderer       render,
59049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project                        FT_GlyphSlot      slot,
60049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project                        const FT_Matrix*  matrix,
61049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project                        const FT_Vector*  delta )
62049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  {
63049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_Error error = Raster_Err_Ok;
64049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
65049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
66049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    if ( slot->format != render->glyph_format )
67049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    {
68049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project      error = Raster_Err_Invalid_Argument;
69049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project      goto Exit;
70049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    }
71049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
72049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    if ( matrix )
73049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project      FT_Outline_Transform( &slot->outline, matrix );
74049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
75049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    if ( delta )
76049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project      FT_Outline_Translate( &slot->outline, delta->x, delta->y );
77049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
78049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  Exit:
79049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    return error;
80049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  }
81049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
82049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
83049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /* return the glyph's control box */
84049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  static void
85049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  ft_raster1_get_cbox( FT_Renderer   render,
86049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project                       FT_GlyphSlot  slot,
87049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project                       FT_BBox*      cbox )
88049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  {
89049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_MEM_ZERO( cbox, sizeof ( *cbox ) );
90049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
91049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    if ( slot->format == render->glyph_format )
92049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project      FT_Outline_Get_CBox( &slot->outline, cbox );
93049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  }
94049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
95049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
96049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /* convert a slot's glyph image into a bitmap */
97049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  static FT_Error
98049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  ft_raster1_render( FT_Renderer       render,
99049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project                     FT_GlyphSlot      slot,
100049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project                     FT_Render_Mode    mode,
101049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project                     const FT_Vector*  origin )
102049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  {
103049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_Error     error;
104049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_Outline*  outline;
105049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_BBox      cbox;
106049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_UInt      width, height, pitch;
107049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_Bitmap*   bitmap;
108049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_Memory    memory;
109049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
110049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_Raster_Params  params;
111049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
112049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
113049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    /* check glyph image format */
114049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    if ( slot->format != render->glyph_format )
115049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    {
116049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project      error = Raster_Err_Invalid_Argument;
117049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project      goto Exit;
118049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    }
119049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
120049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    /* check rendering mode */
121049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    if ( mode != FT_RENDER_MODE_MONO )
122049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    {
123049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project      /* raster1 is only capable of producing monochrome bitmaps */
124049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project      if ( render->clazz == &ft_raster1_renderer_class )
125049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project        return Raster_Err_Cannot_Render_Glyph;
126049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    }
127049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    else
128049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    {
129049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project      /* raster5 is only capable of producing 5-gray-levels bitmaps */
130049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project      if ( render->clazz == &ft_raster5_renderer_class )
131049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project        return Raster_Err_Cannot_Render_Glyph;
132049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    }
133049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
134049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    outline = &slot->outline;
135049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
136049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    /* translate the outline to the new origin if needed */
137049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    if ( origin )
138049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project      FT_Outline_Translate( outline, origin->x, origin->y );
139049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
140049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    /* compute the control box, and grid fit it */
141049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_Outline_Get_CBox( outline, &cbox );
142049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
143049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    cbox.xMin = FT_PIX_FLOOR( cbox.xMin );
144049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    cbox.yMin = FT_PIX_FLOOR( cbox.yMin );
145049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    cbox.xMax = FT_PIX_CEIL( cbox.xMax );
146049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    cbox.yMax = FT_PIX_CEIL( cbox.yMax );
147049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
148049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    width  = (FT_UInt)( ( cbox.xMax - cbox.xMin ) >> 6 );
149049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    height = (FT_UInt)( ( cbox.yMax - cbox.yMin ) >> 6 );
150049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    bitmap = &slot->bitmap;
151049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    memory = render->root.memory;
152049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
153049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    /* release old bitmap buffer */
154049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    if ( slot->internal->flags & FT_GLYPH_OWN_BITMAP )
155049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    {
156049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project      FT_FREE( bitmap->buffer );
157049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project      slot->internal->flags &= ~FT_GLYPH_OWN_BITMAP;
158049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    }
159049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
160049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    /* allocate new one, depends on pixel format */
161049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    if ( !( mode & FT_RENDER_MODE_MONO ) )
162049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    {
163049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project      /* we pad to 32 bits, only for backwards compatibility with FT 1.x */
164049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project      pitch              = FT_PAD_CEIL( width, 4 );
165049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project      bitmap->pixel_mode = FT_PIXEL_MODE_GRAY;
166049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project      bitmap->num_grays  = 256;
167049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    }
168049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    else
169049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    {
170049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project      pitch              = ( ( width + 15 ) >> 4 ) << 1;
171049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project      bitmap->pixel_mode = FT_PIXEL_MODE_MONO;
172049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    }
173049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
174049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    bitmap->width = width;
175049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    bitmap->rows  = height;
176049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    bitmap->pitch = pitch;
177049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
178049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    if ( FT_ALLOC_MULT( bitmap->buffer, pitch, height ) )
179049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project      goto Exit;
180049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
181049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    slot->internal->flags |= FT_GLYPH_OWN_BITMAP;
182049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
183049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    /* translate outline to render it into the bitmap */
184049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_Outline_Translate( outline, -cbox.xMin, -cbox.yMin );
185049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
186049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    /* set up parameters */
187049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    params.target = bitmap;
188049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    params.source = outline;
189049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    params.flags  = 0;
190049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
191049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    if ( bitmap->pixel_mode == FT_PIXEL_MODE_GRAY )
192049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project      params.flags |= FT_RASTER_FLAG_AA;
193049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
194049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    /* render outline into the bitmap */
195049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    error = render->raster_render( render->raster, &params );
196049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
197049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_Outline_Translate( outline, cbox.xMin, cbox.yMin );
198049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
199049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    if ( error )
200049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project      goto Exit;
201049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
202049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    slot->format      = FT_GLYPH_FORMAT_BITMAP;
203049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    slot->bitmap_left = (FT_Int)( cbox.xMin >> 6 );
204049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    slot->bitmap_top  = (FT_Int)( cbox.yMax >> 6 );
205049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
206049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  Exit:
207049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    return error;
208049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  }
209049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
210049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
211049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  FT_CALLBACK_TABLE_DEF
212049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  const FT_Renderer_Class  ft_raster1_renderer_class =
213049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  {
214049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    {
215049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project      FT_MODULE_RENDERER,
216049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project      sizeof( FT_RendererRec ),
217049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
218049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project      "raster1",
219049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project      0x10000L,
220049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project      0x20000L,
221049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
222049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project      0,    /* module specific interface */
223049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
224049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project      (FT_Module_Constructor)ft_raster1_init,
225049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project      (FT_Module_Destructor) 0,
226049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project      (FT_Module_Requester)  0
227049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    },
228049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
229049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_GLYPH_FORMAT_OUTLINE,
230049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
231049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    (FT_Renderer_RenderFunc)   ft_raster1_render,
232049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    (FT_Renderer_TransformFunc)ft_raster1_transform,
233049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    (FT_Renderer_GetCBoxFunc)  ft_raster1_get_cbox,
234049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    (FT_Renderer_SetModeFunc)  ft_raster1_set_mode,
235049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
236049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    (FT_Raster_Funcs*)    &ft_standard_raster
237049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  };
238049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
239049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
240049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /* This renderer is _NOT_ part of the default modules; you will need */
241049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /* to register it by hand in your application.  It should only be    */
242049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /* used for backwards-compatibility with FT 1.x anyway.              */
243049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /*                                                                   */
244049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  FT_CALLBACK_TABLE_DEF
245049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  const FT_Renderer_Class  ft_raster5_renderer_class =
246049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  {
247049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    {
248049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project      FT_MODULE_RENDERER,
249049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project      sizeof( FT_RendererRec ),
250049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
251049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project      "raster5",
252049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project      0x10000L,
253049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project      0x20000L,
254049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
255049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project      0,    /* module specific interface */
256049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
257049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project      (FT_Module_Constructor)ft_raster1_init,
258049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project      (FT_Module_Destructor) 0,
259049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project      (FT_Module_Requester)  0
260049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    },
261049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
262049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_GLYPH_FORMAT_OUTLINE,
263049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
264049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    (FT_Renderer_RenderFunc)   ft_raster1_render,
265049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    (FT_Renderer_TransformFunc)ft_raster1_transform,
266049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    (FT_Renderer_GetCBoxFunc)  ft_raster1_get_cbox,
267049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    (FT_Renderer_SetModeFunc)  ft_raster1_set_mode,
268049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
269049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    (FT_Raster_Funcs*)    &ft_standard_raster
270049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  };
271049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
272049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
273049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* END */
274