aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/SkScalerContext.cpp
diff options
context:
space:
mode:
authorGravatar reed@android.com <reed@android.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2009-02-11 15:07:19 +0000
committerGravatar reed@android.com <reed@android.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2009-02-11 15:07:19 +0000
commit62900b4c64401bc80ae85f6f5c87309a273cae10 (patch)
treec36e459951deccd587a7c75d44f1d01653fad8f2 /src/core/SkScalerContext.cpp
parentd9c0f0b57affec7a472879c5919acac6637d926a (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.cpp51
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;
}