/* -*- 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) 2005
 * 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 "nsIDOMSVGTextContentElement.idl"

interface nsIDOMSVGAnimatedLength;
interface nsIDOMSVGAnimatedEnumeration;

[scriptable, uuid(5c29a76c-3489-48fe-b9ea-ea0f5b196dff)]
interface nsIDOMSVGTextPathElement
  : nsIDOMSVGTextContentElement
/*
        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,
*/
{
    // textPath Method Types
    const unsigned short TEXTPATH_METHODTYPE_UNKNOWN  = 0;
    const unsigned short TEXTPATH_METHODTYPE_ALIGN    = 1;
    const unsigned short TEXTPATH_METHODTYPE_STRETCH  = 2;
    // textPath Spacing Types
    const unsigned short TEXTPATH_SPACINGTYPE_UNKNOWN = 0;
    const unsigned short TEXTPATH_SPACINGTYPE_AUTO    = 1;
    const unsigned short TEXTPATH_SPACINGTYPE_EXACT   = 2;

    readonly attribute nsIDOMSVGAnimatedLength startOffset;
    readonly attribute nsIDOMSVGAnimatedEnumeration method;
    readonly attribute nsIDOMSVGAnimatedEnumeration spacing;
};
