Barebones of an SVG rendering module and making it part of the build system

This commit is contained in:
Moazin Khatti 2019-06-13 16:18:09 +05:00
parent 1ab8251ff1
commit 7915e5e102
9 changed files with 282 additions and 1 deletions

View File

@ -22,7 +22,8 @@ FT_USE_MODULE( FT_Driver_ClassRec, pcf_driver_class )
FT_USE_MODULE( FT_Module_Class, psaux_module_class )
FT_USE_MODULE( FT_Module_Class, psnames_module_class )
FT_USE_MODULE( FT_Module_Class, pshinter_module_class )
FT_USE_MODULE( FT_Renderer_Class, ft_raster1_renderer_class )
FT_USE_MODULE( FT_Renderer_Class, ft_svg_renderer_class )
/*FT_USE_MODULE( FT_Renderer_Class, ft_raster1_renderer_class )*/
FT_USE_MODULE( FT_Module_Class, sfnt_module_class )
FT_USE_MODULE( FT_Renderer_Class, ft_smooth_renderer_class )
FT_USE_MODULE( FT_Renderer_Class, ft_smooth_lcd_renderer_class )

View File

@ -99,6 +99,9 @@ RASTER_MODULES += raster
# Anti-aliasing rasterizer.
RASTER_MODULES += smooth
# OT-SVG
RASTER_MODULES += svg
####
#### auxiliary modules

View File

@ -4538,7 +4538,10 @@
{
case FT_GLYPH_FORMAT_BITMAP: /* already a bitmap, don't do anything */
break;
case FT_GLYPH_FORMAT_SVG: /* handle svg rendering */
renderer = FT_Lookup_Renderer( library, slot->format, NULL );
break;
default:
if ( slot->internal->load_flags & FT_LOAD_COLOR )
{

79
src/svg/ftsvg.c Normal file
View File

@ -0,0 +1,79 @@
/****************************************************************************
*
* 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 <stdio.h>
#include "ftsvg.h"
/* tmp hook injection */
FT_Error
tmp_svg_lib_init()
{
FT_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_RendererHooks hooks;
hooks.svg_lib_init = tmp_svg_lib_init;
svg_module->hooks = hooks;
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();
}
FT_DEFINE_RENDERER(
ft_svg_renderer_class,
FT_MODULE_RENDERER,
sizeof( SVG_RendererRec ),
"ot-svg",
0x10000L,
0x20000L,
NULL, /* module specific interface */
(FT_Module_Constructor)ft_svg_init, /* module_init */
NULL,
NULL,
FT_GLYPH_FORMAT_SVG,
NULL,
NULL,
NULL,
NULL,
NULL
)

32
src/svg/ftsvg.h Normal file
View File

@ -0,0 +1,32 @@
/****************************************************************************
*
* ftsvg.h
*
* The FreeType svg renderer interface (specification).
*
* 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.
*
*/
#ifndef FTSVG_H_
#define FTSVG_H_
#include <ft2build.h>
#include FT_RENDER_H
FT_BEGIN_HEADER
FT_DECLARE_RENDERER( ft_svg_renderer_class )
FT_END_HEADER
#endif /* FTSVG_H_ */
/* END */

23
src/svg/module.mk Normal file
View File

@ -0,0 +1,23 @@
#
# FreeType 2 svg renderer module definition
#
# 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.
FTMODULE_H_COMMANDS += SVG_MODULE
define SVG_MODULE
$(OPEN_DRIVER) FT_Renderer_Class, ft_svg_renderer_class $(CLOSE_DRIVER)
$(ECHO_DRIVER)svg $(ECHO_DRIVER_DESC)svg renderer module$(ECHO_DRIVER_DONE)
endef
# EOF

72
src/svg/rules.mk Normal file
View File

@ -0,0 +1,72 @@
#
# FreeType 2 svg renderer module build rules
#
# 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.
# svg renderer driver directory
#
SVG_DIR := $(SRC_DIR)/svg
# compilation flags for the driver
#
SVG_COMPILE := $(CC) $(ANSIFLAGS) \
$I$(subst /,$(COMPILER_SEP),$(SVG_DIR)) \
$(INCLUDE_FLAGS) \
$(FT_CFLAGS)
# raster driver sources (i.e., C files)
#
SVG_DRV_SRC := $(SVG_DIR)/ftsvg.c \
$(SVG_DIR)/svgtypes.c
# raster driver headers
#
SVG_DRV_H := $(SVG_DIR)/ftsvg.h
# raster driver object(s)
#
# RASTER_DRV_OBJ_M is used during `multi' builds.
# RASTER_DRV_OBJ_S is used during `single' builds.
#
#RASTER_DRV_OBJ_M := $(RASTER_DRV_SRC:$(RASTER_DIR)/%.c=$(OBJ_DIR)/%.$O)
SVG_DRV_OBJ_M := $(SVG_DRV_SRC:$(SVG_DIR)/%.c=$(OBJ_DIR)/%.$O)
SVG_DRV_OBJ_S := $(OBJ_DIR)/svg.$O
# raster driver source file for single build
#
SVG_DRV_SRC_S := $(SVG_DIR)/svg.c
# raster driver - single object
#
$(SVG_DRV_OBJ_S): $(SVG_DRV_SRC_S) $(SVG_DRV_SRC) \
$(FREETYPE_H) $(SVG_DRV_H)
$(SVG_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $(SVG_DRV_SRC_S))
# raster driver - multiple objects
#
$(OBJ_DIR)/%.$O: $(SVG_DIR)/%.c $(FREETYPE_H) $(SVG_DRV_H)
$(SVG_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $<)
# update main driver object lists
#
DRV_OBJS_S += $(SVG_DRV_OBJ_S)
DRV_OBJS_M += $(SVG_DRV_OBJ_M)
# EOF

25
src/svg/svg.c Normal file
View File

@ -0,0 +1,25 @@
/****************************************************************************
*
* svg.c
*
* FreeType svg renderer module component (body only).
*
* 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.
*
*/
#define FT_MAKE_OPTION_SINGLE_OBJECT
#include <ft2build.h>
#include "svgtypes.c"
#include "ftsvg.c"
/* END */

43
src/svg/svgtypes.c Normal file
View File

@ -0,0 +1,43 @@
/****************************************************************************
*
* svgtypes.h
*
* TODO:
* The FreeType svg renderer internal types (specification).
*
* 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_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 */
typedef struct SVG_RendererHooks_
{
/* Api Hooks for OT-SVG Rendering */
SVG_Lib_Init svg_lib_init;
SVG_Lib_Free svg_lib_free;
} SVG_RendererHooks;
typedef struct SVG_RendererRec_
{
FT_RendererRec root; /* This inherits FT_RendererRec */
FT_Bool loaded;
SVG_RendererHooks hooks; /* Holds out hooks to the outside library */
} SVG_RendererRec;
typedef struct SVG_RendererRec_* SVG_Renderer;