OLD | NEW |
1 /* | 1 /* |
2 * This file is part of the internal font implementation. | 2 * This file is part of the internal font implementation. |
3 * | 3 * |
4 * Copyright (C) 2006, 2008, 2010 Apple Inc. All rights reserved. | 4 * Copyright (C) 2006, 2008, 2010 Apple Inc. All rights reserved. |
5 * Copyright (C) 2007-2008 Torch Mobile, Inc. | 5 * Copyright (C) 2007-2008 Torch Mobile, Inc. |
6 * | 6 * |
7 * This library is free software; you can redistribute it and/or | 7 * This library is free software; you can redistribute it and/or |
8 * modify it under the terms of the GNU Library General Public | 8 * modify it under the terms of the GNU Library General Public |
9 * License as published by the Free Software Foundation; either | 9 * License as published by the Free Software Foundation; either |
10 * version 2 of the License, or (at your option) any later version. | 10 * version 2 of the License, or (at your option) any later version. |
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
150 return m_customFontData && m_customFontData->shouldSkipDrawing(); | 150 return m_customFontData && m_customFontData->shouldSkipDrawing(); |
151 } | 151 } |
152 | 152 |
153 const GlyphData& missingGlyphData() const { return m_missingGlyphData; } | 153 const GlyphData& missingGlyphData() const { return m_missingGlyphData; } |
154 void setMissingGlyphData(const GlyphData& glyphData) { | 154 void setMissingGlyphData(const GlyphData& glyphData) { |
155 m_missingGlyphData = glyphData; | 155 m_missingGlyphData = glyphData; |
156 } | 156 } |
157 | 157 |
158 CustomFontData* customFontData() const { return m_customFontData.get(); } | 158 CustomFontData* customFontData() const { return m_customFontData.get(); } |
159 | 159 |
| 160 unsigned VisualOverflowInflationForAscent() const { |
| 161 return visual_overflow_inflation_for_ascent_; |
| 162 } |
| 163 unsigned VisualOverflowInflationForDescent() const { |
| 164 return visual_overflow_inflation_for_descent_; |
| 165 } |
| 166 |
160 protected: | 167 protected: |
161 SimpleFontData(const FontPlatformData&, | 168 SimpleFontData(const FontPlatformData&, |
162 PassRefPtr<CustomFontData> customData, | 169 PassRefPtr<CustomFontData> customData, |
163 bool isTextOrientationFallback = false, | 170 bool isTextOrientationFallback = false, |
164 bool subpixelAscentDescent = false); | 171 bool subpixelAscentDescent = false); |
165 | 172 |
166 SimpleFontData(PassRefPtr<CustomFontData> customData, | 173 SimpleFontData(PassRefPtr<CustomFontData> customData, |
167 float fontSize, | 174 float fontSize, |
168 bool syntheticBold, | 175 bool syntheticBold, |
169 bool syntheticItalic); | 176 bool syntheticItalic); |
170 | 177 |
171 private: | 178 private: |
172 void platformInit(bool subpixelAscentDescent); | 179 void platformInit(bool subpixelAscentDescent); |
173 void platformGlyphInit(); | 180 void platformGlyphInit(); |
174 | 181 |
175 PassRefPtr<SimpleFontData> createScaledFontData(const FontDescription&, | 182 PassRefPtr<SimpleFontData> createScaledFontData(const FontDescription&, |
176 float scaleFactor) const; | 183 float scaleFactor) const; |
177 | 184 |
178 FontMetrics m_fontMetrics; | 185 FontMetrics m_fontMetrics; |
179 float m_maxCharWidth; | 186 float m_maxCharWidth; |
180 float m_avgCharWidth; | 187 float m_avgCharWidth; |
181 | 188 |
182 FontPlatformData m_platformData; | 189 FontPlatformData m_platformData; |
183 SkPaint m_paint; | 190 SkPaint m_paint; |
184 | 191 |
185 bool m_isTextOrientationFallback; | |
186 RefPtr<OpenTypeVerticalData> m_verticalData; | 192 RefPtr<OpenTypeVerticalData> m_verticalData; |
187 bool m_hasVerticalGlyphs; | |
188 | 193 |
189 Glyph m_spaceGlyph; | 194 Glyph m_spaceGlyph; |
190 float m_spaceWidth; | 195 float m_spaceWidth; |
191 Glyph m_zeroGlyph; | 196 Glyph m_zeroGlyph; |
192 | 197 |
193 GlyphData m_missingGlyphData; | 198 GlyphData m_missingGlyphData; |
194 | 199 |
195 struct DerivedFontData { | 200 struct DerivedFontData { |
196 USING_FAST_MALLOC(DerivedFontData); | 201 USING_FAST_MALLOC(DerivedFontData); |
197 WTF_MAKE_NONCOPYABLE(DerivedFontData); | 202 WTF_MAKE_NONCOPYABLE(DerivedFontData); |
198 | 203 |
199 public: | 204 public: |
200 static std::unique_ptr<DerivedFontData> create(); | 205 static std::unique_ptr<DerivedFontData> create(); |
201 | 206 |
202 RefPtr<SimpleFontData> smallCaps; | 207 RefPtr<SimpleFontData> smallCaps; |
203 RefPtr<SimpleFontData> emphasisMark; | 208 RefPtr<SimpleFontData> emphasisMark; |
204 RefPtr<SimpleFontData> verticalRightOrientation; | 209 RefPtr<SimpleFontData> verticalRightOrientation; |
205 RefPtr<SimpleFontData> uprightOrientation; | 210 RefPtr<SimpleFontData> uprightOrientation; |
206 | 211 |
207 private: | 212 private: |
208 DerivedFontData() {} | 213 DerivedFontData() {} |
209 }; | 214 }; |
210 | 215 |
211 mutable std::unique_ptr<DerivedFontData> m_derivedFontData; | 216 mutable std::unique_ptr<DerivedFontData> m_derivedFontData; |
212 | 217 |
213 RefPtr<CustomFontData> m_customFontData; | 218 RefPtr<CustomFontData> m_customFontData; |
214 | 219 |
| 220 unsigned m_isTextOrientationFallback : 1; |
| 221 unsigned m_hasVerticalGlyphs : 1; |
| 222 |
| 223 // These are set to non-zero when ascent or descent is rounded or shifted |
| 224 // to be smaller than the actual ascent or descent. When calculating visual |
| 225 // overflows, we should add the inflations. |
| 226 unsigned visual_overflow_inflation_for_ascent_ : 2; |
| 227 unsigned visual_overflow_inflation_for_descent_ : 2; |
| 228 |
215 // See discussion on crbug.com/631032 and Skiaissue | 229 // See discussion on crbug.com/631032 and Skiaissue |
216 // https://bugs.chromium.org/p/skia/issues/detail?id=5328 : | 230 // https://bugs.chromium.org/p/skia/issues/detail?id=5328 : |
217 // On Mac we're still using path based glyph metrics, and they seem to be | 231 // On Mac we're still using path based glyph metrics, and they seem to be |
218 // too slow to be able to remove the caching layer we have here. | 232 // too slow to be able to remove the caching layer we have here. |
219 #if OS(MACOSX) | 233 #if OS(MACOSX) |
220 mutable std::unique_ptr<GlyphMetricsMap<FloatRect>> m_glyphToBoundsMap; | 234 mutable std::unique_ptr<GlyphMetricsMap<FloatRect>> m_glyphToBoundsMap; |
221 mutable GlyphMetricsMap<float> m_glyphToWidthMap; | 235 mutable GlyphMetricsMap<float> m_glyphToWidthMap; |
222 #endif | 236 #endif |
223 }; | 237 }; |
224 | 238 |
(...skipping 29 matching lines...) Expand all Loading... |
254 | 268 |
255 m_glyphToWidthMap.setMetricsForGlyph(glyph, width); | 269 m_glyphToWidthMap.setMetricsForGlyph(glyph, width); |
256 return width; | 270 return width; |
257 #endif | 271 #endif |
258 } | 272 } |
259 | 273 |
260 DEFINE_FONT_DATA_TYPE_CASTS(SimpleFontData, false); | 274 DEFINE_FONT_DATA_TYPE_CASTS(SimpleFontData, false); |
261 | 275 |
262 } // namespace blink | 276 } // namespace blink |
263 #endif // SimpleFontData_h | 277 #endif // SimpleFontData_h |
OLD | NEW |