mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-27 12:15:33 +00:00
df05b9f9a2
This patch removes handling of the 'attributeType' attribute so that we behave as if attributeType is always 'auto'. This means that for CSS properties we always animate them as CSS properties (i.e. we animate them as part of the SMIL override stylesheet) rather than mapped attributes. The one special case is width/height on an outer SVG. Previously we animated this as a mapped attribute since Web compatibility requires that the width/height on an outer SVG, when set explicitly, are mapped to style. However, we can produce the same behavior by animating these as CSS properties (as opposed to mapped attributes). There is no observable difference in results returned by the SVG DOM APIs, only the level at which the result is added to the cascade: the SMIL override stylesheet instead of the attribute animation presentation hint level. As part of this patch, we animate width/height on outer SVG elements as CSS properties as opposed to mapped attributes both for consistency and also so we can remove the animated mapped attribute code altogether. MozReview-Commit-ID: Ll1LWWRQ66R --HG-- extra : rebase_source : bd513e191e3d0ba2a1e982eea4c548392bf5817d
82 lines
2.5 KiB
C++
82 lines
2.5 KiB
C++
/* -*- 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/. */
|
|
|
|
#ifndef NS_SMILTARGETIDENTIFIER_H_
|
|
#define NS_SMILTARGETIDENTIFIER_H_
|
|
|
|
#include "mozilla/dom/Element.h"
|
|
|
|
/**
|
|
* Struct: nsSMILTargetIdentifier
|
|
*
|
|
* Tuple of: { Animated Element, Attribute Name }
|
|
*
|
|
* Used in nsSMILAnimationController as hash key for mapping an animation
|
|
* target to the nsSMILCompositor for that target.
|
|
*
|
|
* NOTE: Need a nsRefPtr for the element & attribute name, because
|
|
* nsSMILAnimationController retain its hash table for one sample into the
|
|
* future, and we need to make sure their target isn't deleted in that time.
|
|
*/
|
|
|
|
struct nsSMILTargetIdentifier
|
|
{
|
|
nsSMILTargetIdentifier()
|
|
: mElement(nullptr), mAttributeName(nullptr),
|
|
mAttributeNamespaceID(kNameSpaceID_Unknown) {}
|
|
|
|
inline bool Equals(const nsSMILTargetIdentifier& aOther) const
|
|
{
|
|
return (aOther.mElement == mElement &&
|
|
aOther.mAttributeName == mAttributeName &&
|
|
aOther.mAttributeNamespaceID == mAttributeNamespaceID);
|
|
}
|
|
|
|
RefPtr<mozilla::dom::Element> mElement;
|
|
RefPtr<nsIAtom> mAttributeName;
|
|
int32_t mAttributeNamespaceID;
|
|
};
|
|
|
|
/**
|
|
* Class: nsSMILWeakTargetIdentifier
|
|
*
|
|
* Version of the above struct that uses non-owning pointers. These are kept
|
|
* private, to ensure that they aren't ever dereferenced (or used at all,
|
|
* outside of Equals()).
|
|
*
|
|
* This is solely for comparisons to determine if a target has changed
|
|
* from one sample to the next.
|
|
*/
|
|
class nsSMILWeakTargetIdentifier
|
|
{
|
|
public:
|
|
// Trivial constructor
|
|
nsSMILWeakTargetIdentifier()
|
|
: mElement(nullptr), mAttributeName(nullptr) {}
|
|
|
|
// Allow us to update a weak identifier to match a given non-weak identifier
|
|
nsSMILWeakTargetIdentifier&
|
|
operator=(const nsSMILTargetIdentifier& aOther)
|
|
{
|
|
mElement = aOther.mElement;
|
|
mAttributeName = aOther.mAttributeName;
|
|
return *this;
|
|
}
|
|
|
|
// Allow for comparison vs. non-weak identifier
|
|
inline bool Equals(const nsSMILTargetIdentifier& aOther) const
|
|
{
|
|
return (aOther.mElement == mElement &&
|
|
aOther.mAttributeName == mAttributeName);
|
|
}
|
|
|
|
private:
|
|
const nsIContent* mElement;
|
|
const nsIAtom* mAttributeName;
|
|
};
|
|
|
|
#endif // NS_SMILTARGETIDENTIFIER_H_
|