Un apercu du layout des fichiers sources de FreeType 2: docs/ - documentation html/ - documentation au format html txt/ - documentation au format texte include/ - les headers publiques de la librairie, ce sont ceux qui sont installes avec le paquet freetype-devel.rpm config/ - le repertoire de configuration. ansi/ ft_conf.h - fichier de configuration ftsys.c - fichier implementation bas-niveau unix/ os2/ dos/ amiga/ debug/ src/ - sources de la librairie base/ - couche de base (services generiques + API) truetype/ - pilote truetype options/ - options du pilote truetype extend/ - extensions du pilote truetype type1/ - pilote type 1 options/ - options du pilote type 1 extend/ - extensions du pilote type 1 type2/ - pilote type 2 speedo/ - pilote speedo shared/ - sources partagees par plusieurs pilotes tests/ - programmes de test data/ - donnees des tests = fichiers de police => copies dans bin test1/ - source du test numero 1 test2/ - source du test numero 2 test3/ - ... ... obj/ - emplacement des fichiers objets compiles + librairie ? bin/ - emplacement des executables (demos+tests) demos/ - programmes de demonstration graph/ - sous-systeme graphique des programmes de demo contrib/ - contributions de toutes sortes.. ============================================================================= Quelques autres idees au hasard : - virer le controle des threads, on s'en tape magistralement - separer l'allocation memoire de l'acces disque (+flexible) - l'api de base doit permettre "d'ouvrir" un fichier de police se trouvant deja en memoire.. - expliquer les differents types de dictionnaires : char_code -> glyph_index charmap (truetype) char_code -> glyph_name encoding (type 1) glyph_index -> glyph_name repertoire (...) - plusieurs "raster" possibles (le raster par defaut peut etre déterminé à la compilation, sinon l'ajout se fait simplement en passant un pointeur d'interface..) - l'api de base doit etre simplifiee. La plupart des developpeurs ne veulent pas savoir ce qu'est une "size", un "glyph_slot", etc.., on conseille donc d'en creer une par defaut, lors de l'appel de : ------------------- initialisation et lecture des polices ------------ FT_Init_FreeType( &library ); FT_Set_Memory_Manager( library, &mem_manager_rec ); FT_Set_IO_Manager( library, &io_manager_rec ); FT_New_Face( library, file_pathname, face_index, &face ); FT_New_Memory_Face( library, first_byte, length, face_index, &face ); ou encore: FT_New_Face( library, &new_face_rec, &face ); avec new_face_rec :: face_index pathname memory_address bytes_size FT_Flush_Face( face ); // ferme le stream correspondant.. ------------------------------------------ changement de taille ------ FT_Set_Size( face, &face_size_rec ); face_size_rec :: char_height char_width horz_resolution vert_resolution FT_Set_Pixel_Sizes( face, 64, 64 ); ----------------------------------------- selection de la charmap ---- FT_Select_Charmap( face, ft_charmap_unicode ); FT_Select_Charmap_Index( face, index ); FT_List_Charmaps( face, buffer, max, first ); face->charmap => pointe vers la charmap actuelle.. -------------------------------------- chargement des glyphes -------- FT_Load_Glyph( face, glyph_index ); FT_Load_Char( face, char_code ); FT_Transform_Glyph( face->glyph, &trans ); ---------------------------------------------- rendu final ----------- FT_Get_Outline_Bitmap( library, face->glyph, &bit ); FT_Set_Raster( library, "default" ); FT_Set_Raster_Mode( library, major_mode, minor_mode ); ======================================================================================= Système de configuration automatique freetype2/ Makefile config/ ansi/ config.mk make setup => autodetection du système + copie de fichier include ??? make