blob: 6ef8dfb8395f5948fb00dd79f0e9bf2a605f4f4c [file] [log] [blame]
reed@google.com48a4cbc2012-03-01 19:21:11 +00001/*
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
13class SkDeviceProfile : public SkRefCnt {
14public:
robertphillips@google.com15e9d3e2012-06-21 20:25:03 +000015 SK_DECLARE_INST_COUNT(SkDeviceProfile)
16
reed@google.com48a4cbc2012-03-01 19:21:11 +000017 enum LCDConfig {
18 kNone_LCDConfig, // disables LCD text rendering, uses A8 instead
19 kRGB_Horizontal_LCDConfig,
20 kBGR_Horizontal_LCDConfig,
21 kRGB_Vertical_LCDConfig,
reed@google.com73c48f12012-07-20 11:35:40 +000022 kBGR_Vertical_LCDConfig
reed@google.com48a4cbc2012-03-01 19:21:11 +000023 };
24
25 enum FontHintLevel {
26 kNone_FontHintLevel,
27 kSlight_FontHintLevel,
28 kNormal_FontHintLevel,
29 kFull_FontHintLevel,
reed@google.com73c48f12012-07-20 11:35:40 +000030 kAuto_FontHintLevel
reed@google.com48a4cbc2012-03-01 19:21:11 +000031 };
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
86private:
87 SkDeviceProfile(float gammaExp, float contrastScale, LCDConfig,
88 FontHintLevel);
89
90 float fGammaExponent;
91 float fContrastScale;
92 LCDConfig fLCDConfig;
93 FontHintLevel fFontHintLevel;
robertphillips@google.com15e9d3e2012-06-21 20:25:03 +000094
95 typedef SkRefCnt INHERITED;
reed@google.com48a4cbc2012-03-01 19:21:11 +000096};
97
98#endif