Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(172)

Unified Diff: Source/platform/fonts/harfbuzz/HarfBuzzFaceCoreText.mm

Issue 617103003: Replace ENABLE_OPENTYPE_VERTICAL implementation with HarfBuzz (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@removeOpenTypeVertical
Patch Set: Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: Source/platform/fonts/harfbuzz/HarfBuzzFaceCoreText.mm
diff --git a/Source/platform/fonts/harfbuzz/HarfBuzzFaceCoreText.mm b/Source/platform/fonts/harfbuzz/HarfBuzzFaceCoreText.mm
index 84687955f01a7ae145d05a627f0edb316210e27a..7d212341f3ac2f866249b7830599bd0eb728c21c 100644
--- a/Source/platform/fonts/harfbuzz/HarfBuzzFaceCoreText.mm
+++ b/Source/platform/fonts/harfbuzz/HarfBuzzFaceCoreText.mm
@@ -105,6 +105,43 @@ static hb_position_t getGlyphHorizontalAdvance(hb_font_t* hbFont, void* fontData
return floatToHarfBuzzPosition(advance.width + syntheticBoldOffset);
}
+static hb_bool_t harfBuzzGetGlyphVerticalOrigin(hb_font_t* hbFont, void* fontData, hb_codepoint_t glyph, hb_position_t* x, hb_position_t* y, void* userData)
+{
+ FontPlatformData* fontPlatformData = reinterpret_cast<FontPlatformData*>(fontData);
+
+ OpenTypeVerticalData* verticalData = fontPlatformData->verticalData().get();
+ if (!verticalData)
+ return false;
+
+ // FIXME: This should be using the existing SimpleFontData or SkFontMetrics.
+ RefPtr<SimpleFontData> simpleFontData = SimpleFontData::create(*fontPlatformData);
+ float result[] = { 0, 0 };
+
+ Glyph theGlyph = glyph;
+ verticalData->getVerticalTranslationsForGlyphs(simpleFontData.get(), &theGlyph, 1, result);
+ *x = floatToHarfBuzzPosition(-result[0]);
+ *y = floatToHarfBuzzPosition(-result[1]);
+
+ return true;
+}
+
+static hb_position_t harfBuzzGetGlyphVerticalAdvance(hb_font_t* hbFont, void* fontData, hb_codepoint_t glyph, void* userData)
+{
+ FontPlatformData* fontPlatformData = reinterpret_cast<FontPlatformData*>(fontData);
+
+ RefPtr<SimpleFontData> simpleFontData = SimpleFontData::create(*fontPlatformData);
+ OpenTypeVerticalData* verticalData = fontPlatformData->verticalData().get();
+
+ if (!verticalData)
+ return floatToHarfBuzzPosition(simpleFontData->fontMetrics().height());
+
+ // FIXME: This should be using the existing SimpleFontData or SkFontMetrics.
+ Glyph theGlyph = glyph;
+ float advanceHeight = verticalData->advanceHeight(simpleFontData.get(), theGlyph);
+
+ return floatToHarfBuzzPosition(advanceHeight);
+}
+
static hb_bool_t getGlyphHorizontalOrigin(hb_font_t* hbFont, void* fontData, hb_codepoint_t glyph, hb_position_t* x, hb_position_t* y, void* userData)
{
return true;
@@ -133,6 +170,8 @@ static hb_font_funcs_t* harfBuzzCoreTextGetFontFuncs()
hb_font_funcs_set_glyph_func(harfBuzzCoreTextFontFuncs, getGlyph, 0, 0);
hb_font_funcs_set_glyph_h_advance_func(harfBuzzCoreTextFontFuncs, getGlyphHorizontalAdvance, 0, 0);
hb_font_funcs_set_glyph_h_origin_func(harfBuzzCoreTextFontFuncs, getGlyphHorizontalOrigin, 0, 0);
+ hb_font_funcs_set_glyph_v_advance_func(harfBuzzCoreTextFontFuncs, harfBuzzGetGlyphVerticalAdvance, 0, 0);
+ hb_font_funcs_set_glyph_v_origin_func(harfBuzzCoreTextFontFuncs, harfBuzzGetGlyphVerticalOrigin, 0, 0);
hb_font_funcs_set_glyph_extents_func(harfBuzzCoreTextFontFuncs, getGlyphExtents, 0, 0);
hb_font_funcs_make_immutable(harfBuzzCoreTextFontFuncs);
}

Powered by Google App Engine
This is Rietveld 408576698