| /* |
| * Copyright 2012 Google Inc. |
| * |
| * Use of this source code is governed by a BSD-style license that can be |
| * found in the LICENSE file. |
| */ |
| |
| #ifndef SkDeviceProfile_DEFINED |
| #define SkDeviceProfile_DEFINED |
| |
| #include "SkRefCnt.h" |
| |
| class SkDeviceProfile : public SkRefCnt { |
| public: |
| |
| |
| enum LCDConfig { |
| kNone_LCDConfig, // disables LCD text rendering, uses A8 instead |
| kRGB_Horizontal_LCDConfig, |
| kBGR_Horizontal_LCDConfig, |
| kRGB_Vertical_LCDConfig, |
| kBGR_Vertical_LCDConfig |
| }; |
| |
| enum FontHintLevel { |
| kNone_FontHintLevel, |
| kSlight_FontHintLevel, |
| kNormal_FontHintLevel, |
| kFull_FontHintLevel, |
| kAuto_FontHintLevel |
| }; |
| |
| /** |
| * gammaExp is typically between 1.0 and 2.2. For no gamma adjustment, |
| * specify 1.0 |
| * |
| * contrastScale will be pinned between 0.0 and 1.0. For no contrast |
| * adjustment, specify 0.0 |
| * |
| * @param config Describes the LCD layout for this device. If this is set |
| * to kNone, then all requests for LCD text will be |
| * devolved to A8 antialiasing. |
| * |
| * @param level The hinting level to be used, IF the paint specifies |
| * "default". Otherwise the paint's hinting level will be |
| * respected. |
| */ |
| static SkDeviceProfile* Create(float gammaExp, |
| float contrastScale, |
| LCDConfig, |
| FontHintLevel); |
| |
| /** |
| * Returns the global default profile, that is used if no global profile is |
| * specified with SetGlobal(), or if nullptr is specified to SetGlobal(). |
| * The references count is *not* incremented, and the caller should not |
| * call unref(). |
| */ |
| static SkDeviceProfile* GetDefault(); |
| |
| /** |
| * Return the current global profile (or the default if no global had yet |
| * been set) and increment its reference count. The call *must* call unref() |
| * when it is done using it. |
| */ |
| static SkDeviceProfile* RefGlobal(); |
| |
| /** |
| * Make the specified profile be the global value for all subsequently |
| * instantiated devices. Does not affect any existing devices. |
| * Increments the reference count on the profile. |
| * Specify nullptr for the "identity" profile (where there is no gamma or |
| * contrast correction). |
| */ |
| static void SetGlobal(SkDeviceProfile*); |
| |
| float getFontGammaExponent() const { return fGammaExponent; } |
| float getFontContrastScale() const { return fContrastScale; } |
| |
| /** |
| * Given a luminance byte (0 for black, 0xFF for white), generate a table |
| * that applies the gamma/contrast settings to linear coverage values. |
| */ |
| void generateTableForLuminanceByte(U8CPU lumByte, uint8_t table[256]) const; |
| |
| private: |
| SkDeviceProfile(float gammaExp, float contrastScale, LCDConfig, |
| FontHintLevel); |
| |
| float fGammaExponent; |
| float fContrastScale; |
| LCDConfig fLCDConfig; |
| FontHintLevel fFontHintLevel; |
| |
| typedef SkRefCnt INHERITED; |
| }; |
| |
| #endif |