OLD | NEW |
1 /* | |
2 * Copyright 2014 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 SkDeviceProperties_DEFINED | 1 #ifndef SkDeviceProperties_DEFINED |
9 #define SkDeviceProperties_DEFINED | 2 #define SkDeviceProperties_DEFINED |
10 | 3 |
11 #include "SkSurfacePriv.h" | 4 //TODO: get everyone to stop using SkFontLCDConfig::SetSubpixel* and remove this
import. |
| 5 #include "SkFontLCDConfig.h" |
12 | 6 |
13 struct SkDeviceProperties { | 7 struct SkDeviceProperties { |
14 enum InitType { | 8 struct Geometry { |
15 kLegacyLCD_InitType | 9 /** The orientation of the pixel specifies the interpretation of the |
| 10 * layout. If the orientation is horizontal, the layout is interpreted a
s |
| 11 * left to right. It the orientation is vertical, the layout is |
| 12 * interpreted top to bottom (rotated 90deg cw from horizontal). |
| 13 */ |
| 14 enum Orientation { |
| 15 kUnknown_Orientation = 0x0, |
| 16 kKnown_Orientation = 0x2, |
| 17 |
| 18 kHorizontal_Orientation = 0x2, //!< this is the default |
| 19 kVertical_Orientation = 0x3, |
| 20 |
| 21 kOrientationMask = 0x3, |
| 22 }; |
| 23 |
| 24 /** The layout of the pixel specifies its subpixel geometry. |
| 25 * |
| 26 * kUnknown_Layout means that the subpixel elements are not spatially |
| 27 * separated in any known or usable fashion. |
| 28 */ |
| 29 enum Layout { |
| 30 kUnknown_Layout = 0x0, |
| 31 kKnown_Layout = 0x8, |
| 32 |
| 33 kRGB_Layout = 0x8, //!< this is the default |
| 34 kBGR_Layout = 0xC, |
| 35 |
| 36 kLayoutMask = 0xC, |
| 37 }; |
| 38 |
| 39 Orientation getOrientation() { |
| 40 return static_cast<Orientation>(fGeometry & kOrientationMask); |
| 41 } |
| 42 Layout getLayout() { |
| 43 return static_cast<Layout>(fGeometry & kLayoutMask); |
| 44 } |
| 45 |
| 46 bool isOrientationKnown() { |
| 47 return SkToBool(fGeometry & kKnown_Orientation); |
| 48 } |
| 49 bool isLayoutKnown() { |
| 50 return SkToBool(fGeometry & kKnown_Layout); |
| 51 } |
| 52 |
| 53 private: |
| 54 //TODO: get everyone to stop using SkFontLCDConfig::SetSubpixel* and rep
lace these calls with constants. |
| 55 static Orientation fromOldOrientation(SkFontLCDConfig::LCDOrientation or
ientation) { |
| 56 switch (orientation) { |
| 57 case SkFontLCDConfig::kHorizontal_LCDOrientation: return kHorizontal
_Orientation; |
| 58 case SkFontLCDConfig::kVertical_LCDOrientation: return kVertical_Ori
entation; |
| 59 default: return kUnknown_Orientation; |
| 60 } |
| 61 } |
| 62 static Layout fromOldLayout(SkFontLCDConfig::LCDOrder order) { |
| 63 switch (order) { |
| 64 case SkFontLCDConfig::kRGB_LCDOrder: return kRGB_Layout; |
| 65 case SkFontLCDConfig::kBGR_LCDOrder: return kBGR_Layout; |
| 66 default: return kUnknown_Layout; |
| 67 } |
| 68 } |
| 69 public: |
| 70 static Geometry MakeDefault() { |
| 71 Orientation orientation = fromOldOrientation(SkFontLCDConfig::GetSub
pixelOrientation()); //kHorizontal_Orientation |
| 72 Layout layout = fromOldLayout(SkFontLCDConfig::GetSubpixelOrder());
//kRGB_Layout |
| 73 Geometry ret = { SkToU8(orientation | layout) }; |
| 74 return ret; |
| 75 } |
| 76 |
| 77 static Geometry Make(Orientation orientation, Layout layout) { |
| 78 Geometry ret = { SkToU8(orientation | layout) }; |
| 79 return ret; |
| 80 } |
| 81 |
| 82 uint8_t fGeometry; |
16 }; | 83 }; |
17 SkDeviceProperties(InitType) : fPixelGeometry(SkSurfacePropsDefaultPixelGeom
etry()) {} | |
18 SkDeviceProperties(SkPixelGeometry geo) : fPixelGeometry(geo) {} | |
19 | 84 |
20 SkPixelGeometry fPixelGeometry; | 85 static SkDeviceProperties MakeDefault() { |
| 86 SkDeviceProperties ret = { Geometry::MakeDefault(), SK_GAMMA_EXPONENT }; |
| 87 return ret; |
| 88 } |
21 | 89 |
22 // read-only attribute -- until we actually store a value (future CL) | 90 static SkDeviceProperties Make(Geometry geometry, SkScalar gamma) { |
23 float getGamma() const { return SK_GAMMA_EXPONENT; } | 91 SkDeviceProperties ret = { geometry, gamma }; |
| 92 return ret; |
| 93 } |
| 94 |
| 95 /** Each pixel of an image will have some number of channels. |
| 96 * Can the layout of those channels be exploited? */ |
| 97 Geometry fGeometry; |
| 98 |
| 99 /** Represents the color space of the image. This is a woefully inadequate b
eginning. */ |
| 100 SkScalar fGamma; |
24 }; | 101 }; |
25 | 102 |
26 #endif | 103 #endif |
OLD | NEW |