SkScalerContext::SkScalerContext(SkTypeface* typeface, const SkDescriptor* desc) : fRec(*static_cast<const Rec*>(desc->findEntry(kRec_SkDescriptorTag, nullptr))) , fTypeface(SkRef(typeface)) , fPathEffect(static_cast<SkPathEffect*>(load_flattenable(desc, kPathEffect_SkDescriptorTag, SkFlattenable::kSkPathEffect_Type))) , fMaskFilter(static_cast<SkMaskFilter*>(load_flattenable(desc, kMaskFilter_SkDescriptorTag, SkFlattenable::kSkMaskFilter_Type))) , fRasterizer(static_cast<SkRasterizer*>(load_flattenable(desc, kRasterizer_SkDescriptorTag, SkFlattenable::kSkRasterizer_Type))) // Initialize based on our settings. Subclasses can also force this. , fGenerateImageFromPath(fRec.fFrameWidth > 0 || fPathEffect != nullptr || fRasterizer != nullptr) , fPreBlend(fMaskFilter ? SkMaskGamma::PreBlend() : SkScalerContext::GetMaskPreBlend(fRec)) , fPreBlendForFilter(fMaskFilter ? SkScalerContext::GetMaskPreBlend(fRec) : SkMaskGamma::PreBlend()) { #ifdef DUMP_REC desc->assertChecksum(); SkDebugf("SkScalerContext checksum %x count %d length %d\n", desc->getChecksum(), desc->getCount(), desc->getLength()); SkDebugf(" textsize %g prescale %g preskew %g post [%g %g %g %g]\n", rec->fTextSize, rec->fPreScaleX, rec->fPreSkewX, rec->fPost2x2[0][0], rec->fPost2x2[0][1], rec->fPost2x2[1][0], rec->fPost2x2[1][1]); SkDebugf(" frame %g miter %g hints %d framefill %d format %d join %d cap %d\n", rec->fFrameWidth, rec->fMiterLimit, rec->fHints, rec->fFrameAndFill, rec->fMaskFormat, rec->fStrokeJoin, rec->fStrokeCap); SkDebugf(" pathEffect %x maskFilter %x\n", desc->findEntry(kPathEffect_SkDescriptorTag, nullptr), desc->findEntry(kMaskFilter_SkDescriptorTag, nullptr)); #endif }
SkScalerContext::SkScalerContext(const SkDescriptor* desc) : fPathEffect(NULL), fMaskFilter(NULL) { fBaseGlyphCount = 0; fNextContext = NULL; const Rec* rec = (const Rec*)desc->findEntry(kRec_SkDescriptorTag, NULL); SkASSERT(rec); fRec = *rec; #ifdef DUMP_REC desc->assertChecksum(); SkDebugf("SkScalarContext checksum %x count %d length %d\n", desc->getChecksum(), desc->getCount(), desc->getLength()); SkDebugf(" textsize %g prescale %g preskew %g post [%g %g %g %g]\n", rec->fTextSize, rec->fPreScaleX, rec->fPreSkewX, rec->fPost2x2[0][0], rec->fPost2x2[0][1], rec->fPost2x2[1][0], rec->fPost2x2[1][1]); SkDebugf(" frame %g miter %g hints %d framefill %d format %d join %d\n", rec->fFrameWidth, rec->fMiterLimit, rec->fHints, rec->fFrameAndFill, rec->fMaskFormat, rec->fStrokeJoin); SkDebugf(" pathEffect %x maskFilter %x\n", desc->findEntry(kPathEffect_SkDescriptorTag, NULL), desc->findEntry(kMaskFilter_SkDescriptorTag, NULL)); #endif fPathEffect = (SkPathEffect*)load_flattenable(desc, kPathEffect_SkDescriptorTag); fMaskFilter = (SkMaskFilter*)load_flattenable(desc, kMaskFilter_SkDescriptorTag); fRasterizer = (SkRasterizer*)load_flattenable(desc, kRasterizer_SkDescriptorTag); // initialize based on our settings. subclasses can also force this fGenerateImageFromPath = fRec.fFrameWidth > 0 || fPathEffect != NULL || fRasterizer != NULL; }
SkScalerContext::SkScalerContext(SkTypeface* typeface, const SkDescriptor* desc) : fRec(*static_cast<const Rec*>(desc->findEntry(kRec_SkDescriptorTag, NULL))) , fBaseGlyphCount(0) , fTypeface(SkRef(typeface)) , fPathEffect(static_cast<SkPathEffect*>(load_flattenable(desc, kPathEffect_SkDescriptorTag, SkFlattenable::kSkPathEffect_Type))) , fMaskFilter(static_cast<SkMaskFilter*>(load_flattenable(desc, kMaskFilter_SkDescriptorTag, SkFlattenable::kSkMaskFilter_Type))) , fRasterizer(static_cast<SkRasterizer*>(load_flattenable(desc, kRasterizer_SkDescriptorTag, SkFlattenable::kSkRasterizer_Type))) // Initialize based on our settings. Subclasses can also force this. , fGenerateImageFromPath(fRec.fFrameWidth > 0 || fPathEffect != NULL || fRasterizer != NULL) , fNextContext(NULL) , fPreBlend(fMaskFilter ? SkMaskGamma::PreBlend() : SkScalerContext::GetMaskPreBlend(fRec)) , fPreBlendForFilter(fMaskFilter ? SkScalerContext::GetMaskPreBlend(fRec) : SkMaskGamma::PreBlend()) { #ifdef DUMP_REC desc->assertChecksum(); SkDebugf("SkScalarContext checksum %x count %d length %d\n", desc->getChecksum(), desc->getCount(), desc->getLength()); SkDebugf(" textsize %g prescale %g preskew %g post [%g %g %g %g]\n", rec->fTextSize, rec->fPreScaleX, rec->fPreSkewX, rec->fPost2x2[0][0], rec->fPost2x2[0][1], rec->fPost2x2[1][0], rec->fPost2x2[1][1]); SkDebugf(" frame %g miter %g hints %d framefill %d format %d join %d\n", rec->fFrameWidth, rec->fMiterLimit, rec->fHints, rec->fFrameAndFill, rec->fMaskFormat, rec->fStrokeJoin); SkDebugf(" pathEffect %x maskFilter %x\n", desc->findEntry(kPathEffect_SkDescriptorTag, NULL), desc->findEntry(kMaskFilter_SkDescriptorTag, NULL)); #endif #ifdef SK_BUILD_FOR_ANDROID uint32_t len; const void* data = desc->findEntry(kAndroidOpts_SkDescriptorTag, &len); if (data) { SkOrderedReadBuffer buffer(data, len); fPaintOptionsAndroid.unflatten(buffer); SkASSERT(buffer.offset() == buffer.size()); } #endif }
SkScalerContext::SkScalerContext(const SkDescriptor* desc) : fPathEffect(NULL), fMaskFilter(NULL) { static bool gHaveGammaTables; if (!gHaveGammaTables) { const uint8_t* tables[2]; SkFontHost::GetGammaTables(tables); gBlackGammaTable = tables[0]; gWhiteGammaTable = tables[1]; gHaveGammaTables = true; } fBaseGlyphCount = 0; fNextContext = NULL; const Rec* rec = (const Rec*)desc->findEntry(kRec_SkDescriptorTag, NULL); SkASSERT(rec); fRec = *rec; #ifdef DUMP_REC desc->assertChecksum(); SkDebugf("SkScalarContext checksum %x count %d length %d\n", desc->getChecksum(), desc->getCount(), desc->getLength()); SkDebugf(" textsize %g prescale %g preskew %g post [%g %g %g %g]\n", rec->fTextSize, rec->fPreScaleX, rec->fPreSkewX, rec->fPost2x2[0][0], rec->fPost2x2[0][1], rec->fPost2x2[1][0], rec->fPost2x2[1][1]); SkDebugf(" frame %g miter %g hints %d framefill %d format %d join %d\n", rec->fFrameWidth, rec->fMiterLimit, rec->fHints, rec->fFrameAndFill, rec->fMaskFormat, rec->fStrokeJoin); SkDebugf(" pathEffect %x maskFilter %x\n", desc->findEntry(kPathEffect_SkDescriptorTag, NULL), desc->findEntry(kMaskFilter_SkDescriptorTag, NULL)); #endif fPathEffect = (SkPathEffect*)load_flattenable(desc, kPathEffect_SkDescriptorTag); fMaskFilter = (SkMaskFilter*)load_flattenable(desc, kMaskFilter_SkDescriptorTag); fRasterizer = (SkRasterizer*)load_flattenable(desc, kRasterizer_SkDescriptorTag); }