/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* ***** BEGIN LICENSE BLOCK *****
 * Version: MPL 1.1/GPL 2.0/LGPL 2.1
 *
 * The contents of this file are subject to the Mozilla Public License Version
 * 1.1 (the "License"); you may not use this file except in compliance with
 * the License. You may obtain a copy of the License at
 * http://www.mozilla.org/MPL/
 *
 * Software distributed under the License is distributed on an "AS IS" basis,
 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
 * for the specific language governing rights and limitations under the
 * License.
 *
 * The Original Code is the Mozilla SVG project.
 *
 * The Initial Developer of the Original Code is IBM Corporation.
 * Portions created by the Initial Developer are Copyright (C) 2004
 * the Initial Developer. All Rights Reserved.
 *
 * Contributor(s):
 *
 * Alternatively, the contents of this file may be used under the terms of
 * either of the GNU General Public License Version 2 or later (the "GPL"),
 * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
 * in which case the provisions of the GPL or the LGPL are applicable instead
 * of those above. If you wish to allow use of your version of this file only
 * under the terms of either the GPL or the LGPL, and not to allow others to
 * use your version of this file under the terms of the MPL, indicate your
 * decision by deleting the provisions above and replace them with the notice
 * and other provisions required by the GPL or the LGPL. If you do not delete
 * the provisions above, a recipient may use your version of this file under
 * the terms of any one of the MPL, the GPL or the LGPL.
 *
 * ***** END LICENSE BLOCK ***** */

#include "nsIDOMSVGElement.idl"
#include "nsIDOMSVGStylable.idl"

interface nsIDOMSVGAnimatedLength;
interface nsIDOMSVGAnimatedString;
interface nsIDOMSVGAnimatedNumber;
interface nsIDOMSVGAnimatedEnumeration;
interface nsIDOMSVGAnimatedNumberList;
interface nsIDOMSVGAnimatedInteger;
interface nsIDOMSVGAnimatedBoolean;

[scriptable, uuid(ab68567a-b830-4c46-9f2f-a28513a9e980)]
interface nsIDOMSVGFilterPrimitiveStandardAttributes : nsIDOMSVGElement
{ 
    readonly attribute nsIDOMSVGAnimatedLength      x;
    readonly attribute nsIDOMSVGAnimatedLength      y;
    readonly attribute nsIDOMSVGAnimatedLength      width;
    readonly attribute nsIDOMSVGAnimatedLength      height;
    readonly attribute nsIDOMSVGAnimatedString      result;
};

[scriptable, uuid(8F4DAF4C-DE2D-450f-A373-449AD62E3800)]
interface nsIDOMSVGFEBlendElement : nsIDOMSVGFilterPrimitiveStandardAttributes
{
    const unsigned short SVG_MODE_UNKNOWN   = 0;
    const unsigned short SVG_MODE_NORMAL    = 1;
    const unsigned short SVG_MODE_MULTIPLY  = 2;
    const unsigned short SVG_MODE_SCREEN    = 3;
    const unsigned short SVG_MODE_DARKEN    = 4;
    const unsigned short SVG_MODE_LIGHTEN   = 5;

    readonly attribute nsIDOMSVGAnimatedString        in1;
    readonly attribute nsIDOMSVGAnimatedString        in2;
    readonly attribute nsIDOMSVGAnimatedEnumeration   mode;
};

[scriptable, uuid(0E966878-EBF1-4455-86FD-F4C7B1F24777)]
interface nsIDOMSVGFEColorMatrixElement : nsIDOMSVGFilterPrimitiveStandardAttributes
{
    // Color Matrix Types
    const unsigned short SVG_FECOLORMATRIX_TYPE_UNKNOWN            = 0;
    const unsigned short SVG_FECOLORMATRIX_TYPE_MATRIX             = 1;
    const unsigned short SVG_FECOLORMATRIX_TYPE_SATURATE           = 2;
    const unsigned short SVG_FECOLORMATRIX_TYPE_HUE_ROTATE         = 3;
    const unsigned short SVG_FECOLORMATRIX_TYPE_LUMINANCE_TO_ALPHA = 4;

    readonly attribute nsIDOMSVGAnimatedString in1;
    readonly attribute nsIDOMSVGAnimatedEnumeration type;
    readonly attribute nsIDOMSVGAnimatedNumberList  values;
};

[scriptable, uuid(4de6b44a-f909-4948-bc43-5ee2ca6de55b)]
interface nsIDOMSVGFEComponentTransferElement : nsIDOMSVGFilterPrimitiveStandardAttributes
{
    readonly attribute nsIDOMSVGAnimatedString in1;
};

