diff options
author | reed@android.com <reed@android.com@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2009-02-11 15:07:19 +0000 |
---|---|---|
committer | reed@android.com <reed@android.com@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2009-02-11 15:07:19 +0000 |
commit | 62900b4c64401bc80ae85f6f5c87309a273cae10 (patch) | |
tree | c36e459951deccd587a7c75d44f1d01653fad8f2 /src/core/SkScalerContext.cpp | |
parent | d9c0f0b57affec7a472879c5919acac6637d926a (diff) |
handle failure when creating a scalercontext
git-svn-id: http://skia.googlecode.com/svn/trunk@90 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'src/core/SkScalerContext.cpp')
-rw-r--r-- | src/core/SkScalerContext.cpp | 51 |
1 files changed, 50 insertions, 1 deletions
diff --git a/src/core/SkScalerContext.cpp b/src/core/SkScalerContext.cpp index f63e729389..bbcc1308c1 100644 --- a/src/core/SkScalerContext.cpp +++ b/src/core/SkScalerContext.cpp @@ -52,6 +52,19 @@ size_t SkGlyph::computeImageSize() const { return size; } +void SkGlyph::zeroMetrics() { + fAdvanceX = 0; + fAdvanceY = 0; + fWidth = 0; + fHeight = 0; + fTop = 0; + fLeft = 0; + fRsbDelta = 0; + fLsbDelta = 0; +} + +/////////////////////////////////////////////////////////////////////////////// + #ifdef SK_DEBUG #define DUMP_RECx #endif @@ -521,10 +534,46 @@ void SkScalerContext::Rec::getSingleMatrix(SkMatrix* m) const } } +/////////////////////////////////////////////////////////////////////////////// + #include "SkFontHost.h" +class SkScalerContext_Empty : public SkScalerContext { +public: + SkScalerContext_Empty(const SkDescriptor* desc) : SkScalerContext(desc) {} + +protected: + virtual unsigned generateGlyphCount() const { + return 0; + } + virtual uint16_t generateCharToGlyph(SkUnichar uni) { + return 0; + } + virtual void generateAdvance(SkGlyph* glyph) { + glyph->zeroMetrics(); + } + virtual void generateMetrics(SkGlyph* glyph) { + glyph->zeroMetrics(); + } + virtual void generateImage(const SkGlyph& glyph) {} + virtual void generatePath(const SkGlyph& glyph, SkPath* path) {} + virtual void generateFontMetrics(SkPaint::FontMetrics* mx, + SkPaint::FontMetrics* my) { + if (mx) { + bzero(mx, sizeof(*mx)); + } + if (my) { + bzero(my, sizeof(*my)); + } + } +}; + SkScalerContext* SkScalerContext::Create(const SkDescriptor* desc) { - return SkFontHost::CreateScalerContext(desc); + SkScalerContext* c = SkFontHost::CreateScalerContext(desc); + if (NULL == c) { + c = SkNEW_ARGS(SkScalerContext_Empty, (desc)); + } + return c; } |