summaryrefslogtreecommitdiff
path: root/src/svg/ftsvg.c
diff options
context:
space:
mode:
authorMoazin Khatti <moazinkhatri@gmail.com>2019-08-17 23:42:27 +0500
committerMoazin Khatti <moazinkhatri@gmail.com>2019-08-17 23:42:27 +0500
commit503977f55c22d3286fb4fb623b5f12c89812a62d (patch)
treee04e5ca7e6d17e5b179b4a16d5413018f1d3dd4a /src/svg/ftsvg.c
parent9df8c7dd27df66c79327babf7c011cc145c95563 (diff)
downloadfreetype2-503977f55c22d3286fb4fb623b5f12c89812a62d.tar.gz
Adds transformation support for OT-SVG glyphs.ot-svg-clean
* include/freetype/ftglyph.h: Adds `transform' and `delta' fields to `FT_SvgGlyphRed'. * include/freetype/otsvg.h: Adds `transform' and `delta' fields to `FT_SVG_Document'. * src/base/ftglyph.c: Creates method `ft_svg_glyph_transform' and modifies existing functions for the new fields. * src/sfnt/ttsvg.c: (tt_face_load_svg_doc) Set `transform' to unity and `delta' to zero by default. * src/svg/ftsvg.c: Adds `ft_svg_transform'.
Diffstat (limited to 'src/svg/ftsvg.c')
-rw-r--r--src/svg/ftsvg.c53
1 files changed, 52 insertions, 1 deletions
diff --git a/src/svg/ftsvg.c b/src/svg/ftsvg.c
index 901f3e82e..298ce650e 100644
--- a/src/svg/ftsvg.c
+++ b/src/svg/ftsvg.c
@@ -175,6 +175,57 @@
return 0;
}
+ static FT_Error
+ ft_svg_transform( FT_Renderer renderer,
+ FT_GlyphSlot slot,
+ const FT_Matrix* _matrix,
+ const FT_Vector* _delta )
+ {
+ FT_SVG_Document doc = (FT_SVG_Document)slot->other;
+
+ FT_Matrix* matrix = _matrix;
+ FT_Vector* delta = _delta;
+ FT_Matrix tmp_matrix;
+ FT_Vector tmp_delta;
+ FT_Matrix a, b;
+ FT_Pos x, y;
+
+ if ( !matrix )
+ {
+ tmp_matrix.xx = 0x10000;
+ tmp_matrix.xy = 0;
+ tmp_matrix.yx = 0;
+ tmp_matrix.yy = 0x10000;
+ matrix = &tmp_matrix;
+ }
+
+ if ( !delta )
+ {
+ tmp_delta.x = 0;
+ tmp_delta.y = 0;
+ }
+
+ a = doc->transform;
+ b = *matrix;
+ FT_Matrix_Multiply( &b, &a );
+
+
+ x = ADD_LONG(ADD_LONG(
+ FT_MulFix(matrix->xx, doc->delta.x),
+ FT_MulFix(matrix->xy, doc->delta.y)),
+ delta->x);
+ y = ADD_LONG(ADD_LONG(
+ FT_MulFix(matrix->yx, doc->delta.x),
+ FT_MulFix(matrix->yy, doc->delta.y)),
+ delta->y);
+ doc->delta.x = x;
+ doc->delta.y = y;
+
+ doc->transform = a;
+
+ return FT_Err_Ok;
+ }
+
#endif
#ifdef FT_CONFIG_OPTION_SVG
@@ -201,7 +252,7 @@
PUT_SVG_MODULE( ft_svg_get_interface ), /* get_interface */
SVG_GLYPH_FORMAT,
(FT_Renderer_RenderFunc)PUT_SVG_MODULE( ft_svg_render ),
- NULL,
+ (FT_Renderer_TransformFunc)PUT_SVG_MODULE( ft_svg_transform ),
NULL,
NULL,
NULL