8 #ifndef SkTypeface_DEFINED
9 #define SkTypeface_DEFINED
11 #include "../private/SkBitmaskEnum.h"
12 #include "../private/SkOnce.h"
13 #include "../private/SkWeakRefCnt.h"
14 #include "SkFontStyle.h"
20 class SkFontDescriptor;
21 class SkScalerContext;
22 struct SkScalerContextRec;
23 struct SkScalerContextEffects;
26 class SkAdvancedTypefaceMetrics;
29 typedef uint32_t SkFontID;
31 typedef uint32_t SkFontTableTag;
64 return static_cast<Style>(
65 (fStyle.weight() >= SkFontStyle::kSemiBold_Weight ? kBold : kNormal) |
66 (fStyle.slant() != SkFontStyle::kUpright_Slant ? kItalic : kNormal));
70 bool isBold()
const {
return fStyle.weight() >= SkFontStyle::kSemiBold_Weight; }
73 bool isItalic()
const {
return fStyle.slant() != SkFontStyle::kUpright_Slant; }
83 SkFontID
uniqueID()
const {
return fUniqueID; }
89 static SkFontID UniqueID(
const SkTypeface* face);
98 #ifdef SK_SUPPORT_LEGACY_TYPEFACE_PTR
99 static SkTypeface* RefDefault(Style style = SkTypeface::kNormal) {
100 return MakeDefault(style).release();
115 #ifdef SK_SUPPORT_LEGACY_TYPEFACE_PTR
116 static SkTypeface* CreateFromName(
const char familyName[], Style style) {
117 return MakeFromName(familyName, SkFontStyle::FromOldStyle(style)).release();
135 #ifdef SK_SUPPORT_LEGACY_TYPEFACE_PTR
136 static SkTypeface* CreateFromFile(
const char path[],
int index = 0) {
137 return MakeFromFile(path, index).release();
146 #ifdef SK_SUPPORT_LEGACY_TYPEFACE_PTR
148 return MakeFromStream(stream, index).release();
192 int charsToGlyphs(
const void* chars, Encoding encoding,
SkGlyphID glyphs[],
193 int glyphCount)
const;
198 int countGlyphs()
const;
204 int countTables()
const;
211 int getTableTags(SkFontTableTag tags[])
const;
215 size_t getTableSize(SkFontTableTag)
const;
237 size_t getTableData(SkFontTableTag tag,
size_t offset,
size_t length,
244 int getUnitsPerEm()
const;
266 bool getKerningPairAdjustments(
const SkGlyphID glyphs[],
int count,
267 int32_t adjustments[])
const;
277 void unref() {
delete this; }
291 void getFamilyName(
SkString* name)
const;
306 SkFontData* createFontData()
const;
313 SkScalerContext* createScalerContext(
const SkScalerContextEffects&,
const SkDescriptor*,
314 bool allowFailure =
false)
const;
324 void filterRec(SkScalerContextRec* rec)
const {
325 this->onFilterRec(rec);
328 void getFontDescriptor(SkFontDescriptor* desc,
bool* isLocal)
const {
329 this->onGetFontDescriptor(desc, isLocal);
335 kNo_PerGlyphInfo = 0x0,
336 kGlyphNames_PerGlyphInfo = 0x1,
337 kToUnicode_PerGlyphInfo = 0x2
351 friend class SkScalerContext;
352 static SkTypeface* GetDefaultTypeface(Style style = SkTypeface::kNormal);
354 virtual SkScalerContext* onCreateScalerContext(
const SkScalerContextEffects&,
355 const SkDescriptor*)
const = 0;
356 virtual void onFilterRec(SkScalerContextRec*)
const = 0;
357 virtual SkAdvancedTypefaceMetrics* onGetAdvancedTypefaceMetrics(
359 const uint32_t* glyphIDs,
360 uint32_t glyphIDsCount)
const = 0;
362 virtual SkStreamAsset* onOpenStream(
int* ttcIndex)
const = 0;
364 virtual SkFontData* onCreateFontData()
const;
366 virtual void onGetFontDescriptor(SkFontDescriptor*,
bool* isLocal)
const = 0;
368 virtual int onCharsToGlyphs(
const void* chars, Encoding,
SkGlyphID glyphs[],
369 int glyphCount)
const = 0;
370 virtual int onCountGlyphs()
const = 0;
372 virtual int onGetUPEM()
const = 0;
373 virtual bool onGetKerningPairAdjustments(
const SkGlyphID glyphs[],
int count,
374 int32_t adjustments[])
const;
379 virtual void onGetFamilyName(
SkString* familyName)
const = 0;
382 virtual LocalizedStrings* onCreateFamilyNameIterator()
const = 0;
384 virtual int onGetTableTags(SkFontTableTag tags[])
const = 0;
385 virtual size_t onGetTableData(SkFontTableTag,
size_t offset,
386 size_t length,
void* data)
const = 0;
388 virtual bool onComputeBounds(
SkRect*)
const;
391 friend class SkGTypeface;
392 friend class SkRandomTypeface;
393 friend class SkPDFFont;
394 friend class GrPathRendering;
395 friend class GrGLPathRendering;
407 SkAdvancedTypefaceMetrics* getAdvancedTypefaceMetrics(
409 const uint32_t* glyphIDs = NULL,
410 uint32_t glyphIDsCount = 0)
const;
416 mutable SkOnce fBoundsOnce;
420 friend class SkGlyphCache;
422 typedef SkWeakRefCnt INHERITED;
426 template <>
struct is_bitmask_enum<
SkTypeface::PerGlyphInfo> : std::true_type {};
bool isFixedPitch() const
Returns true if the typeface claims to be fixed-pitch.
Definition: SkTypeface.h:78
Style style() const
Returns the typeface's intrinsic style attributes.
Definition: SkTypeface.h:63
SkFontStyle fontStyle() const
Returns the typeface's intrinsic style attributes.
Definition: SkTypeface.h:56
Style
Style specifies the intrinsic style attributes of a given typeface.
Definition: SkTypeface.h:46
uint16_t SkGlyphID
16 bit unsigned integer to hold a glyph index
Definition: SkTypes.h:359
SkStreamAsset is a SkStreamSeekable for which getLength is required.
Definition: SkStream.h:164
void setIsFixedPitch(bool isFixedPitch)
Sets the fixedPitch bit.
Definition: SkTypeface.h:347
The SkPaint class holds the style and color information about how to draw geometries, text and bitmaps.
Definition: SkPaint.h:46
Definition: SkTypeface.h:269
The SkTypeface class specifies the typeface and intrinsic style of a font.
Definition: SkTypeface.h:42
void setFontStyle(SkFontStyle style)
Sets the font style.
Definition: SkTypeface.h:349
Definition: SkTypeface.h:273
Definition: SkFontStyle.h:13
SkStream – abstraction for a source of bytes.
Definition: SkStream.h:38
Definition: SkStream.h:182
bool isBold() const
Returns true if style() has the kBold bit set.
Definition: SkTypeface.h:70
SkFontID uniqueID() const
Return a 32bit value for this typeface, unique for the underlying font data.
Definition: SkTypeface.h:83
Light weight class for managing strings.
Definition: SkString.h:121
bool isItalic() const
Returns true if style() has the kItalic bit set.
Definition: SkTypeface.h:73