forked from minhngoc25a/freetype2
[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
f1db18a464
commit
4d59b8535e
@ -547,6 +547,19 @@
|
||||
#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:
|
||||
|
153
include/freetype/svgrenderer.h
Normal file
153
include/freetype/svgrenderer.h
Normal file
@ -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_KERNING_H
|
||||
#include FT_SERVICE_TRUETYPE_ENGINE_H
|
||||
#include FT_SVG_RENDERER_H
|
||||
|
||||
#include FT_DRIVER_H
|
||||
|
||||
@ -5549,5 +5550,19 @@
|
||||
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 */
|
||||
|
@ -16,6 +16,8 @@
|
||||
*/
|
||||
|
||||
#include <ft2build.h>
|
||||
#include FT_SVG_RENDERER_H
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
#include "ftsvg.h"
|
||||
@ -24,7 +26,9 @@
|
||||
FT_Error
|
||||
tmp_svg_lib_init()
|
||||
{
|
||||
FT_Error error = FT_Err_Ok;
|
||||
FT_Error error;
|
||||
|
||||
error = FT_Err_Ok;
|
||||
printf("Init svg\n");
|
||||
return error;
|
||||
}
|
||||
@ -49,12 +53,36 @@
|
||||
FT_Render_Mode mode,
|
||||
const FT_Vector* origin )
|
||||
{
|
||||
SVG_Renderer renderer_ = (SVG_Renderer)renderer;
|
||||
SVG_Renderer renderer_ = (SVG_Renderer)renderer;
|
||||
|
||||
if( renderer_->loaded == FALSE )
|
||||
renderer_->loaded = TRUE;
|
||||
|
||||
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(
|
||||
@ -66,12 +94,12 @@
|
||||
"ot-svg",
|
||||
0x10000L,
|
||||
0x20000L,
|
||||
NULL, /* module specific interface */
|
||||
(const void*)&svg_renderer_interface, /* module specific interface */
|
||||
(FT_Module_Constructor)ft_svg_init, /* module_init */
|
||||
NULL,
|
||||
NULL,
|
||||
FT_GLYPH_FORMAT_SVG,
|
||||
NULL,
|
||||
(FT_Renderer_RenderFunc)ft_svg_render,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
|
@ -19,17 +19,14 @@
|
||||
#include <ft2build.h>
|
||||
#include FT_INTERNAL_OBJECTS_H
|
||||
#include FT_RENDER_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 */
|
||||
#include FT_SVG_RENDERER_H
|
||||
|
||||
typedef struct SVG_RendererHooks_
|
||||
{
|
||||
/* Api Hooks for OT-SVG Rendering */
|
||||
SVG_Lib_Init svg_lib_init;
|
||||
SVG_Lib_Free svg_lib_free;
|
||||
SVG_Lib_Init svg_lib_init;
|
||||
SVG_Lib_Free svg_lib_free;
|
||||
SVG_Lib_Render svg_lib_render;
|
||||
} SVG_RendererHooks;
|
||||
|
||||
typedef struct SVG_RendererRec_
|
||||
|
Loading…
x
Reference in New Issue
Block a user