blob: f093dba8a57532c5823731e6463c986f2214ba59 [file] [log] [blame]
george@mozilla.comc59b5da2012-08-23 00:39:08 +00001/*
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"
reed@google.com0da48612013-03-19 16:06:52 +000014#include "SkTypeface.h"
15
george@mozilla.comc59b5da2012-08-23 00:39:08 +000016#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
george@mozilla.comc59b5da2012-08-23 00:39:08 +000029class SkScalerContext_FreeType_Base : public SkScalerContext {
reed@google.com0da48612013-03-19 16:06:52 +000030protected:
george@mozilla.comc59b5da2012-08-23 00:39:08 +000031 // 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;
skia.committer@gmail.com01c34ee2013-03-20 07:01:02 +000034
reed@google.com0da48612013-03-19 16:06:52 +000035 SkScalerContext_FreeType_Base(SkTypeface* typeface, const SkDescriptor *desc)
36 : INHERITED(typeface, desc)
george@mozilla.comc59b5da2012-08-23 00:39:08 +000037 {}
skia.committer@gmail.com01c34ee2013-03-20 07:01:02 +000038
bungeman@google.coma76de722012-10-26 19:35:54 +000039 void generateGlyphImage(FT_Face face, const SkGlyph& glyph);
sugoi@google.com66a58ac2013-03-05 20:40:52 +000040 void generateGlyphPath(FT_Face face, SkPath* path);
reed@google.com0da48612013-03-19 16:06:52 +000041
42private:
43 typedef SkScalerContext INHERITED;
44};
45
46class SkTypeface_FreeType : public SkTypeface {
bungeman3a21d612014-07-11 08:52:26 -070047public:
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
reed@google.com0da48612013-03-19 16:06:52 +000054protected:
bungeman@google.comfe747652013-03-25 19:36:11 +000055 SkTypeface_FreeType(Style style, SkFontID uniqueID, bool isFixedPitch)
reed@google.comb4162b12013-07-02 16:32:29 +000056 : INHERITED(style, uniqueID, isFixedPitch)
57 , fGlyphCount(-1)
58 {}
reed@google.com0da48612013-03-19 16:06:52 +000059
60 virtual SkScalerContext* onCreateScalerContext(
61 const SkDescriptor*) const SK_OVERRIDE;
62 virtual void onFilterRec(SkScalerContextRec*) const SK_OVERRIDE;
reed@google.com2689f612013-03-20 20:01:47 +000063 virtual SkAdvancedTypefaceMetrics* onGetAdvancedTypefaceMetrics(
64 SkAdvancedTypefaceMetrics::PerGlyphInfo,
65 const uint32_t*, uint32_t) const SK_OVERRIDE;
reed@google.com38c37dd2013-03-21 15:36:26 +000066 virtual int onGetUPEM() const SK_OVERRIDE;
reed@google.com35fe7372013-10-30 15:07:03 +000067 virtual bool onGetKerningPairAdjustments(const uint16_t glyphs[], int count,
68 int32_t adjustments[]) const SK_OVERRIDE;
reed@google.comb4162b12013-07-02 16:32:29 +000069 virtual int onCharsToGlyphs(const void* chars, Encoding, uint16_t glyphs[],
70 int glyphCount) const SK_OVERRIDE;
71 virtual int onCountGlyphs() const SK_OVERRIDE;
72
bungeman@google.com839702b2013-08-07 17:09:22 +000073 virtual LocalizedStrings* onCreateFamilyNameIterator() const SK_OVERRIDE;
bungeman@google.coma9802692013-08-07 02:45:25 +000074
bungeman@google.comddc218e2013-08-01 22:29:43 +000075 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
reed@google.com0da48612013-03-19 16:06:52 +000079private:
reed@google.comb4162b12013-07-02 16:32:29 +000080 mutable int fGlyphCount;
81
reed@google.com0da48612013-03-19 16:06:52 +000082 typedef SkTypeface INHERITED;
george@mozilla.comc59b5da2012-08-23 00:39:08 +000083};
84
85#endif // SKFONTHOST_FREETYPE_COMMON_H_