summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/minikin/FontFamily.h3
-rw-r--r--libs/minikin/Android.mk3
-rw-r--r--libs/minikin/FontCollection.cpp6
-rw-r--r--libs/minikin/FontFamily.cpp14
-rw-r--r--libs/minikin/Layout.cpp14
-rw-r--r--libs/minikin/MinikinFontFreeType.cpp2
-rw-r--r--sample/Android.mk6
-rw-r--r--sample/example_skia.cpp3
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;