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 class SkScalerContext_FreeType_Base : public SkScalerContext { 30 protected: 31 // See http://freetype.sourceforge.net/freetype2/docs/reference/ft2-bitmap_handling.html#FT_Bitmap_Embolden 32 // This value was chosen by eyeballing the result in Firefox and trying to match it. 33 static const FT_Pos kBitmapEmboldenStrength = 1 << 6; 34 35 SkScalerContext_FreeType_Base(SkTypeface* typeface, const SkDescriptor *desc) 36 : INHERITED(typeface, desc) 37 {} 38 39 void generateGlyphImage(FT_Face face, const SkGlyph& glyph); 40 void generateGlyphPath(FT_Face face, SkPath* path); 41 42 private: 43 typedef SkScalerContext INHERITED; 44 }; 45 46 class SkTypeface_FreeType : public SkTypeface { 47 public: 48 /** For SkFontMgrs to make use of our ability to extract 49 * name and style from a stream, using FreeType's API. 50 */ 51 static bool ScanFont(SkStream* stream, int ttcIndex, 52 SkString* name, SkTypeface::Style* style, bool* isFixedPitch); 53 54 protected: 55 SkTypeface_FreeType(Style style, SkFontID uniqueID, bool isFixedPitch) 56 : INHERITED(style, uniqueID, isFixedPitch) 57 , fGlyphCount(-1) 58 {} 59 60 virtual SkScalerContext* onCreateScalerContext( 61 const SkDescriptor*) const SK_OVERRIDE; 62 virtual void onFilterRec(SkScalerContextRec*) const SK_OVERRIDE; 63 virtual SkAdvancedTypefaceMetrics* onGetAdvancedTypefaceMetrics( 64 SkAdvancedTypefaceMetrics::PerGlyphInfo, 65 const uint32_t*, uint32_t) const SK_OVERRIDE; 66 virtual int onGetUPEM() const SK_OVERRIDE; 67 virtual bool onGetKerningPairAdjustments(const uint16_t glyphs[], int count, 68 int32_t adjustments[]) const SK_OVERRIDE; 69 virtual int onCharsToGlyphs(const void* chars, Encoding, uint16_t glyphs[], 70 int glyphCount) const SK_OVERRIDE; 71 virtual int onCountGlyphs() const SK_OVERRIDE; 72 73 virtual LocalizedStrings* onCreateFamilyNameIterator() const SK_OVERRIDE; 74 75 virtual int onGetTableTags(SkFontTableTag tags[]) const SK_OVERRIDE; 76 virtual size_t onGetTableData(SkFontTableTag, size_t offset, 77 size_t length, void* data) const SK_OVERRIDE; 78 79 private: 80 mutable int fGlyphCount; 81 82 typedef SkTypeface INHERITED; 83 }; 84 85 #endif // SKFONTHOST_FREETYPE_COMMON_H_ 86