diff options
author | Moazin Khatti <moazinkhatri@gmail.com> | 2019-06-22 22:58:08 +0500 |
---|---|---|
committer | Moazin Khatti <moazinkhatri@gmail.com> | 2019-07-11 14:09:43 +0500 |
commit | 4288f4a70aa19cc35a952a2d0fb8024d9b7b8290 (patch) | |
tree | 12459567dc714750e891cff67156b5917286979d | |
parent | 2a9f8aea1ffa2a82a520154acb3c02502073025c (diff) | |
download | freetype2-4288f4a70aa19cc35a952a2d0fb8024d9b7b8290.tar.gz |
Minor changes.
* src/base/ftobjs.c (FT_Load_Glyph): Use the recrusive call with
`FT_LOAD_NO_SCALE' so that the loaded data is unscaled.
* src/base/ftobjs.c (FT_Render_Glyph_Internal): Change the format
to bitmap once an SVG glyph is successfully rendered.
* src/sfnt/ttsvg.c (tt_face_load_svg_doc): Make sure metrics are
grabbed. Scale `horiAdvance' and `vertAdvance' properly and
convert them to 26.6 format.
-rw-r--r-- | src/base/ftobjs.c | 9 | ||||
-rw-r--r-- | src/sfnt/ttsvg.c | 4 |
2 files changed, 11 insertions, 2 deletions
diff --git a/src/base/ftobjs.c b/src/base/ftobjs.c index 569fc2fdb..cc0badd30 100644 --- a/src/base/ftobjs.c +++ b/src/base/ftobjs.c @@ -839,9 +839,9 @@ load_flags &= ~FT_LOAD_RENDER; if ( ( load_flags & FT_LOAD_COLOR ) && - ( ((TT_Face)face)->svg ) ) + ( ttface->svg ) ) { - FT_Load_Glyph( face, glyph_index, FT_LOAD_DEFAULT ); + FT_Load_Glyph( face, glyph_index, FT_LOAD_NO_SCALE); } /* @@ -4548,6 +4548,11 @@ case FT_GLYPH_FORMAT_SVG: /* handle svg rendering */ renderer = FT_Lookup_Renderer( library, slot->format, NULL ); error = renderer->clazz->render_glyph( renderer, slot, FT_RENDER_MODE_NORMAL, NULL); + if( error == FT_Err_Ok ) + { + slot->format = FT_GLYPH_FORMAT_BITMAP; + } + return error; break; default: if ( slot->internal->load_flags & FT_LOAD_COLOR ) diff --git a/src/sfnt/ttsvg.c b/src/sfnt/ttsvg.c index f13f2ebb3..4901b2206 100644 --- a/src/sfnt/ttsvg.c +++ b/src/sfnt/ttsvg.c @@ -232,7 +232,11 @@ svg_document->svg_document = doc_list; svg_document->svg_document_length = doc_length; + svg_document->metrics = glyph->face->size->metrics; glyph->other = svg_document; + glyph->metrics.horiAdvance *= ((float)glyph->face->size->metrics.x_ppem)/((float)glyph->face->units_per_EM) * 64.0; + glyph->metrics.vertAdvance *= ((float)glyph->face->size->metrics.y_ppem)/((float)glyph->face->units_per_EM) * 64.0; + return FT_Err_Ok; } |