From 74abee8e2ea269b983916b8eb55bef385b98f2e2 Mon Sep 17 00:00:00 2001 From: David Turner Date: Tue, 27 Jun 2000 23:31:53 +0000 Subject: [PATCH] various cleanups to reduce compiler warnings --- src/base/ftobjs.c | 167 +++++++++++++++++++++++++---------------- src/base/ftoutln.c | 52 ++++++------- src/truetype/ttgload.c | 7 +- 3 files changed, 131 insertions(+), 95 deletions(-) diff --git a/src/base/ftobjs.c b/src/base/ftobjs.c index beb8dcc3d..7a5650751 100644 --- a/src/base/ftobjs.c +++ b/src/base/ftobjs.c @@ -440,8 +440,8 @@ } - BASE_FUNC( FT_Error ) FT_GlyphLoader_Create_Extra( - FT_GlyphLoader* loader ) + + BASE_FUNC(FT_Error) FT_GlyphLoader_Create_Extra( FT_GlyphLoader* loader ) { FT_Error error; FT_Memory memory = loader->memory; @@ -881,6 +881,8 @@ } + static FT_Renderer ft_lookup_glyph_renderer( FT_GlyphSlot slot ); + /*************************************************************************/ /* */ /* */ @@ -926,7 +928,7 @@ if ( !face || !face->size || !face->glyph ) return FT_Err_Invalid_Face_Handle; - if ( glyph_index >= face->num_glyphs ) + if ( glyph_index >= (FT_UInt)face->num_glyphs ) return FT_Err_Invalid_Argument; slot = face->glyph; @@ -1388,7 +1390,6 @@ FT_Int num_params = 0; FT_Parameter* params = 0; - driver = FT_DRIVER( cur[0] ); if ( args->flags & ft_open_params ) @@ -2213,16 +2214,20 @@ /*************************************************************************/ /* lookup a renderer by glyph format in the library's list */ - static FT_Renderer ft_lookup_renderer( FT_Library library, - FT_Glyph_Format format, - FT_ListNode* node ) + BASE_FUNC(FT_Renderer) FT_Lookup_Renderer( FT_Library library, + FT_Glyph_Format format, + FT_ListNode *node ) { FT_ListNode cur = library->renderers.head; FT_Renderer result = 0; - if ( node ) + if (node) + { + if (*node) + cur = (*node)->next; *node = 0; + } while ( cur ) { @@ -2237,13 +2242,14 @@ result = renderer; break; } + cur = cur->next; } return result; } - static FT_Renderer ft_lookup_glyph_renderer( FT_GlyphSlot slot ) + static FT_Renderer ft_lookup_glyph_renderer( FT_GlyphSlot slot ) { FT_Face face = slot->face; FT_Library library = FT_FACE_LIBRARY( face ); @@ -2261,7 +2267,7 @@ { FT_Renderer renderer; - renderer = ft_lookup_renderer( library, ft_glyph_format_outline, 0 ); + renderer = FT_Lookup_Renderer( library, ft_glyph_format_outline, 0 ); library->cur_renderer = renderer; } @@ -2364,7 +2370,7 @@ FT_EXPORT_FUNC( FT_Renderer ) FT_Get_Renderer( FT_Library library, FT_Glyph_Format format ) { - return ft_lookup_renderer( library, format, 0 ); + return FT_Lookup_Renderer( library, format, 0 ); } @@ -2409,7 +2415,7 @@ error = FT_Err_Invalid_Argument; goto Exit; } - + FT_List_Up( &library->renderers, node ); if ( renderer->glyph_format == ft_glyph_format_outline ) @@ -2433,75 +2439,108 @@ } - /*************************************************************************/ - /* */ - /* */ - /* FT_Render_Glyph */ - /* */ - /* */ - /* Converts a given glyph image to a bitmap. It does so by */ - /* inspecting the glyph image format, find the relevant renderer, and */ - /* invoke it. */ - /* */ - /* */ - /* slot :: A handle to the glyph slot containing the image to */ - /* convert. */ - /* */ - /* render_mode :: A set of bit flags indicating which kind of bitmap */ - /* to render. For now, only */ - /* `ft_render_mode_anti_alias' is supported by the */ - /* available renderers, but others could appear later */ - /* (e.g. optimized for TV or LCD). */ - /* */ - /* */ - /* FreeType error code. 0 means success. */ - /* */ - /* */ - /* In case of success, the renderer will be used to convert glyph */ - /* images in the renderer's known format into bitmaps. */ - /* */ - /* This doesn't change the current renderer for other formats. */ - /* */ - /* The slot's native image should be considered lost after the */ - /* conversion. */ - /* */ - FT_EXPORT_FUNC( FT_Error ) FT_Render_Glyph( FT_GlyphSlot slot, - FT_UInt render_mode ) +<<<<<<< ftobjs.c + /************************************************************************* + * + * + * FT_Render_Glyph + * + * + * Converts a given glyph image to a bitmap. It does so by inspecting + * the glyph image format, find the relevant renderer, and invoke it + * + * + * slot :: handle to the glyph slot containing the image to + * convert + * + * render_mode :: a set of bit flags indicating which kind of bitmap + * to render. For now, only 'ft_render_mode_anti_alias' + * is supported by the available renderers, but others + * could appear later (e.g. LCD or TV optimised) + * + * + * Error code. 0 means success. + * + * + * in case of success, the renderer will be used to convert glyph + * images in the renderer's known format into bitmaps. + * + * This doesn't change the current renderer for other formats.. + * + * The slot's native image should be considered lost after the + * conversion.. + * + *************************************************************************/ + + LOCAL_FUNC + FT_Error FT_Render_Glyph_Internal( FT_Library library, + FT_GlyphSlot slot, + FT_UInt render_mode ) { FT_Error error = FT_Err_Ok; FT_Renderer renderer; - if ( slot ) + /* if it's already a bitmap, no need to do anything */ + switch (slot->format) { - FT_Face face = slot->face; - FT_Library library = FT_FACE_LIBRARY( face ); - - - /* if it is already a bitmap, no need to do anything */ - switch ( slot->format ) - { - case ft_glyph_format_bitmap: /* already a bitmap, don't do anything */ + case ft_glyph_format_bitmap: /* already a bitmap, don't do anything */ break; - + default: + { + FT_ListNode node = 0; + FT_Bool update = 0; + /* small shortcut for the very common case */ - if ( slot->format == ft_glyph_format_outline ) + if (slot->format == ft_glyph_format_outline) + { renderer = library->cur_renderer; + node = library->renderers.head; + } else - renderer = ft_lookup_renderer( library, slot->format, 0 ); - + renderer = FT_Lookup_Renderer( library, slot->format, &node ); + error = FT_Err_Unimplemented_Feature; - if ( renderer ) - error = renderer->render( renderer, slot, render_mode ); + while (renderer) + { + error = renderer->render( renderer, slot, render_mode, 0 ); + if (!error || error != FT_Err_Cannot_Render_Glyph) break; + + /* FT_Err_Cannot_Render_Glyph is returned when the render mode */ + /* is unsupported by the current renderer for this glyph image */ + /* format.. */ + + /* now, look for another renderer that supports the same */ + /* format.. */ + renderer = FT_Lookup_Renderer( library, slot->format, &node ); + update = 1; + } + + /* if we changed the current renderer for the glyph image format */ + /* we need to select it as the next current one.. */ + if (!error && update && renderer) + FT_Set_Renderer( library, renderer, 0, 0 ); } } - else - error = FT_Err_Invalid_Argument; return error; } + + + FT_EXPORT_FUNC(FT_Error) FT_Render_Glyph( FT_GlyphSlot slot, + FT_UInt render_mode ) + { + FT_Library library; + + if (!slot) + return FT_Err_Invalid_Argument; + + library = FT_FACE_LIBRARY(slot->face); + return FT_Render_Glyph_Internal( library, slot, render_mode ); + } + /*************************************************************************/ /*************************************************************************/ @@ -2904,7 +2943,7 @@ FT_EXPORT_FUNC( FT_Error ) FT_Done_Library( FT_Library library ) { FT_Memory memory; - FT_Int n; + FT_UInt n; if ( !library ) diff --git a/src/base/ftoutln.c b/src/base/ftoutln.c index beb378931..b9a4c21b0 100644 --- a/src/base/ftoutln.c +++ b/src/base/ftoutln.c @@ -604,36 +604,34 @@ FT_Outline* outline, FT_Raster_Params* params ) { - FT_Error error; - FT_Renderer renderer; - - - if ( !library ) - { - error = FT_Err_Invalid_Library_Handle; - goto Exit; - } - - if ( !outline || !params ) - { - error = FT_Err_Invalid_Argument; - goto Exit; - } - - /* retrieve the current outline renderer */ - renderer = library->cur_renderer; - if ( !renderer ) - { - /* XXXX: should use another error code */ - error = FT_Err_Invalid_Argument; - goto Exit; - } + FT_Error error; + FT_Bool update = 0; + FT_Renderer renderer = library->cur_renderer; + FT_ListNode node = library->renderers.head; params->source = (void*)outline; - - error = renderer->raster_render( renderer->raster, params ); + + error = FT_Err_Cannot_Render_Glyph; + while (renderer) + { + error = renderer->raster_render( renderer->raster, params ); + if (!error || error != FT_Err_Cannot_Render_Glyph) break; - Exit: + /* FT_Err_Cannot_Render_Glyph is returned when the render mode */ + /* is unsupported by the current renderer for this glyph image */ + /* format.. */ + + /* now, look for another renderer that supports the same */ + /* format.. */ + renderer = FT_Lookup_Renderer( library, ft_glyph_format_outline, &node ); + update = 1; + } + + /* if we changed the current renderer for the glyph image format */ + /* we need to select it as the next current one.. */ + if (!error && update && renderer) + FT_Set_Renderer( library, renderer, 0, 0 ); + return error; } diff --git a/src/truetype/ttgload.c b/src/truetype/ttgload.c index 6e017eea6..01686b4e4 100644 --- a/src/truetype/ttgload.c +++ b/src/truetype/ttgload.c @@ -853,7 +853,7 @@ FT_GlyphLoader_Add( gloader ); - for ( n = 0; n < num_subglyphs; n++ ) + for ( n = 0; n < (FT_Int)num_subglyphs; n++ ) { FT_Vector pp1, pp2; FT_Pos x, y; @@ -915,13 +915,12 @@ if ( !( subglyph->flags & ARGS_ARE_XY_VALUES ) ) { - FT_Int k = subglyph->arg1; + FT_UInt k = subglyph->arg1; FT_UInt l = subglyph->arg2; FT_Vector* p1; FT_Vector* p2; - - if ( start_point + k >= num_base_points || + if ( start_point + k >= (FT_UInt)num_base_points || l >= (FT_UInt)num_new_points ) { error = TT_Err_Invalid_Composite;