diff options
author | bungeman <bungeman@google.com> | 2015-04-17 13:25:03 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-04-17 13:25:03 -0700 |
commit | 673e902c9b9982a167f54f1cc175d8d9cab8bcaf (patch) | |
tree | 6baf8e8891b36812a77c687e701d472a9b0c6190 | |
parent | 54b666b144e1281c0edf499e5ec1c59edaef6572 (diff) |
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
-rw-r--r-- | site/dev/contrib/style.md | 17 | ||||
-rw-r--r-- | src/ports/SkFontConfigParser_android.cpp | 7 | ||||
-rw-r--r-- | src/ports/SkFontConfigParser_android.h | 3 | ||||
-rw-r--r-- | src/ports/SkFontMgr_android.cpp | 10 |
4 files changed, 30 insertions, 7 deletions
diff --git a/site/dev/contrib/style.md b/site/dev/contrib/style.md index e952ed1b68..177a58b8d4 100644 --- a/site/dev/contrib/style.md +++ b/site/dev/contrib/style.md @@ -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?--> ~~~~ diff --git a/src/ports/SkFontConfigParser_android.cpp b/src/ports/SkFontConfigParser_android.cpp index ffc60427f4..9bab84556b 100644 --- a/src/ports/SkFontConfigParser_android.cpp +++ b/src/ports/SkFontConfigParser_android.cpp @@ -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); diff --git a/src/ports/SkFontConfigParser_android.h b/src/ports/SkFontConfigParser_android.h index 6dbf383590..dd856bf733 100644 --- a/src/ports/SkFontConfigParser_android.h +++ b/src/ports/SkFontConfigParser_android.h @@ -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; }; /** diff --git a/src/ports/SkFontMgr_android.cpp b/src/ports/SkFontMgr_android.cpp index 61f990c738..d7db09bde2 100644 --- a/src/ports/SkFontMgr_android.cpp +++ b/src/ports/SkFontMgr_android.cpp @@ -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; |