1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134
|
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
/* 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/. */
/* representation of a value for a SMIL-animated CSS property */
#ifndef DOM_SMIL_SMILCSSVALUETYPE_H_
#define DOM_SMIL_SMILCSSVALUETYPE_H_
#include "mozilla/Attributes.h"
#include "mozilla/SMILType.h"
#include "nsCSSPropertyID.h"
#include "nsStringFwd.h"
namespace mozilla {
struct AnimationValue;
class DeclarationBlock;
namespace dom {
class Element;
} // namespace dom
/*
* SMILCSSValueType: Represents a SMIL-animated CSS value.
*/
class SMILCSSValueType : public SMILType {
public:
// Singleton for SMILValue objects to hold onto.
static SMILCSSValueType sSingleton;
protected:
// SMILType Methods
// -------------------
void InitValue(SMILValue& aValue) const override;
void DestroyValue(SMILValue&) const override;
nsresult Assign(SMILValue& aDest, const SMILValue& aSrc) const override;
bool IsEqual(const SMILValue& aLeft, const SMILValue& aRight) const override;
nsresult Add(SMILValue& aDest, const SMILValue& aValueToAdd,
uint32_t aCount) const override;
nsresult SandwichAdd(SMILValue& aDest,
const SMILValue& aValueToAdd) const override;
nsresult ComputeDistance(const SMILValue& aFrom, const SMILValue& aTo,
double& aDistance) const override;
nsresult Interpolate(const SMILValue& aStartVal, const SMILValue& aEndVal,
double aUnitDistance, SMILValue& aResult) const override;
public:
// Helper Methods
// --------------
/**
* Sets up the given SMILValue to represent the given string value. The
* string is interpreted as a value for the given property on the given
* element.
*
* On failure, this method leaves aValue.mType == SMILNullType::sSingleton.
* Otherwise, this method leaves aValue.mType == this class's singleton.
*
* @param aPropID The property for which we're parsing a value.
* @param aTargetElement The target element to whom the property/value
* setting applies.
* @param aString The string to be parsed as a CSS value.
* @param [out] aValue The SMILValue to be populated. Should
* initially be null-typed.
* @param [out] aIsContextSensitive Set to true if |aString| may produce
* a different |aValue| depending on other
* CSS properties on |aTargetElement|
* or its ancestors (e.g. 'inherit).
* false otherwise. May be nullptr.
* Not set if the method fails.
* @pre aValue.IsNull()
* @post aValue.IsNull() || aValue.mType == SMILCSSValueType::sSingleton
*/
static void ValueFromString(nsCSSPropertyID aPropID,
dom::Element* aTargetElement,
const nsAString& aString, SMILValue& aValue,
bool* aIsContextSensitive);
/**
* Creates a SMILValue to wrap the given animation value.
*
* @param aPropID The property that |aValue| corresponds to.
* @param aTargetElement The target element to which the animation value
* applies.
* @param aValue The animation value to use.
* @return A new SMILValue. On failure, returns a
* SMILValue with the null type (i.e. rv.IsNull()
* returns true).
*/
static SMILValue ValueFromAnimationValue(nsCSSPropertyID aPropID,
dom::Element* aTargetElement,
const AnimationValue& aValue);
/**
* Sets the relevant property values in the declaration block.
*
* Returns whether the declaration changed.
*/
static bool SetPropertyValues(nsCSSPropertyID, const SMILValue&,
mozilla::DeclarationBlock&);
/**
* Return the CSS property animated by the specified value.
*
* @param aValue The SMILValue to examine.
* @return The nsCSSPropertyID enum value of the property animated
* by |aValue|, or eCSSProperty_UNKNOWN if the type of
* |aValue| is not SMILCSSValueType.
*/
static nsCSSPropertyID PropertyFromValue(const SMILValue& aValue);
/**
* If |aValue| is an empty value, converts it to a suitable zero value by
* matching the type of value stored in |aValueToMatch|.
*
* There is no indication if this method fails. If a suitable zero value could
* not be created, |aValue| is simply unmodified.
*
* @param aValue The SMILValue (of type SMILCSSValueType) to
* possibly update.
* @param aValueToMatch A SMILValue (of type SMILCSSValueType) for which
* a corresponding zero value will be created if |aValue|
* is empty.
*/
static void FinalizeValue(SMILValue& aValue, const SMILValue& aValueToMatch);
private:
// Private constructor: prevent instances beyond my singleton.
constexpr SMILCSSValueType() = default;
};
} // namespace mozilla
#endif // DOM_SMIL_SMILCSSVALUETYPE_H_
|