/***************************************************************************/
/*                                                                         */
/*  ftspic.c                                                               */
/*                                                                         */
/*    The FreeType position independent code services for smooth module.   */
/*                                                                         */
/*  Copyright 2009, 2010 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 "ftspic.h"

#ifdef FT_CONFIG_OPTION_PIC

  /* forward declaration of PIC init functions from ftgrays.c */
  void FT_Init_Class_ft_grays_raster(FT_Raster_Funcs*);

  void
  ft_smooth_renderer_class_pic_free(  FT_Library library )
  {
    FT_PIC_Container* pic_container = &library->pic_container;
    FT_Memory memory = library->memory;
    if ( pic_container->smooth )
    {
      SmoothPIC* container = (SmoothPIC*)pic_container->smooth;
      if(--container->ref_count)
        return;
      FT_FREE( container );
      pic_container->smooth = NULL;
    }
  }


  FT_Error
  ft_smooth_renderer_class_pic_init( FT_Library  library )
  {
    FT_PIC_Container*  pic_container = &library->pic_container;
    FT_Error           error         = Smooth_Err_Ok;
    SmoothPIC*         container;
    FT_Memory          memory        = library->memory;


    /* since this function also serve smooth_lcd and smooth_lcdv renderers, 
       it implements reference counting */
    if(pic_container->smooth)
    {
      ((SmoothPIC*)pic_container->smooth)->ref_count++;
      return error;
    }

    /* 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->smooth = container;
    container->ref_count = 1;

    /* initialize pointer table - this is how the module usually expects this data */
    FT_Init_Class_ft_grays_raster(&container->ft_grays_raster);
/*Exit:*/
    if(error)
      ft_smooth_renderer_class_pic_free(library);
    return error;
  }

  /* re-route these init and free functions to the above functions */
  FT_Error ft_smooth_lcd_renderer_class_pic_init(FT_Library library)
  {
    return ft_smooth_renderer_class_pic_init(library);
  }
  void ft_smooth_lcd_renderer_class_pic_free(FT_Library library)
  {
    ft_smooth_renderer_class_pic_free(library);
  }
  FT_Error ft_smooth_lcdv_renderer_class_pic_init(FT_Library library)
  {
    return ft_smooth_renderer_class_pic_init(library);
  }
  void ft_smooth_lcdv_renderer_class_pic_free(FT_Library library)
  {
    ft_smooth_renderer_class_pic_free(library);
  }

#endif /* FT_CONFIG_OPTION_PIC */


/* END */
