diff options
author | agl@chromium.org <agl@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-03-31 17:22:28 +0000 |
---|---|---|
committer | agl@chromium.org <agl@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-03-31 17:22:28 +0000 |
commit | a1e077900dd8b33fb7ea368c01f3d8ebcb42d9cd (patch) | |
tree | a6ab9774939c3292073d18ff8aabfb93933cec85 /skia/ports | |
parent | 82875d6d6604fb5563a69456b810205b8e14bb64 (diff) | |
download | chromium_src-a1e077900dd8b33fb7ea368c01f3d8ebcb42d9cd.zip chromium_src-a1e077900dd8b33fb7ea368c01f3d8ebcb42d9cd.tar.gz chromium_src-a1e077900dd8b33fb7ea368c01f3d8ebcb42d9cd.tar.bz2 |
Revert "..."
This reverts commit r12868. I used the wrong commit and messed up the message.
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@12870 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'skia/ports')
-rw-r--r-- | skia/ports/SkFontHost_FreeType.cpp | 56 |
1 files changed, 27 insertions, 29 deletions
diff --git a/skia/ports/SkFontHost_FreeType.cpp b/skia/ports/SkFontHost_FreeType.cpp index 89a0abc..94bbf2b 100644 --- a/skia/ports/SkFontHost_FreeType.cpp +++ b/skia/ports/SkFontHost_FreeType.cpp @@ -73,9 +73,6 @@ class SkScalerContext_FreeType : public SkScalerContext { public: SkScalerContext_FreeType(const SkDescriptor* desc); virtual ~SkScalerContext_FreeType(); - bool success() const { - return fFaceRec != NULL && fFTSize != NULL; - } protected: virtual unsigned generateGlyphCount() const; @@ -113,7 +110,7 @@ struct SkFaceRec { SkFaceRec(SkStream* strm, uint32_t fontID); ~SkFaceRec() { - fSkStream->unref(); + SkFontHost::CloseStream(fFontID, fSkStream); } }; @@ -159,7 +156,6 @@ SkFaceRec::SkFaceRec(SkStream* strm, uint32_t fontID) fFTStream.close = sk_stream_close; } -// Will return 0 on failure static SkFaceRec* ref_ft_face(uint32_t fontID) { SkFaceRec* rec = gFaceRecHead; while (rec) { @@ -174,6 +170,7 @@ static SkFaceRec* ref_ft_face(uint32_t fontID) { SkStream* strm = SkFontHost::OpenStream(fontID); if (NULL == strm) { SkDEBUGF(("SkFontHost::OpenStream failed opening %x\n", fontID)); + sk_throw(); return 0; } @@ -200,6 +197,7 @@ static SkFaceRec* ref_ft_face(uint32_t fontID) { if (err) { // bad filename, try the default font fprintf(stderr, "ERROR: unable to open font '%x'\n", fontID); SkDELETE(rec); + sk_throw(); return 0; } else { SkASSERT(rec->fFace); @@ -237,7 +235,7 @@ static void unref_ft_face(FT_Face face) { /////////////////////////////////////////////////////////////////////////// SkScalerContext_FreeType::SkScalerContext_FreeType(const SkDescriptor* desc) - : SkScalerContext(desc) { + : SkScalerContext(desc), fFTSize(NULL) { SkAutoMutexAcquire ac(gFTMutex); FT_Error err; @@ -250,13 +248,8 @@ SkScalerContext_FreeType::SkScalerContext_FreeType(const SkDescriptor* desc) ++gFTCount; // load the font file - fFTSize = NULL; - fFace = NULL; fFaceRec = ref_ft_face(fRec.fFontID); - if (NULL == fFaceRec) { - return; - } - fFace = fFaceRec->fFace; + fFace = fFaceRec ? fFaceRec->fFace : NULL; // compute our factors from the record @@ -315,14 +308,13 @@ SkScalerContext_FreeType::SkScalerContext_FreeType(const SkDescriptor* desc) render_flags = FT_LOAD_TARGET_LIGHT; break; case kNormal_Hints: -#ifndef ANDROID - // The following line disables the font's hinting tables. For - // Chromium we want font hinting on so that we can generate - // baselines that look at little like Firefox. It's expected that - // Mike Reed will rework this code sometime soon so we don't wish - // to make more extensive changes. - flags |= FT_LOAD_FORCE_AUTOHINT; -#else + // Uncommenting the following line disables the font's hinting + // tables. For test_shell we want font hinting on so that we can + // generate baselines that look at little like Firefox. It's + // expected that Mike Reed will rework this code sometime soon so + // we don't wish to make more extensive changes. + //flags |= FT_LOAD_FORCE_AUTOHINT; +#ifdef ANDROID /* Switch to light hinting (vertical only) to address some chars that behaved poorly with NORMAL. In the future we could consider making this choice exposed at runtime to the caller. @@ -433,6 +425,17 @@ static FT_Pixel_Mode compute_pixel_mode(SkMask::Format format) { } } +static void set_glyph_metrics_on_error(SkGlyph* glyph) { + glyph->fRsbDelta = 0; + glyph->fLsbDelta = 0; + glyph->fWidth = 0; + glyph->fHeight = 0; + glyph->fTop = 0; + glyph->fLeft = 0; + glyph->fAdvanceX = 0; + glyph->fAdvanceY = 0; +} + void SkScalerContext_FreeType::generateAdvance(SkGlyph* glyph) { #ifdef FT_ADVANCES_H /* unhinted and light hinted text have linearly scaled advances @@ -442,7 +445,7 @@ void SkScalerContext_FreeType::generateAdvance(SkGlyph* glyph) { SkAutoMutexAcquire ac(gFTMutex); if (this->setupSize()) { - glyph->zeroMetrics(); + set_glyph_metrics_on_error(glyph); return; } @@ -483,7 +486,7 @@ void SkScalerContext_FreeType::generateMetrics(SkGlyph* glyph) { SkDEBUGF(("SkScalerContext_FreeType::generateMetrics(%x): FT_Load_Glyph(glyph:%d flags:%d) returned 0x%x\n", fFaceRec->fFontID, glyph->getGlyphID(fBaseGlyphCount), fLoadGlyphFlags, err)); ERROR: - glyph->zeroMetrics(); + set_glyph_metrics_on_error(glyph); return; } @@ -630,7 +633,7 @@ void SkScalerContext_FreeType::generateImage(const SkGlyph& glyph) { #define ft2sk(x) SkFixedToScalar((x) << 10) -#if FREETYPE_MAJOR >= 2 && FREETYPE_MINOR >= 2 +#if FREETYPE_MAJOR >= 2 && FREETYPE_MINOR >= 3 #define CONST_PARAM const #else // older freetype doesn't use const here #define CONST_PARAM @@ -864,12 +867,7 @@ void SkScalerContext_FreeType::generateFontMetrics(SkPaint::FontMetrics* mx, //////////////////////////////////////////////////////////////////////// SkScalerContext* SkFontHost::CreateScalerContext(const SkDescriptor* desc) { - SkScalerContext_FreeType* c = SkNEW_ARGS(SkScalerContext_FreeType, (desc)); - if (!c->success()) { - SkDELETE(c); - c = NULL; - } - return c; + return SkNEW_ARGS(SkScalerContext_FreeType, (desc)); } /////////////////////////////////////////////////////////////////////////////// |