mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
b4e381e5df
--HG-- rename : content/smil/SMILBoolType.cpp => dom/smil/SMILBoolType.cpp rename : content/smil/SMILBoolType.h => dom/smil/SMILBoolType.h rename : content/smil/SMILEnumType.cpp => dom/smil/SMILEnumType.cpp rename : content/smil/SMILEnumType.h => dom/smil/SMILEnumType.h rename : content/smil/SMILIntegerType.cpp => dom/smil/SMILIntegerType.cpp rename : content/smil/SMILIntegerType.h => dom/smil/SMILIntegerType.h rename : content/smil/SMILStringType.cpp => dom/smil/SMILStringType.cpp rename : content/smil/SMILStringType.h => dom/smil/SMILStringType.h rename : content/smil/crashtests/483584-1.svg => dom/smil/crashtests/483584-1.svg rename : content/smil/crashtests/483584-2.svg => dom/smil/crashtests/483584-2.svg rename : content/smil/crashtests/523188-1.svg => dom/smil/crashtests/523188-1.svg rename : content/smil/crashtests/525099-1.svg => dom/smil/crashtests/525099-1.svg rename : content/smil/crashtests/526536-1.svg => dom/smil/crashtests/526536-1.svg rename : content/smil/crashtests/526875-1.svg => dom/smil/crashtests/526875-1.svg rename : content/smil/crashtests/526875-2.svg => dom/smil/crashtests/526875-2.svg rename : content/smil/crashtests/529387-1-helper.svg => dom/smil/crashtests/529387-1-helper.svg rename : content/smil/crashtests/529387-1.xhtml => dom/smil/crashtests/529387-1.xhtml rename : content/smil/crashtests/531550-1.svg => dom/smil/crashtests/531550-1.svg rename : content/smil/crashtests/537157-1.svg => dom/smil/crashtests/537157-1.svg rename : content/smil/crashtests/541297-1.svg => dom/smil/crashtests/541297-1.svg rename : content/smil/crashtests/547333-1.svg => dom/smil/crashtests/547333-1.svg rename : content/smil/crashtests/548899-1.svg => dom/smil/crashtests/548899-1.svg rename : content/smil/crashtests/551620-1.svg => dom/smil/crashtests/551620-1.svg rename : content/smil/crashtests/554141-1.svg => dom/smil/crashtests/554141-1.svg rename : content/smil/crashtests/554202-1.svg => dom/smil/crashtests/554202-1.svg rename : content/smil/crashtests/554202-2.svg => dom/smil/crashtests/554202-2.svg rename : content/smil/crashtests/555026-1.svg => dom/smil/crashtests/555026-1.svg rename : content/smil/crashtests/556841-1.svg => dom/smil/crashtests/556841-1.svg rename : content/smil/crashtests/572938-1.svg => dom/smil/crashtests/572938-1.svg rename : content/smil/crashtests/572938-2.svg => dom/smil/crashtests/572938-2.svg rename : content/smil/crashtests/572938-3.svg => dom/smil/crashtests/572938-3.svg rename : content/smil/crashtests/572938-4.svg => dom/smil/crashtests/572938-4.svg rename : content/smil/crashtests/588287-1.svg => dom/smil/crashtests/588287-1.svg rename : content/smil/crashtests/588287-2.svg => dom/smil/crashtests/588287-2.svg rename : content/smil/crashtests/590425-1.html => dom/smil/crashtests/590425-1.html rename : content/smil/crashtests/592477-1.xhtml => dom/smil/crashtests/592477-1.xhtml rename : content/smil/crashtests/594653-1.svg => dom/smil/crashtests/594653-1.svg rename : content/smil/crashtests/596796-1.svg => dom/smil/crashtests/596796-1.svg rename : content/smil/crashtests/605345-1.svg => dom/smil/crashtests/605345-1.svg rename : content/smil/crashtests/606101-1.svg => dom/smil/crashtests/606101-1.svg rename : content/smil/crashtests/608295-1.html => dom/smil/crashtests/608295-1.html rename : content/smil/crashtests/608549-1.svg => dom/smil/crashtests/608549-1.svg rename : content/smil/crashtests/611927-1.svg => dom/smil/crashtests/611927-1.svg rename : content/smil/crashtests/615002-1.svg => dom/smil/crashtests/615002-1.svg rename : content/smil/crashtests/615872-1.svg => dom/smil/crashtests/615872-1.svg rename : content/smil/crashtests/641388-1.html => dom/smil/crashtests/641388-1.html rename : content/smil/crashtests/641388-2.html => dom/smil/crashtests/641388-2.html rename : content/smil/crashtests/650732-1.svg => dom/smil/crashtests/650732-1.svg rename : content/smil/crashtests/665334-1.svg => dom/smil/crashtests/665334-1.svg rename : content/smil/crashtests/669225-1.svg => dom/smil/crashtests/669225-1.svg rename : content/smil/crashtests/669225-2.svg => dom/smil/crashtests/669225-2.svg rename : content/smil/crashtests/670313-1.svg => dom/smil/crashtests/670313-1.svg rename : content/smil/crashtests/678822-1.svg => dom/smil/crashtests/678822-1.svg rename : content/smil/crashtests/678847-1.svg => dom/smil/crashtests/678847-1.svg rename : content/smil/crashtests/678938-1.svg => dom/smil/crashtests/678938-1.svg rename : content/smil/crashtests/690994-1.svg => dom/smil/crashtests/690994-1.svg rename : content/smil/crashtests/691337-1.svg => dom/smil/crashtests/691337-1.svg rename : content/smil/crashtests/691337-2.svg => dom/smil/crashtests/691337-2.svg rename : content/smil/crashtests/697640-1.svg => dom/smil/crashtests/697640-1.svg rename : content/smil/crashtests/699325-1.svg => dom/smil/crashtests/699325-1.svg rename : content/smil/crashtests/709907-1.svg => dom/smil/crashtests/709907-1.svg rename : content/smil/crashtests/720103-1.svg => dom/smil/crashtests/720103-1.svg rename : content/smil/crashtests/crashtests.list => dom/smil/crashtests/crashtests.list rename : content/smil/moz.build => dom/smil/moz.build rename : content/smil/nsDOMTimeEvent.cpp => dom/smil/nsDOMTimeEvent.cpp rename : content/smil/nsDOMTimeEvent.h => dom/smil/nsDOMTimeEvent.h rename : content/smil/nsISMILAttr.h => dom/smil/nsISMILAttr.h rename : content/smil/nsISMILType.h => dom/smil/nsISMILType.h rename : content/smil/nsSMILAnimationController.cpp => dom/smil/nsSMILAnimationController.cpp rename : content/smil/nsSMILAnimationController.h => dom/smil/nsSMILAnimationController.h rename : content/smil/nsSMILAnimationFunction.cpp => dom/smil/nsSMILAnimationFunction.cpp rename : content/smil/nsSMILAnimationFunction.h => dom/smil/nsSMILAnimationFunction.h rename : content/smil/nsSMILCSSProperty.cpp => dom/smil/nsSMILCSSProperty.cpp rename : content/smil/nsSMILCSSProperty.h => dom/smil/nsSMILCSSProperty.h rename : content/smil/nsSMILCSSValueType.cpp => dom/smil/nsSMILCSSValueType.cpp rename : content/smil/nsSMILCSSValueType.h => dom/smil/nsSMILCSSValueType.h rename : content/smil/nsSMILCompositor.cpp => dom/smil/nsSMILCompositor.cpp rename : content/smil/nsSMILCompositor.h => dom/smil/nsSMILCompositor.h rename : content/smil/nsSMILCompositorTable.h => dom/smil/nsSMILCompositorTable.h rename : content/smil/nsSMILFloatType.cpp => dom/smil/nsSMILFloatType.cpp rename : content/smil/nsSMILFloatType.h => dom/smil/nsSMILFloatType.h rename : content/smil/nsSMILInstanceTime.cpp => dom/smil/nsSMILInstanceTime.cpp rename : content/smil/nsSMILInstanceTime.h => dom/smil/nsSMILInstanceTime.h rename : content/smil/nsSMILInterval.cpp => dom/smil/nsSMILInterval.cpp rename : content/smil/nsSMILInterval.h => dom/smil/nsSMILInterval.h rename : content/smil/nsSMILKeySpline.cpp => dom/smil/nsSMILKeySpline.cpp rename : content/smil/nsSMILKeySpline.h => dom/smil/nsSMILKeySpline.h rename : content/smil/nsSMILMappedAttribute.cpp => dom/smil/nsSMILMappedAttribute.cpp rename : content/smil/nsSMILMappedAttribute.h => dom/smil/nsSMILMappedAttribute.h rename : content/smil/nsSMILMilestone.h => dom/smil/nsSMILMilestone.h rename : content/smil/nsSMILNullType.cpp => dom/smil/nsSMILNullType.cpp rename : content/smil/nsSMILNullType.h => dom/smil/nsSMILNullType.h rename : content/smil/nsSMILParserUtils.cpp => dom/smil/nsSMILParserUtils.cpp rename : content/smil/nsSMILParserUtils.h => dom/smil/nsSMILParserUtils.h rename : content/smil/nsSMILRepeatCount.cpp => dom/smil/nsSMILRepeatCount.cpp rename : content/smil/nsSMILRepeatCount.h => dom/smil/nsSMILRepeatCount.h rename : content/smil/nsSMILSetAnimationFunction.cpp => dom/smil/nsSMILSetAnimationFunction.cpp rename : content/smil/nsSMILSetAnimationFunction.h => dom/smil/nsSMILSetAnimationFunction.h rename : content/smil/nsSMILTargetIdentifier.h => dom/smil/nsSMILTargetIdentifier.h rename : content/smil/nsSMILTimeContainer.cpp => dom/smil/nsSMILTimeContainer.cpp rename : content/smil/nsSMILTimeContainer.h => dom/smil/nsSMILTimeContainer.h rename : content/smil/nsSMILTimeValue.cpp => dom/smil/nsSMILTimeValue.cpp rename : content/smil/nsSMILTimeValue.h => dom/smil/nsSMILTimeValue.h rename : content/smil/nsSMILTimeValueSpec.cpp => dom/smil/nsSMILTimeValueSpec.cpp rename : content/smil/nsSMILTimeValueSpec.h => dom/smil/nsSMILTimeValueSpec.h rename : content/smil/nsSMILTimeValueSpecParams.h => dom/smil/nsSMILTimeValueSpecParams.h rename : content/smil/nsSMILTimedElement.cpp => dom/smil/nsSMILTimedElement.cpp rename : content/smil/nsSMILTimedElement.h => dom/smil/nsSMILTimedElement.h rename : content/smil/nsSMILTypes.h => dom/smil/nsSMILTypes.h rename : content/smil/nsSMILValue.cpp => dom/smil/nsSMILValue.cpp rename : content/smil/nsSMILValue.h => dom/smil/nsSMILValue.h rename : content/smil/test/db_smilAnimateMotion.js => dom/smil/test/db_smilAnimateMotion.js rename : content/smil/test/db_smilCSSFromBy.js => dom/smil/test/db_smilCSSFromBy.js rename : content/smil/test/db_smilCSSFromTo.js => dom/smil/test/db_smilCSSFromTo.js rename : content/smil/test/db_smilCSSPaced.js => dom/smil/test/db_smilCSSPaced.js rename : content/smil/test/db_smilCSSPropertyList.js => dom/smil/test/db_smilCSSPropertyList.js rename : content/smil/test/db_smilMappedAttrList.js => dom/smil/test/db_smilMappedAttrList.js rename : content/smil/test/mochitest.ini => dom/smil/test/mochitest.ini rename : content/smil/test/moz.build => dom/smil/test/moz.build rename : content/smil/test/smilAnimateMotionValueLists.js => dom/smil/test/smilAnimateMotionValueLists.js rename : content/smil/test/smilExtDoc_helper.svg => dom/smil/test/smilExtDoc_helper.svg rename : content/smil/test/smilTestUtils.js => dom/smil/test/smilTestUtils.js rename : content/smil/test/smilXHR_helper.svg => dom/smil/test/smilXHR_helper.svg rename : content/smil/test/test_smilAccessKey.xhtml => dom/smil/test/test_smilAccessKey.xhtml rename : content/smil/test/test_smilAnimateMotion.xhtml => dom/smil/test/test_smilAnimateMotion.xhtml rename : content/smil/test/test_smilAnimateMotionInvalidValues.xhtml => dom/smil/test/test_smilAnimateMotionInvalidValues.xhtml rename : content/smil/test/test_smilAnimateMotionOverrideRules.xhtml => dom/smil/test/test_smilAnimateMotionOverrideRules.xhtml rename : content/smil/test/test_smilBackwardsSeeking.xhtml => dom/smil/test/test_smilBackwardsSeeking.xhtml rename : content/smil/test/test_smilCSSFontStretchRelative.xhtml => dom/smil/test/test_smilCSSFontStretchRelative.xhtml rename : content/smil/test/test_smilCSSFromBy.xhtml => dom/smil/test/test_smilCSSFromBy.xhtml rename : content/smil/test/test_smilCSSFromTo.xhtml => dom/smil/test/test_smilCSSFromTo.xhtml rename : content/smil/test/test_smilCSSInherit.xhtml => dom/smil/test/test_smilCSSInherit.xhtml rename : content/smil/test/test_smilCSSInvalidValues.xhtml => dom/smil/test/test_smilCSSInvalidValues.xhtml rename : content/smil/test/test_smilCSSPaced.xhtml => dom/smil/test/test_smilCSSPaced.xhtml rename : content/smil/test/test_smilChangeAfterFrozen.xhtml => dom/smil/test/test_smilChangeAfterFrozen.xhtml rename : content/smil/test/test_smilContainerBinding.xhtml => dom/smil/test/test_smilContainerBinding.xhtml rename : content/smil/test/test_smilCrossContainer.xhtml => dom/smil/test/test_smilCrossContainer.xhtml rename : content/smil/test/test_smilDynamicDelayedBeginElement.xhtml => dom/smil/test/test_smilDynamicDelayedBeginElement.xhtml rename : content/smil/test/test_smilExtDoc.xhtml => dom/smil/test/test_smilExtDoc.xhtml rename : content/smil/test/test_smilFillMode.xhtml => dom/smil/test/test_smilFillMode.xhtml rename : content/smil/test/test_smilGetSimpleDuration.xhtml => dom/smil/test/test_smilGetSimpleDuration.xhtml rename : content/smil/test/test_smilGetStartTime.xhtml => dom/smil/test/test_smilGetStartTime.xhtml rename : content/smil/test/test_smilHyperlinking.xhtml => dom/smil/test/test_smilHyperlinking.xhtml rename : content/smil/test/test_smilInvalidValues.html => dom/smil/test/test_smilInvalidValues.html rename : content/smil/test/test_smilKeySplines.xhtml => dom/smil/test/test_smilKeySplines.xhtml rename : content/smil/test/test_smilKeyTimes.xhtml => dom/smil/test/test_smilKeyTimes.xhtml rename : content/smil/test/test_smilKeyTimesPacedMode.xhtml => dom/smil/test/test_smilKeyTimesPacedMode.xhtml rename : content/smil/test/test_smilMappedAttrFromBy.xhtml => dom/smil/test/test_smilMappedAttrFromBy.xhtml rename : content/smil/test/test_smilMappedAttrFromTo.xhtml => dom/smil/test/test_smilMappedAttrFromTo.xhtml rename : content/smil/test/test_smilMappedAttrPaced.xhtml => dom/smil/test/test_smilMappedAttrPaced.xhtml rename : content/smil/test/test_smilMinTiming.html => dom/smil/test/test_smilMinTiming.html rename : content/smil/test/test_smilRepeatDuration.html => dom/smil/test/test_smilRepeatDuration.html rename : content/smil/test/test_smilRepeatTiming.xhtml => dom/smil/test/test_smilRepeatTiming.xhtml rename : content/smil/test/test_smilReset.xhtml => dom/smil/test/test_smilReset.xhtml rename : content/smil/test/test_smilRestart.xhtml => dom/smil/test/test_smilRestart.xhtml rename : content/smil/test/test_smilSetCurrentTime.xhtml => dom/smil/test/test_smilSetCurrentTime.xhtml rename : content/smil/test/test_smilSync.xhtml => dom/smil/test/test_smilSync.xhtml rename : content/smil/test/test_smilSyncTransform.xhtml => dom/smil/test/test_smilSyncTransform.xhtml rename : content/smil/test/test_smilSyncbaseTarget.xhtml => dom/smil/test/test_smilSyncbaseTarget.xhtml rename : content/smil/test/test_smilTextZoom.xhtml => dom/smil/test/test_smilTextZoom.xhtml rename : content/smil/test/test_smilTimeEvents.xhtml => dom/smil/test/test_smilTimeEvents.xhtml rename : content/smil/test/test_smilTiming.xhtml => dom/smil/test/test_smilTiming.xhtml rename : content/smil/test/test_smilTimingZeroIntervals.xhtml => dom/smil/test/test_smilTimingZeroIntervals.xhtml rename : content/smil/test/test_smilUpdatedInterval.xhtml => dom/smil/test/test_smilUpdatedInterval.xhtml rename : content/smil/test/test_smilValues.xhtml => dom/smil/test/test_smilValues.xhtml rename : content/smil/test/test_smilXHR.xhtml => dom/smil/test/test_smilXHR.xhtml extra : rebase_source : 4038f574b020b79d3725efd91eeef457d9d6a0b0
214 lines
8.7 KiB
C++
214 lines
8.7 KiB
C++
/* -*- Mode: C++; 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/. */
|
|
|
|
#ifndef NS_ISMILTYPE_H_
|
|
#define NS_ISMILTYPE_H_
|
|
|
|
#include "mozilla/Attributes.h"
|
|
#include "nscore.h"
|
|
|
|
class nsSMILValue;
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
// nsISMILType: Interface for defining the basic operations needed for animating
|
|
// a particular kind of data (e.g. lengths, colors, transformation matrices).
|
|
//
|
|
// This interface is never used directly but always through an nsSMILValue that
|
|
// bundles together a pointer to a concrete implementation of this interface and
|
|
// the data upon which it should operate.
|
|
//
|
|
// We keep the data and type separate rather than just providing different
|
|
// subclasses of nsSMILValue. This is so that sizeof(nsSMILValue) is the same
|
|
// for all value types, allowing us to have a type-agnostic nsTArray of
|
|
// nsSMILValue objects (actual objects, not pointers). It also allows most
|
|
// nsSMILValues (except those that need to allocate extra memory for their
|
|
// data) to be allocated on the stack and directly assigned to one another
|
|
// provided performance benefits for the animation code.
|
|
//
|
|
// Note that different types have different capabilities. Roughly speaking there
|
|
// are probably three main types:
|
|
//
|
|
// +---------------------+---------------+-------------+------------------+
|
|
// | CATEGORY: | DISCRETE | LINEAR | ADDITIVE |
|
|
// +---------------------+---------------+-------------+------------------+
|
|
// | Example: | strings, | path data? | lengths, |
|
|
// | | color k/words?| | RGB color values |
|
|
// | | | | |
|
|
// | -- Assign? | X | X | X |
|
|
// | -- Add? | - | X? | X |
|
|
// | -- SandwichAdd? | - | -? | X |
|
|
// | -- ComputeDistance? | - | - | X? |
|
|
// | -- Interpolate? | - | X | X |
|
|
// +---------------------+---------------+-------------+------------------+
|
|
//
|
|
|
|
class nsISMILType
|
|
{
|
|
/**
|
|
* Only give the nsSMILValue class access to this interface.
|
|
*/
|
|
friend class nsSMILValue;
|
|
|
|
protected:
|
|
/**
|
|
* Initialises aValue and sets it to some identity value such that adding
|
|
* aValue to another value of the same type has no effect.
|
|
*
|
|
* @pre aValue.IsNull()
|
|
* @post aValue.mType == this
|
|
*/
|
|
virtual void Init(nsSMILValue& aValue) const = 0;
|
|
|
|
/**
|
|
* Destroys any data associated with a value of this type.
|
|
*
|
|
* @pre aValue.mType == this
|
|
* @post aValue.IsNull()
|
|
*/
|
|
virtual void Destroy(nsSMILValue& aValue) const = 0;
|
|
|
|
/**
|
|
* Assign this object the value of another. Think of this as the assignment
|
|
* operator.
|
|
*
|
|
* @param aDest The left-hand side of the assignment.
|
|
* @param aSrc The right-hand side of the assignment.
|
|
* @return NS_OK on success, an error code on failure such as when the
|
|
* underlying type of the specified object differs.
|
|
*
|
|
* @pre aDest.mType == aSrc.mType == this
|
|
*/
|
|
virtual nsresult Assign(nsSMILValue& aDest,
|
|
const nsSMILValue& aSrc) const = 0;
|
|
|
|
/**
|
|
* Test two nsSMILValue objects (of this nsISMILType) for equality.
|
|
*
|
|
* A return value of true represents a guarantee that aLeft and aRight are
|
|
* equal. (That is, they would behave identically if passed to the methods
|
|
* Add, SandwichAdd, ComputeDistance, and Interpolate).
|
|
*
|
|
* A return value of false simply indicates that we make no guarantee
|
|
* about equality.
|
|
*
|
|
* NOTE: It's perfectly legal for implementations of this method to return
|
|
* false in all cases. However, smarter implementations will make this
|
|
* method more useful for optimization.
|
|
*
|
|
* @param aLeft The left-hand side of the equality check.
|
|
* @param aRight The right-hand side of the equality check.
|
|
* @return true if we're sure the values are equal, false otherwise.
|
|
*
|
|
* @pre aDest.mType == aSrc.mType == this
|
|
*/
|
|
virtual bool IsEqual(const nsSMILValue& aLeft,
|
|
const nsSMILValue& aRight) const = 0;
|
|
|
|
/**
|
|
* Adds two values.
|
|
*
|
|
* The count parameter facilitates repetition.
|
|
*
|
|
* By equation,
|
|
*
|
|
* aDest += aValueToAdd * aCount
|
|
*
|
|
* Therefore, if aCount == 0, aDest will be unaltered.
|
|
*
|
|
* This method will fail if this data type is not additive or the value was
|
|
* not specified using an additive syntax.
|
|
*
|
|
* See SVG 1.1, section 19.2.5. In particular,
|
|
*
|
|
* "If a given attribute or property can take values of keywords (which are
|
|
* not additive) or numeric values (which are additive), then additive
|
|
* animations are possible if the subsequent animation uses a numeric value
|
|
* even if the base animation uses a keyword value; however, if the
|
|
* subsequent animation uses a keyword value, additive animation is not
|
|
* possible."
|
|
*
|
|
* If this method fails (e.g. because the data type is not additive), aDest
|
|
* will be unaltered.
|
|
*
|
|
* @param aDest The value to add to.
|
|
* @param aValueToAdd The value to add.
|
|
* @param aCount The number of times to add aValueToAdd.
|
|
* @return NS_OK on success, an error code on failure.
|
|
*
|
|
* @pre aValueToAdd.mType == aDest.mType == this
|
|
*/
|
|
virtual nsresult Add(nsSMILValue& aDest,
|
|
const nsSMILValue& aValueToAdd,
|
|
uint32_t aCount) const = 0;
|
|
|
|
/**
|
|
* Adds aValueToAdd to the underlying value in the animation sandwich, aDest.
|
|
*
|
|
* For most types this operation is identical to a regular Add() but for some
|
|
* types (notably <animateTransform>) the operation differs. For
|
|
* <animateTransform> Add() corresponds to simply adding together the
|
|
* transform parameters and is used when calculating cumulative values or
|
|
* by-animation values. On the other hand SandwichAdd() is used when adding to
|
|
* the underlying value and requires matrix post-multiplication. (This
|
|
* distinction is most clearly indicated by the SVGT1.2 test suite. It is not
|
|
* obvious within the SMIL specifications.)
|
|
*
|
|
* @param aDest The value to add to.
|
|
* @param aValueToAdd The value to add.
|
|
* @return NS_OK on success, an error code on failure.
|
|
*
|
|
* @pre aValueToAdd.mType == aDest.mType == this
|
|
*/
|
|
virtual nsresult SandwichAdd(nsSMILValue& aDest,
|
|
const nsSMILValue& aValueToAdd) const
|
|
{
|
|
return Add(aDest, aValueToAdd, 1);
|
|
}
|
|
|
|
/**
|
|
* Calculates the 'distance' between two values. This is the distance used in
|
|
* paced interpolation.
|
|
*
|
|
* @param aFrom The start of the interval for which the distance should
|
|
* be calculated.
|
|
* @param aTo The end of the interval for which the distance should be
|
|
* calculated.
|
|
* @param aDistance The result of the calculation.
|
|
* @return NS_OK on success, or an appropriate error code if there is no
|
|
* notion of distance for the underlying data type or the distance
|
|
* could not be calculated.
|
|
*
|
|
* @pre aFrom.mType == aTo.mType == this
|
|
*/
|
|
virtual nsresult ComputeDistance(const nsSMILValue& aFrom,
|
|
const nsSMILValue& aTo,
|
|
double& aDistance) const = 0;
|
|
|
|
/**
|
|
* Calculates an interpolated value between two values using the specified
|
|
* proportion.
|
|
*
|
|
* @param aStartVal The value defining the start of the interval of
|
|
* interpolation.
|
|
* @param aEndVal The value defining the end of the interval of
|
|
* interpolation.
|
|
* @param aUnitDistance A number between 0.0 and 1.0 (inclusive) defining
|
|
* the distance of the interpolated value in the
|
|
* interval.
|
|
* @param aResult The interpolated value.
|
|
* @return NS_OK on success, NS_ERROR_FAILURE if this data type cannot be
|
|
* interpolated or NS_ERROR_OUT_OF_MEMORY if insufficient memory was
|
|
* available for storing the result.
|
|
*
|
|
* @pre aStartVal.mType == aEndVal.mType == aResult.mType == this
|
|
*/
|
|
virtual nsresult Interpolate(const nsSMILValue& aStartVal,
|
|
const nsSMILValue& aEndVal,
|
|
double aUnitDistance,
|
|
nsSMILValue& aResult) const = 0;
|
|
};
|
|
|
|
#endif // NS_ISMILTYPE_H_
|