|
1 /* |
|
2 * Copyright 2012 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 SkDeviceProfile_DEFINED |
|
9 #define SkDeviceProfile_DEFINED |
|
10 |
|
11 #include "SkRefCnt.h" |
|
12 |
|
13 class SkDeviceProfile : public SkRefCnt { |
|
14 public: |
|
15 SK_DECLARE_INST_COUNT(SkDeviceProfile) |
|
16 |
|
17 enum LCDConfig { |
|
18 kNone_LCDConfig, // disables LCD text rendering, uses A8 instead |
|
19 kRGB_Horizontal_LCDConfig, |
|
20 kBGR_Horizontal_LCDConfig, |
|
21 kRGB_Vertical_LCDConfig, |
|
22 kBGR_Vertical_LCDConfig |
|
23 }; |
|
24 |
|
25 enum FontHintLevel { |
|
26 kNone_FontHintLevel, |
|
27 kSlight_FontHintLevel, |
|
28 kNormal_FontHintLevel, |
|
29 kFull_FontHintLevel, |
|
30 kAuto_FontHintLevel |
|
31 }; |
|
32 |
|
33 /** |
|
34 * gammaExp is typically between 1.0 and 2.2. For no gamma adjustment, |
|
35 * specify 1.0 |
|
36 * |
|
37 * contrastScale will be pinned between 0.0 and 1.0. For no contrast |
|
38 * adjustment, specify 0.0 |
|
39 * |
|
40 * @param config Describes the LCD layout for this device. If this is set |
|
41 * to kNone, then all requests for LCD text will be |
|
42 * devolved to A8 antialiasing. |
|
43 * |
|
44 * @param level The hinting level to be used, IF the paint specifies |
|
45 * "default". Otherwise the paint's hinting level will be |
|
46 * respected. |
|
47 */ |
|
48 static SkDeviceProfile* Create(float gammaExp, |
|
49 float contrastScale, |
|
50 LCDConfig, |
|
51 FontHintLevel); |
|
52 |
|
53 /** |
|
54 * Returns the global default profile, that is used if no global profile is |
|
55 * specified with SetGlobal(), or if NULL is specified to SetGlobal(). |
|
56 * The references count is *not* incremented, and the caller should not |
|
57 * call unref(). |
|
58 */ |
|
59 static SkDeviceProfile* GetDefault(); |
|
60 |
|
61 /** |
|
62 * Return the current global profile (or the default if no global had yet |
|
63 * been set) and increment its reference count. The call *must* call unref() |
|
64 * when it is done using it. |
|
65 */ |
|
66 static SkDeviceProfile* RefGlobal(); |
|
67 |
|
68 /** |
|
69 * Make the specified profile be the global value for all subsequently |
|
70 * instantiated devices. Does not affect any existing devices. |
|
71 * Increments the reference count on the profile. |
|
72 * Specify NULL for the "identity" profile (where there is no gamma or |
|
73 * contrast correction). |
|
74 */ |
|
75 static void SetGlobal(SkDeviceProfile*); |
|
76 |
|
77 float getFontGammaExponent() const { return fGammaExponent; } |
|
78 float getFontContrastScale() const { return fContrastScale; } |
|
79 |
|
80 /** |
|
81 * Given a luminance byte (0 for black, 0xFF for white), generate a table |
|
82 * that applies the gamma/contrast settings to linear coverage values. |
|
83 */ |
|
84 void generateTableForLuminanceByte(U8CPU lumByte, uint8_t table[256]) const; |
|
85 |
|
86 private: |
|
87 SkDeviceProfile(float gammaExp, float contrastScale, LCDConfig, |
|
88 FontHintLevel); |
|
89 |
|
90 float fGammaExponent; |
|
91 float fContrastScale; |
|
92 LCDConfig fLCDConfig; |
|
93 FontHintLevel fFontHintLevel; |
|
94 |
|
95 typedef SkRefCnt INHERITED; |
|
96 }; |
|
97 |
|
98 #endif |