123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603 |
- /* -*- 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/. */
- /* Utilities for animation of computed style values */
- #ifndef mozilla_StyleAnimationValue_h_
- #define mozilla_StyleAnimationValue_h_
- #include "mozilla/gfx/MatrixFwd.h"
- #include "mozilla/UniquePtr.h"
- #include "nsStringFwd.h"
- #include "nsStringBuffer.h"
- #include "nsCoord.h"
- #include "nsColor.h"
- #include "nsCSSProps.h"
- #include "nsCSSValue.h"
- #include "nsStyleCoord.h"
- class nsIFrame;
- class nsStyleContext;
- class gfx3DMatrix;
- struct RawServoDeclarationBlock;
- namespace mozilla {
- namespace css {
- class StyleRule;
- } // namespace css
- namespace dom {
- class Element;
- } // namespace dom
- enum class CSSPseudoElementType : uint8_t;
- struct PropertyStyleAnimationValuePair;
- /**
- * Utility class to handle animated style values
- */
- class StyleAnimationValue {
- public:
- // Mathematical methods
- // --------------------
- /**
- * Adds |aCount| copies of |aValueToAdd| to |aDest|. The result of this
- * addition is stored in aDest.
- *
- * Note that if |aCount| is 0, then |aDest| will be unchanged. Also, if
- * this method fails, then |aDest| will be unchanged.
- *
- * @param aDest The value to add to.
- * @param aValueToAdd The value to add.
- * @param aCount The number of times to add aValueToAdd.
- * @return true on success, false on failure.
- */
- static MOZ_MUST_USE bool
- Add(nsCSSPropertyID aProperty, StyleAnimationValue& aDest,
- const StyleAnimationValue& aValueToAdd, uint32_t aCount) {
- return AddWeighted(aProperty, 1.0, aDest, aCount, aValueToAdd, aDest);
- }
- /**
- * Calculates a measure of 'distance' between two colors.
- *
- * @param aStartColor The start of the interval for which the distance
- * should be calculated.
- * @param aEndColor The end of the interval for which the distance
- * should be calculated.
- * @return the result of the calculation.
- */
- static double ComputeColorDistance(const css::RGBAColorData& aStartColor,
- const css::RGBAColorData& aEndColor);
- /**
- * Calculates a measure of 'distance' between two values.
- *
- * This measure of Distance is guaranteed to be proportional to
- * portions passed to Interpolate, Add, or AddWeighted. However, for
- * some types of StyleAnimationValue it may not produce sensible results
- * for paced animation.
- *
- * If this method succeeds, the returned distance value is guaranteed to be
- * non-negative.
- *
- * @param aStartValue The start of the interval for which the distance
- * should be calculated.
- * @param aEndValue The end of the interval for which the distance
- * should be calculated.
- * @param aStyleContext The style context to use for processing the
- * translate part of transforms.
- * @param aDistance The result of the calculation.
- * @return true on success, false on failure.
- */
- static MOZ_MUST_USE bool
- ComputeDistance(nsCSSPropertyID aProperty,
- const StyleAnimationValue& aStartValue,
- const StyleAnimationValue& aEndValue,
- nsStyleContext* aStyleContext,
- double& aDistance);
- /**
- * Calculates an interpolated value that is the specified |aPortion| between
- * the two given values.
- *
- * This really just does the following calculation:
- * aResultValue = (1.0 - aPortion) * aStartValue + aPortion * aEndValue
- *
- * @param aStartValue The value defining the start of the interval of
- * interpolation.
- * @param aEndValue The value defining the end of the interval of
- * interpolation.
- * @param aPortion A number in the range [0.0, 1.0] defining the
- * distance of the interpolated value in the interval.
- * @param [out] aResultValue The resulting interpolated value.
- * @return true on success, false on failure.
- */
- static MOZ_MUST_USE bool
- Interpolate(nsCSSPropertyID aProperty,
- const StyleAnimationValue& aStartValue,
- const StyleAnimationValue& aEndValue,
- double aPortion,
- StyleAnimationValue& aResultValue) {
- return AddWeighted(aProperty, 1.0 - aPortion, aStartValue,
- aPortion, aEndValue, aResultValue);
- }
- /**
- * Does the calculation:
- * aResultValue = aCoeff1 * aValue1 + aCoeff2 * aValue2
- *
- * @param [out] aResultValue The resulting interpolated value. May be
- * the same as aValue1 or aValue2.
- * @return true on success, false on failure.
- *
- * NOTE: Current callers always pass aCoeff1 and aCoeff2 >= 0. They
- * are currently permitted to be negative; however, if, as we add
- * support more value types types, we find that this causes
- * difficulty, we might change this to restrict them to being
- * positive.
- */
- static MOZ_MUST_USE bool
- AddWeighted(nsCSSPropertyID aProperty,
- double aCoeff1, const StyleAnimationValue& aValue1,
- double aCoeff2, const StyleAnimationValue& aValue2,
- StyleAnimationValue& aResultValue);
- /**
- * Accumulates |aValueToAccumulate| onto |aDest| |aCount| times.
- * The result is stored in |aDest| on success.
- *
- * @param aDest The base value to be accumulated.
- * @param aValueToAccumulate The value to accumulate.
- * @param aCount The number of times to accumulate
- * aValueToAccumulate.
- * @return true on success, false on failure.
- *
- * NOTE: This function will work as a wrapper of StyleAnimationValue::Add()
- * if |aProperty| isn't color or shadow or filter. For these properties,
- * this function may return a color value that at least one of its components
- * has a value which is outside the range [0, 1] so that we can calculate
- * plausible values as interpolation with the return value.
- */
- static MOZ_MUST_USE bool
- Accumulate(nsCSSPropertyID aProperty, StyleAnimationValue& aDest,
- const StyleAnimationValue& aValueToAccumulate,
- uint64_t aCount);
- // Type-conversion methods
- // -----------------------
- /**
- * Creates a computed value for the given specified value
- * (property ID + string). A style context is needed in case the
- * specified value depends on inherited style or on the values of other
- * properties.
- *
- * @param aProperty The property whose value we're computing.
- * @param aTargetElement The content node to which our computed value is
- * applicable. For pseudo-elements, this is the parent
- * element to which the pseudo is attached, not the
- * generated content node.
- * @param aStyleContext The style context used to compute values from the
- * specified value. For pseudo-elements, this should
- * be the style context corresponding to the pseudo
- * element.
- * @param aSpecifiedValue The specified value, from which we'll build our
- * computed value.
- * @param aUseSVGMode A flag to indicate whether we should parse
- * |aSpecifiedValue| in SVG mode.
- * @param [out] aComputedValue The resulting computed value.
- * @param [out] aIsContextSensitive
- * Set to true if |aSpecifiedValue| may produce
- * a different |aComputedValue| depending on other CSS
- * properties on |aTargetElement| or its ancestors.
- * false otherwise.
- * Note that the operation of this method is
- * significantly faster when |aIsContextSensitive| is
- * nullptr.
- * @return true on success, false on failure.
- */
- static MOZ_MUST_USE bool
- ComputeValue(nsCSSPropertyID aProperty,
- mozilla::dom::Element* aTargetElement,
- nsStyleContext* aStyleContext,
- const nsAString& aSpecifiedValue,
- bool aUseSVGMode,
- StyleAnimationValue& aComputedValue,
- bool* aIsContextSensitive = nullptr);
- /**
- * Like ComputeValue, but returns an array of StyleAnimationValues.
- *
- * On success, when aProperty is a longhand, aResult will have a single
- * value in it. When aProperty is a shorthand, aResult will be filled with
- * values for all of aProperty's longhand components. aEnabledState
- * is used to filter the longhand components that will be appended
- * to aResult. On failure, aResult might still have partial results
- * in it.
- */
- static MOZ_MUST_USE bool
- ComputeValues(nsCSSPropertyID aProperty,
- mozilla::CSSEnabledState aEnabledState,
- mozilla::dom::Element* aTargetElement,
- nsStyleContext* aStyleContext,
- const nsAString& aSpecifiedValue,
- bool aUseSVGMode,
- nsTArray<PropertyStyleAnimationValuePair>& aResult);
- /**
- * A variant on ComputeValues that takes an nsCSSValue as the specified
- * value. Only longhand properties are supported.
- */
- static MOZ_MUST_USE bool
- ComputeValues(nsCSSPropertyID aProperty,
- mozilla::CSSEnabledState aEnabledState,
- mozilla::dom::Element* aTargetElement,
- nsStyleContext* aStyleContext,
- const nsCSSValue& aSpecifiedValue,
- bool aUseSVGMode,
- nsTArray<PropertyStyleAnimationValuePair>& aResult);
- /**
- * A variant of ComputeValues that takes a RawServoDeclarationBlock
- * as the specified value.
- */
- static MOZ_MUST_USE bool
- ComputeValues(nsCSSPropertyID aProperty,
- mozilla::CSSEnabledState aEnabledState,
- nsStyleContext* aStyleContext,
- const RawServoDeclarationBlock& aDeclarations,
- nsTArray<PropertyStyleAnimationValuePair>& aValues);
- /**
- * Creates a specified value for the given computed value.
- *
- * The first two overloads fill in an nsCSSValue object; the third
- * produces a string. For the overload that takes a const
- * StyleAnimationValue& reference, the nsCSSValue result may depend on
- * objects owned by the |aComputedValue| object, so users of that variant
- * must keep |aComputedValue| alive longer than |aSpecifiedValue|.
- * The overload that takes an rvalue StyleAnimationValue reference
- * transfers ownership for some resources such that the |aComputedValue|
- * does not depend on the lifetime of |aSpecifiedValue|.
- *
- * @param aProperty The property whose value we're uncomputing.
- * @param aComputedValue The computed value to be converted.
- * @param [out] aSpecifiedValue The resulting specified value.
- * @return true on success, false on failure.
- *
- * These functions are not MOZ_MUST_USE because failing to check the return
- * value is common and reasonable.
- */
- static MOZ_MUST_USE bool
- UncomputeValue(nsCSSPropertyID aProperty,
- const StyleAnimationValue& aComputedValue,
- nsCSSValue& aSpecifiedValue);
- static MOZ_MUST_USE bool
- UncomputeValue(nsCSSPropertyID aProperty,
- StyleAnimationValue&& aComputedValue,
- nsCSSValue& aSpecifiedValue);
- static MOZ_MUST_USE bool
- UncomputeValue(nsCSSPropertyID aProperty,
- const StyleAnimationValue& aComputedValue,
- nsAString& aSpecifiedValue);
- /**
- * Gets the computed value for the given property from the given style
- * context.
- *
- * Obtaining the computed value allows us to animate properties when the
- * content author has specified a value like "inherit" or "initial" or some
- * other keyword that isn't directly interpolatable, but which *computes* to
- * something interpolatable.
- *
- * @param aProperty The property whose value we're looking up.
- * @param aStyleContext The style context to check for the computed value.
- * @param [out] aComputedValue The resulting computed value.
- * @return true on success, false on failure.
- */
- static MOZ_MUST_USE bool ExtractComputedValue(
- nsCSSPropertyID aProperty,
- nsStyleContext* aStyleContext,
- StyleAnimationValue& aComputedValue);
- /**
- * Interpolates between 2 matrices by decomposing them.
- *
- * @param aMatrix1 First matrix, using CSS pixel units.
- * @param aMatrix2 Second matrix, using CSS pixel units.
- * @param aProgress Interpolation value in the range [0.0, 1.0]
- */
- static gfx::Matrix4x4 InterpolateTransformMatrix(const gfx::Matrix4x4 &aMatrix1,
- const gfx::Matrix4x4 &aMatrix2,
- double aProgress);
- static already_AddRefed<nsCSSValue::Array>
- AppendTransformFunction(nsCSSKeyword aTransformFunction,
- nsCSSValueList**& aListTail);
- /**
- * The types and values for the values that we extract and animate.
- */
- enum Unit {
- eUnit_Null, // not initialized
- eUnit_Normal,
- eUnit_Auto,
- eUnit_None,
- eUnit_Enumerated,
- eUnit_Visibility, // special case for transitions (which converts
- // Enumerated to Visibility as needed)
- eUnit_Integer,
- eUnit_Coord,
- eUnit_Percent,
- eUnit_Float,
- eUnit_Color, // nsCSSValue* (never null), always with an nscolor or
- // an nsCSSValueFloatColor
- eUnit_CurrentColor,
- eUnit_ComplexColor, // ComplexColorValue* (never null)
- eUnit_Calc, // nsCSSValue* (never null), always with a single
- // calc() expression that's either length or length+percent
- eUnit_ObjectPosition, // nsCSSValue* (never null), always with a
- // 4-entry nsCSSValue::Array
- eUnit_URL, // nsCSSValue* (never null), always with a css::URLValue
- eUnit_DiscreteCSSValue, // nsCSSValue* (never null)
- eUnit_CSSValuePair, // nsCSSValuePair* (never null)
- eUnit_CSSValueTriplet, // nsCSSValueTriplet* (never null)
- eUnit_CSSRect, // nsCSSRect* (never null)
- eUnit_Dasharray, // nsCSSValueList* (never null)
- eUnit_Shadow, // nsCSSValueList* (may be null)
- eUnit_Shape, // nsCSSValue::Array* (never null)
- eUnit_Filter, // nsCSSValueList* (may be null)
- eUnit_Transform, // nsCSSValueList* (never null)
- eUnit_BackgroundPositionCoord, // nsCSSValueList* (never null)
- eUnit_CSSValuePairList, // nsCSSValuePairList* (never null)
- eUnit_UnparsedString // nsStringBuffer* (never null)
- };
- private:
- Unit mUnit;
- union {
- int32_t mInt;
- nscoord mCoord;
- float mFloat;
- nsCSSValue* mCSSValue;
- nsCSSValuePair* mCSSValuePair;
- nsCSSValueTriplet* mCSSValueTriplet;
- nsCSSRect* mCSSRect;
- nsCSSValue::Array* mCSSValueArray;
- nsCSSValueList* mCSSValueList;
- nsCSSValueSharedList* mCSSValueSharedList;
- nsCSSValuePairList* mCSSValuePairList;
- nsStringBuffer* mString;
- css::ComplexColorValue* mComplexColor;
- } mValue;
- public:
- Unit GetUnit() const {
- NS_ASSERTION(mUnit != eUnit_Null, "uninitialized");
- return mUnit;
- }
- // Accessor to let us verify assumptions about presence of null unit,
- // without tripping the assertion in GetUnit().
- bool IsNull() const {
- return mUnit == eUnit_Null;
- }
- int32_t GetIntValue() const {
- NS_ASSERTION(IsIntUnit(mUnit), "unit mismatch");
- return mValue.mInt;
- }
- nscoord GetCoordValue() const {
- NS_ASSERTION(mUnit == eUnit_Coord, "unit mismatch");
- return mValue.mCoord;
- }
- float GetPercentValue() const {
- NS_ASSERTION(mUnit == eUnit_Percent, "unit mismatch");
- return mValue.mFloat;
- }
- float GetFloatValue() const {
- NS_ASSERTION(mUnit == eUnit_Float, "unit mismatch");
- return mValue.mFloat;
- }
- nsCSSValue* GetCSSValueValue() const {
- NS_ASSERTION(IsCSSValueUnit(mUnit), "unit mismatch");
- return mValue.mCSSValue;
- }
- nsCSSValuePair* GetCSSValuePairValue() const {
- NS_ASSERTION(IsCSSValuePairUnit(mUnit), "unit mismatch");
- return mValue.mCSSValuePair;
- }
- nsCSSValueTriplet* GetCSSValueTripletValue() const {
- NS_ASSERTION(IsCSSValueTripletUnit(mUnit), "unit mismatch");
- return mValue.mCSSValueTriplet;
- }
- nsCSSRect* GetCSSRectValue() const {
- NS_ASSERTION(IsCSSRectUnit(mUnit), "unit mismatch");
- return mValue.mCSSRect;
- }
- nsCSSValue::Array* GetCSSValueArrayValue() const {
- NS_ASSERTION(IsCSSValueArrayUnit(mUnit), "unit mismatch");
- return mValue.mCSSValueArray;
- }
- nsCSSValueList* GetCSSValueListValue() const {
- NS_ASSERTION(IsCSSValueListUnit(mUnit), "unit mismatch");
- return mValue.mCSSValueList;
- }
- nsCSSValueSharedList* GetCSSValueSharedListValue() const {
- NS_ASSERTION(IsCSSValueSharedListValue(mUnit), "unit mismatch");
- return mValue.mCSSValueSharedList;
- }
- nsCSSValuePairList* GetCSSValuePairListValue() const {
- NS_ASSERTION(IsCSSValuePairListUnit(mUnit), "unit mismatch");
- return mValue.mCSSValuePairList;
- }
- const char16_t* GetStringBufferValue() const {
- NS_ASSERTION(IsStringUnit(mUnit), "unit mismatch");
- return GetBufferValue(mValue.mString);
- }
- void GetStringValue(nsAString& aBuffer) const {
- NS_ASSERTION(IsStringUnit(mUnit), "unit mismatch");
- aBuffer.Truncate();
- uint32_t len = NS_strlen(GetBufferValue(mValue.mString));
- mValue.mString->ToString(len, aBuffer);
- }
- /// @return the scale for this value, calculated with reference to @aForFrame.
- gfxSize GetScaleValue(const nsIFrame* aForFrame) const;
- const css::ComplexColorData& GetComplexColorData() const {
- MOZ_ASSERT(mUnit == eUnit_ComplexColor, "unit mismatch");
- return *mValue.mComplexColor;
- }
- StyleComplexColor GetStyleComplexColorValue() const {
- return GetComplexColorData().ToComplexColor();
- }
- UniquePtr<nsCSSValueList> TakeCSSValueListValue() {
- nsCSSValueList* list = GetCSSValueListValue();
- mValue.mCSSValueList = nullptr;
- mUnit = eUnit_Null;
- return UniquePtr<nsCSSValueList>(list);
- }
- UniquePtr<nsCSSValuePairList> TakeCSSValuePairListValue() {
- nsCSSValuePairList* list = GetCSSValuePairListValue();
- mValue.mCSSValuePairList = nullptr;
- mUnit = eUnit_Null;
- return UniquePtr<nsCSSValuePairList>(list);
- }
- explicit StyleAnimationValue(Unit aUnit = eUnit_Null) : mUnit(aUnit) {
- NS_ASSERTION(aUnit == eUnit_Null || aUnit == eUnit_Normal ||
- aUnit == eUnit_Auto || aUnit == eUnit_None,
- "must be valueless unit");
- }
- StyleAnimationValue(const StyleAnimationValue& aOther)
- : mUnit(eUnit_Null) { *this = aOther; }
- StyleAnimationValue(StyleAnimationValue&& aOther)
- : mUnit(aOther.mUnit)
- , mValue(aOther.mValue)
- {
- aOther.mUnit = eUnit_Null;
- }
- enum IntegerConstructorType { IntegerConstructor };
- StyleAnimationValue(int32_t aInt, Unit aUnit, IntegerConstructorType);
- enum CoordConstructorType { CoordConstructor };
- StyleAnimationValue(nscoord aLength, CoordConstructorType);
- enum PercentConstructorType { PercentConstructor };
- StyleAnimationValue(float aPercent, PercentConstructorType);
- enum FloatConstructorType { FloatConstructor };
- StyleAnimationValue(float aFloat, FloatConstructorType);
- enum ColorConstructorType { ColorConstructor };
- StyleAnimationValue(nscolor aColor, ColorConstructorType);
- ~StyleAnimationValue() { FreeValue(); }
- void SetNormalValue();
- void SetAutoValue();
- void SetNoneValue();
- void SetIntValue(int32_t aInt, Unit aUnit);
- template<typename T,
- typename = typename std::enable_if<std::is_enum<T>::value>::type>
- void SetIntValue(T aInt, Unit aUnit)
- {
- static_assert(mozilla::EnumTypeFitsWithin<T, int32_t>::value,
- "aValue must be an enum that fits within mValue.mInt");
- SetIntValue(static_cast<int32_t>(aInt), aUnit);
- }
- void SetCoordValue(nscoord aCoord);
- void SetPercentValue(float aPercent);
- void SetFloatValue(float aFloat);
- void SetColorValue(nscolor aColor);
- void SetCurrentColorValue();
- void SetComplexColorValue(const StyleComplexColor& aColor);
- void SetComplexColorValue(already_AddRefed<css::ComplexColorValue> aValue);
- void SetUnparsedStringValue(const nsString& aString);
- void SetCSSValueArrayValue(nsCSSValue::Array* aValue, Unit aUnit);
- // These setters take ownership of |aValue|, and are therefore named
- // "SetAndAdopt*".
- void SetAndAdoptCSSValueValue(nsCSSValue *aValue, Unit aUnit);
- void SetAndAdoptCSSValuePairValue(nsCSSValuePair *aValue, Unit aUnit);
- void SetAndAdoptCSSValueTripletValue(nsCSSValueTriplet *aValue, Unit aUnit);
- void SetAndAdoptCSSRectValue(nsCSSRect *aValue, Unit aUnit);
- void SetAndAdoptCSSValueListValue(nsCSSValueList *aValue, Unit aUnit);
- void SetAndAdoptCSSValuePairListValue(nsCSSValuePairList *aValue);
- void SetTransformValue(nsCSSValueSharedList* aList);
- StyleAnimationValue& operator=(const StyleAnimationValue& aOther);
- StyleAnimationValue& operator=(StyleAnimationValue&& aOther)
- {
- MOZ_ASSERT(this != &aOther, "Do not move itself");
- if (this != &aOther) {
- FreeValue();
- mUnit = aOther.mUnit;
- mValue = aOther.mValue;
- aOther.mUnit = eUnit_Null;
- }
- return *this;
- }
- bool operator==(const StyleAnimationValue& aOther) const;
- bool operator!=(const StyleAnimationValue& aOther) const
- { return !(*this == aOther); }
- private:
- void FreeValue();
- static const char16_t* GetBufferValue(nsStringBuffer* aBuffer) {
- return static_cast<char16_t*>(aBuffer->Data());
- }
- static bool IsIntUnit(Unit aUnit) {
- return aUnit == eUnit_Enumerated || aUnit == eUnit_Visibility ||
- aUnit == eUnit_Integer;
- }
- static bool IsCSSValueUnit(Unit aUnit) {
- return aUnit == eUnit_Color ||
- aUnit == eUnit_Calc ||
- aUnit == eUnit_ObjectPosition ||
- aUnit == eUnit_URL ||
- aUnit == eUnit_DiscreteCSSValue;
- }
- static bool IsCSSValuePairUnit(Unit aUnit) {
- return aUnit == eUnit_CSSValuePair;
- }
- static bool IsCSSValueTripletUnit(Unit aUnit) {
- return aUnit == eUnit_CSSValueTriplet;
- }
- static bool IsCSSRectUnit(Unit aUnit) {
- return aUnit == eUnit_CSSRect;
- }
- static bool IsCSSValueArrayUnit(Unit aUnit) {
- return aUnit == eUnit_Shape;
- }
- static bool IsCSSValueListUnit(Unit aUnit) {
- return aUnit == eUnit_Dasharray || aUnit == eUnit_Filter ||
- aUnit == eUnit_Shadow ||
- aUnit == eUnit_BackgroundPositionCoord;
- }
- static bool IsCSSValueSharedListValue(Unit aUnit) {
- return aUnit == eUnit_Transform;
- }
- static bool IsCSSValuePairListUnit(Unit aUnit) {
- return aUnit == eUnit_CSSValuePairList;
- }
- static bool IsStringUnit(Unit aUnit) {
- return aUnit == eUnit_UnparsedString;
- }
- };
- struct PropertyStyleAnimationValuePair
- {
- nsCSSPropertyID mProperty;
- StyleAnimationValue mValue;
- };
- } // namespace mozilla
- #endif
|