* include/freetype/config/ftoption.h add FT_CONFIG_OPTION_PIC * include/freetype/internal/ftobjs.h Add pic_container member to FT_LibraryRec. Add macros to declare and init instances of FT_CMap_ClassRec. Add macros to init instances of FT_Outline_Funcs and FT_Raster_Funcs. Add macros to declare, allocate and initialize modules (FT_Module_Class). Add macros to declare, allocate and initialize renderers (FT_Renderer_Class). Add macro to init instances of FT_Glyph_Class. Add macros to declare, allocate and initialize drivers (FT_Driver_ClassRec). * include/freetype/internal/ftpic.h new file to declare the FT_PIC_Container struct and the functions to allocate and detroy it. * include/freetype/internal/ftserv.h add macros to allocate and destory arrays of FT_ServiceDescRec. * include/freetype/internal/internal.h define macro to include ftpic.h. New Files: * src/base/ftpic.c implement functions to allocate and destory the global pic_container. * src/base/basepic.h declare struct to hold PIC globals for base and macros to access them. * src/base/basepic.c implement functions to allocate, destroy and initialize PIC globals for base. * src/base/ftinit.c when FT_CONFIG_OPTION_PIC is defined implement functions that allocate and destroy ft_default_modules according to FT_CONFIG_MODULES_H in the pic_container instead of the global scope and use macro from basepic.h to access it. * src/base/ftobjs.c add calls to the functions that allocate and destroy the global pic_container when the library is created and destroyed. * src/base/jamfile add new files to FT2_MULTI build: ftpic.c and basepic.c. * src/base/ftbase.c add new files to build: ftpic.c and basepic.c. * src/base/ftglyph.c when FT_CONFIG_OPTION_PIC is defined ft_bitmap_glyph_class and ft_outline_glyph_class will be allocated in the pic_container instead of the global scope and use macros from basepic.h to access them. * src/base/ftbbox.c allocate bbox_interface stract on the stack instead of the global scope when FT_CONFIG_OPTION_PIC is defined. * src/base/ftstroke.c access ft_outline_glyph_class allocated in ftglyph.c via macros from basepic.hdavid-pic-changes
parent
2589e5fd94
commit
636c294bef
17 changed files with 1475 additions and 27 deletions
@ -0,0 +1,67 @@ |
||||
/***************************************************************************/ |
||||
/* */ |
||||
/* ftpic.h */ |
||||
/* */ |
||||
/* The FreeType position independent code services (declaration). */ |
||||
/* */ |
||||
/* Copyright 2009 by */ |
||||
/* Oran Agra and Mickey Gabel. */ |
||||
/* */ |
||||
/* This file is part of the FreeType project, and may only be used, */ |
||||
/* modified, and distributed under the terms of the FreeType project */ |
||||
/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ |
||||
/* this file you indicate that you have read the license and */ |
||||
/* understand and accept it fully. */ |
||||
/* */ |
||||
/***************************************************************************/ |
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* Modules that ordinarily have const global data that need address */ |
||||
/* can instead define pointers here. */ |
||||
/* */ |
||||
/*************************************************************************/ |
||||
|
||||
|
||||
#ifndef __FTPIC_H__ |
||||
#define __FTPIC_H__ |
||||
|
||||
|
||||
FT_BEGIN_HEADER |
||||
|
||||
#ifdef FT_CONFIG_OPTION_PIC |
||||
|
||||
typedef struct FT_PIC_Container_ |
||||
{ |
||||
/* pic containers for base */ |
||||
void* base; |
||||
/* pic containers for modules */ |
||||
void* autofit;
|
||||
void* cff;
|
||||
void* pshinter;
|
||||
void* psnames;
|
||||
void* raster;
|
||||
void* sfnt;
|
||||
void* smooth;
|
||||
void* truetype;
|
||||
} FT_PIC_Container; |
||||
|
||||
/* Initialize the various function tables, structs, etc. stored in the container. */ |
||||
FT_BASE( FT_Error ) |
||||
ft_pic_container_init( FT_Library library ); |
||||
|
||||
|
||||
/* Destroy the contents of the container. */ |
||||
FT_BASE( void ) |
||||
ft_pic_container_destroy( FT_Library library ); |
||||
|
||||
#endif /* FT_CONFIG_OPTION_PIC */ |
||||
|
||||
/* */ |
||||
|
||||
FT_END_HEADER |
||||
|
||||
#endif /* __FTPIC_H__ */ |
||||
|
||||
|
||||
/* END */ |
@ -0,0 +1,83 @@ |
||||
/***************************************************************************/ |
||||
/* */ |
||||
/* basepic.c */ |
||||
/* */ |
||||
/* The FreeType position independent code services for base. */ |
||||
/* */ |
||||
/* Copyright 2009 by */ |
||||
/* Oran Agra and Mickey Gabel. */ |
||||
/* */ |
||||
/* This file is part of the FreeType project, and may only be used, */ |
||||
/* modified, and distributed under the terms of the FreeType project */ |
||||
/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ |
||||
/* this file you indicate that you have read the license and */ |
||||
/* understand and accept it fully. */ |
||||
/* */ |
||||
/***************************************************************************/ |
||||
|
||||
|
||||
#include <ft2build.h> |
||||
#include FT_FREETYPE_H |
||||
#include FT_INTERNAL_OBJECTS_H |
||||
#include "basepic.h" |
||||
|
||||
#ifdef FT_CONFIG_OPTION_PIC |
||||
|
||||
/* forward declaration of PIC init functions from ftglyph.c */ |
||||
void FT_Init_Class_ft_outline_glyph_class(FT_Glyph_Class*); |
||||
void FT_Init_Class_ft_bitmap_glyph_class(FT_Glyph_Class*); |
||||
|
||||
/* forward declaration of PIC init functions from ftinit.c */ |
||||
FT_Error ft_create_default_module_classes(FT_Library); |
||||
void ft_destroy_default_module_classes(FT_Library); |
||||
|
||||
void |
||||
ft_base_pic_free( FT_Library library ) |
||||
{ |
||||
FT_PIC_Container* pic_container = &library->pic_container; |
||||
FT_Memory memory = library->memory; |
||||
if ( pic_container->base ) |
||||
{ |
||||
/* Destroy default module classes (in case FT_Add_Default_Modules was used) */ |
||||
ft_destroy_default_module_classes( library ); |
||||
|
||||
FT_FREE( pic_container->base ); |
||||
pic_container->base = NULL; |
||||
} |
||||
} |
||||
|
||||
|
||||
FT_Error |
||||
ft_base_pic_init( FT_Library library ) |
||||
{ |
||||
FT_PIC_Container* pic_container = &library->pic_container; |
||||
FT_Error error = FT_Err_Ok; |
||||
BasePIC* container; |
||||
FT_Memory memory = library->memory; |
||||
|
||||
/* allocate pointer, clear and set global container pointer */ |
||||
if ( FT_ALLOC ( container, sizeof ( *container ) ) ) |
||||
return error; |
||||
FT_MEM_SET( container, 0, sizeof(*container) ); |
||||
pic_container->base = container; |
||||
|
||||
/* initialize default modules list and pointers */ |
||||
error = ft_create_default_module_classes( library ); |
||||
if ( error ) |
||||
goto Exit; |
||||
|
||||
/* initialize pointer table - this is how the module usually expects this data */ |
||||
FT_Init_Class_ft_outline_glyph_class(&container->ft_outline_glyph_class); |
||||
FT_Init_Class_ft_bitmap_glyph_class(&container->ft_bitmap_glyph_class); |
||||
|
||||
Exit: |
||||
if(error) |
||||
ft_base_pic_free(library); |
||||
return error; |
||||
} |
||||
|
||||
|
||||
#endif /* FT_CONFIG_OPTION_PIC */ |
||||
|
||||
|
||||
/* END */ |
@ -0,0 +1,62 @@ |
||||
/***************************************************************************/ |
||||
/* */ |
||||
/* basepic.h */ |
||||
/* */ |
||||
/* The FreeType position independent code services for base. */ |
||||
/* */ |
||||
/* Copyright 2009 by */ |
||||
/* Oran Agra and Mickey Gabel. */ |
||||
/* */ |
||||
/* This file is part of the FreeType project, and may only be used, */ |
||||
/* modified, and distributed under the terms of the FreeType project */ |
||||
/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ |
||||
/* this file you indicate that you have read the license and */ |
||||
/* understand and accept it fully. */ |
||||
/* */ |
||||
/***************************************************************************/ |
||||
|
||||
|
||||
#ifndef __BASEPIC_H__ |
||||
#define __BASEPIC_H__ |
||||
|
||||
|
||||
FT_BEGIN_HEADER |
||||
|
||||
#include FT_INTERNAL_PIC_H |
||||
|
||||
#ifndef FT_CONFIG_OPTION_PIC |
||||
#define FT_OUTLINE_GLYPH_CLASS_GET &ft_outline_glyph_class |
||||
#define FT_BITMAP_GLYPH_CLASS_GET &ft_bitmap_glyph_class |
||||
#define FT_DEFAULT_MODULES_GET ft_default_modules |
||||
|
||||
#else /* FT_CONFIG_OPTION_PIC */ |
||||
|
||||
#include FT_GLYPH_H |
||||
|
||||
typedef struct BasePIC_ |
||||
{ |
||||
FT_Module_Class** default_module_classes; |
||||
FT_Glyph_Class ft_outline_glyph_class; |
||||
FT_Glyph_Class ft_bitmap_glyph_class; |
||||
} BasePIC; |
||||
|
||||
#define GET_PIC(lib) ((BasePIC*)((lib)->pic_container.base)) |
||||
#define FT_OUTLINE_GLYPH_CLASS_GET (&GET_PIC(library)->ft_outline_glyph_class) |
||||
#define FT_BITMAP_GLYPH_CLASS_GET (&GET_PIC(library)->ft_bitmap_glyph_class) |
||||
#define FT_DEFAULT_MODULES_GET (GET_PIC(library)->default_module_classes) |
||||
|
||||
void |
||||
ft_base_pic_free( FT_Library library ); |
||||
|
||||
FT_Error |
||||
ft_base_pic_init( FT_Library library ); |
||||
|
||||
#endif /* FT_CONFIG_OPTION_PIC */ |
||||
/* */ |
||||
|
||||
FT_END_HEADER |
||||
|
||||
#endif /* __BASEPIC_H__ */ |
||||
|
||||
|
||||
/* END */ |
@ -0,0 +1,54 @@ |
||||
/***************************************************************************/ |
||||
/* */ |
||||
/* ftpic.c */ |
||||
/* */ |
||||
/* The FreeType position independent code services (body). */ |
||||
/* */ |
||||
/* Copyright 2009 by */ |
||||
/* Oran Agra and Mickey Gabel. */ |
||||
/* */ |
||||
/* This file is part of the FreeType project, and may only be used, */ |
||||
/* modified, and distributed under the terms of the FreeType project */ |
||||
/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ |
||||
/* this file you indicate that you have read the license and */ |
||||
/* understand and accept it fully. */ |
||||
/* */ |
||||
/***************************************************************************/ |
||||
|
||||
|
||||
#include <ft2build.h> |
||||
#include FT_FREETYPE_H |
||||
#include FT_INTERNAL_OBJECTS_H |
||||
#include "basepic.h" |
||||
|
||||
#ifdef FT_CONFIG_OPTION_PIC |
||||
|
||||
/* documentation is in ftpic.h */ |
||||
|
||||
FT_BASE_DEF( FT_Error ) |
||||
ft_pic_container_init( FT_Library library ) |
||||
{ |
||||
FT_PIC_Container* pic_container = &library->pic_container; |
||||
FT_Error error = FT_Err_Ok; |
||||
|
||||
FT_MEM_SET( pic_container, 0, sizeof(*pic_container) ); |
||||
|
||||
error = ft_base_pic_init( library ); |
||||
if(error) |
||||
return error; |
||||
|
||||
return FT_Err_Ok; |
||||
} |
||||
|
||||
|
||||
/* Destroy the contents of the container. */ |
||||
FT_BASE_DEF( void ) |
||||
ft_pic_container_destroy( FT_Library library ) |
||||
{ |
||||
ft_base_pic_free( library ); |
||||
} |
||||
|
||||
#endif /* FT_CONFIG_OPTION_PIC */ |
||||
|
||||
|
||||
/* END */ |
Loading…
Reference in new issue