gecko-dev/dom/smil/nsSMILTargetIdentifier.h
Mantaroh Yoshinaga df05b9f9a2 Bug 1062106 part 1 - Remove special handling of attributeType='XML'. r=birtles,longsonr+218550
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
2017-03-21 15:42:17 +09:00

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_