| 1 | /* | 
|---|
| 2 | * Copyright 2013 Google Inc. | 
|---|
| 3 | * | 
|---|
| 4 | * Use of this source code is governed by a BSD-style license that can be | 
|---|
| 5 | * found in the LICENSE file. | 
|---|
| 6 | */ | 
|---|
| 7 |  | 
|---|
| 8 | #ifndef SkFontStyle_DEFINED | 
|---|
| 9 | #define SkFontStyle_DEFINED | 
|---|
| 10 |  | 
|---|
| 11 | #include "include/core/SkTypes.h" | 
|---|
| 12 |  | 
|---|
| 13 | class SK_API SkFontStyle { | 
|---|
| 14 | public: | 
|---|
| 15 | enum Weight { | 
|---|
| 16 | kInvisible_Weight   =    0, | 
|---|
| 17 | kThin_Weight        =  100, | 
|---|
| 18 | =  200, | 
|---|
| 19 | kLight_Weight       =  300, | 
|---|
| 20 | kNormal_Weight      =  400, | 
|---|
| 21 | kMedium_Weight      =  500, | 
|---|
| 22 | kSemiBold_Weight    =  600, | 
|---|
| 23 | kBold_Weight        =  700, | 
|---|
| 24 | =  800, | 
|---|
| 25 | kBlack_Weight       =  900, | 
|---|
| 26 | = 1000, | 
|---|
| 27 | }; | 
|---|
| 28 |  | 
|---|
| 29 | enum Width { | 
|---|
| 30 | kUltraCondensed_Width   = 1, | 
|---|
| 31 | = 2, | 
|---|
| 32 | kCondensed_Width        = 3, | 
|---|
| 33 | kSemiCondensed_Width    = 4, | 
|---|
| 34 | kNormal_Width           = 5, | 
|---|
| 35 | kSemiExpanded_Width     = 6, | 
|---|
| 36 | kExpanded_Width         = 7, | 
|---|
| 37 | kExtraExpanded_Width    = 8, | 
|---|
| 38 | kUltraExpanded_Width    = 9, | 
|---|
| 39 | }; | 
|---|
| 40 |  | 
|---|
| 41 | enum Slant { | 
|---|
| 42 | kUpright_Slant, | 
|---|
| 43 | kItalic_Slant, | 
|---|
| 44 | kOblique_Slant, | 
|---|
| 45 | }; | 
|---|
| 46 |  | 
|---|
| 47 | constexpr SkFontStyle(int weight, int width, Slant slant) : fValue( | 
|---|
| 48 | (SkTPin<int>(weight, kInvisible_Weight, kExtraBlack_Weight)) + | 
|---|
| 49 | (SkTPin<int>(width, kUltraCondensed_Width, kUltraExpanded_Width) << 16) + | 
|---|
| 50 | (SkTPin<int>(slant, kUpright_Slant, kOblique_Slant) << 24) | 
|---|
| 51 | ) { } | 
|---|
| 52 |  | 
|---|
| 53 | constexpr SkFontStyle() : SkFontStyle{kNormal_Weight, kNormal_Width, kUpright_Slant} { } | 
|---|
| 54 |  | 
|---|
| 55 | bool operator==(const SkFontStyle& rhs) const { | 
|---|
| 56 | return fValue == rhs.fValue; | 
|---|
| 57 | } | 
|---|
| 58 |  | 
|---|
| 59 | int weight() const { return fValue & 0xFFFF; } | 
|---|
| 60 | int width() const { return (fValue >> 16) & 0xFF; } | 
|---|
| 61 | Slant slant() const { return (Slant)((fValue >> 24) & 0xFF); } | 
|---|
| 62 |  | 
|---|
| 63 | static constexpr SkFontStyle Normal() { | 
|---|
| 64 | return SkFontStyle(kNormal_Weight, kNormal_Width, kUpright_Slant); | 
|---|
| 65 | } | 
|---|
| 66 | static constexpr SkFontStyle Bold() { | 
|---|
| 67 | return SkFontStyle(kBold_Weight,   kNormal_Width, kUpright_Slant); | 
|---|
| 68 | } | 
|---|
| 69 | static constexpr SkFontStyle Italic() { | 
|---|
| 70 | return SkFontStyle(kNormal_Weight, kNormal_Width, kItalic_Slant ); | 
|---|
| 71 | } | 
|---|
| 72 | static constexpr SkFontStyle BoldItalic() { | 
|---|
| 73 | return SkFontStyle(kBold_Weight,   kNormal_Width, kItalic_Slant ); | 
|---|
| 74 | } | 
|---|
| 75 |  | 
|---|
| 76 | private: | 
|---|
| 77 | int32_t fValue; | 
|---|
| 78 | }; | 
|---|
| 79 |  | 
|---|
| 80 | #endif | 
|---|
| 81 |  | 
|---|