diff options
-rw-r--r-- | include/minikin/FontFamily.h | 3 | ||||
-rw-r--r-- | libs/minikin/Android.mk | 3 | ||||
-rw-r--r-- | libs/minikin/FontCollection.cpp | 6 | ||||
-rw-r--r-- | libs/minikin/FontFamily.cpp | 14 | ||||
-rw-r--r-- | libs/minikin/Layout.cpp | 14 | ||||
-rw-r--r-- | libs/minikin/MinikinFontFreeType.cpp | 2 | ||||
-rw-r--r-- | sample/Android.mk | 6 | ||||
-rw-r--r-- | sample/example_skia.cpp | 3 |
8 files changed, 27 insertions, 24 deletions
diff --git a/include/minikin/FontFamily.h b/include/minikin/FontFamily.h index 08c7a2c..7bdff6e 100644 --- a/include/minikin/FontFamily.h +++ b/include/minikin/FontFamily.h @@ -141,7 +141,8 @@ public: MinikinFont* getFont(size_t index) const; FontStyle getStyle(size_t index) const; - // Get Unicode coverage. Lifetime of returned bitset is same as receiver. + // Get Unicode coverage. Lifetime of returned bitset is same as receiver. May return nullptr on + // error. const SparseBitSet* getCoverage(); private: void addFontLocked(MinikinFont* typeface, FontStyle style); diff --git a/libs/minikin/Android.mk b/libs/minikin/Android.mk index 386dc2b..d9c973d 100644 --- a/libs/minikin/Android.mk +++ b/libs/minikin/Android.mk @@ -15,7 +15,6 @@ LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) -include external/stlport/libstlport.mk LOCAL_SRC_FILES := \ AnalyzeStyle.cpp \ @@ -34,7 +33,6 @@ LOCAL_MODULE := libminikin LOCAL_C_INCLUDES += \ external/harfbuzz_ng/src \ external/freetype/include \ - external/icu/icu4c/source/common \ frameworks/minikin/include LOCAL_SHARED_LIBRARIES := \ @@ -43,7 +41,6 @@ LOCAL_SHARED_LIBRARIES := \ liblog \ libpng \ libz \ - libstlport \ libicuuc \ libutils diff --git a/libs/minikin/FontCollection.cpp b/libs/minikin/FontCollection.cpp index 7b6b950..e3911c5 100644 --- a/libs/minikin/FontCollection.cpp +++ b/libs/minikin/FontCollection.cpp @@ -53,8 +53,12 @@ FontCollection::FontCollection(const vector<FontFamily*>& typefaces) : continue; } family->RefLocked(); - mFamilies.push_back(family); // emplace_back would be better const SparseBitSet* coverage = family->getCoverage(); + if (coverage == nullptr) { + family->UnrefLocked(); + continue; + } + mFamilies.push_back(family); // emplace_back would be better mMaxChar = max(mMaxChar, coverage->length()); lastChar.push_back(coverage->nextSetBit(0)); } diff --git a/libs/minikin/FontFamily.cpp b/libs/minikin/FontFamily.cpp index d2e5867..da7320b 100644 --- a/libs/minikin/FontFamily.cpp +++ b/libs/minikin/FontFamily.cpp @@ -191,10 +191,18 @@ const SparseBitSet* FontFamily::getCoverage() { MinikinFont* typeface = getClosestMatch(defaultStyle).font; const uint32_t cmapTag = MinikinFont::MakeTag('c', 'm', 'a', 'p'); size_t cmapSize = 0; - bool ok = typeface->GetTable(cmapTag, NULL, &cmapSize); + if (!typeface->GetTable(cmapTag, NULL, &cmapSize)) { + ALOGE("Could not get cmap table size!\n"); + // Note: This means we will retry on the next call to getCoverage, as we can't store + // the failure. This is fine, as we assume this doesn't really happen in practice. + return nullptr; + } UniquePtr<uint8_t[]> cmapData(new uint8_t[cmapSize]); - ok = typeface->GetTable(cmapTag, cmapData.get(), &cmapSize); - CmapCoverage::getCoverage(mCoverage, cmapData.get(), cmapSize); + if (!typeface->GetTable(cmapTag, cmapData.get(), &cmapSize)) { + ALOGE("Unexpected failure to read cmap table!\n"); + return nullptr; + } + CmapCoverage::getCoverage(mCoverage, cmapData.get(), cmapSize); // TODO: Error check? #ifdef VERBOSE_DEBUG ALOGD("font coverage length=%d, first ch=%x\n", mCoverage->length(), mCoverage->nextSetBit(0)); diff --git a/libs/minikin/Layout.cpp b/libs/minikin/Layout.cpp index fcae6cc..db0667b 100644 --- a/libs/minikin/Layout.cpp +++ b/libs/minikin/Layout.cpp @@ -17,12 +17,14 @@ #define LOG_TAG "Minikin" #include <cutils/log.h> -#include <string> -#include <vector> +#include <math.h> +#include <stdio.h> // for debugging + #include <algorithm> #include <fstream> #include <iostream> // for debugging -#include <stdio.h> // ditto +#include <string> +#include <vector> #include <utils/JenkinsHash.h> #include <utils/LruCache.h> @@ -75,11 +77,11 @@ class LayoutCacheKey { public: LayoutCacheKey(const FontCollection* collection, const MinikinPaint& paint, FontStyle style, const uint16_t* chars, size_t start, size_t count, size_t nchars, bool dir) - : mStart(start), mCount(count), mId(collection->getId()), mStyle(style), + : mChars(chars), mNchars(nchars), + mStart(start), mCount(count), mId(collection->getId()), mStyle(style), mSize(paint.size), mScaleX(paint.scaleX), mSkewX(paint.skewX), mLetterSpacing(paint.letterSpacing), - mPaintFlags(paint.paintFlags), mIsRtl(dir), - mChars(chars), mNchars(nchars) { + mPaintFlags(paint.paintFlags), mIsRtl(dir) { } bool operator==(const LayoutCacheKey &other) const; hash_t hash() const; diff --git a/libs/minikin/MinikinFontFreeType.cpp b/libs/minikin/MinikinFontFreeType.cpp index a251dda..972f3f1 100644 --- a/libs/minikin/MinikinFontFreeType.cpp +++ b/libs/minikin/MinikinFontFreeType.cpp @@ -49,7 +49,7 @@ float MinikinFontFreeType::GetHorizontalAdvance(uint32_t glyph_id, FT_Set_Pixel_Sizes(mTypeface, 0, paint.size); FT_UInt32 flags = FT_LOAD_DEFAULT; // TODO: respect hinting settings FT_Fixed advance; - FT_Error error = FT_Get_Advance(mTypeface, glyph_id, flags, &advance); + FT_Get_Advance(mTypeface, glyph_id, flags, &advance); return advance * (1.0 / 65536); } diff --git a/sample/Android.mk b/sample/Android.mk index ec06e38..c4a644d 100644 --- a/sample/Android.mk +++ b/sample/Android.mk @@ -15,14 +15,12 @@ LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) -include external/stlport/libstlport.mk LOCAL_MODULE_TAGS := tests LOCAL_C_INCLUDES += \ external/harfbuzz_ng/src \ external/freetype/include \ - external/icu/icu4c/source/common \ frameworks/minikin/include LOCAL_SRC_FILES:= example.cpp @@ -31,7 +29,6 @@ LOCAL_SHARED_LIBRARIES += \ libutils \ liblog \ libcutils \ - libstlport \ libharfbuzz_ng \ libicuuc \ libft2 \ @@ -45,14 +42,12 @@ include $(BUILD_EXECUTABLE) include $(CLEAR_VARS) -include external/stlport/libstlport.mk LOCAL_MODULE_TAG := tests LOCAL_C_INCLUDES += \ external/harfbuzz_ng/src \ external/freetype/include \ - external/icu/icu4c/source/common \ frameworks/minikin/include \ external/skia/src/core @@ -63,7 +58,6 @@ LOCAL_SHARED_LIBRARIES += \ libutils \ liblog \ libcutils \ - libstlport \ libharfbuzz_ng \ libicuuc \ libskia \ diff --git a/sample/example_skia.cpp b/sample/example_skia.cpp index 51fcf47..f892b8c 100644 --- a/sample/example_skia.cpp +++ b/sample/example_skia.cpp @@ -55,8 +55,6 @@ FontCollection *makeFontCollection() { }; FontFamily *family = new FontFamily(); - FT_Face face; - FT_Error error; for (size_t i = 0; i < sizeof(fns)/sizeof(fns[0]); i++) { const char *fn = fns[i]; SkTypeface *skFace = SkTypeface::CreateFromFile(fn); @@ -118,7 +116,6 @@ int runMinikinTest() { Layout layout; layout.setFontCollection(collection); const char *text = "fine world \xe0\xa4\xa8\xe0\xa4\xae\xe0\xa4\xb8\xe0\xa5\x8d\xe0\xa4\xa4\xe0\xa5\x87"; - const char *style = "font-size: 32; font-weight: 700;"; int bidiFlags = 0; FontStyle fontStyle(7); MinikinPaint minikinPaint; |