/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */

#include "nsIDOMSVGElement.idl"

/**
 * The nsIDOMSVGGradientElement interface is the interface to an SVG
 * gradient element.
 *
 * For more information on this interface please see
 * http://www.w3.org/TR/SVG11/pservers.html
 *
 */

interface nsIDOMSVGAnimatedEnumeration;

[scriptable, uuid(5056512E-2ACE-4B68-8F52-124E24CF0F55)]
interface nsIDOMSVGGradientElement
  : nsIDOMSVGElement
/*
        The SVG DOM makes use of multiple interface inheritance.
        Since XPCOM only supports single interface inheritance,
        the best thing that we can do is to promise that whenever
        an object implements _this_ interface it will also
        implement the following interfaces. (We then have to QI to
        hop between them.)
        
    nsIDOMSVGURIReference,
    nsIDOMSVGStylable
*/
{ 
  const unsigned short SVG_SPREADMETHOD_UNKNOWN = 0;
  const unsigned short SVG_SPREADMETHOD_PAD     = 1;
  const unsigned short SVG_SPREADMETHOD_REFLECT = 2;
  const unsigned short SVG_SPREADMETHOD_REPEAT  = 3;

  readonly attribute nsIDOMSVGAnimatedEnumeration gradientUnits;
  // SVGAnimatedTransformList
  readonly attribute nsISupports                  gradientTransform;
  readonly attribute nsIDOMSVGAnimatedEnumeration spreadMethod;
};


/**
 * The nsIDOMSVGLinearGradientElement interface is the interface to an SVG
 * linear gradient element.
 *
 * For more information on this interface please see
 * http://www.w3.org/TR/SVG11/pservers.html
 *
 */

// Linear gradient
interface nsIDOMSVGAnimatedLength;

[scriptable, uuid(AC3E0464-5B49-4323-850D-563573F754EC)]
interface nsIDOMSVGLinearGradientElement
  : nsIDOMSVGGradientElement
{ 
  readonly attribute nsIDOMSVGAnimatedLength x1;
  readonly attribute nsIDOMSVGAnimatedLength y1;
  readonly attribute nsIDOMSVGAnimatedLength x2;
  readonly attribute nsIDOMSVGAnimatedLength y2;
};

/**
 * The nsIDOMSVGRadialGradientElement interface is the interface to an SVG
 * radial gradient element.
 *
 * For more information on this interface please see
 * http://www.w3.org/TR/SVG11/pservers.html
 *
 */

// Radial gradient
interface nsIDOMSVGAnimatedLength;

[scriptable, uuid(7300FBAB-84AE-425E-BB3B-CF8C1E584CCD)]
interface nsIDOMSVGRadialGradientElement
  : nsIDOMSVGGradientElement
{ 
  readonly attribute nsIDOMSVGAnimatedLength cx;
  readonly attribute nsIDOMSVGAnimatedLength cy;
  readonly attribute nsIDOMSVGAnimatedLength r;
  readonly attribute nsIDOMSVGAnimatedLength fx;
  readonly attribute nsIDOMSVGAnimatedLength fy;
};


