Initial support for OpenType.js font data/tables/metrics.

This commit is contained in:
Mikael Sand
2017-08-04 21:17:02 +03:00
parent 1ffd195bc2
commit a97122a994
5 changed files with 14 additions and 2 deletions

View File

@@ -15,6 +15,7 @@ class FontData {
private static final double DEFAULT_LETTER_SPACING = 0d; private static final double DEFAULT_LETTER_SPACING = 0d;
private static final String KERNING = "kerning"; private static final String KERNING = "kerning";
private static final String FONT_DATA = "fontData";
private static final String TEXT_ANCHOR = "textAnchor"; private static final String TEXT_ANCHOR = "textAnchor";
private static final String WORD_SPACING = "wordSpacing"; private static final String WORD_SPACING = "wordSpacing";
private static final String LETTER_SPACING = "letterSpacing"; private static final String LETTER_SPACING = "letterSpacing";
@@ -22,9 +23,9 @@ class FontData {
private static final String FONT_VARIANT_LIGATURES = "fontVariantLigatures"; private static final String FONT_VARIANT_LIGATURES = "fontVariantLigatures";
final double fontSize; final double fontSize;
final String fontFamily; final String fontFamily;
final FontStyle fontStyle; final FontStyle fontStyle;
final ReadableMap fontData;
final FontWeight fontWeight; final FontWeight fontWeight;
final FontVariantLigatures fontVariantLigatures; final FontVariantLigatures fontVariantLigatures;
@@ -40,6 +41,7 @@ class FontData {
static final FontData Defaults = new FontData(); static final FontData Defaults = new FontData();
private FontData() { private FontData() {
fontData = null;
fontFamily = ""; fontFamily = "";
fontStyle = FontStyle.normal; fontStyle = FontStyle.normal;
fontWeight = FontWeight.Normal; fontWeight = FontWeight.Normal;
@@ -81,6 +83,8 @@ class FontData {
fontSize = parentFontSize; fontSize = parentFontSize;
} }
fontData = font.hasKey(FONT_DATA) ? font.getMap(FONT_DATA) : parent.fontData;
fontFamily = font.hasKey(FONT_FAMILY) ? font.getString(FONT_FAMILY) : parent.fontFamily; fontFamily = font.hasKey(FONT_FAMILY) ? font.getString(FONT_FAMILY) : parent.fontFamily;
fontStyle = font.hasKey(FONT_STYLE) ? FontStyle.valueOf(font.getString(FONT_STYLE)) : parent.fontStyle; fontStyle = font.hasKey(FONT_STYLE) ? FontStyle.valueOf(font.getString(FONT_STYLE)) : parent.fontStyle;
fontWeight = font.hasKey(FONT_WEIGHT) ? FontWeight.getEnum(font.getString(FONT_WEIGHT)) : parent.fontWeight; fontWeight = font.hasKey(FONT_WEIGHT) ? FontWeight.getEnum(font.getString(FONT_WEIGHT)) : parent.fontWeight;

View File

@@ -21,6 +21,7 @@ import android.graphics.RectF;
import android.graphics.Typeface; import android.graphics.Typeface;
import android.support.v4.graphics.PaintCompat; import android.support.v4.graphics.PaintCompat;
import com.facebook.react.bridge.ReadableMap;
import com.facebook.react.uimanager.ReactShadowNode; import com.facebook.react.uimanager.ReactShadowNode;
import com.facebook.react.uimanager.annotations.ReactProp; import com.facebook.react.uimanager.annotations.ReactProp;
@@ -346,6 +347,9 @@ class TSpanShadowNode extends TextShadowNode {
https://svgwg.org/svg2-draft/text.html#FontsGlyphs https://svgwg.org/svg2-draft/text.html#FontsGlyphs
*/ */
// OpenType.js font data
ReadableMap fontData = font.fontData;
/* /*
Name Value Initial value Animatable Name Value Initial value Animatable
textLength <length> | <percentage> | <number> See below yes textLength <length> | <percentage> | <number> See below yes

View File

@@ -31,7 +31,8 @@ function fontDiffer(a, b) {
a.letterSpacing !== b.letterSpacing || a.letterSpacing !== b.letterSpacing ||
a.wordSpacing !== b.wordSpacing || a.wordSpacing !== b.wordSpacing ||
a.kerning !== b.kerning || a.kerning !== b.kerning ||
a.fontVariantLigatures !== b.fontVariantLigatures a.fontVariantLigatures !== b.fontVariantLigatures ||
a.fontData !== b.fontData
); );
} }

View File

@@ -45,6 +45,7 @@ function parseFontString(font) {
export function extractFont(props) { export function extractFont(props) {
const { const {
fontData,
fontStyle, fontStyle,
fontVariant, fontVariant,
fontWeight, fontWeight,
@@ -66,6 +67,7 @@ export function extractFont(props) {
fontSize = fontSize ? '' + fontSize : null; fontSize = fontSize ? '' + fontSize : null;
const ownedFont = _.pickBy({ const ownedFont = _.pickBy({
fontData,
fontStyle, fontStyle,
fontVariant, fontVariant,
fontWeight, fontWeight,

View File

@@ -268,6 +268,7 @@ const textSpecificProps = {
verticalAlign, verticalAlign,
lengthAdjust, lengthAdjust,
textLength, textLength,
fontData: PropTypes.object,
}; };
// https://svgwg.org/svg2-draft/text.html#TSpanAttributes // https://svgwg.org/svg2-draft/text.html#TSpanAttributes