Respect declared font style on Android.
Previously the normal/italic style bit was obtained from scanning the font file. With the new format the style may be stated explicitly, and this explicit value in the configuration file should override any information obtained from the font data itself. This change allows the font element's style attribute to override the font's style, but retains the default 'auto' setting for backwards compatibility. Repecting the style bit may become more important with variation fonts, because it will be up to the configuration writer to determine what values of the 'slnt' variation should be considered 'normal' or 'italic'. DOCS_PREVIEW= https://skia.org/?cl=1092093002 Review URL: https://codereview.chromium.org/1092093002
This commit is contained in:
parent
54b666b144
commit
673e902c9b
@ -78,10 +78,19 @@ int herdCats(const Array& cats) {
|
||||
}
|
||||
~~~~
|
||||
|
||||
Enum values are prefixed with k and have post fix that consists of an underscore
|
||||
and singular name of the enum name. The enum itself should be singular for
|
||||
exclusive values or plural for a bitfield. If a count is needed it is
|
||||
k<singular enum name>Count and not be a member of the enum (see example):
|
||||
Enum values are prefixed with k. Unscoped enum values are post fixed with
|
||||
an underscore and singular name of the enum name. The enum itself should be
|
||||
singular for exclusive values or plural for a bitfield. If a count is needed it
|
||||
is k<singular enum name>Count and not be a member of the enum (see example):
|
||||
|
||||
<!--?prettify?-->
|
||||
~~~~
|
||||
enum class SkPancakeType {
|
||||
kBlueberry,
|
||||
kPlain,
|
||||
kChocolateChip,
|
||||
};
|
||||
~~~~
|
||||
|
||||
<!--?prettify?-->
|
||||
~~~~
|
||||
|
@ -159,6 +159,13 @@ static void font_element_handler(FamilyData* self, FontFileInfo* file, const cha
|
||||
if (!parse_non_negative_integer(value, &file->fWeight)) {
|
||||
SkDebugf("---- Font weight %s (INVALID)", value);
|
||||
}
|
||||
} else if (MEMEQ("style", name, nameLen)) {
|
||||
size_t valueLen = strlen(value);
|
||||
if (MEMEQ("normal", value, valueLen)) {
|
||||
file->fStyle = FontFileInfo::Style::kNormal;
|
||||
} else if (MEMEQ("italic", value, valueLen)) {
|
||||
file->fStyle = FontFileInfo::Style::kItalic;
|
||||
}
|
||||
} else if (MEMEQ("index", name, nameLen)) {
|
||||
if (!parse_non_negative_integer(value, &file->fIndex)) {
|
||||
SkDebugf("---- Font index %s (INVALID)", value);
|
||||
|
@ -62,11 +62,12 @@ typedef uint32_t FontVariant;
|
||||
|
||||
// Must remain trivially movable (can be memmoved).
|
||||
struct FontFileInfo {
|
||||
FontFileInfo() : fIndex(0), fWeight(0) { }
|
||||
FontFileInfo() : fIndex(0), fWeight(0), fStyle(Style::kAuto) { }
|
||||
|
||||
SkString fFileName;
|
||||
int fIndex;
|
||||
int fWeight;
|
||||
enum class Style { kAuto, kNormal, kItalic } fStyle;
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -143,9 +143,15 @@ public:
|
||||
continue;
|
||||
}
|
||||
|
||||
if (fontFile.fWeight != 0) {
|
||||
style = SkFontStyle(fontFile.fWeight, style.width(), style.slant());
|
||||
int weight = fontFile.fWeight != 0 ? fontFile.fWeight : style.weight();
|
||||
SkFontStyle::Slant slant;
|
||||
switch (fontFile.fStyle) {
|
||||
case FontFileInfo::Style::kAuto: slant = style.slant(); break;
|
||||
case FontFileInfo::Style::kNormal: slant = SkFontStyle::kUpright_Slant; break;
|
||||
case FontFileInfo::Style::kItalic: slant = SkFontStyle::kItalic_Slant; break;
|
||||
default: SkASSERT(false); break;
|
||||
}
|
||||
style = SkFontStyle(weight, style.width(), slant);
|
||||
|
||||
const SkLanguage& lang = family.fLanguage;
|
||||
uint32_t variant = family.fVariant;
|
||||
|
Loading…
Reference in New Issue
Block a user