--- old/src/java.desktop/share/classes/sun/font/SunLayoutEngine.java 2017-08-18 00:09:20.517814546 +0300 +++ new/src/java.desktop/share/classes/sun/font/SunLayoutEngine.java 2017-08-18 00:09:20.366814549 +0300 @@ -161,19 +161,6 @@ this.key = key; } - private boolean isAAT(Font2D font) { - if (font instanceof TrueTypeFont) { - TrueTypeFont ttf = (TrueTypeFont)font; - return ttf.getDirectoryEntry(TrueTypeFont.morxTag) != null || - ttf.getDirectoryEntry(TrueTypeFont.mortTag) != null; - } else if (font instanceof PhysicalFont) { - PhysicalFont pf = (PhysicalFont)font; - return pf.getTableBytes(TrueTypeFont.morxTag) != null || - pf.getTableBytes(TrueTypeFont.mortTag) != null; - } - return false; - } - public void layout(FontStrikeDesc desc, float[] mat, float ptSize, int gmask, int baseIndex, TextRecord tr, int typo_flags, Point2D.Float pt, GVData data) { @@ -186,16 +173,11 @@ key.script(), key.lang(), typo_flags, pt, data, font.getUnitsPerEm(), layoutTables); } else { - long pNativeFont = font.getPlatformNativeFontPtr(); // used on OSX - // pScaler probably not needed long term. - long pScaler = 0L; - if (font instanceof FileFont) { - pScaler = ((FileFont)font).getScaler().nativeScaler; - } - shape(font, strike, ptSize, mat, pScaler, pNativeFont, isAAT(font), - tr.text, data, key.script(), - tr.start, tr.limit, baseIndex, pt, - typo_flags, gmask); + shape(font, strike, ptSize, mat, + font.getHarfbuzzFacePtr(), font.getPlatformNativeFontPtr(), font.isAAT(), + tr.text, data, key.script(), + tr.start, tr.limit, baseIndex, pt, + typo_flags, gmask); } } @@ -210,7 +192,7 @@ /* Native method to invoke harfbuzz layout engine */ private static native boolean shape(Font2D font, FontStrike strike, float ptSize, float[] mat, - long pscaler, long pNativeFont, boolean aat, + long pFace, long pNativeFont, boolean aat, char[] chars, GVData data, int script, int offset, int limit, int baseIndex, Point2D.Float pt, int typo_flags, int slot);