SkFontHost_FreeType_common.h revision f7af91bd79daf7e090bd6ae1d080ad7a4964e477
1/* 2 * Copyright 2006-2012 The Android Open Source Project 3 * Copyright 2012 Mozilla Foundation 4 * 5 * Use of this source code is governed by a BSD-style license that can be 6 * found in the LICENSE file. 7 */ 8 9#ifndef SKFONTHOST_FREETYPE_COMMON_H_ 10#define SKFONTHOST_FREETYPE_COMMON_H_ 11 12#include "SkGlyph.h" 13#include "SkScalerContext.h" 14#include "SkTypeface.h" 15 16#include <ft2build.h> 17#include FT_FREETYPE_H 18 19#ifdef SK_DEBUG 20 #define SkASSERT_CONTINUE(pred) \ 21 do { \ 22 if (!(pred)) \ 23 SkDebugf("file %s:%d: assert failed '" #pred "'\n", __FILE__, __LINE__); \ 24 } while (false) 25#else 26 #define SkASSERT_CONTINUE(pred) 27#endif 28 29 30class SkScalerContext_FreeType_Base : public SkScalerContext { 31protected: 32 // See http://freetype.sourceforge.net/freetype2/docs/reference/ft2-bitmap_handling.html#FT_Bitmap_Embolden 33 // This value was chosen by eyeballing the result in Firefox and trying to match it. 34 static const FT_Pos kBitmapEmboldenStrength = 1 << 6; 35 36 SkScalerContext_FreeType_Base(SkTypeface* typeface, const SkDescriptor *desc) 37 : INHERITED(typeface, desc) 38 {} 39 40 void generateGlyphImage(FT_Face face, const SkGlyph& glyph); 41 void generateGlyphPath(FT_Face face, SkPath* path); 42 void emboldenOutline(FT_Face face, FT_Outline* outline); 43 44private: 45 typedef SkScalerContext INHERITED; 46}; 47 48class SkTypeface_FreeType : public SkTypeface { 49protected: 50 SkTypeface_FreeType(Style style, SkFontID uniqueID, bool isFixedPitch) 51 : INHERITED(style, uniqueID, isFixedPitch) 52 , fGlyphCount(-1) 53 {} 54 55 virtual SkScalerContext* onCreateScalerContext( 56 const SkDescriptor*) const SK_OVERRIDE; 57 virtual void onFilterRec(SkScalerContextRec*) const SK_OVERRIDE; 58 virtual SkAdvancedTypefaceMetrics* onGetAdvancedTypefaceMetrics( 59 SkAdvancedTypefaceMetrics::PerGlyphInfo, 60 const uint32_t*, uint32_t) const SK_OVERRIDE; 61 virtual int onGetUPEM() const SK_OVERRIDE; 62 63 virtual int onCharsToGlyphs(const void* chars, Encoding, uint16_t glyphs[], 64 int glyphCount) const SK_OVERRIDE; 65 virtual int onCountGlyphs() const SK_OVERRIDE; 66 67 virtual LocalizedStrings* onGetFamilyNames() const SK_OVERRIDE; 68 69 virtual int onGetTableTags(SkFontTableTag tags[]) const SK_OVERRIDE; 70 virtual size_t onGetTableData(SkFontTableTag, size_t offset, 71 size_t length, void* data) const SK_OVERRIDE; 72 73private: 74 mutable int fGlyphCount; 75 76 typedef SkTypeface INHERITED; 77}; 78 79#endif // SKFONTHOST_FREETYPE_COMMON_H_ 80