[scriptable, uuid(dfdb8833-0e7d-407d-acac-18e563ea94e8)]
interface nsIDOMSVGComponentTransferFunctionElement : nsIDOMSVGElement
{
    // Component Transfer Types
    const unsigned short SVG_FECOMPONENTTRANSFER_TYPE_UNKNOWN  = 0;
    const unsigned short SVG_FECOMPONENTTRANSFER_TYPE_IDENTITY = 1;
    const unsigned short SVG_FECOMPONENTTRANSFER_TYPE_TABLE    = 2;
    const unsigned short SVG_FECOMPONENTTRANSFER_TYPE_DISCRETE = 3;
    const unsigned short SVG_FECOMPONENTTRANSFER_TYPE_LINEAR   = 4;
    const unsigned short SVG_FECOMPONENTTRANSFER_TYPE_GAMMA    = 5;

    readonly attribute nsIDOMSVGAnimatedEnumeration type;
    readonly attribute nsIDOMSVGAnimatedNumberList  tableValues;
    readonly attribute nsIDOMSVGAnimatedNumber      slope;
    readonly attribute nsIDOMSVGAnimatedNumber      intercept;
    readonly attribute nsIDOMSVGAnimatedNumber      amplitude;
    readonly attribute nsIDOMSVGAnimatedNumber      exponent;
    readonly attribute nsIDOMSVGAnimatedNumber      offset;

    [noscript] void GenerateLookupTable(out PRUint8 aTable);
};

[scriptable, uuid(6FF3C539-1A3B-4a3f-8ACD-354D349EB7FC)]
interface nsIDOMSVGFECompositeElement : nsIDOMSVGFilterPrimitiveStandardAttributes
{
    // Operator Types
    const unsigned short SVG_OPERATOR_UNKNOWN    = 0;
    const unsigned short SVG_OPERATOR_OVER       = 1;
    const unsigned short SVG_OPERATOR_IN         = 2;
    const unsigned short SVG_OPERATOR_OUT        = 3;
    const unsigned short SVG_OPERATOR_ATOP       = 4;
    const unsigned short SVG_OPERATOR_XOR        = 5;
    const unsigned short SVG_OPERATOR_ARITHMETIC = 6;

    readonly attribute nsIDOMSVGAnimatedString  in1;
    readonly attribute nsIDOMSVGAnimatedString  in2;
    readonly attribute nsIDOMSVGAnimatedNumber  k1;
    readonly attribute nsIDOMSVGAnimatedNumber  k2;
    readonly attribute nsIDOMSVGAnimatedNumber  k3;
    readonly attribute nsIDOMSVGAnimatedNumber  k4;
    readonly attribute nsIDOMSVGAnimatedEnumeration operator;
    
    void setK ( in float k1, in float k2, in float k3, in float k4 );

};

[scriptable, uuid(85719a5d-9688-4c5f-bad5-c21847515200)]
interface nsIDOMSVGFEFuncRElement : nsIDOMSVGComponentTransferFunctionElement
{
};

[scriptable, uuid(28555e78-c6c2-4a98-af53-bfc2c6944295)]
interface nsIDOMSVGFEFuncGElement : nsIDOMSVGComponentTransferFunctionElement
{
};

[scriptable, uuid(8b139fe7-5d21-4af3-beda-414aa089b3fb)]
interface nsIDOMSVGFEFuncBElement : nsIDOMSVGComponentTransferFunctionElement
{
};

[scriptable, uuid(fa48511c-283a-437f-9507-c309ac6f0f57)]
interface nsIDOMSVGFEFuncAElement : nsIDOMSVGComponentTransferFunctionElement
{
};

[scriptable, uuid(43ff8d42-3380-4dbd-a916-7c2daa3ed7f4)]
interface nsIDOMSVGFEGaussianBlurElement : nsIDOMSVGFilterPrimitiveStandardAttributes
{ 
    readonly attribute nsIDOMSVGAnimatedString in1;
    readonly attribute nsIDOMSVGAnimatedNumber stdDeviationX;
    readonly attribute nsIDOMSVGAnimatedNumber stdDeviationY;

    void setStdDeviation ( in float stdDeviationX, in float stdDeviationY );
};

[scriptable, uuid(b860512c-2547-4d1f-bb43-b57b54d39014)]
interface nsIDOMSVGFEMergeElement : nsIDOMSVGFilterPrimitiveStandardAttributes
{
};

