/* -*- 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(8404c54c-e9f4-4b3f-b051-6c50ce302707)]
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(0809043b-8806-4620-bb1b-ce16a963df5c)]
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(3e3a705b-019b-46c2-b825-b28cd253985f)]
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(e38fee58-b3d2-4a43-aa20-cb120f20f169)]
interface nsIDOMSVGFEComponentTransferElement : nsIDOMSVGFilterPrimitiveStandardAttributes
{
    readonly attribute nsIDOMSVGAnimatedString in1;
};

[scriptable, uuid(d47f3d16-f01a-4f3d-8c8d-5f731071a9f3)]
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;
};

[scriptable, uuid(5161f394-f864-4f15-9dd3-5dc2942b7af6)]
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(d7a30bca-e11f-4f9f-8eac-60503992d01f)]
interface nsIDOMSVGFEFuncRElement : nsIDOMSVGComponentTransferFunctionElement
{
};

[scriptable, uuid(1e03b087-09ed-4161-bd02-66090336c2fb)]
interface nsIDOMSVGFEFuncGElement : nsIDOMSVGComponentTransferFunctionElement
{
};

[scriptable, uuid(cd7a6e70-92f1-43ac-8058-7a95cae8b0f9)]
interface nsIDOMSVGFEFuncBElement : nsIDOMSVGComponentTransferFunctionElement
{
};

[scriptable, uuid(d7d1f35d-eed5-4dad-a964-e122b0130355)]
interface nsIDOMSVGFEFuncAElement : nsIDOMSVGComponentTransferFunctionElement
{
};

[scriptable, uuid(f553395b-4f49-4ee5-ab4e-f7454559bc01)]
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(ac3451df-d5c0-4cf9-afff-2795f18a613f)]
interface nsIDOMSVGFEMergeElement : nsIDOMSVGFilterPrimitiveStandardAttributes
{
};

[scriptable, uuid(b12bb1de-5894-4d7e-9e66-290e1aa00e85)]
interface nsIDOMSVGFEMergeNodeElement : nsIDOMSVGElement { 
    readonly attribute nsIDOMSVGAnimatedString in1;
};

[scriptable, uuid(b1ca27de-f871-42cf-9b11-ff4fe815d773)]
interface nsIDOMSVGFEOffsetElement : nsIDOMSVGFilterPrimitiveStandardAttributes { 
    readonly attribute nsIDOMSVGAnimatedString in1;
    readonly attribute nsIDOMSVGAnimatedNumber dx;
    readonly attribute nsIDOMSVGAnimatedNumber dy;
};

[scriptable, uuid(1d2ed8b1-df5f-47da-8471-a95419f4623c)]
interface nsIDOMSVGFEFloodElement : nsIDOMSVGFilterPrimitiveStandardAttributes
{
};

[scriptable, uuid(80e6a232-ae4e-42f6-92dd-1692fc5c204d)]
interface nsIDOMSVGFETileElement : nsIDOMSVGFilterPrimitiveStandardAttributes
{
    readonly attribute nsIDOMSVGAnimatedString in1;
};

[scriptable, uuid(98f4704a-e713-4849-b4df-0a58c0aa37de)]
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(a94e66ab-b02a-4a2e-9fe5-82547ffe20b4)]
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(6f8665d3-c4ff-4037-b978-23b3acd7606f)]
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(0ece9f3f-1eba-48ba-bb79-71dffeed8991)]
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(63c69f01-0d1c-42b5-9eb0-8dbfe5c09132)]
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(a00f01ad-e078-409c-b521-a4179691026e)]
interface nsIDOMSVGFEDistantLightElement : nsIDOMSVGElement { 
  readonly attribute nsIDOMSVGAnimatedNumber azimuth;
  readonly attribute nsIDOMSVGAnimatedNumber elevation;
};

[scriptable, uuid(7a20d48c-7cdb-46e1-a309-382bb06b034c)]
interface nsIDOMSVGFEPointLightElement : nsIDOMSVGElement { 
  readonly attribute nsIDOMSVGAnimatedNumber x;
  readonly attribute nsIDOMSVGAnimatedNumber y;
  readonly attribute nsIDOMSVGAnimatedNumber z;
};

[scriptable, uuid(302fb017-7097-443c-880a-8770843140fb)]
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(2ddaa418-8212-4154-85e8-0cd62958c161)]
interface nsIDOMSVGFEImageElement : nsIDOMSVGFilterPrimitiveStandardAttributes
/*
  nsIDOMSVGURIReference,
  nsIDOMSVGLangSpace,
  nsIDOMSVGExternalResourcesRequired
*/
{
};

[scriptable, uuid(d610bd29-6423-4020-9f06-f6003708479d)]
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;
};
