/* -*- 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(f96cedb9-568c-43d0-b07f-565d5116ae34)]
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(215023bc-e4d6-473d-b0fd-db96727b9e0d)]
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(92205955-4d55-4097-9b93-b38d7e5a72e4)]
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(69612612-c893-4d2c-902d-5a4887ebfe0a)]
interface nsIDOMSVGFEComponentTransferElement : nsIDOMSVGFilterPrimitiveStandardAttributes
{
    readonly attribute nsIDOMSVGAnimatedString in1;
};

[scriptable, uuid(1b758c80-c6f2-4f57-a8cf-964c98c8d0f0)]
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(71142479-68eb-44a3-9964-19faa09c4720)]
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(4f358571-3dcb-4ac5-990b-19e3fd355d43)]
interface nsIDOMSVGFEFuncRElement : nsIDOMSVGComponentTransferFunctionElement
{
};

[scriptable, uuid(a2b6baf7-4f8a-4b3a-86e9-6e232ad25889)]
interface nsIDOMSVGFEFuncGElement : nsIDOMSVGComponentTransferFunctionElement
{
};

[scriptable, uuid(b6d6522d-6721-453b-99f9-a08349d84dd0)]
interface nsIDOMSVGFEFuncBElement : nsIDOMSVGComponentTransferFunctionElement
{
};

[scriptable, uuid(70c084fc-d823-43b3-b4f1-476387b40079)]
interface nsIDOMSVGFEFuncAElement : nsIDOMSVGComponentTransferFunctionElement
{
};

[scriptable, uuid(bd19cfb2-5259-4551-abf5-3f9a9967ccf0)]
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(ebb57b0d-e198-4f10-b5a9-4ab5b0729c85)]
interface nsIDOMSVGFEMergeElement : nsIDOMSVGFilterPrimitiveStandardAttributes
{
};

[scriptable, uuid(5b701f2f-b636-4bbb-8d2a-c74fa79b0280)]
interface nsIDOMSVGFEMergeNodeElement : nsIDOMSVGElement { 
    readonly attribute nsIDOMSVGAnimatedString in1;
};

[scriptable, uuid(15746ca6-8b27-4cc1-bd84-3422d3aea18c)]
interface nsIDOMSVGFEOffsetElement : nsIDOMSVGFilterPrimitiveStandardAttributes { 
    readonly attribute nsIDOMSVGAnimatedString in1;
    readonly attribute nsIDOMSVGAnimatedNumber dx;
    readonly attribute nsIDOMSVGAnimatedNumber dy;
};

[scriptable, uuid(436ca74a-eba8-4a50-8947-c180eb612a34)]
interface nsIDOMSVGFEFloodElement : nsIDOMSVGFilterPrimitiveStandardAttributes
{
};

[scriptable, uuid(4cf173d3-6b67-4e2c-8050-61412e6e9d7c)]
interface nsIDOMSVGFETileElement : nsIDOMSVGFilterPrimitiveStandardAttributes
{
    readonly attribute nsIDOMSVGAnimatedString in1;
};

[scriptable, uuid(9235e6a7-ba2c-4a41-9e80-20735159014b)]
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(b994b0e3-cff1-4550-bfb2-f5de7679acb9)]
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(b64766fa-c393-4985-a775-deedb5b07ed2)]
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(47343967-4da5-4309-a3a4-c37ffab05b1f)]
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(b647355f-1be8-40da-9c3b-05dce4c0eaa4)]
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(1073827f-77e5-4096-81c5-6ebffefe258b)]
interface nsIDOMSVGFEDistantLightElement : nsIDOMSVGElement { 
  readonly attribute nsIDOMSVGAnimatedNumber azimuth;
  readonly attribute nsIDOMSVGAnimatedNumber elevation;
};

[scriptable, uuid(d75d49ad-4265-4774-aa5c-02e4cdbfa2b1)]
interface nsIDOMSVGFEPointLightElement : nsIDOMSVGElement { 
  readonly attribute nsIDOMSVGAnimatedNumber x;
  readonly attribute nsIDOMSVGAnimatedNumber y;
  readonly attribute nsIDOMSVGAnimatedNumber z;
};

[scriptable, uuid(8cbaa2ea-159d-4b28-a963-8e42979eae84)]
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(f46d36a1-5ea5-4152-9d73-2dd967c3a709)]
interface nsIDOMSVGFEImageElement : nsIDOMSVGFilterPrimitiveStandardAttributes
/*
  nsIDOMSVGURIReference,
  nsIDOMSVGLangSpace,
  nsIDOMSVGExternalResourcesRequired
*/
{
};

[scriptable, uuid(84db9e0e-ea0b-4906-8929-d97b4fd637c3)]
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;
};
