gfx/2d/Filters.h

Tue, 06 Jan 2015 21:39:09 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Tue, 06 Jan 2015 21:39:09 +0100
branch
TOR_BUG_9701
changeset 8
97036ab72558
permissions
-rw-r--r--

Conditionally force memory storage according to privacy.thirdparty.isolate;
This solves Tor bug #9701, complying with disk avoidance documented in
https://www.torproject.org/projects/torbrowser/design/#disk-avoidance.

     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/. */
     6 #ifndef MOZILLA_GFX_FILTERS_H_
     7 #define MOZILLA_GFX_FILTERS_H_
     9 #include "Types.h"
    10 #include "mozilla/RefPtr.h"
    12 #include "Point.h"
    13 #include "Matrix.h"
    14 #include <vector>
    16 namespace mozilla {
    17 namespace gfx {
    19 class SourceSurface;
    21 enum FilterBackend {
    22   FILTER_BACKEND_SOFTWARE = 0,
    23   FILTER_BACKEND_DIRECT2D1_1,
    24   FILTER_BACKEND_RECORDING
    25 };
    27 enum TransformFilterAtts
    28 {
    29   ATT_TRANSFORM_MATRIX = 0,                 // Matrix
    30   ATT_TRANSFORM_FILTER                      // Filter
    31 };
    33 enum TransformFilterInputs
    34 {
    35   IN_TRANSFORM_IN = 0
    36 };
    38 enum BlendFilterAtts
    39 {
    40   ATT_BLEND_BLENDMODE = 0                   // uint32_t
    41 };
    43 enum BlendMode
    44 {
    45   BLEND_MODE_MULTIPLY = 0,
    46   BLEND_MODE_SCREEN,
    47   BLEND_MODE_DARKEN,
    48   BLEND_MODE_LIGHTEN
    49 };
    51 enum BlendFilterInputs
    52 {
    53   IN_BLEND_IN = 0,
    54   IN_BLEND_IN2
    55 };
    57 enum MorphologyFilterAtts
    58 {
    59   ATT_MORPHOLOGY_RADII = 0,                 // IntSize
    60   ATT_MORPHOLOGY_OPERATOR                   // MorphologyOperator
    61 };
    63 enum MorphologyOperator
    64 {
    65   MORPHOLOGY_OPERATOR_ERODE = 0,
    66   MORPHOLOGY_OPERATOR_DILATE
    67 };
    69 enum MorphologyFilterInputs
    70 {
    71   IN_MORPHOLOGY_IN = 0
    72 };
    74 enum AlphaMode
    75 {
    76   ALPHA_MODE_PREMULTIPLIED = 0,
    77   ALPHA_MODE_STRAIGHT
    78 };
    80 enum ColorMatrixFilterAtts
    81 {
    82   ATT_COLOR_MATRIX_MATRIX = 0,              // Matrix5x4
    83   ATT_COLOR_MATRIX_ALPHA_MODE               // AlphaMode
    84 };
    86 enum ColorMatrixFilterInputs
    87 {
    88   IN_COLOR_MATRIX_IN = 0
    89 };
    91 enum FloodFilterAtts
    92 {
    93   ATT_FLOOD_COLOR = 0                       // Color
    94 };
    96 enum FloodFilterInputs
    97 {
    98   IN_FLOOD_IN = 0
    99 };
   101 enum TileFilterAtts
   102 {
   103   ATT_TILE_SOURCE_RECT = 0                  // IntRect
   104 };
   106 enum TileFilterInputs
   107 {
   108   IN_TILE_IN = 0
   109 };
   111 enum TransferAtts
   112 {
   113   ATT_TRANSFER_DISABLE_R = 0,               // bool
   114   ATT_TRANSFER_DISABLE_G,                   // bool
   115   ATT_TRANSFER_DISABLE_B,                   // bool
   116   ATT_TRANSFER_DISABLE_A                    // bool
   117 };
   119 enum TransferInputs
   120 {
   121   IN_TRANSFER_IN = 0
   122 };
   124 enum TableTransferAtts
   125 {
   126   ATT_TABLE_TRANSFER_DISABLE_R = ATT_TRANSFER_DISABLE_R,
   127   ATT_TABLE_TRANSFER_DISABLE_G = ATT_TRANSFER_DISABLE_G,
   128   ATT_TABLE_TRANSFER_DISABLE_B = ATT_TRANSFER_DISABLE_B,
   129   ATT_TABLE_TRANSFER_DISABLE_A = ATT_TRANSFER_DISABLE_A,
   130   ATT_TABLE_TRANSFER_TABLE_R,               // Float[]
   131   ATT_TABLE_TRANSFER_TABLE_G,               // Float[]
   132   ATT_TABLE_TRANSFER_TABLE_B,               // Float[]
   133   ATT_TABLE_TRANSFER_TABLE_A                // Float[]
   134 };
   136 enum TableTransferInputs
   137 {
   138   IN_TABLE_TRANSFER_IN = IN_TRANSFER_IN
   139 };
   141 enum DiscreteTransferAtts
   142 {
   143   ATT_DISCRETE_TRANSFER_DISABLE_R = ATT_TRANSFER_DISABLE_R,
   144   ATT_DISCRETE_TRANSFER_DISABLE_G = ATT_TRANSFER_DISABLE_G,
   145   ATT_DISCRETE_TRANSFER_DISABLE_B = ATT_TRANSFER_DISABLE_B,
   146   ATT_DISCRETE_TRANSFER_DISABLE_A = ATT_TRANSFER_DISABLE_A,
   147   ATT_DISCRETE_TRANSFER_TABLE_R,            // Float[]
   148   ATT_DISCRETE_TRANSFER_TABLE_G,            // Float[]
   149   ATT_DISCRETE_TRANSFER_TABLE_B,            // Float[]
   150   ATT_DISCRETE_TRANSFER_TABLE_A             // Float[]
   151 };
   153 enum DiscreteTransferInputs
   154 {
   155   IN_DISCRETE_TRANSFER_IN = IN_TRANSFER_IN
   156 };
   158 enum LinearTransferAtts
   159 {
   160   ATT_LINEAR_TRANSFER_DISABLE_R = ATT_TRANSFER_DISABLE_R,
   161   ATT_LINEAR_TRANSFER_DISABLE_G = ATT_TRANSFER_DISABLE_G,
   162   ATT_LINEAR_TRANSFER_DISABLE_B = ATT_TRANSFER_DISABLE_B,
   163   ATT_LINEAR_TRANSFER_DISABLE_A = ATT_TRANSFER_DISABLE_A,
   164   ATT_LINEAR_TRANSFER_SLOPE_R,              // Float
   165   ATT_LINEAR_TRANSFER_SLOPE_G,              // Float
   166   ATT_LINEAR_TRANSFER_SLOPE_B,              // Float
   167   ATT_LINEAR_TRANSFER_SLOPE_A,              // Float
   168   ATT_LINEAR_TRANSFER_INTERCEPT_R,          // Float
   169   ATT_LINEAR_TRANSFER_INTERCEPT_G,          // Float
   170   ATT_LINEAR_TRANSFER_INTERCEPT_B,          // Float
   171   ATT_LINEAR_TRANSFER_INTERCEPT_A           // Float
   172 };
   174 enum LinearTransferInputs
   175 {
   176   IN_LINEAR_TRANSFER_IN = IN_TRANSFER_IN
   177 };
   179 enum GammaTransferAtts
   180 {
   181   ATT_GAMMA_TRANSFER_DISABLE_R = ATT_TRANSFER_DISABLE_R,
   182   ATT_GAMMA_TRANSFER_DISABLE_G = ATT_TRANSFER_DISABLE_G,
   183   ATT_GAMMA_TRANSFER_DISABLE_B = ATT_TRANSFER_DISABLE_B,
   184   ATT_GAMMA_TRANSFER_DISABLE_A = ATT_TRANSFER_DISABLE_A,
   185   ATT_GAMMA_TRANSFER_AMPLITUDE_R,             // Float
   186   ATT_GAMMA_TRANSFER_AMPLITUDE_G,             // Float
   187   ATT_GAMMA_TRANSFER_AMPLITUDE_B,             // Float
   188   ATT_GAMMA_TRANSFER_AMPLITUDE_A,             // Float
   189   ATT_GAMMA_TRANSFER_EXPONENT_R,              // Float
   190   ATT_GAMMA_TRANSFER_EXPONENT_G,              // Float
   191   ATT_GAMMA_TRANSFER_EXPONENT_B,              // Float
   192   ATT_GAMMA_TRANSFER_EXPONENT_A,              // Float
   193   ATT_GAMMA_TRANSFER_OFFSET_R,                // Float
   194   ATT_GAMMA_TRANSFER_OFFSET_G,                // Float
   195   ATT_GAMMA_TRANSFER_OFFSET_B,                // Float
   196   ATT_GAMMA_TRANSFER_OFFSET_A                 // Float
   197 };
   199 enum GammaTransferInputs
   200 {
   201   IN_GAMMA_TRANSFER_IN = IN_TRANSFER_IN
   202 };
   204 enum ConvolveMatrixAtts
   205 {
   206   ATT_CONVOLVE_MATRIX_KERNEL_SIZE = 0,      // IntSize
   207   ATT_CONVOLVE_MATRIX_KERNEL_MATRIX,        // Float[]
   208   ATT_CONVOLVE_MATRIX_DIVISOR,              // Float
   209   ATT_CONVOLVE_MATRIX_BIAS,                 // Float
   210   ATT_CONVOLVE_MATRIX_TARGET,               // IntPoint
   211   ATT_CONVOLVE_MATRIX_SOURCE_RECT,          // IntRect
   212   ATT_CONVOLVE_MATRIX_EDGE_MODE,            // ConvolveMatrixEdgeMode
   213   ATT_CONVOLVE_MATRIX_KERNEL_UNIT_LENGTH,   // Size
   214   ATT_CONVOLVE_MATRIX_PRESERVE_ALPHA,       // bool
   215 };
   217 enum ConvolveMatrixEdgeMode
   218 {
   219   EDGE_MODE_DUPLICATE = 0,
   220   EDGE_MODE_WRAP,
   221   EDGE_MODE_NONE
   222 };
   224 enum ConvolveMatrixInputs
   225 {
   226   IN_CONVOLVE_MATRIX_IN = 0
   227 };
   229 enum DisplacementMapAtts
   230 {
   231   ATT_DISPLACEMENT_MAP_SCALE = 0,           // Float
   232   ATT_DISPLACEMENT_MAP_X_CHANNEL,           // ColorChannel
   233   ATT_DISPLACEMENT_MAP_Y_CHANNEL            // ColorChannel
   234 };
   236 enum ColorChannel
   237 {
   238   COLOR_CHANNEL_R = 0,
   239   COLOR_CHANNEL_G,
   240   COLOR_CHANNEL_B,
   241   COLOR_CHANNEL_A
   242 };
   244 enum DisplacementMapInputs
   245 {
   246   IN_DISPLACEMENT_MAP_IN = 0,
   247   IN_DISPLACEMENT_MAP_IN2
   248 };
   250 enum TurbulenceAtts
   251 {
   252   ATT_TURBULENCE_BASE_FREQUENCY = 0,        // Size
   253   ATT_TURBULENCE_NUM_OCTAVES,               // uint32_t
   254   ATT_TURBULENCE_SEED,                      // uint32_t
   255   ATT_TURBULENCE_STITCHABLE,                // bool
   256   ATT_TURBULENCE_TYPE,                      // TurbulenceType
   257   ATT_TURBULENCE_RECT                       // IntRect
   258 };
   260 enum TurbulenceType
   261 {
   262   TURBULENCE_TYPE_TURBULENCE = 0,
   263   TURBULENCE_TYPE_FRACTAL_NOISE
   264 };
   266 enum ArithmeticCombineAtts
   267 {
   268   ATT_ARITHMETIC_COMBINE_COEFFICIENTS = 0   // Float[4]
   269 };
   271 enum ArithmeticCombineInputs
   272 {
   273   IN_ARITHMETIC_COMBINE_IN = 0,
   274   IN_ARITHMETIC_COMBINE_IN2
   275 };
   277 enum CompositeAtts
   278 {
   279   ATT_COMPOSITE_OPERATOR = 0                // CompositeOperator
   280 };
   282 enum CompositeOperator
   283 {
   284   COMPOSITE_OPERATOR_OVER = 0,
   285   COMPOSITE_OPERATOR_IN,
   286   COMPOSITE_OPERATOR_OUT,
   287   COMPOSITE_OPERATOR_ATOP,
   288   COMPOSITE_OPERATOR_XOR
   289 };
   291 enum CompositeInputs
   292 {
   293   // arbitrary number of inputs
   294   IN_COMPOSITE_IN_START = 0
   295 };
   297 enum GaussianBlurAtts
   298 {
   299   ATT_GAUSSIAN_BLUR_STD_DEVIATION = 0       // Float
   300 };
   302 enum GaussianBlurInputs
   303 {
   304   IN_GAUSSIAN_BLUR_IN = 0
   305 };
   307 enum DirectionalBlurAtts
   308 {
   309   ATT_DIRECTIONAL_BLUR_STD_DEVIATION = 0,   // Float
   310   ATT_DIRECTIONAL_BLUR_DIRECTION            // BlurDirection
   311 };
   313 enum BlurDirection
   314 {
   315   BLUR_DIRECTION_X = 0,
   316   BLUR_DIRECTION_Y
   317 };
   319 enum DirectionalBlurInputs
   320 {
   321   IN_DIRECTIONAL_BLUR_IN = 0
   322 };
   324 enum LightingAtts
   325 {
   326   ATT_POINT_LIGHT_POSITION = 0,             // Point3D
   328   ATT_SPOT_LIGHT_POSITION,                  // Point3D
   329   ATT_SPOT_LIGHT_POINTS_AT,                 // Point3D
   330   ATT_SPOT_LIGHT_FOCUS,                     // Float
   331   ATT_SPOT_LIGHT_LIMITING_CONE_ANGLE,       // Float
   333   ATT_DISTANT_LIGHT_AZIMUTH,                // Float
   334   ATT_DISTANT_LIGHT_ELEVATION,              // Float
   336   ATT_LIGHTING_COLOR,                       // Color
   337   ATT_LIGHTING_SURFACE_SCALE,               // Float
   338   ATT_LIGHTING_KERNEL_UNIT_LENGTH,          // Size
   340   ATT_DIFFUSE_LIGHTING_DIFFUSE_CONSTANT,    // Float
   342   ATT_SPECULAR_LIGHTING_SPECULAR_CONSTANT,  // Float
   343   ATT_SPECULAR_LIGHTING_SPECULAR_EXPONENT   // Float
   344 };
   346 enum LightingInputs
   347 {
   348   IN_LIGHTING_IN = 0
   349 };
   351 enum PointDiffuseAtts
   352 {
   353   ATT_POINT_DIFFUSE_POSITION              = ATT_POINT_LIGHT_POSITION,
   354   ATT_POINT_DIFFUSE_COLOR                 = ATT_LIGHTING_COLOR,
   355   ATT_POINT_DIFFUSE_SURFACE_SCALE         = ATT_LIGHTING_SURFACE_SCALE,
   356   ATT_POINT_DIFFUSE_KERNEL_UNIT_LENGTH    = ATT_LIGHTING_KERNEL_UNIT_LENGTH,
   357   ATT_POINT_DIFFUSE_DIFFUSE_CONSTANT      = ATT_DIFFUSE_LIGHTING_DIFFUSE_CONSTANT
   358 };
   360 enum PointDiffuseInputs
   361 {
   362   IN_POINT_DIFFUSE_IN = IN_LIGHTING_IN
   363 };
   365 enum SpotDiffuseAtts
   366 {
   367   ATT_SPOT_DIFFUSE_POSITION               = ATT_SPOT_LIGHT_POSITION,
   368   ATT_SPOT_DIFFUSE_POINTS_AT              = ATT_SPOT_LIGHT_POINTS_AT,
   369   ATT_SPOT_DIFFUSE_FOCUS                  = ATT_SPOT_LIGHT_FOCUS,
   370   ATT_SPOT_DIFFUSE_LIMITING_CONE_ANGLE    = ATT_SPOT_LIGHT_LIMITING_CONE_ANGLE,
   371   ATT_SPOT_DIFFUSE_COLOR                  = ATT_LIGHTING_COLOR,
   372   ATT_SPOT_DIFFUSE_SURFACE_SCALE          = ATT_LIGHTING_SURFACE_SCALE,
   373   ATT_SPOT_DIFFUSE_KERNEL_UNIT_LENGTH     = ATT_LIGHTING_KERNEL_UNIT_LENGTH,
   374   ATT_SPOT_DIFFUSE_DIFFUSE_CONSTANT       = ATT_DIFFUSE_LIGHTING_DIFFUSE_CONSTANT
   375 };
   377 enum SpotDiffuseInputs
   378 {
   379   IN_SPOT_DIFFUSE_IN = IN_LIGHTING_IN
   380 };
   382 enum DistantDiffuseAtts
   383 {
   384   ATT_DISTANT_DIFFUSE_AZIMUTH             = ATT_DISTANT_LIGHT_AZIMUTH,
   385   ATT_DISTANT_DIFFUSE_ELEVATION           = ATT_DISTANT_LIGHT_ELEVATION,
   386   ATT_DISTANT_DIFFUSE_COLOR               = ATT_LIGHTING_COLOR,
   387   ATT_DISTANT_DIFFUSE_SURFACE_SCALE       = ATT_LIGHTING_SURFACE_SCALE,
   388   ATT_DISTANT_DIFFUSE_KERNEL_UNIT_LENGTH  = ATT_LIGHTING_KERNEL_UNIT_LENGTH,
   389   ATT_DISTANT_DIFFUSE_DIFFUSE_CONSTANT    = ATT_DIFFUSE_LIGHTING_DIFFUSE_CONSTANT
   390 };
   392 enum DistantDiffuseInputs
   393 {
   394   IN_DISTANT_DIFFUSE_IN = IN_LIGHTING_IN
   395 };
   397 enum PointSpecularAtts
   398 {
   399   ATT_POINT_SPECULAR_POSITION             = ATT_POINT_LIGHT_POSITION,
   400   ATT_POINT_SPECULAR_COLOR                = ATT_LIGHTING_COLOR,
   401   ATT_POINT_SPECULAR_SURFACE_SCALE        = ATT_LIGHTING_SURFACE_SCALE,
   402   ATT_POINT_SPECULAR_KERNEL_UNIT_LENGTH   = ATT_LIGHTING_KERNEL_UNIT_LENGTH,
   403   ATT_POINT_SPECULAR_SPECULAR_CONSTANT    = ATT_SPECULAR_LIGHTING_SPECULAR_CONSTANT,
   404   ATT_POINT_SPECULAR_SPECULAR_EXPONENT    = ATT_SPECULAR_LIGHTING_SPECULAR_EXPONENT
   405 };
   407 enum PointSpecularInputs
   408 {
   409   IN_POINT_SPECULAR_IN = IN_LIGHTING_IN
   410 };
   412 enum SpotSpecularAtts
   413 {
   414   ATT_SPOT_SPECULAR_POSITION              = ATT_SPOT_LIGHT_POSITION,
   415   ATT_SPOT_SPECULAR_POINTS_AT             = ATT_SPOT_LIGHT_POINTS_AT,
   416   ATT_SPOT_SPECULAR_FOCUS                 = ATT_SPOT_LIGHT_FOCUS,
   417   ATT_SPOT_SPECULAR_LIMITING_CONE_ANGLE   = ATT_SPOT_LIGHT_LIMITING_CONE_ANGLE,
   418   ATT_SPOT_SPECULAR_COLOR                 = ATT_LIGHTING_COLOR,
   419   ATT_SPOT_SPECULAR_SURFACE_SCALE         = ATT_LIGHTING_SURFACE_SCALE,
   420   ATT_SPOT_SPECULAR_KERNEL_UNIT_LENGTH    = ATT_LIGHTING_KERNEL_UNIT_LENGTH,
   421   ATT_SPOT_SPECULAR_SPECULAR_CONSTANT     = ATT_SPECULAR_LIGHTING_SPECULAR_CONSTANT,
   422   ATT_SPOT_SPECULAR_SPECULAR_EXPONENT     = ATT_SPECULAR_LIGHTING_SPECULAR_EXPONENT
   423 };
   425 enum SpotSpecularInputs
   426 {
   427   IN_SPOT_SPECULAR_IN = IN_LIGHTING_IN
   428 };
   430 enum DistantSpecularAtts
   431 {
   432   ATT_DISTANT_SPECULAR_AZIMUTH            = ATT_DISTANT_LIGHT_AZIMUTH,
   433   ATT_DISTANT_SPECULAR_ELEVATION          = ATT_DISTANT_LIGHT_ELEVATION,
   434   ATT_DISTANT_SPECULAR_COLOR              = ATT_LIGHTING_COLOR,
   435   ATT_DISTANT_SPECULAR_SURFACE_SCALE      = ATT_LIGHTING_SURFACE_SCALE,
   436   ATT_DISTANT_SPECULAR_KERNEL_UNIT_LENGTH = ATT_LIGHTING_KERNEL_UNIT_LENGTH,
   437   ATT_DISTANT_SPECULAR_SPECULAR_CONSTANT  = ATT_SPECULAR_LIGHTING_SPECULAR_CONSTANT,
   438   ATT_DISTANT_SPECULAR_SPECULAR_EXPONENT  = ATT_SPECULAR_LIGHTING_SPECULAR_EXPONENT
   439 };
   441 enum DistantSpecularInputs
   442 {
   443   IN_DISTANT_SPECULAR_IN = IN_LIGHTING_IN
   444 };
   446 enum CropAtts
   447 {
   448   ATT_CROP_RECT = 0                         // Rect
   449 };
   451 enum CropInputs
   452 {
   453   IN_CROP_IN = 0
   454 };
   456 enum PremultiplyInputs
   457 {
   458   IN_PREMULTIPLY_IN = 0
   459 };
   461 enum UnpremultiplyInputs
   462 {
   463   IN_UNPREMULTIPLY_IN = 0
   464 };
   466 class FilterNode : public RefCounted<FilterNode>
   467 {
   468 public:
   469   MOZ_DECLARE_REFCOUNTED_VIRTUAL_TYPENAME(FilterNode)
   470   virtual ~FilterNode() {}
   472   virtual FilterBackend GetBackendType() = 0;
   474   virtual void SetInput(uint32_t aIndex, SourceSurface *aSurface) { MOZ_CRASH(); }
   475   virtual void SetInput(uint32_t aIndex, FilterNode *aFilter) { MOZ_CRASH(); }
   477   virtual void SetAttribute(uint32_t aIndex, bool) { MOZ_CRASH(); }
   478   virtual void SetAttribute(uint32_t aIndex, uint32_t) { MOZ_CRASH(); }
   479   virtual void SetAttribute(uint32_t aIndex, Float) { MOZ_CRASH(); }
   480   virtual void SetAttribute(uint32_t aIndex, const Size &) { MOZ_CRASH(); }
   481   virtual void SetAttribute(uint32_t aIndex, const IntSize &) { MOZ_CRASH(); }
   482   virtual void SetAttribute(uint32_t aIndex, const IntPoint &) { MOZ_CRASH(); }
   483   virtual void SetAttribute(uint32_t aIndex, const Rect &) { MOZ_CRASH(); }
   484   virtual void SetAttribute(uint32_t aIndex, const IntRect &) { MOZ_CRASH(); }
   485   virtual void SetAttribute(uint32_t aIndex, const Point &) { MOZ_CRASH(); }
   486   virtual void SetAttribute(uint32_t aIndex, const Matrix &) { MOZ_CRASH(); }
   487   virtual void SetAttribute(uint32_t aIndex, const Matrix5x4 &) { MOZ_CRASH(); }
   488   virtual void SetAttribute(uint32_t aIndex, const Point3D &) { MOZ_CRASH(); }
   489   virtual void SetAttribute(uint32_t aIndex, const Color &) { MOZ_CRASH(); }
   490   virtual void SetAttribute(uint32_t aIndex, const Float* aFloat, uint32_t aSize) { MOZ_CRASH(); }
   492 protected:
   493   friend class Factory;
   495   FilterNode() {}
   496 };
   498 }
   499 }
   501 #endif

mercurial