| OLD | NEW |
| 1 | 1 |
| 2 /* | 2 /* |
| 3 * Copyright 2006 The Android Open Source Project | 3 * Copyright 2006 The Android Open Source Project |
| 4 * | 4 * |
| 5 * Use of this source code is governed by a BSD-style license that can be | 5 * Use of this source code is governed by a BSD-style license that can be |
| 6 * found in the LICENSE file. | 6 * found in the LICENSE file. |
| 7 */ | 7 */ |
| 8 | 8 |
| 9 | 9 |
| 10 #ifndef SkTypeface_DEFINED | 10 #ifndef SkTypeface_DEFINED |
| 11 #define SkTypeface_DEFINED | 11 #define SkTypeface_DEFINED |
| 12 | 12 |
| 13 #include "SkAdvancedTypefaceMetrics.h" | |
| 14 #include "SkFontStyle.h" | 13 #include "SkFontStyle.h" |
| 15 #include "SkLazyPtr.h" | 14 #include "SkLazyPtr.h" |
| 15 #include "SkRect.h" |
| 16 #include "SkString.h" |
| 16 #include "SkWeakRefCnt.h" | 17 #include "SkWeakRefCnt.h" |
| 17 | 18 |
| 18 class SkDescriptor; | 19 class SkDescriptor; |
| 19 class SkFontDescriptor; | 20 class SkFontDescriptor; |
| 20 class SkScalerContext; | 21 class SkScalerContext; |
| 21 struct SkScalerContextRec; | 22 struct SkScalerContextRec; |
| 22 class SkStream; | 23 class SkStream; |
| 23 class SkStreamAsset; | 24 class SkStreamAsset; |
| 24 class SkAdvancedTypefaceMetrics; | 25 class SkAdvancedTypefaceMetrics; |
| 25 class SkWStream; | 26 class SkWStream; |
| (...skipping 274 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 300 // PRIVATE / EXPERIMENTAL -- do not call | 301 // PRIVATE / EXPERIMENTAL -- do not call |
| 301 void filterRec(SkScalerContextRec* rec) const { | 302 void filterRec(SkScalerContextRec* rec) const { |
| 302 this->onFilterRec(rec); | 303 this->onFilterRec(rec); |
| 303 } | 304 } |
| 304 // PRIVATE / EXPERIMENTAL -- do not call | 305 // PRIVATE / EXPERIMENTAL -- do not call |
| 305 void getFontDescriptor(SkFontDescriptor* desc, bool* isLocal) const { | 306 void getFontDescriptor(SkFontDescriptor* desc, bool* isLocal) const { |
| 306 this->onGetFontDescriptor(desc, isLocal); | 307 this->onGetFontDescriptor(desc, isLocal); |
| 307 } | 308 } |
| 308 | 309 |
| 309 protected: | 310 protected: |
| 311 // The type of advance data wanted. |
| 312 enum PerGlyphInfo { |
| 313 kNo_PerGlyphInfo = 0x0, // Don't populate any per glyph info. |
| 314 kHAdvance_PerGlyphInfo = 0x1, // Populate horizontal advance data. |
| 315 kVAdvance_PerGlyphInfo = 0x2, // Populate vertical advance data. |
| 316 kGlyphNames_PerGlyphInfo = 0x4, // Populate glyph names (Type 1 only). |
| 317 kToUnicode_PerGlyphInfo = 0x8 // Populate ToUnicode table, ignored |
| 318 // for Type 1 fonts |
| 319 }; |
| 320 |
| 310 /** uniqueID must be unique and non-zero | 321 /** uniqueID must be unique and non-zero |
| 311 */ | 322 */ |
| 312 SkTypeface(const SkFontStyle& style, SkFontID uniqueID, bool isFixedPitch =
false); | 323 SkTypeface(const SkFontStyle& style, SkFontID uniqueID, bool isFixedPitch =
false); |
| 313 virtual ~SkTypeface(); | 324 virtual ~SkTypeface(); |
| 314 | 325 |
| 315 /** Sets the fixedPitch bit. If used, must be called in the constructor. */ | 326 /** Sets the fixedPitch bit. If used, must be called in the constructor. */ |
| 316 void setIsFixedPitch(bool isFixedPitch) { fIsFixedPitch = isFixedPitch; } | 327 void setIsFixedPitch(bool isFixedPitch) { fIsFixedPitch = isFixedPitch; } |
| 317 | 328 |
| 318 friend class SkScalerContext; | 329 friend class SkScalerContext; |
| 319 static SkTypeface* GetDefaultTypeface(Style style = SkTypeface::kNormal); | 330 static SkTypeface* GetDefaultTypeface(Style style = SkTypeface::kNormal); |
| 320 | 331 |
| 321 virtual SkScalerContext* onCreateScalerContext(const SkDescriptor*) const =
0; | 332 virtual SkScalerContext* onCreateScalerContext(const SkDescriptor*) const =
0; |
| 322 virtual void onFilterRec(SkScalerContextRec*) const = 0; | 333 virtual void onFilterRec(SkScalerContextRec*) const = 0; |
| 323 virtual SkAdvancedTypefaceMetrics* onGetAdvancedTypefaceMetrics( | 334 virtual SkAdvancedTypefaceMetrics* onGetAdvancedTypefaceMetrics( |
| 324 SkAdvancedTypefaceMetrics::PerGlyphInfo perGlyphInfo, | 335 PerGlyphInfo, |
| 325 const uint32_t* glyphIDs, | 336 const uint32_t* glyphIDs, |
| 326 uint32_t glyphIDsCount) const = 0; | 337 uint32_t glyphIDsCount) const = 0; |
| 327 | 338 |
| 328 virtual SkStreamAsset* onOpenStream(int* ttcIndex) const = 0; | 339 virtual SkStreamAsset* onOpenStream(int* ttcIndex) const = 0; |
| 329 virtual void onGetFontDescriptor(SkFontDescriptor*, bool* isLocal) const = 0
; | 340 virtual void onGetFontDescriptor(SkFontDescriptor*, bool* isLocal) const = 0
; |
| 330 | 341 |
| 331 virtual int onCharsToGlyphs(const void* chars, Encoding, uint16_t glyphs[], | 342 virtual int onCharsToGlyphs(const void* chars, Encoding, uint16_t glyphs[], |
| 332 int glyphCount) const = 0; | 343 int glyphCount) const = 0; |
| 333 virtual int onCountGlyphs() const = 0; | 344 virtual int onCountGlyphs() const = 0; |
| 334 | 345 |
| (...skipping 26 matching lines...) Expand all Loading... |
| 361 @param perGlyphInfo Indicate what glyph specific information (advances, | 372 @param perGlyphInfo Indicate what glyph specific information (advances, |
| 362 names, etc.) should be populated. | 373 names, etc.) should be populated. |
| 363 @param glyphIDs For per-glyph info, specify subset of the font by | 374 @param glyphIDs For per-glyph info, specify subset of the font by |
| 364 giving glyph ids. Each integer represents a glyph | 375 giving glyph ids. Each integer represents a glyph |
| 365 id. Passing NULL means all glyphs in the font. | 376 id. Passing NULL means all glyphs in the font. |
| 366 @param glyphIDsCount Number of elements in subsetGlyphIds. Ignored if | 377 @param glyphIDsCount Number of elements in subsetGlyphIds. Ignored if |
| 367 glyphIDs is NULL. | 378 glyphIDs is NULL. |
| 368 @return The returned object has already been referenced. | 379 @return The returned object has already been referenced. |
| 369 */ | 380 */ |
| 370 SkAdvancedTypefaceMetrics* getAdvancedTypefaceMetrics( | 381 SkAdvancedTypefaceMetrics* getAdvancedTypefaceMetrics( |
| 371 SkAdvancedTypefaceMetrics::PerGlyphInfo perGlyphInfo, | 382 PerGlyphInfo, |
| 372 const uint32_t* glyphIDs = NULL, | 383 const uint32_t* glyphIDs = NULL, |
| 373 uint32_t glyphIDsCount = 0) const; | 384 uint32_t glyphIDsCount = 0) const; |
| 374 | 385 |
| 375 private: | 386 private: |
| 376 static SkTypeface* CreateDefault(int style); // SkLazyPtr requires an int,
not a Style. | 387 static SkTypeface* CreateDefault(int style); // SkLazyPtr requires an int,
not a Style. |
| 377 static void DeleteDefault(SkTypeface*); | 388 static void DeleteDefault(SkTypeface*); |
| 378 | 389 |
| 379 struct BoundsComputer; | 390 struct BoundsComputer; |
| 380 // friend struct BoundsComputer; | 391 // friend struct BoundsComputer; |
| 381 | 392 |
| 382 SkLazyPtr<SkRect> fLazyBounds; | 393 SkLazyPtr<SkRect> fLazyBounds; |
| 383 SkFontID fUniqueID; | 394 SkFontID fUniqueID; |
| 384 SkFontStyle fStyle; | 395 SkFontStyle fStyle; |
| 385 bool fIsFixedPitch; | 396 bool fIsFixedPitch; |
| 386 | 397 |
| 387 friend class SkPaint; | 398 friend class SkPaint; |
| 388 friend class SkGlyphCache; // GetDefaultTypeface | 399 friend class SkGlyphCache; // GetDefaultTypeface |
| 389 | 400 |
| 390 typedef SkWeakRefCnt INHERITED; | 401 typedef SkWeakRefCnt INHERITED; |
| 391 }; | 402 }; |
| 392 | 403 |
| 393 #endif | 404 #endif |
| OLD | NEW |