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 "SkTypes.h" 12 13 class SK_API SkFontStyle { 14 public: 15 enum Weight { 16 kInvisible_Weight = 0, 17 kThin_Weight = 100, 18 kExtraLight_Weight = 200, 19 kLight_Weight = 300, 20 kNormal_Weight = 400, 21 kMedium_Weight = 500, 22 kSemiBold_Weight = 600, 23 kBold_Weight = 700, 24 kExtraBold_Weight = 800, 25 kBlack_Weight = 900, 26 kExtraBlack_Weight = 1000, 27 }; 28 29 enum Width { 30 kUltraCondensed_Width = 1, 31 kExtraCondensed_Width = 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 SkFontStyle(int weight,int width,Slant slant)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 SkFontStyle()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 weight()59 int weight() const { return fValue & 0xFFFF; } width()60 int width() const { return (fValue >> 16) & 0xFF; } slant()61 Slant slant() const { return (Slant)((fValue >> 24) & 0xFF); } 62 Normal()63 static constexpr SkFontStyle Normal() { 64 return SkFontStyle(kNormal_Weight, kNormal_Width, kUpright_Slant); 65 } Bold()66 static constexpr SkFontStyle Bold() { 67 return SkFontStyle(kBold_Weight, kNormal_Width, kUpright_Slant); 68 } Italic()69 static constexpr SkFontStyle Italic() { 70 return SkFontStyle(kNormal_Weight, kNormal_Width, kItalic_Slant ); 71 } BoldItalic()72 static constexpr SkFontStyle BoldItalic() { 73 return SkFontStyle(kBold_Weight, kNormal_Width, kItalic_Slant ); 74 } 75 76 private: 77 uint32_t fValue; 78 }; 79 80 #endif 81