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

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

Issue 23548034: Follow up to serialization validation code (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: Created 7 years, 3 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> T* load_flattenable(const SkDescriptor* desc, uint32_t tag ) {
70 SkFlattenable* obj = NULL; 70 T* obj = NULL;
71 uint32_t len; 71 uint32_t len;
72 const void* data = desc->findEntry(tag, &len); 72 const void* data = desc->findEntry(tag, &len);
73 73
74 if (data) { 74 if (data) {
75 SkOrderedReadBuffer buffer(data, len); 75 SkOrderedReadBuffer buffer(data, len);
76 obj = buffer.readFlattenable(); 76 obj = buffer.readFlattenableT<T>();
77 SkASSERT(buffer.offset() == buffer.size()); 77 SkASSERT(buffer.offset() == buffer.size());
78 } 78 }
79 return obj; 79 return obj;
80 } 80 }
81 81
82 SkScalerContext::SkScalerContext(SkTypeface* typeface, const SkDescriptor* desc) 82 SkScalerContext::SkScalerContext(SkTypeface* typeface, const SkDescriptor* desc)
83 : fRec(*static_cast<const Rec*>(desc->findEntry(kRec_SkDescriptorTag, NULL)) ) 83 : fRec(*static_cast<const Rec*>(desc->findEntry(kRec_SkDescriptorTag, NULL)) )
84 84
85 , fBaseGlyphCount(0) 85 , fBaseGlyphCount(0)
86 , fTypeface(SkRef(typeface)) 86 , fTypeface(SkRef(typeface))
87 , fPathEffect(static_cast<SkPathEffect*>(load_flattenable(desc, kPathEffect_ SkDescriptorTag))) 87 , fPathEffect(load_flattenable<SkPathEffect>(desc, kPathEffect_SkDescriptorT ag))
88 , fMaskFilter(static_cast<SkMaskFilter*>(load_flattenable(desc, kMaskFilter_ SkDescriptorTag))) 88 , fMaskFilter(load_flattenable<SkMaskFilter>(desc, kMaskFilter_SkDescriptorT ag))
89 , fRasterizer(static_cast<SkRasterizer*>(load_flattenable(desc, kRasterizer_ SkDescriptorTag))) 89 , fRasterizer(load_flattenable<SkRasterizer>(desc, kRasterizer_SkDescriptorT ag))
90 90
91 // Initialize based on our settings. Subclasses can also force this. 91 // Initialize based on our settings. Subclasses can also force this.
92 , fGenerateImageFromPath(fRec.fFrameWidth > 0 || fPathEffect != NULL || fRas terizer != NULL) 92 , fGenerateImageFromPath(fRec.fFrameWidth > 0 || fPathEffect != NULL || fRas terizer != NULL)
93 93
94 , fNextContext(NULL) 94 , fNextContext(NULL)
95 95
96 , fPreBlend(fMaskFilter ? SkMaskGamma::PreBlend() : SkScalerContext::GetMask PreBlend(fRec)) 96 , fPreBlend(fMaskFilter ? SkMaskGamma::PreBlend() : SkScalerContext::GetMask PreBlend(fRec))
97 , fPreBlendForFilter(fMaskFilter ? SkScalerContext::GetMaskPreBlend(fRec) 97 , fPreBlendForFilter(fMaskFilter ? SkScalerContext::GetMaskPreBlend(fRec)
98 : SkMaskGamma::PreBlend()) 98 : SkMaskGamma::PreBlend())
99 { 99 {
(...skipping 832 matching lines...) Expand 10 before | Expand all | Expand 10 after
932 SkScalerContext* SkTypeface::createScalerContext(const SkDescriptor* desc, 932 SkScalerContext* SkTypeface::createScalerContext(const SkDescriptor* desc,
933 bool allowFailure) const { 933 bool allowFailure) const {
934 SkScalerContext* c = this->onCreateScalerContext(desc); 934 SkScalerContext* c = this->onCreateScalerContext(desc);
935 935
936 if (!c && !allowFailure) { 936 if (!c && !allowFailure) {
937 c = SkNEW_ARGS(SkScalerContext_Empty, 937 c = SkNEW_ARGS(SkScalerContext_Empty,
938 (const_cast<SkTypeface*>(this), desc)); 938 (const_cast<SkTypeface*>(this), desc));
939 } 939 }
940 return c; 940 return c;
941 } 941 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698