summaryrefslogtreecommitdiff
path: root/src/svg/ftsvg.c
blob: 901c576c10a46ec81b64eb55b54001578ea702ee (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
/****************************************************************************
 *
 * ftsvg.c
 *
 *   The FreeType svg renderer interface (body).
 *
 * Copyright (C) 1996-2019 by
 * David Turner, Robert Wilhelm, and Werner Lemberg.
 *
 * 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_SVG_RENDERER_H

#include <stdio.h>

#include "ftsvg.h"

  /* tmp hook injection */
  FT_Error
  tmp_svg_lib_init()
  {
    FT_Error  error;

    error = FT_Err_Ok;
    printf("Init svg\n");
    return error;
  }

  /* ft_svg_init */
  static FT_Error
  ft_svg_init( SVG_Renderer svg_module )
  {
    FT_Error           error = FT_Err_Ok;
    svg_module->loaded = FALSE;
    return error;
  }

  static FT_Error
  ft_svg_render( FT_Renderer       renderer,
                 FT_GlyphSlot      slot,
                 FT_Render_Mode    mode,
                 const FT_Vector*  origin )
  {
    SVG_Renderer  renderer_ = (SVG_Renderer)renderer;

    if( renderer_->loaded == FALSE )
    {
      renderer_->loaded = TRUE;
      renderer_->hooks.svg_lib_init();
    }

    return renderer_->hooks.svg_lib_render( slot );
  }

  static FT_Error
  ft_svg_set_hooks( FT_Module       renderer_,
                    SVG_Lib_Init    init_hook,
                    SVG_Lib_Free    free_hook,
                    SVG_Lib_Render  render_hook )
  {
    SVG_Renderer  renderer;

    renderer = (SVG_Renderer)renderer_;
    renderer->hooks.svg_lib_init   = init_hook;
    renderer->hooks.svg_lib_free   = free_hook;
    renderer->hooks.svg_lib_render = render_hook;

    return FT_Err_Ok;
  }


  static const SVG_Renderer_Interface svg_renderer_interface =
  {
    (SVG_Set_Hooks)ft_svg_set_hooks
  };


  FT_DEFINE_RENDERER(
    ft_svg_renderer_class,

      FT_MODULE_RENDERER,
      sizeof( SVG_RendererRec ),

      "ot-svg",
      0x10000L,
      0x20000L,
      (const void*)&svg_renderer_interface,   /* module specific interface */
      (FT_Module_Constructor)ft_svg_init,     /* module_init */
      NULL,
      NULL,
      FT_GLYPH_FORMAT_SVG,
      (FT_Renderer_RenderFunc)ft_svg_render,
      NULL,
      NULL,
      NULL,
      NULL
  )