diff options
Diffstat (limited to 'layout/style/CSSVariableDeclarations.h')
-rw-r--r-- | layout/style/CSSVariableDeclarations.h | 139 |
1 files changed, 139 insertions, 0 deletions
diff --git a/layout/style/CSSVariableDeclarations.h b/layout/style/CSSVariableDeclarations.h new file mode 100644 index 000000000..ebc17285b --- /dev/null +++ b/layout/style/CSSVariableDeclarations.h @@ -0,0 +1,139 @@ +/* vim: set shiftwidth=2 tabstop=8 autoindent cindent expandtab: */ +/* 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/. */ + +/* CSS Custom Property assignments for a Declaration at a given priority */ + +#ifndef mozilla_CSSVariableDeclarations_h +#define mozilla_CSSVariableDeclarations_h + +#include "nsDataHashtable.h" + +namespace mozilla { +class CSSVariableResolver; +} // namespace mozilla +struct nsRuleData; + +namespace mozilla { + +class CSSVariableDeclarations +{ +public: + CSSVariableDeclarations(); + CSSVariableDeclarations(const CSSVariableDeclarations& aOther); +#ifdef DEBUG + ~CSSVariableDeclarations(); +#endif + CSSVariableDeclarations& operator=(const CSSVariableDeclarations& aOther); + + /** + * Returns whether this set of variable declarations includes a variable + * with a given name. + * + * @param aName The variable name (not including any "--" prefix that would + * be part of the custom property name). + */ + bool Has(const nsAString& aName) const; + + /** + * Represents the type of a variable value. + */ + enum Type { + eTokenStream, // a stream of CSS tokens (the usual type for variables) + eInitial, // 'initial' + eInherit, // 'inherit' + eUnset // 'unset' + }; + + /** + * Gets the value of a variable in this set of variable declarations. + * + * @param aName The variable name (not including any "--" prefix that would + * be part of the custom property name). + * @param aType Out parameter into which the type of the variable value will + * be stored. + * @param aValue Out parameter into which the value of the variable will + * be stored. If the variable is 'initial', 'inherit' or 'unset', this will + * be the empty string. + * @return Whether a variable with the given name was found. When false + * is returned, aType and aValue will not be modified. + */ + bool Get(const nsAString& aName, Type& aType, nsString& aValue) const; + + /** + * Adds or modifies an existing entry in this set of variable declarations + * to have the value 'initial'. + * + * @param aName The variable name (not including any "--" prefix that would + * be part of the custom property name) whose value is to be set. + */ + void PutInitial(const nsAString& aName); + + /** + * Adds or modifies an existing entry in this set of variable declarations + * to have the value 'inherit'. + * + * @param aName The variable name (not including any "--" prefix that would + * be part of the custom property name) whose value is to be set. + */ + void PutInherit(const nsAString& aName); + + /** + * Adds or modifies an existing entry in this set of variable declarations + * to have the value 'unset'. + * + * @param aName The variable name (not including any "--" prefix that would + * be part of the custom property name) whose value is to be set. + */ + void PutUnset(const nsAString& aName); + + /** + * Adds or modifies an existing entry in this set of variable declarations + * to have a token stream value. + * + * @param aName The variable name (not including any "--" prefix that would + * be part of the custom property name) whose value is to be set. + * @param aTokenStream The CSS token stream. + */ + void PutTokenStream(const nsAString& aName, const nsString& aTokenStream); + + /** + * Removes an entry in this set of variable declarations. + * + * @param aName The variable name (not including any "--" prefix that would + * be part of the custom property name) whose entry is to be removed. + */ + void Remove(const nsAString& aName); + + /** + * Returns the number of entries in this set of variable declarations. + */ + uint32_t Count() const { return mVariables.Count(); } + + /** + * Copies each variable value from this object into aRuleData, unless that + * variable already exists on aRuleData. + */ + void MapRuleInfoInto(nsRuleData* aRuleData); + + /** + * Copies the variables from this object into aResolver, marking them as + * specified values. + */ + void AddVariablesToResolver(CSSVariableResolver* aResolver) const; + + size_t SizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf) const; + +private: + /** + * Adds all the variable declarations from aOther into this object. + */ + void CopyVariablesFrom(const CSSVariableDeclarations& aOther); + + nsDataHashtable<nsStringHashKey, nsString> mVariables; +}; + +} // namespace mozilla + +#endif |