mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-02-03 20:49:27 +00:00
Bug 548899: Don't issue attribute-changed notification when transform attribute is animated. r=jwatt sr=roc
This commit is contained in:
parent
6db6a6b16a
commit
d5d1ef1794
14
content/smil/crashtests/548899-1.svg
Normal file
14
content/smil/crashtests/548899-1.svg
Normal file
@ -0,0 +1,14 @@
|
||||
<?xml version="1.0"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<defs>
|
||||
<circle id="circleID" cx="20" cy="100" r="10" fill="orange" stroke="black">
|
||||
<animateTransform attributeName="transform" type="scale"
|
||||
from="1" to="2" begin="0" dur="3"/>
|
||||
</circle>
|
||||
<rect id="rectID" fill="green" stroke="black" height="100" width="100">
|
||||
<animate attributeName="fill" from="white" to="blue" begin="0" dur="3"/>
|
||||
</rect>
|
||||
</defs>
|
||||
<use xlink:href="#circleID"/>
|
||||
</svg>
|
After Width: | Height: | Size: 567 B |
@ -6,3 +6,4 @@ load 526875-2.svg
|
||||
load 529387-1.xhtml
|
||||
load 537157-1.svg
|
||||
load 547333-1.svg
|
||||
load 548899-1.svg
|
||||
|
@ -1608,6 +1608,18 @@ nsSVGElement::DidAnimatePreserveAspectRatio()
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
nsSVGElement::DidAnimateTransform()
|
||||
{
|
||||
nsIFrame* frame = GetPrimaryFrame();
|
||||
|
||||
if (frame) {
|
||||
frame->AttributeChanged(kNameSpaceID_None,
|
||||
nsGkAtoms::transform,
|
||||
nsIDOMMutationEvent::MODIFICATION);
|
||||
}
|
||||
}
|
||||
|
||||
nsSVGElement::StringAttributesInfo
|
||||
nsSVGElement::GetStringInfo()
|
||||
{
|
||||
@ -1782,7 +1794,7 @@ nsSVGElement::GetAnimatedAttr(const nsIAtom* aName)
|
||||
= static_cast<nsSVGAnimatedTransformList*>(transformList.get());
|
||||
NS_ENSURE_TRUE(list, nsnull);
|
||||
|
||||
return new nsSVGTransformSMILAttr(list);
|
||||
return new nsSVGTransformSMILAttr(list, this);
|
||||
}
|
||||
|
||||
// Lengths:
|
||||
|
@ -163,6 +163,7 @@ public:
|
||||
virtual void DidAnimateEnum(PRUint8 aAttrEnum);
|
||||
virtual void DidAnimateViewBox();
|
||||
virtual void DidAnimatePreserveAspectRatio();
|
||||
virtual void DidAnimateTransform();
|
||||
|
||||
void GetAnimatedLengthValues(float *aFirst, ...);
|
||||
void GetAnimatedNumberValues(float *aFirst, ...);
|
||||
|
@ -113,7 +113,6 @@ nsSVGTransformSMILAttr::SetAnimValue(const nsSMILValue& aValue)
|
||||
nsresult rv = NS_OK;
|
||||
|
||||
// Create the anim value if necessary
|
||||
mVal->WillModify(nsISVGValue::mod_other);
|
||||
if (!mVal->mAnimVal) {
|
||||
rv = nsSVGTransformList::Create(getter_AddRefs(mVal->mAnimVal));
|
||||
NS_ENSURE_SUCCESS(rv,rv);
|
||||
@ -128,7 +127,7 @@ nsSVGTransformSMILAttr::SetAnimValue(const nsSMILValue& aValue)
|
||||
}
|
||||
NS_ENSURE_SUCCESS(rv,rv);
|
||||
|
||||
mVal->DidModify(nsISVGValue::mod_other);
|
||||
mSVGElement->DidAnimateTransform();
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
@ -52,8 +52,9 @@ class nsSVGSMILTransform;
|
||||
class nsSVGTransformSMILAttr : public nsISMILAttr
|
||||
{
|
||||
public:
|
||||
nsSVGTransformSMILAttr(nsSVGAnimatedTransformList* aTransform)
|
||||
: mVal(aTransform) {}
|
||||
nsSVGTransformSMILAttr(nsSVGAnimatedTransformList* aTransform,
|
||||
nsSVGElement* aSVGElement)
|
||||
: mVal(aTransform), mSVGElement(aSVGElement) {}
|
||||
|
||||
// nsISMILAttr methods
|
||||
virtual nsresult ValueFromString(const nsAString& aStr,
|
||||
@ -83,6 +84,7 @@ private:
|
||||
// created & destroyed during a SMIL sample-step, during which time the DOM
|
||||
// isn't modified.
|
||||
nsSVGAnimatedTransformList* mVal;
|
||||
nsSVGElement* mSVGElement;
|
||||
};
|
||||
|
||||
#endif // NS_SVGTRANSFORMSMILATTR_H_
|
||||
|
Loading…
x
Reference in New Issue
Block a user