| Index: src/ports/SkFontHost_FreeType.cpp
|
| diff --git a/src/ports/SkFontHost_FreeType.cpp b/src/ports/SkFontHost_FreeType.cpp
|
| index f7b2bd1e876c4ebe543870a42febf84e0e798f40..c0278317ff8b48e5743ced88d1a7651980b5f0a5 100644
|
| --- a/src/ports/SkFontHost_FreeType.cpp
|
| +++ b/src/ports/SkFontHost_FreeType.cpp
|
| @@ -182,9 +182,7 @@ public:
|
| virtual ~SkScalerContext_FreeType();
|
|
|
| bool success() const {
|
| - return fFaceRec != NULL &&
|
| - fFTSize != NULL &&
|
| - fFace != NULL;
|
| + return fFTSize != NULL && fFace != NULL;
|
| }
|
|
|
| protected:
|
| @@ -198,7 +196,6 @@ protected:
|
| SkUnichar generateGlyphToChar(uint16_t glyph) override;
|
|
|
| private:
|
| - SkFaceRec* fFaceRec;
|
| FT_Face fFace; // reference to shared face in gFaceRecHead
|
| FT_Size fFTSize; // our own copy
|
| FT_Int fStrikeIndex;
|
| @@ -301,7 +298,7 @@ static void ft_face_setup_axes(FT_Face face, const SkFontData& data) {
|
|
|
| // Will return 0 on failure
|
| // Caller must lock gFTMutex before calling this function.
|
| -static SkFaceRec* ref_ft_face(const SkTypeface* typeface) {
|
| +static FT_Face ref_ft_face(const SkTypeface* typeface) {
|
| gFTMutex.assertHeld();
|
|
|
| const SkFontID fontID = typeface->uniqueID();
|
| @@ -310,7 +307,7 @@ static SkFaceRec* ref_ft_face(const SkTypeface* typeface) {
|
| if (rec->fFontID == fontID) {
|
| SkASSERT(rec->fFace);
|
| rec->fRefCnt += 1;
|
| - return rec;
|
| + return rec->fFace;
|
| }
|
| rec = rec->fNext;
|
| }
|
| @@ -357,7 +354,7 @@ static SkFaceRec* ref_ft_face(const SkTypeface* typeface) {
|
|
|
| rec->fNext = gFaceRecHead;
|
| gFaceRecHead = rec;
|
| - return rec;
|
| + return rec->fFace;
|
| }
|
|
|
| // Caller must lock gFTMutex before calling this function.
|
| @@ -388,15 +385,12 @@ static void unref_ft_face(FT_Face face) {
|
|
|
| class AutoFTAccess {
|
| public:
|
| - AutoFTAccess(const SkTypeface* tf) : fRec(NULL), fFace(NULL) {
|
| + AutoFTAccess(const SkTypeface* tf) : fFace(NULL) {
|
| gFTMutex.acquire();
|
| if (!ref_ft_library()) {
|
| sk_throw();
|
| }
|
| - fRec = ref_ft_face(tf);
|
| - if (fRec) {
|
| - fFace = fRec->fFace;
|
| - }
|
| + fFace = ref_ft_face(tf);
|
| }
|
|
|
| ~AutoFTAccess() {
|
| @@ -407,11 +401,9 @@ public:
|
| gFTMutex.release();
|
| }
|
|
|
| - SkFaceRec* rec() { return fRec; }
|
| FT_Face face() { return fFace; }
|
|
|
| private:
|
| - SkFaceRec* fRec;
|
| FT_Face fFace;
|
| };
|
|
|
| @@ -792,9 +784,9 @@ static FT_Int chooseBitmapStrike(FT_Face face, SkFixed scaleY) {
|
| return chosenStrikeIndex;
|
| }
|
|
|
| -SkScalerContext_FreeType::SkScalerContext_FreeType(SkTypeface* typeface,
|
| - const SkDescriptor* desc)
|
| - : SkScalerContext_FreeType_Base(typeface, desc) {
|
| +SkScalerContext_FreeType::SkScalerContext_FreeType(SkTypeface* typeface, const SkDescriptor* desc)
|
| + : SkScalerContext_FreeType_Base(typeface, desc)
|
| +{
|
| SkAutoMutexAcquire ac(gFTMutex);
|
|
|
| if (!ref_ft_library()) {
|
| @@ -804,12 +796,10 @@ SkScalerContext_FreeType::SkScalerContext_FreeType(SkTypeface* typeface,
|
| // load the font file
|
| fStrikeIndex = -1;
|
| fFTSize = NULL;
|
| - fFace = NULL;
|
| - fFaceRec = ref_ft_face(typeface);
|
| - if (NULL == fFaceRec) {
|
| + fFace = ref_ft_face(typeface);
|
| + if (NULL == fFace) {
|
| return;
|
| }
|
| - fFace = fFaceRec->fFace;
|
|
|
| fRec.computeMatrices(SkScalerContextRec::kFull_PreMatrixScale, &fScale, &fMatrix22Scalar);
|
| fMatrix22Scalar.setSkewX(-fMatrix22Scalar.getSkewX());
|
| @@ -961,8 +951,8 @@ SkScalerContext_FreeType::~SkScalerContext_FreeType() {
|
| FT_Error SkScalerContext_FreeType::setupSize() {
|
| FT_Error err = FT_Activate_Size(fFTSize);
|
| if (err != 0) {
|
| - SkDEBUGF(("SkScalerContext_FreeType::FT_Activate_Size(%x, 0x%x, 0x%x) returned 0x%x\n",
|
| - fFaceRec->fFontID, fScaleX, fScaleY, err));
|
| + SkDEBUGF(("SkScalerContext_FreeType::FT_Activate_Size(%s %s, 0x%x, 0x%x) returned 0x%x\n",
|
| + fFace->family_name, fFace->style_name, fScaleX, fScaleY, err));
|
| fFTSize = NULL;
|
| return err;
|
| }
|
| @@ -1112,16 +1102,12 @@ void SkScalerContext_FreeType::generateMetrics(SkGlyph* glyph) {
|
| FT_Error err;
|
|
|
| if (this->setupSize()) {
|
| - goto ERROR;
|
| + glyph->zeroMetrics();
|
| + return;
|
| }
|
|
|
| err = FT_Load_Glyph( fFace, glyph->getGlyphID(), fLoadGlyphFlags );
|
| if (err != 0) {
|
| -#if 0
|
| - SkDEBUGF(("SkScalerContext_FreeType::generateMetrics(%x): FT_Load_Glyph(glyph:%d flags:%x) returned 0x%x\n",
|
| - fFaceRec->fFontID, glyph->getGlyphID(), fLoadGlyphFlags, err));
|
| -#endif
|
| - ERROR:
|
| glyph->zeroMetrics();
|
| return;
|
| }
|
| @@ -1169,7 +1155,8 @@ void SkScalerContext_FreeType::generateMetrics(SkGlyph* glyph) {
|
|
|
| default:
|
| SkDEBUGFAIL("unknown glyph format");
|
| - goto ERROR;
|
| + glyph->zeroMetrics();
|
| + return;
|
| }
|
|
|
| if (fRec.fFlags & SkScalerContext::kVertical_Flag) {
|
|
|