[scriptable, uuid(540c3447-4b07-4bd3-84df-30f66b68df14)]
interface nsIDOMSVGFEMergeNodeElement : nsIDOMSVGElement { 
    readonly attribute nsIDOMSVGAnimatedString in1;
};

[scriptable, uuid(c080f191-b22c-4fc0-85d5-a79dc3fa7ec8)]
interface nsIDOMSVGFEOffsetElement : nsIDOMSVGFilterPrimitiveStandardAttributes { 
    readonly attribute nsIDOMSVGAnimatedString in1;
    readonly attribute nsIDOMSVGAnimatedNumber dx;
    readonly attribute nsIDOMSVGAnimatedNumber dy;
};

[scriptable, uuid(4d507655-08c4-4726-8887-308a18ebbf2b)]
interface nsIDOMSVGFEFloodElement : nsIDOMSVGFilterPrimitiveStandardAttributes
{
    readonly attribute nsIDOMSVGAnimatedString in1;
};

[scriptable, uuid(ed042a81-39fc-4c89-9385-75758a2434b5)]
interface nsIDOMSVGFETileElement : nsIDOMSVGFilterPrimitiveStandardAttributes
{
    readonly attribute nsIDOMSVGAnimatedString in1;
};

[scriptable, uuid(77bc4d70-0d49-4c81-b7a7-7432f0fe3e04)]
interface nsIDOMSVGFETurbulenceElement : nsIDOMSVGFilterPrimitiveStandardAttributes
{ 
    // Turbulence Types
    const unsigned short SVG_TURBULENCE_TYPE_UNKNOWN      = 0;
    const unsigned short SVG_TURBULENCE_TYPE_FRACTALNOISE = 1;
    const unsigned short SVG_TURBULENCE_TYPE_TURBULENCE   = 2;
    // Stitch Options
    const unsigned short SVG_STITCHTYPE_UNKNOWN  = 0;
    const unsigned short SVG_STITCHTYPE_STITCH   = 1;
    const unsigned short SVG_STITCHTYPE_NOSTITCH = 2;

    readonly attribute nsIDOMSVGAnimatedNumber      baseFrequencyX;
    readonly attribute nsIDOMSVGAnimatedNumber      baseFrequencyY;
    readonly attribute nsIDOMSVGAnimatedInteger     numOctaves;
    readonly attribute nsIDOMSVGAnimatedNumber      seed;
    readonly attribute nsIDOMSVGAnimatedEnumeration stitchTiles;
    readonly attribute nsIDOMSVGAnimatedEnumeration type;
};

[scriptable, uuid(16154319-FB5F-4473-B360-5065B6096D33)]
interface nsIDOMSVGFEMorphologyElement : nsIDOMSVGFilterPrimitiveStandardAttributes
{ 
    // Operator Types
    const unsigned short SVG_OPERATOR_UNKNOWN  = 0;
    const unsigned short SVG_OPERATOR_ERODE    = 1;
    const unsigned short SVG_OPERATOR_DILATE   = 2;

    readonly attribute nsIDOMSVGAnimatedString      in1;
    readonly attribute nsIDOMSVGAnimatedNumber      radiusX;
    readonly attribute nsIDOMSVGAnimatedNumber      radiusY;
    readonly attribute nsIDOMSVGAnimatedEnumeration operator;
    
    void setRadius ( in float rx, in float ry );
};

[scriptable, uuid(42109b58-a8c1-4078-b44c-ec1d5d6b9574)]
interface nsIDOMSVGFEConvolveMatrixElement : nsIDOMSVGFilterPrimitiveStandardAttributes
{ 
    // Edge Mode Values
    const unsigned short SVG_EDGEMODE_UNKNOWN   = 0;
    const unsigned short SVG_EDGEMODE_DUPLICATE = 1;
    const unsigned short SVG_EDGEMODE_WRAP      = 2;
    const unsigned short SVG_EDGEMODE_NONE      = 3;

    readonly attribute nsIDOMSVGAnimatedString      in1;
    readonly attribute nsIDOMSVGAnimatedInteger     orderX;
    readonly attribute nsIDOMSVGAnimatedInteger     orderY;
    readonly attribute nsIDOMSVGAnimatedNumberList  kernelMatrix;
    readonly attribute nsIDOMSVGAnimatedNumber      divisor;
    readonly attribute nsIDOMSVGAnimatedNumber      bias;
    readonly attribute nsIDOMSVGAnimatedInteger     targetX;
    readonly attribute nsIDOMSVGAnimatedInteger     targetY;
    readonly attribute nsIDOMSVGAnimatedEnumeration edgeMode;
    readonly attribute nsIDOMSVGAnimatedNumber      kernelUnitLengthX;
    readonly attribute nsIDOMSVGAnimatedNumber      kernelUnitLengthY;
    readonly attribute nsIDOMSVGAnimatedBoolean     preserveAlpha;
};

