blob: 2c2cb885e625cec003c3994bc9d19bf742c42cca [file] [log] [blame]
reed@google.com48a4cbc2012-03-01 19:21:11 +00001
2
3#include "SkDeviceProfile.h"
4
5#define DEFAULT_GAMMAEXP 2.2
6#define DEFAULT_CONTRASTSCALE 0.5
7#define DEFAULT_LCDCONFIG SkDeviceProfile::kNone_LCDConfig
8#define DEFAULT_FONTHINTLEVEL SkDeviceProfile::kSlight_FontHintLevel
9
10static float pin(float value, float min, float max) {
11 if (value < min) {
12 value = min;
13 } else if (value > max) {
14 value = max;
15 }
16 return value;
17}
18
19SkDeviceProfile::SkDeviceProfile(float gammaExp, float contrast,
20 LCDConfig config, FontHintLevel level) {
21 fGammaExponent = pin(gammaExp, 0, 10);
22 fContrastScale = pin(contrast, 0, 1);
23 fLCDConfig = config;
24 fFontHintLevel = level;
25}
26
27void SkDeviceProfile::generateTableForLuminanceByte(U8CPU lumByte,
28 uint8_t table[256]) const {
29}
30
31///////////////////////////////////////////////////////////////////////////////
32
33SkDeviceProfile* SkDeviceProfile::Create(float gammaExp,
34 float contrast,
35 LCDConfig config,
36 FontHintLevel level) {
37 return SkNEW_ARGS(SkDeviceProfile, (gammaExp, contrast, config, level));
38}
39
40static SkMutex gMutex;
41static SkDeviceProfile* gDefaultProfile;
42static SkDeviceProfile* gGlobalProfile;
43
44SkDeviceProfile* SkDeviceProfile::GetDefault() {
45 SkAutoMutexAcquire amc(gMutex);
46
47 if (NULL == gDefaultProfile) {
48 gDefaultProfile = SkDeviceProfile::Create(DEFAULT_GAMMAEXP,
49 DEFAULT_CONTRASTSCALE,
50 DEFAULT_LCDCONFIG,
51 DEFAULT_FONTHINTLEVEL);
52 }
53 return gDefaultProfile;
54}
55
56SkDeviceProfile* SkDeviceProfile::RefGlobal() {
57 SkAutoMutexAcquire amc(gMutex);
58
59 if (NULL == gGlobalProfile) {
60 gGlobalProfile = SkDeviceProfile::GetDefault();
61 }
62 gGlobalProfile->ref();
63 return gGlobalProfile;
64}
65
66void SkDeviceProfile::SetGlobal(SkDeviceProfile* profile) {
67 SkAutoMutexAcquire amc(gMutex);
68
69 SkRefCnt_SafeAssign(gGlobalProfile, profile);
70}
71
72