OLD | NEW |
| (Empty) |
1 #ifndef SkDeviceProperties_DEFINED | |
2 #define SkDeviceProperties_DEFINED | |
3 | |
4 //TODO: get everyone to stop using SkFontLCDConfig::SetSubpixel* and remove this
import. | |
5 #include "SkFontLCDConfig.h" | |
6 | |
7 struct SkDeviceProperties { | |
8 struct Geometry { | |
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; | |
83 }; | |
84 | |
85 static SkDeviceProperties MakeDefault() { | |
86 SkDeviceProperties ret = { Geometry::MakeDefault(), SK_GAMMA_EXPONENT }; | |
87 return ret; | |
88 } | |
89 | |
90 static SkDeviceProperties Make(Geometry geometry, SkScalar gamma) { | |
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; | |
101 }; | |
102 | |
103 #endif | |
OLD | NEW |