forked from Floorp-Projects/Floorp
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathSMILCSSValueType.h
133 lines (119 loc) · 5.39 KB
/
SMILCSSValueType.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 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 Init(SMILValue& aValue) const override;
void Destroy(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(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_