blob: 226f55d45741bdd92663d2a7833c1a6e1ddba2c2 [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"
bungeman14df8332014-10-28 15:07:23 -070015#include "SkTypes.h"
reed@google.com0da48612013-03-19 16:06:52 +000016
george@mozilla.comc59b5da2012-08-23 00:39:08 +000017#include <ft2build.h>
18#include FT_FREETYPE_H
19
20#ifdef SK_DEBUG
21 #define SkASSERT_CONTINUE(pred) \
22 do { \
23 if (!(pred)) \
24 SkDebugf("file %s:%d: assert failed '" #pred "'\n", __FILE__, __LINE__); \
25 } while (false)
26#else
27 #define SkASSERT_CONTINUE(pred)
28#endif
29
george@mozilla.comc59b5da2012-08-23 00:39:08 +000030class SkScalerContext_FreeType_Base : public SkScalerContext {
reed@google.com0da48612013-03-19 16:06:52 +000031protected:
george@mozilla.comc59b5da2012-08-23 00:39:08 +000032 // 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;
skia.committer@gmail.com01c34ee2013-03-20 07:01:02 +000035
reed@google.com0da48612013-03-19 16:06:52 +000036 SkScalerContext_FreeType_Base(SkTypeface* typeface, const SkDescriptor *desc)
37 : INHERITED(typeface, desc)
george@mozilla.comc59b5da2012-08-23 00:39:08 +000038 {}
skia.committer@gmail.com01c34ee2013-03-20 07:01:02 +000039
bungeman@google.coma76de722012-10-26 19:35:54 +000040 void generateGlyphImage(FT_Face face, const SkGlyph& glyph);
sugoi@google.com66a58ac2013-03-05 20:40:52 +000041 void generateGlyphPath(FT_Face face, SkPath* path);
reed@google.com0da48612013-03-19 16:06:52 +000042
43private:
44 typedef SkScalerContext INHERITED;
45};
46
47class SkTypeface_FreeType : public SkTypeface {
bungeman3a21d612014-07-11 08:52:26 -070048public:
49 /** For SkFontMgrs to make use of our ability to extract
50 * name and style from a stream, using FreeType's API.
51 */
bungeman14df8332014-10-28 15:07:23 -070052 class Scanner : ::SkNoncopyable {
53 public:
54 Scanner();
55 ~Scanner();
56 bool recognizedFont(SkStream* stream, int* numFonts) const;
57 bool scanFont(SkStream* stream, int ttcIndex,
58 SkString* name, SkFontStyle* style, bool* isFixedPitch) const;
59 private:
60 FT_Face openFace(SkStream* stream, int ttcIndex, FT_Stream ftStream) const;
61 FT_Library fLibrary;
62 mutable SkMutex fLibraryMutex;
63 };
bungeman3a21d612014-07-11 08:52:26 -070064
reed@google.com0da48612013-03-19 16:06:52 +000065protected:
bungemana4c4a2d2014-10-20 13:33:19 -070066 SkTypeface_FreeType(const SkFontStyle& style, SkFontID uniqueID, bool isFixedPitch)
reed@google.comb4162b12013-07-02 16:32:29 +000067 : INHERITED(style, uniqueID, isFixedPitch)
68 , fGlyphCount(-1)
69 {}
reed@google.com0da48612013-03-19 16:06:52 +000070
71 virtual SkScalerContext* onCreateScalerContext(
72 const SkDescriptor*) const SK_OVERRIDE;
73 virtual void onFilterRec(SkScalerContextRec*) const SK_OVERRIDE;
reed@google.com2689f612013-03-20 20:01:47 +000074 virtual SkAdvancedTypefaceMetrics* onGetAdvancedTypefaceMetrics(
75 SkAdvancedTypefaceMetrics::PerGlyphInfo,
76 const uint32_t*, uint32_t) const SK_OVERRIDE;
reed@google.com38c37dd2013-03-21 15:36:26 +000077 virtual int onGetUPEM() const SK_OVERRIDE;
reed@google.com35fe7372013-10-30 15:07:03 +000078 virtual bool onGetKerningPairAdjustments(const uint16_t glyphs[], int count,
79 int32_t adjustments[]) const SK_OVERRIDE;
reed@google.comb4162b12013-07-02 16:32:29 +000080 virtual int onCharsToGlyphs(const void* chars, Encoding, uint16_t glyphs[],
81 int glyphCount) const SK_OVERRIDE;
82 virtual int onCountGlyphs() const SK_OVERRIDE;
83
bungeman@google.com839702b2013-08-07 17:09:22 +000084 virtual LocalizedStrings* onCreateFamilyNameIterator() const SK_OVERRIDE;
bungeman@google.coma9802692013-08-07 02:45:25 +000085
bungeman@google.comddc218e2013-08-01 22:29:43 +000086 virtual int onGetTableTags(SkFontTableTag tags[]) const SK_OVERRIDE;
87 virtual size_t onGetTableData(SkFontTableTag, size_t offset,
88 size_t length, void* data) const SK_OVERRIDE;
89
reed@google.com0da48612013-03-19 16:06:52 +000090private:
reed@google.comb4162b12013-07-02 16:32:29 +000091 mutable int fGlyphCount;
92
reed@google.com0da48612013-03-19 16:06:52 +000093 typedef SkTypeface INHERITED;
george@mozilla.comc59b5da2012-08-23 00:39:08 +000094};
95
96#endif // SKFONTHOST_FREETYPE_COMMON_H_