Subversion Repositories Kolibri OS

Rev

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

  1. /***************************************************************************/
  2. /*                                                                         */
  3. /*  ftspic.c                                                               */
  4. /*                                                                         */
  5. /*    The FreeType position independent code services for smooth 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 "ftspic.h"
  23. #include "ftsmerrs.h"
  24.  
  25.  
  26. #ifdef FT_CONFIG_OPTION_PIC
  27.  
  28.   /* forward declaration of PIC init functions from ftgrays.c */
  29.   void
  30.   FT_Init_Class_ft_grays_raster( FT_Raster_Funcs*  funcs );
  31.  
  32.  
  33.   void
  34.   ft_smooth_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->smooth )
  41.     {
  42.       SmoothPIC*  container = (SmoothPIC*)pic_container->smooth;
  43.  
  44.  
  45.       if ( --container->ref_count )
  46.         return;
  47.  
  48.       FT_FREE( container );
  49.       pic_container->smooth = NULL;
  50.     }
  51.   }
  52.  
  53.  
  54.   FT_Error
  55.   ft_smooth_renderer_class_pic_init( FT_Library  library )
  56.   {
  57.     FT_PIC_Container*  pic_container = &library->pic_container;
  58.     FT_Error           error         = FT_Err_Ok;
  59.     SmoothPIC*         container     = NULL;
  60.     FT_Memory          memory        = library->memory;
  61.  
  62.  
  63.     /* since this function also serve smooth_lcd and smooth_lcdv renderers,
  64.        it implements reference counting */
  65.     if ( pic_container->smooth )
  66.     {
  67.       ((SmoothPIC*)pic_container->smooth)->ref_count++;
  68.       return error;
  69.     }
  70.  
  71.     /* allocate pointer, clear and set global container pointer */
  72.     if ( FT_ALLOC( container, sizeof ( *container ) ) )
  73.       return error;
  74.     FT_MEM_SET( container, 0, sizeof ( *container ) );
  75.     pic_container->smooth = container;
  76.  
  77.     container->ref_count = 1;
  78.  
  79.     /* initialize pointer table -                       */
  80.     /* this is how the module usually expects this data */
  81.     FT_Init_Class_ft_grays_raster( &container->ft_grays_raster );
  82.  
  83.     return error;
  84.   }
  85.  
  86.  
  87.   /* re-route these init and free functions to the above functions */
  88.   FT_Error
  89.   ft_smooth_lcd_renderer_class_pic_init( FT_Library  library )
  90.   {
  91.     return ft_smooth_renderer_class_pic_init( library );
  92.   }
  93.  
  94.  
  95.   void
  96.   ft_smooth_lcd_renderer_class_pic_free( FT_Library  library )
  97.   {
  98.     ft_smooth_renderer_class_pic_free( library );
  99.   }
  100.  
  101.  
  102.   FT_Error
  103.   ft_smooth_lcdv_renderer_class_pic_init( FT_Library  library )
  104.   {
  105.     return ft_smooth_renderer_class_pic_init( library );
  106.   }
  107.  
  108.  
  109.   void
  110.   ft_smooth_lcdv_renderer_class_pic_free( FT_Library  library )
  111.   {
  112.     ft_smooth_renderer_class_pic_free( library );
  113.   }
  114.  
  115. #endif /* FT_CONFIG_OPTION_PIC */
  116.  
  117.  
  118. /* END */
  119.