Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / third_party / skia / src / ports / SkFontHost_FreeType_common.h
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_