[scriptable, uuid(2e9eb422-2398-4be9-a9b8-b1cc7aa9dd6f)]
interface nsIDOMSVGFEDiffuseLightingElement :  nsIDOMSVGFilterPrimitiveStandardAttributes
{ 
  readonly attribute nsIDOMSVGAnimatedString in1;
  readonly attribute nsIDOMSVGAnimatedNumber surfaceScale;
  readonly attribute nsIDOMSVGAnimatedNumber diffuseConstant;
  readonly attribute nsIDOMSVGAnimatedNumber kernelUnitLengthX;
  readonly attribute nsIDOMSVGAnimatedNumber kernelUnitLengthY;
};

[scriptable, uuid(49c38287-a7c2-4895-a630-86d2b45df23c)]
interface nsIDOMSVGFESpecularLightingElement : nsIDOMSVGFilterPrimitiveStandardAttributes
{ 
  readonly attribute nsIDOMSVGAnimatedString in1;
  readonly attribute nsIDOMSVGAnimatedNumber surfaceScale;
  readonly attribute nsIDOMSVGAnimatedNumber specularConstant;
  readonly attribute nsIDOMSVGAnimatedNumber specularExponent;
  readonly attribute nsIDOMSVGAnimatedNumber kernelUnitLengthX;
  readonly attribute nsIDOMSVGAnimatedNumber kernelUnitLengthY;
};

[scriptable, uuid(02141672-7f2c-412a-a7d7-4caa194842e9)]
interface nsIDOMSVGFEDistantLightElement : nsIDOMSVGElement { 
  readonly attribute nsIDOMSVGAnimatedNumber azimuth;
  readonly attribute nsIDOMSVGAnimatedNumber elevation;
};

[scriptable, uuid(557f128a-026b-4fa8-a44c-605df7bfd62e)]
interface nsIDOMSVGFEPointLightElement : nsIDOMSVGElement { 
  readonly attribute nsIDOMSVGAnimatedNumber x;
  readonly attribute nsIDOMSVGAnimatedNumber y;
  readonly attribute nsIDOMSVGAnimatedNumber z;
};

[scriptable, uuid(5515dd05-3d9d-4d6c-8460-a04aaf5afe15)]
interface nsIDOMSVGFESpotLightElement : nsIDOMSVGElement { 
  readonly attribute nsIDOMSVGAnimatedNumber x;
  readonly attribute nsIDOMSVGAnimatedNumber y;
  readonly attribute nsIDOMSVGAnimatedNumber z;
  readonly attribute nsIDOMSVGAnimatedNumber pointsAtX;
  readonly attribute nsIDOMSVGAnimatedNumber pointsAtY;
  readonly attribute nsIDOMSVGAnimatedNumber pointsAtZ;
  readonly attribute nsIDOMSVGAnimatedNumber specularExponent;
  readonly attribute nsIDOMSVGAnimatedNumber limitingConeAngle;
};

[scriptable, uuid(3250f5c9-9c76-4e77-96d8-5f0cc85f41c4)]
interface nsIDOMSVGFEImageElement : nsIDOMSVGFilterPrimitiveStandardAttributes
/*
  nsIDOMSVGURIReference,
  nsIDOMSVGLangSpace,
  nsIDOMSVGExternalResourcesRequired
*/
{
};

[scriptable, uuid(80e1ea9c-eff3-490a-8c98-918963d2e7e9)]
interface nsIDOMSVGFEDisplacementMapElement : nsIDOMSVGFilterPrimitiveStandardAttributes
{
  // Channel Selectors
  const unsigned short SVG_CHANNEL_UNKNOWN = 0;
  const unsigned short SVG_CHANNEL_R       = 1;
  const unsigned short SVG_CHANNEL_G       = 2;
  const unsigned short SVG_CHANNEL_B       = 3;
  const unsigned short SVG_CHANNEL_A       = 4;

  readonly attribute nsIDOMSVGAnimatedString      in1;
  readonly attribute nsIDOMSVGAnimatedString      in2;
  readonly attribute nsIDOMSVGAnimatedNumber      scale;
  readonly attribute nsIDOMSVGAnimatedEnumeration xChannelSelector;
  readonly attribute nsIDOMSVGAnimatedEnumeration yChannelSelector;
};
