[ot-svg] Creates hooks mechanism in SVG Renderer.
* include/freetype/config/ftheader.h: New macro `FT_SVG_RENDERER_H' for `freetype/svgrenderer.h'. * include/freetype/svgrenderer.h: New file to store SVG specific function types, SVG interface and `FT_Set_Svg_Hooks'. * src/base/ftobjs.c: Adds implementation of `FT_Set_Svg_Hooks'. * src/svg/ftsvg.c: Creates `svg_renderer_interface'. * src/svg/svgtypes.c: Moves hook function types to `FT_SVG_RENDERER_H'. Adds a hook for svg rendering. Temporary.
This commit is contained in:
parent
7915e5e102
commit
8f256de2d8
|
@ -547,6 +547,19 @@
|
||||||
#define FT_BITMAP_H <freetype/ftbitmap.h>
|
#define FT_BITMAP_H <freetype/ftbitmap.h>
|
||||||
|
|
||||||
|
|
||||||
|
/**************************************************************************
|
||||||
|
*
|
||||||
|
* @macro:
|
||||||
|
* FT_SVG_RENDERER_H
|
||||||
|
*
|
||||||
|
* @description:
|
||||||
|
* A macro used in `#include` statements to name the file containing the
|
||||||
|
* API of the SVG Renderer Module.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
#define FT_SVG_RENDERER_H <freetype/svgrenderer.h>
|
||||||
|
|
||||||
|
|
||||||
/**************************************************************************
|
/**************************************************************************
|
||||||
*
|
*
|
||||||
* @macro:
|
* @macro:
|
||||||
|
|
|
@ -0,0 +1,153 @@
|
||||||
|
/****************************************************************************
|
||||||
|
*
|
||||||
|
* svgrenderer.h
|
||||||
|
*
|
||||||
|
* Interface for SVG Renderer Module (specification).
|
||||||
|
*
|
||||||
|
* Copyright (C) 2004-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.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef FTSVG_RENDERER_H_
|
||||||
|
#define FTSVG_RENDERER_H_
|
||||||
|
|
||||||
|
#include <ft2build.h>
|
||||||
|
#include FT_FREETYPE_H
|
||||||
|
|
||||||
|
#ifdef FREETYPE_H
|
||||||
|
#error "freetype.h of FreeType 1 has been loaded!"
|
||||||
|
#error "Please fix the directory search order for header files"
|
||||||
|
#error "so that freetype.h of FreeType 2 is found first."
|
||||||
|
#endif
|
||||||
|
|
||||||
|
FT_BEGIN_HEADER
|
||||||
|
|
||||||
|
/**************************************************************************
|
||||||
|
*
|
||||||
|
* @functype:
|
||||||
|
* SVG_Lib_Init
|
||||||
|
*
|
||||||
|
* @description:
|
||||||
|
* A callback used to initiate the SVG Rendering port
|
||||||
|
*
|
||||||
|
* @return:
|
||||||
|
* FreeType error code. 0 means success.
|
||||||
|
*/
|
||||||
|
|
||||||
|
typedef FT_Error
|
||||||
|
(*SVG_Lib_Init)( );
|
||||||
|
|
||||||
|
|
||||||
|
/**************************************************************************
|
||||||
|
*
|
||||||
|
* @functype:
|
||||||
|
* SVG_Lib_Free
|
||||||
|
*
|
||||||
|
* @description:
|
||||||
|
* A callback used to free the SVG Rendering port. Calling this callback
|
||||||
|
* shall do all cleanups that the SVG Rendering port wants to do.
|
||||||
|
*
|
||||||
|
* @return:
|
||||||
|
* FreeType error code. 0 means success.
|
||||||
|
*/
|
||||||
|
|
||||||
|
typedef FT_Error
|
||||||
|
(*SVG_Lib_Free)( );
|
||||||
|
|
||||||
|
|
||||||
|
/**************************************************************************
|
||||||
|
*
|
||||||
|
* @functype:
|
||||||
|
* SVG_Lib_Render
|
||||||
|
*
|
||||||
|
* @description:
|
||||||
|
* A callback used to render the glyph loaded in the slot.
|
||||||
|
*
|
||||||
|
* @input:
|
||||||
|
* svg_doc::
|
||||||
|
* A pointer to the svg document
|
||||||
|
*
|
||||||
|
* @return:
|
||||||
|
* FreeType error code. 0 means success.
|
||||||
|
*/
|
||||||
|
|
||||||
|
typedef FT_Error
|
||||||
|
(*SVG_Lib_Render)( FT_GlyphSlot slot );
|
||||||
|
|
||||||
|
|
||||||
|
/**************************************************************************
|
||||||
|
*
|
||||||
|
* @functype:
|
||||||
|
* SVG_Set_Hooks
|
||||||
|
*
|
||||||
|
* @description:
|
||||||
|
* A function that is used set SVG Hooks. Part of the SVG Renderer
|
||||||
|
* Interface.
|
||||||
|
*
|
||||||
|
* @input:
|
||||||
|
* library::
|
||||||
|
* FT_Library instance.
|
||||||
|
*
|
||||||
|
* init_hook::
|
||||||
|
* A function pointer of the type `SVG_Lib_Init'. Read the documentation
|
||||||
|
* of `SVG_Lib_Init'
|
||||||
|
*
|
||||||
|
* free_hook::
|
||||||
|
* A function pointer of the type `SVG_Lib_Free'. Read the documentation
|
||||||
|
* of `SVG_Lib_Free'.
|
||||||
|
*
|
||||||
|
* render_hook::
|
||||||
|
* A function pointer of the type `SVG_Lib_Render'. Read the
|
||||||
|
* documentation of `SVG_Lib_Render'.
|
||||||
|
*
|
||||||
|
* @return:
|
||||||
|
* FreeType error code. 0 means success.
|
||||||
|
*/
|
||||||
|
|
||||||
|
typedef FT_Error
|
||||||
|
(*SVG_Set_Hooks)( FT_Library library,
|
||||||
|
SVG_Lib_Init init_hook,
|
||||||
|
SVG_Lib_Free free_hook,
|
||||||
|
SVG_Lib_Render render_hook );
|
||||||
|
|
||||||
|
/**************************************************************************
|
||||||
|
*
|
||||||
|
* @struct:
|
||||||
|
* SVG_Renderer_Interface
|
||||||
|
*
|
||||||
|
* @description:
|
||||||
|
* An interface structure that function needed to inject external SVG
|
||||||
|
* rendering library hooks.
|
||||||
|
*
|
||||||
|
* @fields:
|
||||||
|
* set_hooks::
|
||||||
|
* A function that can be called to set the hooks.
|
||||||
|
*
|
||||||
|
* @return:
|
||||||
|
* FreeType error code. 0 means success.
|
||||||
|
*/
|
||||||
|
|
||||||
|
typedef struct SVG_Renderer_Interface_
|
||||||
|
{
|
||||||
|
SVG_Set_Hooks set_hooks;
|
||||||
|
} SVG_Renderer_Interface;
|
||||||
|
|
||||||
|
|
||||||
|
/* TODO: to document */
|
||||||
|
FT_Error
|
||||||
|
FT_Set_Svg_Hooks( FT_Library library,
|
||||||
|
SVG_Lib_Init init_hook,
|
||||||
|
SVG_Lib_Free free_hook,
|
||||||
|
SVG_Lib_Render render_hook );
|
||||||
|
|
||||||
|
FT_END_HEADER
|
||||||
|
|
||||||
|
#endif
|
|
@ -40,6 +40,7 @@
|
||||||
#include FT_SERVICE_TT_CMAP_H
|
#include FT_SERVICE_TT_CMAP_H
|
||||||
#include FT_SERVICE_KERNING_H
|
#include FT_SERVICE_KERNING_H
|
||||||
#include FT_SERVICE_TRUETYPE_ENGINE_H
|
#include FT_SERVICE_TRUETYPE_ENGINE_H
|
||||||
|
#include FT_SVG_RENDERER_H
|
||||||
|
|
||||||
#include FT_DRIVER_H
|
#include FT_DRIVER_H
|
||||||
|
|
||||||
|
@ -5549,5 +5550,19 @@
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
FT_EXPORT_DEF( FT_Error )
|
||||||
|
FT_Set_Svg_Hooks( FT_Library library,
|
||||||
|
SVG_Lib_Init init_hook,
|
||||||
|
SVG_Lib_Free free_hook,
|
||||||
|
SVG_Lib_Render render_hook )
|
||||||
|
{
|
||||||
|
FT_Module renderer;
|
||||||
|
SVG_Renderer_Interface *svg;
|
||||||
|
|
||||||
|
renderer = FT_Get_Module( library, "ot-svg" );
|
||||||
|
svg = (SVG_Renderer_Interface*)renderer->clazz->module_interface;
|
||||||
|
svg->set_hooks(library, init_hook, free_hook, render_hook);
|
||||||
|
return FT_Err_Ok;
|
||||||
|
}
|
||||||
|
|
||||||
/* END */
|
/* END */
|
||||||
|
|
|
@ -16,6 +16,8 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <ft2build.h>
|
#include <ft2build.h>
|
||||||
|
#include FT_SVG_RENDERER_H
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
#include "ftsvg.h"
|
#include "ftsvg.h"
|
||||||
|
@ -24,7 +26,9 @@
|
||||||
FT_Error
|
FT_Error
|
||||||
tmp_svg_lib_init()
|
tmp_svg_lib_init()
|
||||||
{
|
{
|
||||||
FT_Error error = FT_Err_Ok;
|
FT_Error error;
|
||||||
|
|
||||||
|
error = FT_Err_Ok;
|
||||||
printf("Init svg\n");
|
printf("Init svg\n");
|
||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
|
@ -49,12 +53,36 @@
|
||||||
FT_Render_Mode mode,
|
FT_Render_Mode mode,
|
||||||
const FT_Vector* origin )
|
const FT_Vector* origin )
|
||||||
{
|
{
|
||||||
SVG_Renderer renderer_ = (SVG_Renderer)renderer;
|
SVG_Renderer renderer_ = (SVG_Renderer)renderer;
|
||||||
|
|
||||||
if( renderer_->loaded == FALSE )
|
if( renderer_->loaded == FALSE )
|
||||||
renderer_->loaded = TRUE;
|
renderer_->loaded = TRUE;
|
||||||
|
|
||||||
renderer_->hooks.svg_lib_init();
|
renderer_->hooks.svg_lib_init();
|
||||||
|
return FT_Err_Ok;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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_DEFINE_RENDERER(
|
||||||
|
@ -66,12 +94,12 @@
|
||||||
"ot-svg",
|
"ot-svg",
|
||||||
0x10000L,
|
0x10000L,
|
||||||
0x20000L,
|
0x20000L,
|
||||||
NULL, /* module specific interface */
|
(const void*)&svg_renderer_interface, /* module specific interface */
|
||||||
(FT_Module_Constructor)ft_svg_init, /* module_init */
|
(FT_Module_Constructor)ft_svg_init, /* module_init */
|
||||||
NULL,
|
NULL,
|
||||||
NULL,
|
NULL,
|
||||||
FT_GLYPH_FORMAT_SVG,
|
FT_GLYPH_FORMAT_SVG,
|
||||||
NULL,
|
(FT_Renderer_RenderFunc)ft_svg_render,
|
||||||
NULL,
|
NULL,
|
||||||
NULL,
|
NULL,
|
||||||
NULL,
|
NULL,
|
||||||
|
|
|
@ -19,17 +19,14 @@
|
||||||
#include <ft2build.h>
|
#include <ft2build.h>
|
||||||
#include FT_INTERNAL_OBJECTS_H
|
#include FT_INTERNAL_OBJECTS_H
|
||||||
#include FT_RENDER_H
|
#include FT_RENDER_H
|
||||||
|
#include FT_SVG_RENDERER_H
|
||||||
|
|
||||||
/* Function Pointer definitions for SVG_RendererHooks */
|
|
||||||
typedef FT_Error (*SVG_Lib_Init)(); /* initialize the external lib */
|
|
||||||
typedef FT_Error (*SVG_Lib_Free)(); /* destroy the external lib */
|
|
||||||
|
|
||||||
typedef struct SVG_RendererHooks_
|
typedef struct SVG_RendererHooks_
|
||||||
{
|
{
|
||||||
/* Api Hooks for OT-SVG Rendering */
|
/* Api Hooks for OT-SVG Rendering */
|
||||||
SVG_Lib_Init svg_lib_init;
|
SVG_Lib_Init svg_lib_init;
|
||||||
SVG_Lib_Free svg_lib_free;
|
SVG_Lib_Free svg_lib_free;
|
||||||
|
SVG_Lib_Render svg_lib_render;
|
||||||
} SVG_RendererHooks;
|
} SVG_RendererHooks;
|
||||||
|
|
||||||
typedef struct SVG_RendererRec_
|
typedef struct SVG_RendererRec_
|
||||||
|
|
Loading…
Reference in New Issue