|
1 /* -*- Mode: C++; tab-width: 20; indent-tabs-mode: nil; c-basic-offset: 2 -*- |
|
2 * This Source Code Form is subject to the terms of the Mozilla Public |
|
3 * License, v. 2.0. If a copy of the MPL was not distributed with this |
|
4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ |
|
5 |
|
6 #ifndef MOZILLA_GFX_TYPES_H_ |
|
7 #define MOZILLA_GFX_TYPES_H_ |
|
8 |
|
9 #include "mozilla/NullPtr.h" |
|
10 #include "mozilla/TypedEnum.h" |
|
11 |
|
12 #include <stddef.h> |
|
13 #include <stdint.h> |
|
14 |
|
15 namespace mozilla { |
|
16 namespace gfx { |
|
17 |
|
18 typedef float Float; |
|
19 |
|
20 MOZ_BEGIN_ENUM_CLASS(SurfaceType, int8_t) |
|
21 DATA, /* Data surface - bitmap in memory */ |
|
22 D2D1_BITMAP, /* Surface wrapping a ID2D1Bitmap */ |
|
23 D2D1_DRAWTARGET, /* Surface made from a D2D draw target */ |
|
24 CAIRO, /* Surface wrapping a cairo surface */ |
|
25 CAIRO_IMAGE, /* Data surface wrapping a cairo image surface */ |
|
26 COREGRAPHICS_IMAGE, /* Surface wrapping a CoreGraphics Image */ |
|
27 COREGRAPHICS_CGCONTEXT, /* Surface wrapping a CG context */ |
|
28 SKIA, /* Surface wrapping a Skia bitmap */ |
|
29 DUAL_DT, /* Snapshot of a dual drawtarget */ |
|
30 D2D1_1_IMAGE, /* A D2D 1.1 ID2D1Image SourceSurface */ |
|
31 RECORDING /* Surface used for recording */ |
|
32 MOZ_END_ENUM_CLASS(SurfaceType) |
|
33 |
|
34 MOZ_BEGIN_ENUM_CLASS(SurfaceFormat, int8_t) |
|
35 B8G8R8A8, |
|
36 B8G8R8X8, |
|
37 R8G8B8A8, |
|
38 R8G8B8X8, |
|
39 R5G6B5, |
|
40 A8, |
|
41 YUV, |
|
42 UNKNOWN |
|
43 MOZ_END_ENUM_CLASS(SurfaceFormat) |
|
44 |
|
45 MOZ_BEGIN_ENUM_CLASS(FilterType, int8_t) |
|
46 BLEND = 0, |
|
47 TRANSFORM, |
|
48 MORPHOLOGY, |
|
49 COLOR_MATRIX, |
|
50 FLOOD, |
|
51 TILE, |
|
52 TABLE_TRANSFER, |
|
53 DISCRETE_TRANSFER, |
|
54 LINEAR_TRANSFER, |
|
55 GAMMA_TRANSFER, |
|
56 CONVOLVE_MATRIX, |
|
57 DISPLACEMENT_MAP, |
|
58 TURBULENCE, |
|
59 ARITHMETIC_COMBINE, |
|
60 COMPOSITE, |
|
61 DIRECTIONAL_BLUR, |
|
62 GAUSSIAN_BLUR, |
|
63 POINT_DIFFUSE, |
|
64 POINT_SPECULAR, |
|
65 SPOT_DIFFUSE, |
|
66 SPOT_SPECULAR, |
|
67 DISTANT_DIFFUSE, |
|
68 DISTANT_SPECULAR, |
|
69 CROP, |
|
70 PREMULTIPLY, |
|
71 UNPREMULTIPLY |
|
72 MOZ_END_ENUM_CLASS(FilterType) |
|
73 |
|
74 MOZ_BEGIN_ENUM_CLASS(BackendType, int8_t) |
|
75 NONE = 0, |
|
76 DIRECT2D, |
|
77 COREGRAPHICS, |
|
78 COREGRAPHICS_ACCELERATED, |
|
79 CAIRO, |
|
80 SKIA, |
|
81 RECORDING, |
|
82 DIRECT2D1_1 |
|
83 MOZ_END_ENUM_CLASS(BackendType) |
|
84 |
|
85 MOZ_BEGIN_ENUM_CLASS(FontType, int8_t) |
|
86 DWRITE, |
|
87 GDI, |
|
88 MAC, |
|
89 SKIA, |
|
90 CAIRO, |
|
91 COREGRAPHICS |
|
92 MOZ_END_ENUM_CLASS(FontType) |
|
93 |
|
94 MOZ_BEGIN_ENUM_CLASS(NativeSurfaceType, int8_t) |
|
95 D3D10_TEXTURE, |
|
96 CAIRO_SURFACE, |
|
97 CAIRO_CONTEXT, |
|
98 CGCONTEXT, |
|
99 CGCONTEXT_ACCELERATED, |
|
100 OPENGL_TEXTURE |
|
101 MOZ_END_ENUM_CLASS(NativeSurfaceType) |
|
102 |
|
103 MOZ_BEGIN_ENUM_CLASS(NativeFontType, int8_t) |
|
104 DWRITE_FONT_FACE, |
|
105 GDI_FONT_FACE, |
|
106 MAC_FONT_FACE, |
|
107 SKIA_FONT_FACE, |
|
108 CAIRO_FONT_FACE |
|
109 MOZ_END_ENUM_CLASS(NativeFontType) |
|
110 |
|
111 MOZ_BEGIN_ENUM_CLASS(FontStyle, int8_t) |
|
112 NORMAL, |
|
113 ITALIC, |
|
114 BOLD, |
|
115 BOLD_ITALIC |
|
116 MOZ_END_ENUM_CLASS(FontStyle) |
|
117 |
|
118 MOZ_BEGIN_ENUM_CLASS(FontHinting, int8_t) |
|
119 NONE, |
|
120 LIGHT, |
|
121 NORMAL, |
|
122 FULL |
|
123 MOZ_END_ENUM_CLASS(FontHinting) |
|
124 |
|
125 MOZ_BEGIN_ENUM_CLASS(CompositionOp, int8_t) |
|
126 OP_OVER, |
|
127 OP_ADD, |
|
128 OP_ATOP, |
|
129 OP_OUT, |
|
130 OP_IN, |
|
131 OP_SOURCE, |
|
132 OP_DEST_IN, |
|
133 OP_DEST_OUT, |
|
134 OP_DEST_OVER, |
|
135 OP_DEST_ATOP, |
|
136 OP_XOR, |
|
137 OP_MULTIPLY, |
|
138 OP_SCREEN, |
|
139 OP_OVERLAY, |
|
140 OP_DARKEN, |
|
141 OP_LIGHTEN, |
|
142 OP_COLOR_DODGE, |
|
143 OP_COLOR_BURN, |
|
144 OP_HARD_LIGHT, |
|
145 OP_SOFT_LIGHT, |
|
146 OP_DIFFERENCE, |
|
147 OP_EXCLUSION, |
|
148 OP_HUE, |
|
149 OP_SATURATION, |
|
150 OP_COLOR, |
|
151 OP_LUMINOSITY, |
|
152 OP_COUNT |
|
153 MOZ_END_ENUM_CLASS(CompositionOp) |
|
154 |
|
155 MOZ_BEGIN_ENUM_CLASS(ExtendMode, int8_t) |
|
156 CLAMP, |
|
157 REPEAT, |
|
158 REFLECT |
|
159 MOZ_END_ENUM_CLASS(ExtendMode) |
|
160 |
|
161 MOZ_BEGIN_ENUM_CLASS(FillRule, int8_t) |
|
162 FILL_WINDING, |
|
163 FILL_EVEN_ODD |
|
164 MOZ_END_ENUM_CLASS(FillRule) |
|
165 |
|
166 MOZ_BEGIN_ENUM_CLASS(AntialiasMode, int8_t) |
|
167 NONE, |
|
168 GRAY, |
|
169 SUBPIXEL, |
|
170 DEFAULT |
|
171 MOZ_END_ENUM_CLASS(AntialiasMode) |
|
172 |
|
173 MOZ_BEGIN_ENUM_CLASS(Filter, int8_t) |
|
174 GOOD, |
|
175 LINEAR, |
|
176 POINT |
|
177 MOZ_END_ENUM_CLASS(Filter) |
|
178 |
|
179 MOZ_BEGIN_ENUM_CLASS(PatternType, int8_t) |
|
180 COLOR, |
|
181 SURFACE, |
|
182 LINEAR_GRADIENT, |
|
183 RADIAL_GRADIENT |
|
184 MOZ_END_ENUM_CLASS(PatternType) |
|
185 |
|
186 MOZ_BEGIN_ENUM_CLASS(JoinStyle, int8_t) |
|
187 BEVEL, |
|
188 ROUND, |
|
189 MITER, |
|
190 MITER_OR_BEVEL |
|
191 MOZ_END_ENUM_CLASS(JoinStyle) |
|
192 |
|
193 MOZ_BEGIN_ENUM_CLASS(CapStyle, int8_t) |
|
194 BUTT, |
|
195 ROUND, |
|
196 SQUARE |
|
197 MOZ_END_ENUM_CLASS(CapStyle) |
|
198 |
|
199 MOZ_BEGIN_ENUM_CLASS(SamplingBounds, int8_t) |
|
200 UNBOUNDED, |
|
201 BOUNDED |
|
202 MOZ_END_ENUM_CLASS(SamplingBounds) |
|
203 |
|
204 /* Color is stored in non-premultiplied form */ |
|
205 struct Color |
|
206 { |
|
207 public: |
|
208 Color() |
|
209 : r(0.0f), g(0.0f), b(0.0f), a(0.0f) |
|
210 {} |
|
211 Color(Float aR, Float aG, Float aB, Float aA) |
|
212 : r(aR), g(aG), b(aB), a(aA) |
|
213 {} |
|
214 Color(Float aR, Float aG, Float aB) |
|
215 : r(aR), g(aG), b(aB), a(1.0f) |
|
216 {} |
|
217 |
|
218 static Color FromABGR(uint32_t aColor) |
|
219 { |
|
220 Color newColor(((aColor >> 0) & 0xff) * (1.0f / 255.0f), |
|
221 ((aColor >> 8) & 0xff) * (1.0f / 255.0f), |
|
222 ((aColor >> 16) & 0xff) * (1.0f / 255.0f), |
|
223 ((aColor >> 24) & 0xff) * (1.0f / 255.0f)); |
|
224 |
|
225 return newColor; |
|
226 } |
|
227 |
|
228 uint32_t ToABGR() const |
|
229 { |
|
230 return uint32_t(r * 255.0f) | uint32_t(g * 255.0f) << 8 | |
|
231 uint32_t(b * 255.0f) << 16 | uint32_t(a * 255.0f) << 24; |
|
232 } |
|
233 |
|
234 Float r, g, b, a; |
|
235 }; |
|
236 |
|
237 struct GradientStop |
|
238 { |
|
239 bool operator<(const GradientStop& aOther) const { |
|
240 return offset < aOther.offset; |
|
241 } |
|
242 |
|
243 Float offset; |
|
244 Color color; |
|
245 }; |
|
246 |
|
247 } |
|
248 } |
|
249 |
|
250 #if defined(XP_WIN) && defined(MOZ_GFX) |
|
251 #ifdef GFX2D_INTERNAL |
|
252 #define GFX2D_API __declspec(dllexport) |
|
253 #else |
|
254 #define GFX2D_API __declspec(dllimport) |
|
255 #endif |
|
256 #else |
|
257 #define GFX2D_API |
|
258 #endif |
|
259 |
|
260 // Side constants for use in various places |
|
261 namespace mozilla { |
|
262 namespace css { |
|
263 enum Side {eSideTop, eSideRight, eSideBottom, eSideLeft}; |
|
264 } |
|
265 } |
|
266 |
|
267 // XXX - These don't really belong here. But for now this is where they go. |
|
268 #define NS_SIDE_TOP mozilla::css::eSideTop |
|
269 #define NS_SIDE_RIGHT mozilla::css::eSideRight |
|
270 #define NS_SIDE_BOTTOM mozilla::css::eSideBottom |
|
271 #define NS_SIDE_LEFT mozilla::css::eSideLeft |
|
272 |
|
273 #endif /* MOZILLA_GFX_TYPES_H_ */ |