summaryrefslogtreecommitdiffstats
path: root/dom/smil/SMILCSSValueType.h
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 19:33:14 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 19:33:14 +0000
commit36d22d82aa202bb199967e9512281e9a53db42c9 (patch)
tree105e8c98ddea1c1e4784a60a5a6410fa416be2de /dom/smil/SMILCSSValueType.h
parentInitial commit. (diff)
downloadfirefox-esr-36d22d82aa202bb199967e9512281e9a53db42c9.tar.xz
firefox-esr-36d22d82aa202bb199967e9512281e9a53db42c9.zip
Adding upstream version 115.7.0esr.upstream/115.7.0esrupstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'dom/smil/SMILCSSValueType.h')
-rw-r--r--dom/smil/SMILCSSValueType.h133
1 files changed, 133 insertions, 0 deletions
diff --git a/dom/smil/SMILCSSValueType.h b/dom/smil/SMILCSSValueType.h
new file mode 100644
index 0000000000..72c66bdc43
--- /dev/null
+++ b/dom/smil/SMILCSSValueType.h
@@ -0,0 +1,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_