Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

  1. /***************************************************************************/
  2. /*                                                                         */
  3. /*  rastpic.c                                                              */
  4. /*                                                                         */
  5. /*    The FreeType position independent code services for raster module.   */
  6. /*                                                                         */
  7. /*  Copyright 2009, 2010, 2012, 2013 by                                    */
  8. /*  Oran Agra and Mickey Gabel.                                            */
  9. /*                                                                         */
  10. /*  This file is part of the FreeType project, and may only be used,       */
  11. /*  modified, and distributed under the terms of the FreeType project      */
  12. /*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
  13. /*  this file you indicate that you have read the license and              */
  14. /*  understand and accept it fully.                                        */
  15. /*                                                                         */
  16. /***************************************************************************/
  17.  
  18.  
  19. #include <ft2build.h>
  20. #include FT_FREETYPE_H
  21. #include FT_INTERNAL_OBJECTS_H
  22. #include "rastpic.h"
  23. #include "rasterrs.h"
  24.  
  25.  
  26. #ifdef FT_CONFIG_OPTION_PIC
  27.  
  28.   /* forward declaration of PIC init functions from ftraster.c */
  29.   void
  30.   FT_Init_Class_ft_standard_raster( FT_Raster_Funcs*  funcs );
  31.  
  32.  
  33.   void
  34.   ft_raster1_renderer_class_pic_free( FT_Library  library )
  35.   {
  36.     FT_PIC_Container*  pic_container = &library->pic_container;
  37.     FT_Memory          memory        = library->memory;
  38.  
  39.  
  40.     if ( pic_container->raster )
  41.     {
  42.       RasterPIC*  container = (RasterPIC*)pic_container->raster;
  43.  
  44.  
  45.       if ( --container->ref_count )
  46.         return;
  47.       FT_FREE( container );
  48.       pic_container->raster = NULL;
  49.     }
  50.   }
  51.  
  52.  
  53.   FT_Error
  54.   ft_raster1_renderer_class_pic_init( FT_Library  library )
  55.   {
  56.     FT_PIC_Container*  pic_container = &library->pic_container;
  57.     FT_Error           error         = FT_Err_Ok;
  58.     RasterPIC*         container     = NULL;
  59.     FT_Memory          memory        = library->memory;
  60.  
  61.  
  62.     /* since this function also serves raster5 renderer, */
  63.     /* it implements reference counting                  */
  64.     if ( pic_container->raster )
  65.     {
  66.       ((RasterPIC*)pic_container->raster)->ref_count++;
  67.       return error;
  68.     }
  69.  
  70.     /* allocate pointer, clear and set global container pointer */
  71.     if ( FT_ALLOC( container, sizeof ( *container ) ) )
  72.       return error;
  73.     FT_MEM_SET( container, 0, sizeof ( *container ) );
  74.     pic_container->raster = container;
  75.  
  76.     container->ref_count = 1;
  77.  
  78.     /* initialize pointer table -                       */
  79.     /* this is how the module usually expects this data */
  80.     FT_Init_Class_ft_standard_raster( &container->ft_standard_raster );
  81.  
  82.     return error;
  83.   }
  84.  
  85.  
  86.   /* re-route these init and free functions to the above functions */
  87.   FT_Error
  88.   ft_raster5_renderer_class_pic_init( FT_Library  library )
  89.   {
  90.     return ft_raster1_renderer_class_pic_init( library );
  91.   }
  92.  
  93.  
  94.   void
  95.   ft_raster5_renderer_class_pic_free( FT_Library  library )
  96.   {
  97.     ft_raster1_renderer_class_pic_free( library );
  98.   }
  99.  
  100. #endif /* FT_CONFIG_OPTION_PIC */
  101.  
  102.  
  103. /* END */
  104.