OLD | NEW |
| (Empty) |
1 /* | |
2 * Copyright (c) 2006, 2007, 2008, Google Inc. All rights reserved. | |
3 * | |
4 * Redistribution and use in source and binary forms, with or without | |
5 * modification, are permitted provided that the following conditions are | |
6 * met: | |
7 * | |
8 * * Redistributions of source code must retain the above copyright | |
9 * notice, this list of conditions and the following disclaimer. | |
10 * * Redistributions in binary form must reproduce the above | |
11 * copyright notice, this list of conditions and the following disclaimer | |
12 * in the documentation and/or other materials provided with the | |
13 * distribution. | |
14 * * Neither the name of Google Inc. nor the names of its | |
15 * contributors may be used to endorse or promote products derived from | |
16 * this software without specific prior written permission. | |
17 * | |
18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | |
19 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | |
20 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | |
21 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | |
22 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |
23 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | |
24 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | |
25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | |
26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | |
27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | |
28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |
29 */ | |
30 | |
31 #ifndef FontPlatformDataHarfBuzz_h | |
32 #define FontPlatformDataHarfBuzz_h | |
33 | |
34 #include "SkPaint.h" | |
35 #include "platform/SharedBuffer.h" | |
36 #include "core/platform/graphics/opentype/OpenTypeVerticalData.h" | |
37 #include "platform/fonts/FontDescription.h" | |
38 #include "platform/fonts/FontOrientation.h" | |
39 #include "platform/fonts/FontRenderStyle.h" | |
40 #include "wtf/Forward.h" | |
41 #include "wtf/HashTableDeletedValueType.h" | |
42 #include "wtf/RefPtr.h" | |
43 #include "wtf/text/CString.h" | |
44 #include "wtf/text/StringImpl.h" | |
45 | |
46 class SkTypeface; | |
47 typedef uint32_t SkFontID; | |
48 | |
49 namespace WebCore { | |
50 | |
51 class GraphicsContext; | |
52 class HarfBuzzFace; | |
53 | |
54 // ----------------------------------------------------------------------------- | |
55 // FontPlatformData is the handle which WebKit has on a specific face. A face | |
56 // is the tuple of (font, size, ...etc). Here we are just wrapping a Skia | |
57 // SkTypeface pointer and dealing with the reference counting etc. | |
58 // ----------------------------------------------------------------------------- | |
59 class FontPlatformData { | |
60 public: | |
61 // Used for deleted values in the font cache's hash tables. The hash table | |
62 // will create us with this structure, and it will compare other values | |
63 // to this "Deleted" one. It expects the Deleted one to be differentiable | |
64 // from the 0 one (created with the empty constructor), so we can't just | |
65 // set everything to 0. | |
66 FontPlatformData(WTF::HashTableDeletedValueType); | |
67 FontPlatformData(); | |
68 FontPlatformData(float textSize, bool fakeBold, bool fakeItalic); | |
69 FontPlatformData(const FontPlatformData&); | |
70 FontPlatformData(PassRefPtr<SkTypeface>, const char* name, float textSize, b
ool fakeBold, bool fakeItalic, FontOrientation = Horizontal, bool subpixelTextPo
sition = FontDescription::subpixelPositioning()); | |
71 FontPlatformData(const FontPlatformData& src, float textSize); | |
72 ~FontPlatformData(); | |
73 | |
74 String fontFamilyName() const; | |
75 | |
76 // ------------------------------------------------------------------------- | |
77 // Return true iff this font is monospaced (i.e. every glyph has an equal x | |
78 // advance) | |
79 // ------------------------------------------------------------------------- | |
80 bool isFixedPitch() const; | |
81 | |
82 // ------------------------------------------------------------------------- | |
83 // Setup a Skia painting context to use this font. | |
84 // ------------------------------------------------------------------------- | |
85 void setupPaint(SkPaint*, GraphicsContext* = 0) const; | |
86 | |
87 // ------------------------------------------------------------------------- | |
88 // Return Skia's unique id for this font. This encodes both the style and | |
89 // the font's file name so refers to a single face. | |
90 // ------------------------------------------------------------------------- | |
91 SkFontID uniqueID() const; | |
92 SkTypeface* typeface() const { return m_typeface.get(); } | |
93 | |
94 unsigned hash() const; | |
95 float size() const { return m_textSize; } | |
96 int emSizeInFontUnits() const; | |
97 | |
98 FontOrientation orientation() const { return m_orientation; } | |
99 void setOrientation(FontOrientation orientation) { m_orientation = orientati
on; } | |
100 void setFakeBold(bool fakeBold) { m_fakeBold = fakeBold; } | |
101 void setFakeItalic(bool fakeItalic) { m_fakeItalic = fakeItalic; } | |
102 bool operator==(const FontPlatformData&) const; | |
103 FontPlatformData& operator=(const FontPlatformData&); | |
104 bool isHashTableDeletedValue() const { return m_isHashTableDeletedValue; } | |
105 | |
106 #if ENABLE(OPENTYPE_VERTICAL) | |
107 PassRefPtr<OpenTypeVerticalData> verticalData() const; | |
108 PassRefPtr<SharedBuffer> openTypeTable(uint32_t table) const; | |
109 #endif | |
110 | |
111 #ifndef NDEBUG | |
112 String description() const; | |
113 #endif | |
114 | |
115 HarfBuzzFace* harfBuzzFace() const; | |
116 | |
117 // The returned styles are all actual styles without FontRenderStyle::NoPref
erence. | |
118 const FontRenderStyle& fontRenderStyle() const { return m_style; } | |
119 | |
120 // ------------------------------------------------------------------------- | |
121 // Global font preferences... | |
122 | |
123 static void setHinting(SkPaint::Hinting); | |
124 static void setAutoHint(bool); | |
125 static void setUseBitmaps(bool); | |
126 static void setAntiAlias(bool); | |
127 static void setSubpixelRendering(bool); | |
128 | |
129 private: | |
130 void getRenderStyleForStrike(const char*, int); | |
131 void querySystemForRenderStyle(bool useSkiaSubpixelPositioning); | |
132 | |
133 RefPtr<SkTypeface> m_typeface; | |
134 CString m_family; | |
135 float m_textSize; | |
136 mutable int m_emSizeInFontUnits; | |
137 bool m_fakeBold; | |
138 bool m_fakeItalic; | |
139 FontOrientation m_orientation; | |
140 FontRenderStyle m_style; | |
141 mutable RefPtr<HarfBuzzFace> m_harfBuzzFace; | |
142 bool m_isHashTableDeletedValue; | |
143 }; | |
144 | |
145 } // namespace WebCore | |
146 | |
147 #endif // ifdef FontPlatformDataHarfBuzz_h | |
OLD | NEW |