Home | History | Annotate | Download | only in core
      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 
      9 #include "SkDeviceProfile.h"
     10 #include "SkMutex.h"
     11 
     12 #define DEFAULT_GAMMAEXP        2.2f
     13 #define DEFAULT_CONTRASTSCALE   0.5f
     14 #define DEFAULT_LCDCONFIG       SkDeviceProfile::kNone_LCDConfig
     15 #define DEFAULT_FONTHINTLEVEL   SkDeviceProfile::kSlight_FontHintLevel
     16 
     17 static float pin(float value, float min, float max) {
     18     if (value < min) {
     19         value = min;
     20     } else if (value > max) {
     21         value = max;
     22     }
     23     return value;
     24 }
     25 
     26 SkDeviceProfile::SkDeviceProfile(float gammaExp, float contrast,
     27                                  LCDConfig config, FontHintLevel level) {
     28     fGammaExponent = pin(gammaExp, 0, 10);
     29     fContrastScale = pin(contrast, 0, 1);
     30     fLCDConfig = config;
     31     fFontHintLevel = level;
     32 }
     33 
     34 void SkDeviceProfile::generateTableForLuminanceByte(U8CPU lumByte,
     35                                                     uint8_t table[256]) const {
     36 }
     37 
     38 ///////////////////////////////////////////////////////////////////////////////
     39 
     40 SkDeviceProfile* SkDeviceProfile::Create(float gammaExp,
     41                                          float contrast,
     42                                          LCDConfig config,
     43                                          FontHintLevel level) {
     44     return new SkDeviceProfile(gammaExp, contrast, config, level);
     45 }
     46 
     47 SK_DECLARE_STATIC_MUTEX(gMutex);
     48 static SkDeviceProfile* gDefaultProfile;
     49 static SkDeviceProfile* gGlobalProfile;
     50 
     51 SkDeviceProfile* SkDeviceProfile::GetDefault() {
     52     SkAutoMutexAcquire amc(gMutex);
     53 
     54     if (nullptr == gDefaultProfile) {
     55         gDefaultProfile = SkDeviceProfile::Create(DEFAULT_GAMMAEXP,
     56                                                   DEFAULT_CONTRASTSCALE,
     57                                                   DEFAULT_LCDCONFIG,
     58                                                   DEFAULT_FONTHINTLEVEL);
     59     }
     60     return gDefaultProfile;
     61 }
     62 
     63 SkDeviceProfile* SkDeviceProfile::RefGlobal() {
     64     SkAutoMutexAcquire amc(gMutex);
     65 
     66     if (nullptr == gGlobalProfile) {
     67         gGlobalProfile = SkDeviceProfile::GetDefault();
     68     }
     69     gGlobalProfile->ref();
     70     return gGlobalProfile;
     71 }
     72 
     73 void SkDeviceProfile::SetGlobal(SkDeviceProfile* profile) {
     74     SkAutoMutexAcquire amc(gMutex);
     75 
     76     SkRefCnt_SafeAssign(gGlobalProfile, profile);
     77 }
     78