Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(91)

Side by Side Diff: src/core/SkScalerContext.cpp

Issue 23021015: Initial error handling code (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: Minor fixes Created 7 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 1
2 /* 2 /*
3 * Copyright 2006 The Android Open Source Project 3 * Copyright 2006 The Android Open Source Project
4 * 4 *
5 * Use of this source code is governed by a BSD-style license that can be 5 * Use of this source code is governed by a BSD-style license that can be
6 * found in the LICENSE file. 6 * found in the LICENSE file.
7 */ 7 */
8 8
9 9
10 #include "SkScalerContext.h" 10 #include "SkScalerContext.h"
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
59 fRsbDelta = 0; 59 fRsbDelta = 0;
60 fLsbDelta = 0; 60 fLsbDelta = 0;
61 } 61 }
62 62
63 /////////////////////////////////////////////////////////////////////////////// 63 ///////////////////////////////////////////////////////////////////////////////
64 64
65 #ifdef SK_DEBUG 65 #ifdef SK_DEBUG
66 #define DUMP_RECx 66 #define DUMP_RECx
67 #endif 67 #endif
68 68
69 static SkFlattenable* load_flattenable(const SkDescriptor* desc, uint32_t tag, 69 template <typename T> struct FlattenableInfo {};
70 SkEffectType et) { 70
71 SkFlattenable* obj = NULL; 71 template <> struct FlattenableInfo<SkPathEffect> {
72 uint32_t len; 72 static SkPathEffect* read(SkOrderedReadBuffer& buffer) {
73 const void* data = desc->findEntry(tag, &len); 73 return buffer.readPathEffect();
74 }
75 static uint32_t getTag() {
76 return kPathEffect_SkDescriptorTag;
77 }
78 };
79
80 template <> struct FlattenableInfo<SkMaskFilter> {
81 static SkMaskFilter* read(SkOrderedReadBuffer& buffer) {
82 return buffer.readMaskFilter();
83 }
84 static uint32_t getTag() {
85 return kMaskFilter_SkDescriptorTag;
86 }
87 };
88
89 template <> struct FlattenableInfo<SkRasterizer> {
90 static SkRasterizer* read(SkOrderedReadBuffer& buffer) {
91 return buffer.readRasterizer();
92 }
93 static uint32_t getTag() {
94 return kRasterizer_SkDescriptorTag;
95 }
96 };
97
98 template <typename T> T* load_flattenable(const SkDescriptor* desc) {
99 T* obj = NULL;
100 uint32_t len;
101 const void* data = desc->findEntry(FlattenableInfo<T>::getTag(), &len);
74 102
75 if (data) { 103 if (data) {
76 SkOrderedReadBuffer buffer(data, len); 104 SkOrderedReadBuffer buffer(data, len);
77 obj = buffer.readFlattenable(et); 105 obj = FlattenableInfo<T>::read(buffer);
78 SkASSERT(buffer.offset() == buffer.size()); 106 SkASSERT(buffer.offset() == buffer.size());
79 } 107 }
80 return obj; 108 return obj;
81 } 109 }
82 110
83 SkScalerContext::SkScalerContext(SkTypeface* typeface, const SkDescriptor* desc) 111 SkScalerContext::SkScalerContext(SkTypeface* typeface, const SkDescriptor* desc)
84 : fRec(*static_cast<const Rec*>(desc->findEntry(kRec_SkDescriptorTag, NULL)) ) 112 : fRec(*static_cast<const Rec*>(desc->findEntry(kRec_SkDescriptorTag, NULL)) )
85 113
86 , fBaseGlyphCount(0) 114 , fBaseGlyphCount(0)
87 , fTypeface(SkRef(typeface)) 115 , fTypeface(SkRef(typeface))
88 , fPathEffect(static_cast<SkPathEffect*>(load_flattenable(desc, kPathEffect_ SkDescriptorTag, kPathEffect_SkEffectType))) 116 , fPathEffect(load_flattenable<SkPathEffect>(desc))
89 , fMaskFilter(static_cast<SkMaskFilter*>(load_flattenable(desc, kMaskFilter_ SkDescriptorTag, kMaskFilter_SkEffectType))) 117 , fMaskFilter(load_flattenable<SkMaskFilter>(desc))
90 , fRasterizer(static_cast<SkRasterizer*>(load_flattenable(desc, kRasterizer_ SkDescriptorTag, kRasterizer_SkEffectType))) 118 , fRasterizer(load_flattenable<SkRasterizer>(desc))
91 119
92 // Initialize based on our settings. Subclasses can also force this. 120 // Initialize based on our settings. Subclasses can also force this.
93 , fGenerateImageFromPath(fRec.fFrameWidth > 0 || fPathEffect != NULL || fRas terizer != NULL) 121 , fGenerateImageFromPath(fRec.fFrameWidth > 0 || fPathEffect != NULL || fRas terizer != NULL)
94 122
95 , fNextContext(NULL) 123 , fNextContext(NULL)
96 124
97 , fPreBlend(fMaskFilter ? SkMaskGamma::PreBlend() : SkScalerContext::GetMask PreBlend(fRec)) 125 , fPreBlend(fMaskFilter ? SkMaskGamma::PreBlend() : SkScalerContext::GetMask PreBlend(fRec))
98 , fPreBlendForFilter(fMaskFilter ? SkScalerContext::GetMaskPreBlend(fRec) 126 , fPreBlendForFilter(fMaskFilter ? SkScalerContext::GetMaskPreBlend(fRec)
99 : SkMaskGamma::PreBlend()) 127 : SkMaskGamma::PreBlend())
100 { 128 {
(...skipping 832 matching lines...) Expand 10 before | Expand all | Expand 10 after
933 SkScalerContext* SkTypeface::createScalerContext(const SkDescriptor* desc, 961 SkScalerContext* SkTypeface::createScalerContext(const SkDescriptor* desc,
934 bool allowFailure) const { 962 bool allowFailure) const {
935 SkScalerContext* c = this->onCreateScalerContext(desc); 963 SkScalerContext* c = this->onCreateScalerContext(desc);
936 964
937 if (!c && !allowFailure) { 965 if (!c && !allowFailure) {
938 c = SkNEW_ARGS(SkScalerContext_Empty, 966 c = SkNEW_ARGS(SkScalerContext_Empty,
939 (const_cast<SkTypeface*>(this), desc)); 967 (const_cast<SkTypeface*>(this), desc));
940 } 968 }
941 return c; 969 return c;
942 } 970 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698