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 | uint32_t fValue; |
78 | }; |
79 | |
80 | #endif |
81 | |