Index: third_party/harfbuzz/contrib/harfbuzz-freetype.c |
diff --git a/third_party/harfbuzz/contrib/harfbuzz-freetype.c b/third_party/harfbuzz/contrib/harfbuzz-freetype.c |
deleted file mode 100644 |
index a2962df48f60aa668c5b59668aff1ce690cd3a8f..0000000000000000000000000000000000000000 |
--- a/third_party/harfbuzz/contrib/harfbuzz-freetype.c |
+++ /dev/null |
@@ -1,149 +0,0 @@ |
-#include <stdint.h> |
- |
-#include <ft2build.h> |
-#include FT_FREETYPE_H |
-#include FT_TRUETYPE_TABLES_H |
- |
-#if 0 |
-#include <freetype/freetype.h> |
-#include <freetype/tttables.h> |
-#endif |
- |
-#include <harfbuzz-shaper.h> |
-#include "harfbuzz-unicode.h" |
- |
-static HB_Bool |
-hb_freetype_string_to_glyphs(HB_Font font, |
- const HB_UChar16 *chars, hb_uint32 len, |
- HB_Glyph *glyphs, hb_uint32 *numGlyphs, |
- HB_Bool is_rtl) { |
- FT_Face face = (FT_Face) font->userData; |
- if (len > *numGlyphs) |
- return 0; |
- |
- size_t i = 0, j = 0; |
- while (i < len) { |
- const uint32_t cp = utf16_to_code_point(chars, len, &i); |
- glyphs[j++] = FT_Get_Char_Index(face, cp); |
- } |
- |
- *numGlyphs = j; |
- |
- return 1; |
-} |
- |
-static void |
-hb_freetype_advances_get(HB_Font font, const HB_Glyph *glyphs, hb_uint32 len, |
- HB_Fixed *advances, int flags) { |
- FT_Face face = (FT_Face) font->userData; |
- |
- hb_uint32 i; |
- for (i = 0; i < len; ++i) { |
- const FT_Error error = FT_Load_Glyph(face, glyphs[i], FT_LOAD_DEFAULT); |
- if (error) { |
- advances[i] = 0; |
- continue; |
- } |
- |
- advances[i] = face->glyph->advance.x; |
- } |
-} |
- |
-static HB_Bool |
-hb_freetype_can_render(HB_Font font, const HB_UChar16 *chars, hb_uint32 len) { |
- FT_Face face = (FT_Face)font->userData; |
- |
- size_t i = 0; |
- while (i < len) { |
- const uint32_t cp = utf16_to_code_point(chars, len, &i); |
- if (FT_Get_Char_Index(face, cp) == 0) |
- return 0; |
- } |
- |
- return 1; |
-} |
- |
-static HB_Error |
-hb_freetype_outline_point_get(HB_Font font, HB_Glyph glyph, int flags, |
- hb_uint32 point, HB_Fixed *xpos, HB_Fixed *ypos, |
- hb_uint32 *n_points) { |
- HB_Error error = HB_Err_Ok; |
- FT_Face face = (FT_Face) font->userData; |
- |
- int load_flags = (flags & HB_ShaperFlag_UseDesignMetrics) ? FT_LOAD_NO_HINTING : FT_LOAD_DEFAULT; |
- |
- if ((error = (HB_Error) FT_Load_Glyph(face, glyph, load_flags))) |
- return error; |
- |
- if (face->glyph->format != ft_glyph_format_outline) |
- return (HB_Error)HB_Err_Invalid_SubTable; |
- |
- *n_points = face->glyph->outline.n_points; |
- if (!(*n_points)) |
- return HB_Err_Ok; |
- |
- if (point > *n_points) |
- return (HB_Error)HB_Err_Invalid_SubTable; |
- |
- *xpos = face->glyph->outline.points[point].x; |
- *ypos = face->glyph->outline.points[point].y; |
- |
- return HB_Err_Ok; |
-} |
- |
-static void |
-hb_freetype_glyph_metrics_get(HB_Font font, HB_Glyph glyph, |
- HB_GlyphMetrics *metrics) { |
- FT_Face face = (FT_Face) font->userData; |
- |
- const FT_Error error = FT_Load_Glyph(face, glyph, FT_LOAD_DEFAULT); |
- if (error) { |
- metrics->x = metrics->y = metrics->width = metrics->height = 0; |
- metrics->xOffset = metrics->yOffset = 0; |
- return; |
- } |
- |
- const FT_Glyph_Metrics *ftmetrics = &face->glyph->metrics; |
- metrics->width = ftmetrics->width; |
- metrics->height = ftmetrics->height; |
- metrics->x = ftmetrics->horiAdvance; |
- metrics->y = 0; // unclear what this is |
- metrics->xOffset = ftmetrics->horiBearingX; |
- metrics->yOffset = ftmetrics->horiBearingY; |
-} |
- |
-static HB_Fixed |
-hb_freetype_font_metric_get(HB_Font font, HB_FontMetric metric) { |
- FT_Face face = (FT_Face) font->userData; |
- |
- switch (metric) { |
- case HB_FontAscent: |
- // Note that we aren't scanning the VDMX table which we probably would in |
- // an ideal world. |
- return face->ascender; |
- default: |
- return 0; |
- } |
-} |
- |
-const HB_FontClass hb_freetype_class = { |
- hb_freetype_string_to_glyphs, |
- hb_freetype_advances_get, |
- hb_freetype_can_render, |
- hb_freetype_outline_point_get, |
- hb_freetype_glyph_metrics_get, |
- hb_freetype_font_metric_get, |
-}; |
- |
-HB_Error |
-hb_freetype_table_sfnt_get(void *voidface, const HB_Tag tag, HB_Byte *buffer, HB_UInt *len) { |
- FT_Face face = (FT_Face) voidface; |
- FT_ULong ftlen = *len; |
- |
- if (!FT_IS_SFNT(face)) |
- return HB_Err_Invalid_Argument; |
- |
- const FT_Error error = FT_Load_Sfnt_Table(face, tag, 0, buffer, &ftlen); |
- *len = ftlen; |
- return (HB_Error) error; |
-} |