tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

Filters.h (13894B)


      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/. */
      6 
      7 #ifndef MOZILLA_GFX_FILTERS_H_
      8 #define MOZILLA_GFX_FILTERS_H_
      9 
     10 #include "Types.h"
     11 #include "mozilla/RefCounted.h"
     12 
     13 #include "Point.h"
     14 #include "Matrix.h"
     15 
     16 namespace mozilla {
     17 namespace gfx {
     18 
     19 class SourceSurface;
     20 
     21 enum FilterBackend {
     22  FILTER_BACKEND_SOFTWARE = 0,
     23  FILTER_BACKEND_WEBGL,
     24  FILTER_BACKEND_RECORDING,
     25  FILTER_BACKEND_CAPTURE
     26 };
     27 
     28 enum TransformFilterAtts {
     29  ATT_TRANSFORM_MATRIX = 0,  // Matrix
     30  ATT_TRANSFORM_FILTER       // Filter
     31 };
     32 
     33 enum TransformFilterInputs { IN_TRANSFORM_IN = 0 };
     34 
     35 enum BlendFilterAtts {
     36  ATT_BLEND_BLENDMODE = 0  // uint32_t
     37 };
     38 
     39 enum BlendMode {
     40  BLEND_MODE_MULTIPLY = 0,
     41  BLEND_MODE_SCREEN,
     42  BLEND_MODE_DARKEN,
     43  BLEND_MODE_LIGHTEN,
     44  BLEND_MODE_OVERLAY,
     45  BLEND_MODE_COLOR_DODGE,
     46  BLEND_MODE_COLOR_BURN,
     47  BLEND_MODE_HARD_LIGHT,
     48  BLEND_MODE_SOFT_LIGHT,
     49  BLEND_MODE_DIFFERENCE,
     50  BLEND_MODE_EXCLUSION,
     51  BLEND_MODE_HUE,
     52  BLEND_MODE_SATURATION,
     53  BLEND_MODE_COLOR,
     54  BLEND_MODE_LUMINOSITY
     55 };
     56 
     57 enum BlendFilterInputs { IN_BLEND_IN = 0, IN_BLEND_IN2 };
     58 
     59 enum MorphologyFilterAtts {
     60  ATT_MORPHOLOGY_RADII = 0,  // IntSize
     61  ATT_MORPHOLOGY_OPERATOR    // MorphologyOperator
     62 };
     63 
     64 enum MorphologyOperator {
     65  MORPHOLOGY_OPERATOR_ERODE = 0,
     66  MORPHOLOGY_OPERATOR_DILATE
     67 };
     68 
     69 enum MorphologyFilterInputs { IN_MORPHOLOGY_IN = 0 };
     70 
     71 enum AlphaMode { ALPHA_MODE_PREMULTIPLIED = 0, ALPHA_MODE_STRAIGHT };
     72 
     73 enum ColorMatrixFilterAtts {
     74  ATT_COLOR_MATRIX_MATRIX = 0,  // Matrix5x4
     75  ATT_COLOR_MATRIX_ALPHA_MODE   // AlphaMode
     76 };
     77 
     78 enum ColorMatrixFilterInputs { IN_COLOR_MATRIX_IN = 0 };
     79 
     80 enum FloodFilterAtts {
     81  ATT_FLOOD_COLOR = 0  // Color
     82 };
     83 
     84 enum FloodFilterInputs { IN_FLOOD_IN = 0 };
     85 
     86 enum TileFilterAtts {
     87  ATT_TILE_SOURCE_RECT = 0  // IntRect
     88 };
     89 
     90 enum TileFilterInputs { IN_TILE_IN = 0 };
     91 
     92 enum TransferAtts {
     93  ATT_TRANSFER_DISABLE_R = 0,  // bool
     94  ATT_TRANSFER_DISABLE_G,      // bool
     95  ATT_TRANSFER_DISABLE_B,      // bool
     96  ATT_TRANSFER_DISABLE_A       // bool
     97 };
     98 
     99 enum TransferInputs { IN_TRANSFER_IN = 0 };
    100 
    101 enum TableTransferAtts {
    102  ATT_TABLE_TRANSFER_DISABLE_R = ATT_TRANSFER_DISABLE_R,
    103  ATT_TABLE_TRANSFER_DISABLE_G = ATT_TRANSFER_DISABLE_G,
    104  ATT_TABLE_TRANSFER_DISABLE_B = ATT_TRANSFER_DISABLE_B,
    105  ATT_TABLE_TRANSFER_DISABLE_A = ATT_TRANSFER_DISABLE_A,
    106  ATT_TABLE_TRANSFER_TABLE_R,  // Float[]
    107  ATT_TABLE_TRANSFER_TABLE_G,  // Float[]
    108  ATT_TABLE_TRANSFER_TABLE_B,  // Float[]
    109  ATT_TABLE_TRANSFER_TABLE_A   // Float[]
    110 };
    111 
    112 enum TableTransferInputs { IN_TABLE_TRANSFER_IN = IN_TRANSFER_IN };
    113 
    114 enum DiscreteTransferAtts {
    115  ATT_DISCRETE_TRANSFER_DISABLE_R = ATT_TRANSFER_DISABLE_R,
    116  ATT_DISCRETE_TRANSFER_DISABLE_G = ATT_TRANSFER_DISABLE_G,
    117  ATT_DISCRETE_TRANSFER_DISABLE_B = ATT_TRANSFER_DISABLE_B,
    118  ATT_DISCRETE_TRANSFER_DISABLE_A = ATT_TRANSFER_DISABLE_A,
    119  ATT_DISCRETE_TRANSFER_TABLE_R,  // Float[]
    120  ATT_DISCRETE_TRANSFER_TABLE_G,  // Float[]
    121  ATT_DISCRETE_TRANSFER_TABLE_B,  // Float[]
    122  ATT_DISCRETE_TRANSFER_TABLE_A   // Float[]
    123 };
    124 
    125 enum DiscreteTransferInputs { IN_DISCRETE_TRANSFER_IN = IN_TRANSFER_IN };
    126 
    127 enum LinearTransferAtts {
    128  ATT_LINEAR_TRANSFER_DISABLE_R = ATT_TRANSFER_DISABLE_R,
    129  ATT_LINEAR_TRANSFER_DISABLE_G = ATT_TRANSFER_DISABLE_G,
    130  ATT_LINEAR_TRANSFER_DISABLE_B = ATT_TRANSFER_DISABLE_B,
    131  ATT_LINEAR_TRANSFER_DISABLE_A = ATT_TRANSFER_DISABLE_A,
    132  ATT_LINEAR_TRANSFER_SLOPE_R,      // Float
    133  ATT_LINEAR_TRANSFER_SLOPE_G,      // Float
    134  ATT_LINEAR_TRANSFER_SLOPE_B,      // Float
    135  ATT_LINEAR_TRANSFER_SLOPE_A,      // Float
    136  ATT_LINEAR_TRANSFER_INTERCEPT_R,  // Float
    137  ATT_LINEAR_TRANSFER_INTERCEPT_G,  // Float
    138  ATT_LINEAR_TRANSFER_INTERCEPT_B,  // Float
    139  ATT_LINEAR_TRANSFER_INTERCEPT_A   // Float
    140 };
    141 
    142 enum LinearTransferInputs { IN_LINEAR_TRANSFER_IN = IN_TRANSFER_IN };
    143 
    144 enum GammaTransferAtts {
    145  ATT_GAMMA_TRANSFER_DISABLE_R = ATT_TRANSFER_DISABLE_R,
    146  ATT_GAMMA_TRANSFER_DISABLE_G = ATT_TRANSFER_DISABLE_G,
    147  ATT_GAMMA_TRANSFER_DISABLE_B = ATT_TRANSFER_DISABLE_B,
    148  ATT_GAMMA_TRANSFER_DISABLE_A = ATT_TRANSFER_DISABLE_A,
    149  ATT_GAMMA_TRANSFER_AMPLITUDE_R,  // Float
    150  ATT_GAMMA_TRANSFER_AMPLITUDE_G,  // Float
    151  ATT_GAMMA_TRANSFER_AMPLITUDE_B,  // Float
    152  ATT_GAMMA_TRANSFER_AMPLITUDE_A,  // Float
    153  ATT_GAMMA_TRANSFER_EXPONENT_R,   // Float
    154  ATT_GAMMA_TRANSFER_EXPONENT_G,   // Float
    155  ATT_GAMMA_TRANSFER_EXPONENT_B,   // Float
    156  ATT_GAMMA_TRANSFER_EXPONENT_A,   // Float
    157  ATT_GAMMA_TRANSFER_OFFSET_R,     // Float
    158  ATT_GAMMA_TRANSFER_OFFSET_G,     // Float
    159  ATT_GAMMA_TRANSFER_OFFSET_B,     // Float
    160  ATT_GAMMA_TRANSFER_OFFSET_A      // Float
    161 };
    162 
    163 enum GammaTransferInputs { IN_GAMMA_TRANSFER_IN = IN_TRANSFER_IN };
    164 
    165 enum ConvolveMatrixAtts {
    166  ATT_CONVOLVE_MATRIX_KERNEL_SIZE = 0,     // IntSize
    167  ATT_CONVOLVE_MATRIX_KERNEL_MATRIX,       // Float[]
    168  ATT_CONVOLVE_MATRIX_DIVISOR,             // Float
    169  ATT_CONVOLVE_MATRIX_BIAS,                // Float
    170  ATT_CONVOLVE_MATRIX_TARGET,              // IntPoint
    171  ATT_CONVOLVE_MATRIX_RENDER_RECT,         // IntRect
    172  ATT_CONVOLVE_MATRIX_EDGE_MODE,           // ConvolveMatrixEdgeMode
    173  ATT_CONVOLVE_MATRIX_KERNEL_UNIT_LENGTH,  // Size
    174  ATT_CONVOLVE_MATRIX_PRESERVE_ALPHA,      // bool
    175 };
    176 
    177 enum ConvolveMatrixEdgeMode {
    178  EDGE_MODE_DUPLICATE = 0,
    179  EDGE_MODE_WRAP,
    180  EDGE_MODE_NONE
    181 };
    182 
    183 enum ConvolveMatrixInputs { IN_CONVOLVE_MATRIX_IN = 0 };
    184 
    185 enum DisplacementMapAtts {
    186  ATT_DISPLACEMENT_MAP_SCALE = 0,  // Float
    187  ATT_DISPLACEMENT_MAP_X_CHANNEL,  // ColorChannel
    188  ATT_DISPLACEMENT_MAP_Y_CHANNEL   // ColorChannel
    189 };
    190 
    191 enum ColorChannel {
    192  COLOR_CHANNEL_R = 0,
    193  COLOR_CHANNEL_G,
    194  COLOR_CHANNEL_B,
    195  COLOR_CHANNEL_A
    196 };
    197 
    198 enum DisplacementMapInputs {
    199  IN_DISPLACEMENT_MAP_IN = 0,
    200  IN_DISPLACEMENT_MAP_IN2
    201 };
    202 
    203 enum TurbulenceAtts {
    204  ATT_TURBULENCE_BASE_FREQUENCY = 0,  // Size
    205  ATT_TURBULENCE_NUM_OCTAVES,         // uint32_t
    206  ATT_TURBULENCE_SEED,                // uint32_t
    207  ATT_TURBULENCE_STITCHABLE,          // bool
    208  ATT_TURBULENCE_TYPE,                // TurbulenceType
    209  ATT_TURBULENCE_RECT                 // IntRect
    210 };
    211 
    212 enum TurbulenceType {
    213  TURBULENCE_TYPE_TURBULENCE = 0,
    214  TURBULENCE_TYPE_FRACTAL_NOISE
    215 };
    216 
    217 enum ArithmeticCombineAtts {
    218  ATT_ARITHMETIC_COMBINE_COEFFICIENTS = 0  // Float[4]
    219 };
    220 
    221 enum ArithmeticCombineInputs {
    222  IN_ARITHMETIC_COMBINE_IN = 0,
    223  IN_ARITHMETIC_COMBINE_IN2
    224 };
    225 
    226 enum CompositeAtts {
    227  ATT_COMPOSITE_OPERATOR = 0  // CompositeOperator
    228 };
    229 
    230 enum CompositeOperator {
    231  COMPOSITE_OPERATOR_OVER = 0,
    232  COMPOSITE_OPERATOR_IN,
    233  COMPOSITE_OPERATOR_OUT,
    234  COMPOSITE_OPERATOR_ATOP,
    235  COMPOSITE_OPERATOR_XOR,
    236  COMPOSITE_OPERATOR_LIGHTER
    237 };
    238 
    239 enum CompositeInputs {
    240  // arbitrary number of inputs
    241  IN_COMPOSITE_IN_START = 0
    242 };
    243 
    244 enum GaussianBlurAtts {
    245  ATT_GAUSSIAN_BLUR_STD_DEVIATION = 0  // Float
    246 };
    247 
    248 enum GaussianBlurInputs { IN_GAUSSIAN_BLUR_IN = 0 };
    249 
    250 enum DirectionalBlurAtts {
    251  ATT_DIRECTIONAL_BLUR_STD_DEVIATION = 0,  // Float
    252  ATT_DIRECTIONAL_BLUR_DIRECTION           // BlurDirection
    253 };
    254 
    255 enum BlurDirection { BLUR_DIRECTION_X = 0, BLUR_DIRECTION_Y };
    256 
    257 enum DirectionalBlurInputs { IN_DIRECTIONAL_BLUR_IN = 0 };
    258 
    259 enum LightingAtts {
    260  ATT_POINT_LIGHT_POSITION = 0,  // Point3D
    261 
    262  ATT_SPOT_LIGHT_POSITION,             // Point3D
    263  ATT_SPOT_LIGHT_POINTS_AT,            // Point3D
    264  ATT_SPOT_LIGHT_FOCUS,                // Float
    265  ATT_SPOT_LIGHT_LIMITING_CONE_ANGLE,  // Float
    266 
    267  ATT_DISTANT_LIGHT_AZIMUTH,    // Float
    268  ATT_DISTANT_LIGHT_ELEVATION,  // Float
    269 
    270  ATT_LIGHTING_COLOR,               // Color
    271  ATT_LIGHTING_SURFACE_SCALE,       // Float
    272  ATT_LIGHTING_KERNEL_UNIT_LENGTH,  // Size
    273  ATT_LIGHTING_RENDER_RECT,         // IntRect
    274 
    275  ATT_DIFFUSE_LIGHTING_DIFFUSE_CONSTANT,  // Float
    276 
    277  ATT_SPECULAR_LIGHTING_SPECULAR_CONSTANT,  // Float
    278  ATT_SPECULAR_LIGHTING_SPECULAR_EXPONENT   // Float
    279 };
    280 
    281 enum LightingInputs { IN_LIGHTING_IN = 0 };
    282 
    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
    289 };
    290 
    291 enum PointDiffuseInputs { IN_POINT_DIFFUSE_IN = IN_LIGHTING_IN };
    292 
    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
    302 };
    303 
    304 enum SpotDiffuseInputs { IN_SPOT_DIFFUSE_IN = IN_LIGHTING_IN };
    305 
    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
    313 };
    314 
    315 enum DistantDiffuseInputs { IN_DISTANT_DIFFUSE_IN = IN_LIGHTING_IN };
    316 
    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
    325 };
    326 
    327 enum PointSpecularInputs { IN_POINT_SPECULAR_IN = IN_LIGHTING_IN };
    328 
    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
    339 };
    340 
    341 enum SpotSpecularInputs { IN_SPOT_SPECULAR_IN = IN_LIGHTING_IN };
    342 
    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
    353 };
    354 
    355 enum DistantSpecularInputs { IN_DISTANT_SPECULAR_IN = IN_LIGHTING_IN };
    356 
    357 enum CropAtts {
    358  ATT_CROP_RECT = 0  // Rect
    359 };
    360 
    361 enum CropInputs { IN_CROP_IN = 0 };
    362 
    363 enum PremultiplyInputs { IN_PREMULTIPLY_IN = 0 };
    364 
    365 enum UnpremultiplyInputs { IN_UNPREMULTIPLY_IN = 0 };
    366 
    367 enum OpacityAtts { ATT_OPACITY_VALUE = 0 };
    368 
    369 enum OpacityInputs { IN_OPACITY_IN = 0 };
    370 
    371 class FilterNode : public external::AtomicRefCounted<FilterNode> {
    372 public:
    373  MOZ_DECLARE_REFCOUNTED_VIRTUAL_TYPENAME(FilterNode)
    374  virtual ~FilterNode() = default;
    375 
    376  virtual FilterBackend GetBackendType() = 0;
    377 
    378  virtual void SetInput(uint32_t aIndex, SourceSurface* aSurface) {
    379    MOZ_CRASH("GFX: FilterNode");
    380  }
    381  virtual void SetInput(uint32_t aIndex, FilterNode* aFilter) {
    382    MOZ_CRASH("GFX: FilterNode");
    383  }
    384 
    385  virtual void SetAttribute(uint32_t aIndex, bool) {
    386    MOZ_CRASH("GFX: FilterNode");
    387  }
    388  virtual void SetAttribute(uint32_t aIndex, uint32_t) {
    389    MOZ_CRASH("GFX: FilterNode");
    390  }
    391  virtual void SetAttribute(uint32_t aIndex, Float) {
    392    MOZ_CRASH("GFX: FilterNode");
    393  }
    394  virtual void SetAttribute(uint32_t aIndex, const Size&) {
    395    MOZ_CRASH("GFX: FilterNode");
    396  }
    397  virtual void SetAttribute(uint32_t aIndex, const IntSize&) {
    398    MOZ_CRASH("GFX: FilterNode");
    399  }
    400  virtual void SetAttribute(uint32_t aIndex, const IntPoint&) {
    401    MOZ_CRASH("GFX: FilterNode");
    402  }
    403  virtual void SetAttribute(uint32_t aIndex, const Rect&) {
    404    MOZ_CRASH("GFX: FilterNode");
    405  }
    406  virtual void SetAttribute(uint32_t aIndex, const IntRect&) {
    407    MOZ_CRASH("GFX: FilterNode");
    408  }
    409  virtual void SetAttribute(uint32_t aIndex, const Point&) {
    410    MOZ_CRASH("GFX: FilterNode");
    411  }
    412  virtual void SetAttribute(uint32_t aIndex, const Matrix&) {
    413    MOZ_CRASH("GFX: FilterNode");
    414  }
    415  virtual void SetAttribute(uint32_t aIndex, const Matrix5x4&) {
    416    MOZ_CRASH("GFX: FilterNode");
    417  }
    418  virtual void SetAttribute(uint32_t aIndex, const Point3D&) {
    419    MOZ_CRASH("GFX: FilterNode");
    420  }
    421  virtual void SetAttribute(uint32_t aIndex, const DeviceColor&) {
    422    MOZ_CRASH("GFX: FilterNode");
    423  }
    424  virtual void SetAttribute(uint32_t aIndex, const Float* aFloat,
    425                            uint32_t aSize) {
    426    MOZ_CRASH("GFX: FilterNode");
    427  }
    428 
    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;
    435  }
    436 
    437 protected:
    438  friend class Factory;
    439 
    440  FilterNode() = default;
    441 };
    442 
    443 }  // namespace gfx
    444 }  // namespace mozilla
    445 
    446 #endif