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/* */ 7fb6b5b10aaa74b8c8974714b41bac35bdd1c772dMakoto Onuki/* Copyright 1996-2015 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> 20727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease#include FT_INTERNAL_DEBUG_H 21049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include FT_INTERNAL_OBJECTS_H 22049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include FT_OUTLINE_H 23049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include "ftrend1.h" 24049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include "ftraster.h" 25295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner#include "rastpic.h" 26049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 27049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include "rasterrs.h" 28049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 29049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 30049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* initialize renderer -- init its raster */ 31049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project static FT_Error 32049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project ft_raster1_init( FT_Renderer render ) 33049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 34049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Library library = FT_MODULE_LIBRARY( render ); 35049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 36049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 37049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project render->clazz->raster_class->raster_reset( render->raster, 38049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project library->raster_pool, 39049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project library->raster_pool_size ); 40049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 41727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease return FT_Err_Ok; 42049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 43049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 44049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 45049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* set render-specific mode */ 46049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project static FT_Error 47049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project ft_raster1_set_mode( FT_Renderer render, 48049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_ULong mode_tag, 49049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Pointer data ) 50049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 51049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* we simply pass it to the raster */ 52049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project return render->clazz->raster_class->raster_set_mode( render->raster, 53049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project mode_tag, 54049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project data ); 55049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 56049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 57049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 58049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* transform a given glyph image */ 59049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project static FT_Error 60049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project ft_raster1_transform( FT_Renderer render, 61049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_GlyphSlot slot, 62049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project const FT_Matrix* matrix, 63049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project const FT_Vector* delta ) 64049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 65727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease FT_Error error = FT_Err_Ok; 66049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 67049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 68049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( slot->format != render->glyph_format ) 69049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 70727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease error = FT_THROW( Invalid_Argument ); 71049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project goto Exit; 72049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 73049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 74049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( matrix ) 75049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Outline_Transform( &slot->outline, matrix ); 76049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 77049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( delta ) 78049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Outline_Translate( &slot->outline, delta->x, delta->y ); 79049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 80049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project Exit: 81049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project return error; 82049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 83049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 84049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 85049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* return the glyph's control box */ 86049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project static void 87049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project ft_raster1_get_cbox( FT_Renderer render, 88049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_GlyphSlot slot, 89049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_BBox* cbox ) 90049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 91049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_MEM_ZERO( cbox, sizeof ( *cbox ) ); 92049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 93049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( slot->format == render->glyph_format ) 94049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Outline_Get_CBox( &slot->outline, cbox ); 95049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 96049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 97049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 98049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* convert a slot's glyph image into a bitmap */ 99049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project static FT_Error 100049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project ft_raster1_render( FT_Renderer render, 101049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_GlyphSlot slot, 102049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Render_Mode mode, 103049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project const FT_Vector* origin ) 104049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 105049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Error error; 106049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Outline* outline; 107fb6b5b10aaa74b8c8974714b41bac35bdd1c772dMakoto Onuki FT_BBox cbox, cbox0; 108049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_UInt width, height, pitch; 109049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Bitmap* bitmap; 110049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Memory memory; 111049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 112049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Raster_Params params; 113049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 114049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 115049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* check glyph image format */ 116049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( slot->format != render->glyph_format ) 117049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 118727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease error = FT_THROW( Invalid_Argument ); 119049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project goto Exit; 120049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 121049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 122049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* check rendering mode */ 123049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( mode != FT_RENDER_MODE_MONO ) 124049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 125049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* raster1 is only capable of producing monochrome bitmaps */ 126fb6b5b10aaa74b8c8974714b41bac35bdd1c772dMakoto Onuki return FT_THROW( Cannot_Render_Glyph ); 127049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 128049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 129049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project outline = &slot->outline; 130049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 131049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* translate the outline to the new origin if needed */ 132049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( origin ) 133049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Outline_Translate( outline, origin->x, origin->y ); 134049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 135049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* compute the control box, and grid fit it */ 136fb6b5b10aaa74b8c8974714b41bac35bdd1c772dMakoto Onuki FT_Outline_Get_CBox( outline, &cbox0 ); 137049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 138aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner /* undocumented but confirmed: bbox values get rounded */ 139aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner#if 1 140fb6b5b10aaa74b8c8974714b41bac35bdd1c772dMakoto Onuki cbox.xMin = FT_PIX_ROUND( cbox0.xMin ); 141fb6b5b10aaa74b8c8974714b41bac35bdd1c772dMakoto Onuki cbox.yMin = FT_PIX_ROUND( cbox0.yMin ); 142fb6b5b10aaa74b8c8974714b41bac35bdd1c772dMakoto Onuki cbox.xMax = FT_PIX_ROUND( cbox0.xMax ); 143fb6b5b10aaa74b8c8974714b41bac35bdd1c772dMakoto Onuki cbox.yMax = FT_PIX_ROUND( cbox0.yMax ); 144aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner#else 145049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project cbox.xMin = FT_PIX_FLOOR( cbox.xMin ); 146049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project cbox.yMin = FT_PIX_FLOOR( cbox.yMin ); 147049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project cbox.xMax = FT_PIX_CEIL( cbox.xMax ); 148049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project cbox.yMax = FT_PIX_CEIL( cbox.yMax ); 149aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner#endif 150049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 151fb6b5b10aaa74b8c8974714b41bac35bdd1c772dMakoto Onuki /* If either `width' or `height' round to 0, try */ 152fb6b5b10aaa74b8c8974714b41bac35bdd1c772dMakoto Onuki /* explicitly rounding up/down. In the case of */ 153fb6b5b10aaa74b8c8974714b41bac35bdd1c772dMakoto Onuki /* glyphs containing only one very narrow feature, */ 154fb6b5b10aaa74b8c8974714b41bac35bdd1c772dMakoto Onuki /* this gives the drop-out compensation in the scan */ 155fb6b5b10aaa74b8c8974714b41bac35bdd1c772dMakoto Onuki /* conversion code a chance to do its stuff. */ 156049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project width = (FT_UInt)( ( cbox.xMax - cbox.xMin ) >> 6 ); 157fb6b5b10aaa74b8c8974714b41bac35bdd1c772dMakoto Onuki if ( width == 0 ) 158fb6b5b10aaa74b8c8974714b41bac35bdd1c772dMakoto Onuki { 159fb6b5b10aaa74b8c8974714b41bac35bdd1c772dMakoto Onuki cbox.xMin = FT_PIX_FLOOR( cbox0.xMin ); 160fb6b5b10aaa74b8c8974714b41bac35bdd1c772dMakoto Onuki cbox.xMax = FT_PIX_CEIL( cbox0.xMax ); 161fb6b5b10aaa74b8c8974714b41bac35bdd1c772dMakoto Onuki 162fb6b5b10aaa74b8c8974714b41bac35bdd1c772dMakoto Onuki width = (FT_UInt)( ( cbox.xMax - cbox.xMin ) >> 6 ); 163fb6b5b10aaa74b8c8974714b41bac35bdd1c772dMakoto Onuki } 164fb6b5b10aaa74b8c8974714b41bac35bdd1c772dMakoto Onuki 165049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project height = (FT_UInt)( ( cbox.yMax - cbox.yMin ) >> 6 ); 166fb6b5b10aaa74b8c8974714b41bac35bdd1c772dMakoto Onuki if ( height == 0 ) 167fb6b5b10aaa74b8c8974714b41bac35bdd1c772dMakoto Onuki { 168fb6b5b10aaa74b8c8974714b41bac35bdd1c772dMakoto Onuki cbox.yMin = FT_PIX_FLOOR( cbox0.yMin ); 169fb6b5b10aaa74b8c8974714b41bac35bdd1c772dMakoto Onuki cbox.yMax = FT_PIX_CEIL( cbox0.yMax ); 170fb6b5b10aaa74b8c8974714b41bac35bdd1c772dMakoto Onuki 171fb6b5b10aaa74b8c8974714b41bac35bdd1c772dMakoto Onuki height = (FT_UInt)( ( cbox.yMax - cbox.yMin ) >> 6 ); 172fb6b5b10aaa74b8c8974714b41bac35bdd1c772dMakoto Onuki } 173bff90fb5ec88ad7fdfb6d1d2f5a5719c20a2c5dcOlivier Bailly 174bff90fb5ec88ad7fdfb6d1d2f5a5719c20a2c5dcOlivier Bailly if ( width > FT_USHORT_MAX || height > FT_USHORT_MAX ) 175bff90fb5ec88ad7fdfb6d1d2f5a5719c20a2c5dcOlivier Bailly { 176727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease error = FT_THROW( Invalid_Argument ); 177bff90fb5ec88ad7fdfb6d1d2f5a5719c20a2c5dcOlivier Bailly goto Exit; 178bff90fb5ec88ad7fdfb6d1d2f5a5719c20a2c5dcOlivier Bailly } 179bff90fb5ec88ad7fdfb6d1d2f5a5719c20a2c5dcOlivier Bailly 180049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project bitmap = &slot->bitmap; 181049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project memory = render->root.memory; 182049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 183049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* release old bitmap buffer */ 184049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( slot->internal->flags & FT_GLYPH_OWN_BITMAP ) 185049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 186049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_FREE( bitmap->buffer ); 187049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project slot->internal->flags &= ~FT_GLYPH_OWN_BITMAP; 188049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 189049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 190fb6b5b10aaa74b8c8974714b41bac35bdd1c772dMakoto Onuki pitch = ( ( width + 15 ) >> 4 ) << 1; 191fb6b5b10aaa74b8c8974714b41bac35bdd1c772dMakoto Onuki bitmap->pixel_mode = FT_PIXEL_MODE_MONO; 192049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 193049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project bitmap->width = width; 194049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project bitmap->rows = height; 195fb6b5b10aaa74b8c8974714b41bac35bdd1c772dMakoto Onuki bitmap->pitch = (int)pitch; 196049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 197049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( FT_ALLOC_MULT( bitmap->buffer, pitch, height ) ) 198049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project goto Exit; 199049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 200049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project slot->internal->flags |= FT_GLYPH_OWN_BITMAP; 201049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 202049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* translate outline to render it into the bitmap */ 203049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Outline_Translate( outline, -cbox.xMin, -cbox.yMin ); 204049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 205049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* set up parameters */ 206049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project params.target = bitmap; 207049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project params.source = outline; 208049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project params.flags = 0; 209049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 210049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* render outline into the bitmap */ 211049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project error = render->raster_render( render->raster, ¶ms ); 212049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 213049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Outline_Translate( outline, cbox.xMin, cbox.yMin ); 214049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 215049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( error ) 216049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project goto Exit; 217049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 218049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project slot->format = FT_GLYPH_FORMAT_BITMAP; 219049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project slot->bitmap_left = (FT_Int)( cbox.xMin >> 6 ); 220049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project slot->bitmap_top = (FT_Int)( cbox.yMax >> 6 ); 221049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 222049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project Exit: 223049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project return error; 224049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 225049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 226049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 22741371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier FT_DEFINE_RENDERER( ft_raster1_renderer_class, 22841371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier 229049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_MODULE_RENDERER, 23041371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier sizeof ( FT_RendererRec ), 231049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 232049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project "raster1", 233049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 0x10000L, 234049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 0x20000L, 235049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 236049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 0, /* module specific interface */ 237049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 238049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project (FT_Module_Constructor)ft_raster1_init, 239049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project (FT_Module_Destructor) 0, 240049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project (FT_Module_Requester) 0 241295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner , 242049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 243049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_GLYPH_FORMAT_OUTLINE, 244049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 245049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project (FT_Renderer_RenderFunc) ft_raster1_render, 246049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project (FT_Renderer_TransformFunc)ft_raster1_transform, 247049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project (FT_Renderer_GetCBoxFunc) ft_raster1_get_cbox, 248049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project (FT_Renderer_SetModeFunc) ft_raster1_set_mode, 249049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 250295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner (FT_Raster_Funcs*) &FT_STANDARD_RASTER_GET 251295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner ) 252049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 253049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 254049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* END */ 255