Home | History | Annotate | Download | only in ports
      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 
     30 class SkScalerContext_FreeType_Base : public SkScalerContext {
     31 protected:
     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 
     44 private:
     45     typedef SkScalerContext INHERITED;
     46 };
     47 
     48 class SkTypeface_FreeType : public SkTypeface {
     49 protected:
     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* onCreateFamilyNameIterator() 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 
     73 private:
     74     mutable int fGlyphCount;
     75 
     76     typedef SkTypeface INHERITED;
     77 };
     78 
     79 #endif // SKFONTHOST_FREETYPE_COMMON_H_
     80