SkFontHost_FreeType_common.h revision e27eefc4844477cee5d32f51ab45ff62020cdb36
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* 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
73private:
74    mutable int fGlyphCount;
75
76    typedef SkTypeface INHERITED;
77};
78
79#endif // SKFONTHOST_FREETYPE_COMMON_H_
80