no bug - Import translations from android-l10n r=release a=l10n CLOSED TREE
[gecko.git] / gfx / 2d / Filters.h
bloba9f77ce6aa90b6a3d9f51473a6ac518f4645d151
1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* vim: set ts=8 sts=2 et sw=2 tw=80: */
3 /* This Source Code Form is subject to the terms of the Mozilla Public
4 * License, v. 2.0. If a copy of the MPL was not distributed with this
5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
7 #ifndef MOZILLA_GFX_FILTERS_H_
8 #define MOZILLA_GFX_FILTERS_H_
10 #include "Types.h"
11 #include "mozilla/RefPtr.h"
13 #include "Point.h"
14 #include "Matrix.h"
15 #include <vector>
17 namespace mozilla {
18 namespace gfx {
20 class SourceSurface;
22 enum FilterBackend {
23 FILTER_BACKEND_SOFTWARE = 0,
24 FILTER_BACKEND_DIRECT2D1_1,
25 FILTER_BACKEND_RECORDING,
26 FILTER_BACKEND_CAPTURE
29 enum TransformFilterAtts {
30 ATT_TRANSFORM_MATRIX = 0, // Matrix
31 ATT_TRANSFORM_FILTER // Filter
34 enum TransformFilterInputs { IN_TRANSFORM_IN = 0 };
36 enum BlendFilterAtts {
37 ATT_BLEND_BLENDMODE = 0 // uint32_t
40 enum BlendMode {
41 BLEND_MODE_MULTIPLY = 0,
42 BLEND_MODE_SCREEN,
43 BLEND_MODE_DARKEN,
44 BLEND_MODE_LIGHTEN,
45 BLEND_MODE_OVERLAY,
46 BLEND_MODE_COLOR_DODGE,
47 BLEND_MODE_COLOR_BURN,
48 BLEND_MODE_HARD_LIGHT,
49 BLEND_MODE_SOFT_LIGHT,
50 BLEND_MODE_DIFFERENCE,
51 BLEND_MODE_EXCLUSION,
52 BLEND_MODE_HUE,
53 BLEND_MODE_SATURATION,
54 BLEND_MODE_COLOR,
55 BLEND_MODE_LUMINOSITY
58 enum BlendFilterInputs { IN_BLEND_IN = 0, IN_BLEND_IN2 };
60 enum MorphologyFilterAtts {
61 ATT_MORPHOLOGY_RADII = 0, // IntSize
62 ATT_MORPHOLOGY_OPERATOR // MorphologyOperator
65 enum MorphologyOperator {
66 MORPHOLOGY_OPERATOR_ERODE = 0,
67 MORPHOLOGY_OPERATOR_DILATE
70 enum MorphologyFilterInputs { IN_MORPHOLOGY_IN = 0 };
72 enum AlphaMode { ALPHA_MODE_PREMULTIPLIED = 0, ALPHA_MODE_STRAIGHT };
74 enum ColorMatrixFilterAtts {
75 ATT_COLOR_MATRIX_MATRIX = 0, // Matrix5x4
76 ATT_COLOR_MATRIX_ALPHA_MODE // AlphaMode
79 enum ColorMatrixFilterInputs { IN_COLOR_MATRIX_IN = 0 };
81 enum FloodFilterAtts {
82 ATT_FLOOD_COLOR = 0 // Color
85 enum FloodFilterInputs { IN_FLOOD_IN = 0 };
87 enum TileFilterAtts {
88 ATT_TILE_SOURCE_RECT = 0 // IntRect
91 enum TileFilterInputs { IN_TILE_IN = 0 };
93 enum TransferAtts {
94 ATT_TRANSFER_DISABLE_R = 0, // bool
95 ATT_TRANSFER_DISABLE_G, // bool
96 ATT_TRANSFER_DISABLE_B, // bool
97 ATT_TRANSFER_DISABLE_A // bool
100 enum TransferInputs { IN_TRANSFER_IN = 0 };
102 enum TableTransferAtts {
103 ATT_TABLE_TRANSFER_DISABLE_R = ATT_TRANSFER_DISABLE_R,
104 ATT_TABLE_TRANSFER_DISABLE_G = ATT_TRANSFER_DISABLE_G,
105 ATT_TABLE_TRANSFER_DISABLE_B = ATT_TRANSFER_DISABLE_B,
106 ATT_TABLE_TRANSFER_DISABLE_A = ATT_TRANSFER_DISABLE_A,
107 ATT_TABLE_TRANSFER_TABLE_R, // Float[]
108 ATT_TABLE_TRANSFER_TABLE_G, // Float[]
109 ATT_TABLE_TRANSFER_TABLE_B, // Float[]
110 ATT_TABLE_TRANSFER_TABLE_A // Float[]
113 enum TableTransferInputs { IN_TABLE_TRANSFER_IN = IN_TRANSFER_IN };
115 enum DiscreteTransferAtts {
116 ATT_DISCRETE_TRANSFER_DISABLE_R = ATT_TRANSFER_DISABLE_R,
117 ATT_DISCRETE_TRANSFER_DISABLE_G = ATT_TRANSFER_DISABLE_G,
118 ATT_DISCRETE_TRANSFER_DISABLE_B = ATT_TRANSFER_DISABLE_B,
119 ATT_DISCRETE_TRANSFER_DISABLE_A = ATT_TRANSFER_DISABLE_A,
120 ATT_DISCRETE_TRANSFER_TABLE_R, // Float[]
121 ATT_DISCRETE_TRANSFER_TABLE_G, // Float[]
122 ATT_DISCRETE_TRANSFER_TABLE_B, // Float[]
123 ATT_DISCRETE_TRANSFER_TABLE_A // Float[]
126 enum DiscreteTransferInputs { IN_DISCRETE_TRANSFER_IN = IN_TRANSFER_IN };
128 enum LinearTransferAtts {
129 ATT_LINEAR_TRANSFER_DISABLE_R = ATT_TRANSFER_DISABLE_R,
130 ATT_LINEAR_TRANSFER_DISABLE_G = ATT_TRANSFER_DISABLE_G,
131 ATT_LINEAR_TRANSFER_DISABLE_B = ATT_TRANSFER_DISABLE_B,
132 ATT_LINEAR_TRANSFER_DISABLE_A = ATT_TRANSFER_DISABLE_A,
133 ATT_LINEAR_TRANSFER_SLOPE_R, // Float
134 ATT_LINEAR_TRANSFER_SLOPE_G, // Float
135 ATT_LINEAR_TRANSFER_SLOPE_B, // Float
136 ATT_LINEAR_TRANSFER_SLOPE_A, // Float
137 ATT_LINEAR_TRANSFER_INTERCEPT_R, // Float
138 ATT_LINEAR_TRANSFER_INTERCEPT_G, // Float
139 ATT_LINEAR_TRANSFER_INTERCEPT_B, // Float
140 ATT_LINEAR_TRANSFER_INTERCEPT_A // Float
143 enum LinearTransferInputs { IN_LINEAR_TRANSFER_IN = IN_TRANSFER_IN };
145 enum GammaTransferAtts {
146 ATT_GAMMA_TRANSFER_DISABLE_R = ATT_TRANSFER_DISABLE_R,
147 ATT_GAMMA_TRANSFER_DISABLE_G = ATT_TRANSFER_DISABLE_G,
148 ATT_GAMMA_TRANSFER_DISABLE_B = ATT_TRANSFER_DISABLE_B,
149 ATT_GAMMA_TRANSFER_DISABLE_A = ATT_TRANSFER_DISABLE_A,
150 ATT_GAMMA_TRANSFER_AMPLITUDE_R, // Float
151 ATT_GAMMA_TRANSFER_AMPLITUDE_G, // Float
152 ATT_GAMMA_TRANSFER_AMPLITUDE_B, // Float
153 ATT_GAMMA_TRANSFER_AMPLITUDE_A, // Float
154 ATT_GAMMA_TRANSFER_EXPONENT_R, // Float
155 ATT_GAMMA_TRANSFER_EXPONENT_G, // Float
156 ATT_GAMMA_TRANSFER_EXPONENT_B, // Float
157 ATT_GAMMA_TRANSFER_EXPONENT_A, // Float
158 ATT_GAMMA_TRANSFER_OFFSET_R, // Float
159 ATT_GAMMA_TRANSFER_OFFSET_G, // Float
160 ATT_GAMMA_TRANSFER_OFFSET_B, // Float
161 ATT_GAMMA_TRANSFER_OFFSET_A // Float
164 enum GammaTransferInputs { IN_GAMMA_TRANSFER_IN = IN_TRANSFER_IN };
166 enum ConvolveMatrixAtts {
167 ATT_CONVOLVE_MATRIX_KERNEL_SIZE = 0, // IntSize
168 ATT_CONVOLVE_MATRIX_KERNEL_MATRIX, // Float[]
169 ATT_CONVOLVE_MATRIX_DIVISOR, // Float
170 ATT_CONVOLVE_MATRIX_BIAS, // Float
171 ATT_CONVOLVE_MATRIX_TARGET, // IntPoint
172 ATT_CONVOLVE_MATRIX_SOURCE_RECT, // IntRect
173 ATT_CONVOLVE_MATRIX_EDGE_MODE, // ConvolveMatrixEdgeMode
174 ATT_CONVOLVE_MATRIX_KERNEL_UNIT_LENGTH, // Size
175 ATT_CONVOLVE_MATRIX_PRESERVE_ALPHA, // bool
178 enum ConvolveMatrixEdgeMode {
179 EDGE_MODE_DUPLICATE = 0,
180 EDGE_MODE_WRAP,
181 EDGE_MODE_NONE
184 enum ConvolveMatrixInputs { IN_CONVOLVE_MATRIX_IN = 0 };
186 enum DisplacementMapAtts {
187 ATT_DISPLACEMENT_MAP_SCALE = 0, // Float
188 ATT_DISPLACEMENT_MAP_X_CHANNEL, // ColorChannel
189 ATT_DISPLACEMENT_MAP_Y_CHANNEL // ColorChannel
192 enum ColorChannel {
193 COLOR_CHANNEL_R = 0,
194 COLOR_CHANNEL_G,
195 COLOR_CHANNEL_B,
196 COLOR_CHANNEL_A
199 enum DisplacementMapInputs {
200 IN_DISPLACEMENT_MAP_IN = 0,
201 IN_DISPLACEMENT_MAP_IN2
204 enum TurbulenceAtts {
205 ATT_TURBULENCE_BASE_FREQUENCY = 0, // Size
206 ATT_TURBULENCE_NUM_OCTAVES, // uint32_t
207 ATT_TURBULENCE_SEED, // uint32_t
208 ATT_TURBULENCE_STITCHABLE, // bool
209 ATT_TURBULENCE_TYPE, // TurbulenceType
210 ATT_TURBULENCE_RECT // IntRect
213 enum TurbulenceType {
214 TURBULENCE_TYPE_TURBULENCE = 0,
215 TURBULENCE_TYPE_FRACTAL_NOISE
218 enum ArithmeticCombineAtts {
219 ATT_ARITHMETIC_COMBINE_COEFFICIENTS = 0 // Float[4]
222 enum ArithmeticCombineInputs {
223 IN_ARITHMETIC_COMBINE_IN = 0,
224 IN_ARITHMETIC_COMBINE_IN2
227 enum CompositeAtts {
228 ATT_COMPOSITE_OPERATOR = 0 // CompositeOperator
231 enum CompositeOperator {
232 COMPOSITE_OPERATOR_OVER = 0,
233 COMPOSITE_OPERATOR_IN,
234 COMPOSITE_OPERATOR_OUT,
235 COMPOSITE_OPERATOR_ATOP,
236 COMPOSITE_OPERATOR_XOR,
237 COMPOSITE_OPERATOR_LIGHTER
240 enum CompositeInputs {
241 // arbitrary number of inputs
242 IN_COMPOSITE_IN_START = 0
245 enum GaussianBlurAtts {
246 ATT_GAUSSIAN_BLUR_STD_DEVIATION = 0 // Float
249 enum GaussianBlurInputs { IN_GAUSSIAN_BLUR_IN = 0 };
251 enum DirectionalBlurAtts {
252 ATT_DIRECTIONAL_BLUR_STD_DEVIATION = 0, // Float
253 ATT_DIRECTIONAL_BLUR_DIRECTION // BlurDirection
256 enum BlurDirection { BLUR_DIRECTION_X = 0, BLUR_DIRECTION_Y };
258 enum DirectionalBlurInputs { IN_DIRECTIONAL_BLUR_IN = 0 };
260 enum LightingAtts {
261 ATT_POINT_LIGHT_POSITION = 0, // Point3D
263 ATT_SPOT_LIGHT_POSITION, // Point3D
264 ATT_SPOT_LIGHT_POINTS_AT, // Point3D
265 ATT_SPOT_LIGHT_FOCUS, // Float
266 ATT_SPOT_LIGHT_LIMITING_CONE_ANGLE, // Float
268 ATT_DISTANT_LIGHT_AZIMUTH, // Float
269 ATT_DISTANT_LIGHT_ELEVATION, // Float
271 ATT_LIGHTING_COLOR, // Color
272 ATT_LIGHTING_SURFACE_SCALE, // Float
273 ATT_LIGHTING_KERNEL_UNIT_LENGTH, // Size
275 ATT_DIFFUSE_LIGHTING_DIFFUSE_CONSTANT, // Float
277 ATT_SPECULAR_LIGHTING_SPECULAR_CONSTANT, // Float
278 ATT_SPECULAR_LIGHTING_SPECULAR_EXPONENT // Float
281 enum LightingInputs { IN_LIGHTING_IN = 0 };
283 enum PointDiffuseAtts {
284 ATT_POINT_DIFFUSE_POSITION = ATT_POINT_LIGHT_POSITION,
285 ATT_POINT_DIFFUSE_COLOR = ATT_LIGHTING_COLOR,
286 ATT_POINT_DIFFUSE_SURFACE_SCALE = ATT_LIGHTING_SURFACE_SCALE,
287 ATT_POINT_DIFFUSE_KERNEL_UNIT_LENGTH = ATT_LIGHTING_KERNEL_UNIT_LENGTH,
288 ATT_POINT_DIFFUSE_DIFFUSE_CONSTANT = ATT_DIFFUSE_LIGHTING_DIFFUSE_CONSTANT
291 enum PointDiffuseInputs { IN_POINT_DIFFUSE_IN = IN_LIGHTING_IN };
293 enum SpotDiffuseAtts {
294 ATT_SPOT_DIFFUSE_POSITION = ATT_SPOT_LIGHT_POSITION,
295 ATT_SPOT_DIFFUSE_POINTS_AT = ATT_SPOT_LIGHT_POINTS_AT,
296 ATT_SPOT_DIFFUSE_FOCUS = ATT_SPOT_LIGHT_FOCUS,
297 ATT_SPOT_DIFFUSE_LIMITING_CONE_ANGLE = ATT_SPOT_LIGHT_LIMITING_CONE_ANGLE,
298 ATT_SPOT_DIFFUSE_COLOR = ATT_LIGHTING_COLOR,
299 ATT_SPOT_DIFFUSE_SURFACE_SCALE = ATT_LIGHTING_SURFACE_SCALE,
300 ATT_SPOT_DIFFUSE_KERNEL_UNIT_LENGTH = ATT_LIGHTING_KERNEL_UNIT_LENGTH,
301 ATT_SPOT_DIFFUSE_DIFFUSE_CONSTANT = ATT_DIFFUSE_LIGHTING_DIFFUSE_CONSTANT
304 enum SpotDiffuseInputs { IN_SPOT_DIFFUSE_IN = IN_LIGHTING_IN };
306 enum DistantDiffuseAtts {
307 ATT_DISTANT_DIFFUSE_AZIMUTH = ATT_DISTANT_LIGHT_AZIMUTH,
308 ATT_DISTANT_DIFFUSE_ELEVATION = ATT_DISTANT_LIGHT_ELEVATION,
309 ATT_DISTANT_DIFFUSE_COLOR = ATT_LIGHTING_COLOR,
310 ATT_DISTANT_DIFFUSE_SURFACE_SCALE = ATT_LIGHTING_SURFACE_SCALE,
311 ATT_DISTANT_DIFFUSE_KERNEL_UNIT_LENGTH = ATT_LIGHTING_KERNEL_UNIT_LENGTH,
312 ATT_DISTANT_DIFFUSE_DIFFUSE_CONSTANT = ATT_DIFFUSE_LIGHTING_DIFFUSE_CONSTANT
315 enum DistantDiffuseInputs { IN_DISTANT_DIFFUSE_IN = IN_LIGHTING_IN };
317 enum PointSpecularAtts {
318 ATT_POINT_SPECULAR_POSITION = ATT_POINT_LIGHT_POSITION,
319 ATT_POINT_SPECULAR_COLOR = ATT_LIGHTING_COLOR,
320 ATT_POINT_SPECULAR_SURFACE_SCALE = ATT_LIGHTING_SURFACE_SCALE,
321 ATT_POINT_SPECULAR_KERNEL_UNIT_LENGTH = ATT_LIGHTING_KERNEL_UNIT_LENGTH,
322 ATT_POINT_SPECULAR_SPECULAR_CONSTANT =
323 ATT_SPECULAR_LIGHTING_SPECULAR_CONSTANT,
324 ATT_POINT_SPECULAR_SPECULAR_EXPONENT = ATT_SPECULAR_LIGHTING_SPECULAR_EXPONENT
327 enum PointSpecularInputs { IN_POINT_SPECULAR_IN = IN_LIGHTING_IN };
329 enum SpotSpecularAtts {
330 ATT_SPOT_SPECULAR_POSITION = ATT_SPOT_LIGHT_POSITION,
331 ATT_SPOT_SPECULAR_POINTS_AT = ATT_SPOT_LIGHT_POINTS_AT,
332 ATT_SPOT_SPECULAR_FOCUS = ATT_SPOT_LIGHT_FOCUS,
333 ATT_SPOT_SPECULAR_LIMITING_CONE_ANGLE = ATT_SPOT_LIGHT_LIMITING_CONE_ANGLE,
334 ATT_SPOT_SPECULAR_COLOR = ATT_LIGHTING_COLOR,
335 ATT_SPOT_SPECULAR_SURFACE_SCALE = ATT_LIGHTING_SURFACE_SCALE,
336 ATT_SPOT_SPECULAR_KERNEL_UNIT_LENGTH = ATT_LIGHTING_KERNEL_UNIT_LENGTH,
337 ATT_SPOT_SPECULAR_SPECULAR_CONSTANT = ATT_SPECULAR_LIGHTING_SPECULAR_CONSTANT,
338 ATT_SPOT_SPECULAR_SPECULAR_EXPONENT = ATT_SPECULAR_LIGHTING_SPECULAR_EXPONENT
341 enum SpotSpecularInputs { IN_SPOT_SPECULAR_IN = IN_LIGHTING_IN };
343 enum DistantSpecularAtts {
344 ATT_DISTANT_SPECULAR_AZIMUTH = ATT_DISTANT_LIGHT_AZIMUTH,
345 ATT_DISTANT_SPECULAR_ELEVATION = ATT_DISTANT_LIGHT_ELEVATION,
346 ATT_DISTANT_SPECULAR_COLOR = ATT_LIGHTING_COLOR,
347 ATT_DISTANT_SPECULAR_SURFACE_SCALE = ATT_LIGHTING_SURFACE_SCALE,
348 ATT_DISTANT_SPECULAR_KERNEL_UNIT_LENGTH = ATT_LIGHTING_KERNEL_UNIT_LENGTH,
349 ATT_DISTANT_SPECULAR_SPECULAR_CONSTANT =
350 ATT_SPECULAR_LIGHTING_SPECULAR_CONSTANT,
351 ATT_DISTANT_SPECULAR_SPECULAR_EXPONENT =
352 ATT_SPECULAR_LIGHTING_SPECULAR_EXPONENT
355 enum DistantSpecularInputs { IN_DISTANT_SPECULAR_IN = IN_LIGHTING_IN };
357 enum CropAtts {
358 ATT_CROP_RECT = 0 // Rect
361 enum CropInputs { IN_CROP_IN = 0 };
363 enum PremultiplyInputs { IN_PREMULTIPLY_IN = 0 };
365 enum UnpremultiplyInputs { IN_UNPREMULTIPLY_IN = 0 };
367 enum OpacityAtts { ATT_OPACITY_VALUE = 0 };
369 enum OpacityInputs { IN_OPACITY_IN = 0 };
371 class FilterNode : public external::AtomicRefCounted<FilterNode> {
372 public:
373 MOZ_DECLARE_REFCOUNTED_VIRTUAL_TYPENAME(FilterNode)
374 virtual ~FilterNode() = default;
376 virtual FilterBackend GetBackendType() = 0;
378 virtual void SetInput(uint32_t aIndex, SourceSurface* aSurface) {
379 MOZ_CRASH("GFX: FilterNode");
381 virtual void SetInput(uint32_t aIndex, FilterNode* aFilter) {
382 MOZ_CRASH("GFX: FilterNode");
385 virtual void SetAttribute(uint32_t aIndex, bool) {
386 MOZ_CRASH("GFX: FilterNode");
388 virtual void SetAttribute(uint32_t aIndex, uint32_t) {
389 MOZ_CRASH("GFX: FilterNode");
391 virtual void SetAttribute(uint32_t aIndex, Float) {
392 MOZ_CRASH("GFX: FilterNode");
394 virtual void SetAttribute(uint32_t aIndex, const Size&) {
395 MOZ_CRASH("GFX: FilterNode");
397 virtual void SetAttribute(uint32_t aIndex, const IntSize&) {
398 MOZ_CRASH("GFX: FilterNode");
400 virtual void SetAttribute(uint32_t aIndex, const IntPoint&) {
401 MOZ_CRASH("GFX: FilterNode");
403 virtual void SetAttribute(uint32_t aIndex, const Rect&) {
404 MOZ_CRASH("GFX: FilterNode");
406 virtual void SetAttribute(uint32_t aIndex, const IntRect&) {
407 MOZ_CRASH("GFX: FilterNode");
409 virtual void SetAttribute(uint32_t aIndex, const Point&) {
410 MOZ_CRASH("GFX: FilterNode");
412 virtual void SetAttribute(uint32_t aIndex, const Matrix&) {
413 MOZ_CRASH("GFX: FilterNode");
415 virtual void SetAttribute(uint32_t aIndex, const Matrix5x4&) {
416 MOZ_CRASH("GFX: FilterNode");
418 virtual void SetAttribute(uint32_t aIndex, const Point3D&) {
419 MOZ_CRASH("GFX: FilterNode");
421 virtual void SetAttribute(uint32_t aIndex, const DeviceColor&) {
422 MOZ_CRASH("GFX: FilterNode");
424 virtual void SetAttribute(uint32_t aIndex, const Float* aFloat,
425 uint32_t aSize) {
426 MOZ_CRASH("GFX: FilterNode");
429 /** Maps a rectangle in filter space back to a rectangle in the space of
430 * aSourceNode's first input. aSourceNode should not have an input
431 * assigned when calling this function. */
432 virtual IntRect MapRectToSource(const IntRect& aRect, const IntRect& aMax,
433 FilterNode* aSourceNode) {
434 return aMax;
437 protected:
438 friend class Factory;
440 FilterNode() = default;
443 } // namespace gfx
444 } // namespace mozilla
446 #endif