diff options
author | Behdad Esfahbod <behdad@google.com> | 2014-08-08 19:56:55 +0000 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2014-08-08 19:56:55 +0000 |
commit | 8e865a08c03bae9bbdae69c5ad1a79b47adb047f (patch) | |
tree | 1a20ec2eaf265055c41ccadaf3f43048bdb369b4 /libs | |
parent | 143a999611a780f2549887b60702eee1f8c33bdc (diff) | |
parent | f952161b874fd2e9af474b9fd2ebcca1f3bb4555 (diff) | |
download | android_frameworks_minikin-8e865a08c03bae9bbdae69c5ad1a79b47adb047f.tar.gz android_frameworks_minikin-8e865a08c03bae9bbdae69c5ad1a79b47adb047f.tar.bz2 android_frameworks_minikin-8e865a08c03bae9bbdae69c5ad1a79b47adb047f.zip |
am f952161b: Choose same font for Emoji keycap and its base character
* commit 'f952161b874fd2e9af474b9fd2ebcca1f3bb4555':
Choose same font for Emoji keycap and its base character
Diffstat (limited to 'libs')
-rw-r--r-- | libs/minikin/FontCollection.cpp | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/libs/minikin/FontCollection.cpp b/libs/minikin/FontCollection.cpp index a6977fd..009584e 100644 --- a/libs/minikin/FontCollection.cpp +++ b/libs/minikin/FontCollection.cpp @@ -152,9 +152,11 @@ const FontCollection::FontInstance* FontCollection::getInstanceForChar(uint32_t const uint32_t NBSP = 0xa0; const uint32_t ZWJ = 0x200c; const uint32_t ZWNJ = 0x200d; +const uint32_t KEYCAP = 0x20e3; + // Characters where we want to continue using existing font run instead of // recomputing the best match in the fallback list. -static const uint32_t stickyWhitelist[] = { '!', ',', '.', ':', ';', '?', NBSP, ZWJ, ZWNJ }; +static const uint32_t stickyWhitelist[] = { '!', ',', '.', ':', ';', '?', NBSP, ZWJ, ZWNJ, KEYCAP }; static bool isStickyWhitelisted(uint32_t c) { for (size_t i = 0; i < sizeof(stickyWhitelist) / sizeof(stickyWhitelist[0]); i++) { @@ -185,6 +187,19 @@ void FontCollection::itemize(const uint16_t *string, size_t string_size, FontSty || !(isStickyWhitelisted(ch) && lastInstance->mCoverage->get(ch))) { const FontInstance* instance = getInstanceForChar(ch, lang, variant); if (i == 0 || instance != lastInstance) { + size_t start = i; + // Workaround for Emoji keycap until we implement per-cluster font + // selection: if keycap is found in a different font that also + // supports previous char, attach previous char to the new run. + // Only handles non-surrogate characters. + // Bug 7557244. + if (ch == KEYCAP && i && instance && instance->mCoverage->get(string[i - 1])) { + run->end--; + if (run->start == run->end) { + result->pop_back(); + } + start--; + } Run dummy; result->push_back(dummy); run = &result->back(); @@ -194,7 +209,7 @@ void FontCollection::itemize(const uint16_t *string, size_t string_size, FontSty run->fakedFont = instance->mFamily->getClosestMatch(style); } lastInstance = instance; - run->start = i; + run->start = start; } } run->end = i + nShorts; |