| /* |
| * Copyright 2013 Google Inc. |
| * |
| * Use of this source code is governed by a BSD-style license that can be |
| * found in the LICENSE file. |
| */ |
| |
| #ifndef SkFontMgr_DEFINED |
| #define SkFontMgr_DEFINED |
| |
| #include "SkRefCnt.h" |
| |
| class SkData; |
| class SkStream; |
| class SkString; |
| |
| class SkFontStyle { |
| public: |
| enum Weight { |
| kThin_Weight = 100, |
| kExtraLight_Weight = 200, |
| kLight_Weight = 300, |
| kNormal_Weight = 400, |
| kMedium_Weight = 500, |
| kSemiBold_Weight = 600, |
| kBold_Weight = 700, |
| kExtraBold_Weight = 800, |
| kBlack_Weight = 900 |
| }; |
| |
| enum Width { |
| kUltraCondensed_Width = 1, |
| kExtraCondensed_Width = 2, |
| kCondensed_Width = 3, |
| kSemiCondensed_Width = 4, |
| kNormal_Width = 5, |
| kSemiExpanded_Width = 6, |
| kExpanded_Width = 7, |
| kExtraExpanded_Width = 8, |
| kUltaExpanded_Width = 9 |
| }; |
| |
| enum Flags { |
| kItalic_Flag = 1 << 0, |
| }; |
| |
| SkFontStyle(); |
| SkFontStyle(int weight, int width, unsigned flags); |
| |
| bool operator==(const SkFontStyle&) const { |
| return fUnion.fU32 == other.fUnion.fU32; |
| } |
| |
| int weight() const { return fUnion.fR.fWeight; } |
| int width() const { return fUnion.fR.fWidth; } |
| unsigned flags() const { return fUnion.fR.fFlags; } |
| |
| bool isItalic() const { |
| return SkToBool(fUnion.fR.fFlags & kItalic_Flag); |
| } |
| |
| private: |
| union { |
| struct { |
| uint16_t fWeight; // 100 ... 900 |
| uint8_t fWidth; // 1 .. 9 |
| uint8_t fFlags; |
| } fR; |
| uint32_t fU32; |
| } fUnion; |
| }; |
| |
| class SkFontMgr : public SkRefCnt { |
| public: |
| /** |
| * SkData contains an array of [const char*] |
| */ |
| SkData* refFamilyNames(); |
| |
| /** |
| * Given a familyName, if a corresponding family is found, return |
| * the array of available styles in SkData (as [SkFontStyle]). |
| * |
| * If foundFamilyName is not null, set it to the actual familyName for the |
| * found family. |
| */ |
| SkData* refFamilyStyles(const char familyName[], SkString* foundFamilyName); |
| |
| /** |
| * Find the closest matching typeface to the specified familyName and style |
| * and return a ref to it. The caller must call unref() on the returned |
| * object. Will never return NULL. |
| * |
| * If foundFamilyName is not null, set it to the actual familyName for the |
| * returned typeface. |
| */ |
| SkTypeface* matchFamilyName(const char familyName[], const Desc&, |
| SkString* foundFamilyName); |
| |
| /** |
| * Create a typeface for the specified data and TTC index (pass 0 for none) |
| * or NULL if the data is not recognized. The caller must call unref() on |
| * the returned object if it is not null. |
| */ |
| SkTypeface* createFromData(SkData*, int ttcIndex = 0); |
| |
| /** |
| * Create a typeface for the specified stream and TTC index |
| * (pass 0 for none) or NULL if the stream is not recognized. The caller |
| * must call unref() on the returned object if it is not null. |
| */ |
| SkTypeface* createFromStream(SkStream*, int ttcIndex = 0); |
| |
| /** |
| * Create a typeface for the specified fileName and TTC index |
| * (pass 0 for none) or NULL if the file is not found, or its contents are |
| * not recognized. The caller must call unref() on the returned object |
| * if it is not null. |
| */ |
| SkTypeface* createFromFile(const char path[], int ttcIndex = 0); |
| |
| private: |
| typedef SkRefCnt INHERITED; |
| }; |
| |
| #endif |