forked from mozilla/gecko-dev
/
nsSMILCSSValueType.h
133 lines (119 loc) · 5.3 KB
/
nsSMILCSSValueType.h
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
/* -*- 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 NS_SMILCSSVALUETYPE_H_
#define NS_SMILCSSVALUETYPE_H_
#include "nsISMILType.h"
#include "nsCSSPropertyID.h"
#include "mozilla/Attributes.h"
class nsAString;
namespace mozilla {
struct AnimationValue;
namespace dom {
class Element;
} // namespace dom
} // namespace mozilla
/*
* nsSMILCSSValueType: Represents a SMIL-animated CSS value.
*/
class nsSMILCSSValueType : public nsISMILType
{
public:
typedef mozilla::dom::Element Element;
typedef mozilla::AnimationValue AnimationValue;
// Singleton for nsSMILValue objects to hold onto.
static nsSMILCSSValueType sSingleton;
protected:
// nsISMILType Methods
// -------------------
void Init(nsSMILValue& aValue) const override;
void Destroy(nsSMILValue&) const override;
nsresult Assign(nsSMILValue& aDest,
const nsSMILValue& aSrc) const override;
bool IsEqual(const nsSMILValue& aLeft,
const nsSMILValue& aRight) const override;
nsresult Add(nsSMILValue& aDest,
const nsSMILValue& aValueToAdd,
uint32_t aCount) const override;
nsresult SandwichAdd(nsSMILValue& aDest,
const nsSMILValue& aValueToAdd) const override;
nsresult ComputeDistance(const nsSMILValue& aFrom,
const nsSMILValue& aTo,
double& aDistance) const override;
nsresult Interpolate(const nsSMILValue& aStartVal,
const nsSMILValue& aEndVal,
double aUnitDistance,
nsSMILValue& aResult) const override;
public:
// Helper Methods
// --------------
/**
* Sets up the given nsSMILValue 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 == nsSMILNullType::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 nsSMILValue 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 == nsSMILCSSValueType::sSingleton
*/
static void ValueFromString(nsCSSPropertyID aPropID,
Element* aTargetElement,
const nsAString& aString,
nsSMILValue& aValue,
bool* aIsContextSensitive);
/**
* Creates an nsSMILValue 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 nsSMILValue. On failure, returns an
* nsSMILValue with the null type (i.e. rv.IsNull()
* returns true).
*/
static nsSMILValue ValueFromAnimationValue(nsCSSPropertyID aPropID,
Element* aTargetElement,
const AnimationValue& aValue);
/**
* Creates a string representation of the given nsSMILValue.
*
* Note: aValue is expected to be of this type (that is, it's expected to
* have been initialized by nsSMILCSSValueType::sSingleton). If aValue is a
* freshly-initialized value the resulting string will be empty.
*
* @param aValue The nsSMILValue to be converted into a string.
* @param [out] aString The string to be populated with the given value.
*/
static void ValueToString(const nsSMILValue& aValue, nsAString& aString);
/**
* Return the CSS property animated by the specified value.
*
* @param aValue The nsSMILValue to examine.
* @return The nsCSSPropertyID enum value of the property animated
* by |aValue|, or eCSSProperty_UNKNOWN if the type of
* |aValue| is not nsSMILCSSValueType.
*/
static nsCSSPropertyID PropertyFromValue(const nsSMILValue& aValue);
private:
// Private constructor: prevent instances beyond my singleton.
constexpr nsSMILCSSValueType() {}
};
#endif // NS_SMILCSSVALUETYPE_H_