Bug 311063 - tspan attributes x/y/dx/dy are not live. r=afri

git-svn-id: svn://10.0.0.236/trunk@181921 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
tor%cs.brown.edu 2005-10-10 21:18:42 +00:00
parent 2908c3e261
commit 52e03b4601

View File

@ -80,17 +80,29 @@ nsSVGTSpanFrame::nsSVGTSpanFrame()
nsSVGTSpanFrame::~nsSVGTSpanFrame()
{
nsCOMPtr<nsIDOMSVGTextPositioningElement> element = do_QueryInterface(mContent);
// clean up our listener refs:
{
nsCOMPtr<nsIDOMSVGLengthList> lengthList = GetX();
if (lengthList)
NS_REMOVE_SVGVALUE_OBSERVER(lengthList);
nsCOMPtr<nsIDOMSVGAnimatedLengthList> animLengthList;
element->GetX(getter_AddRefs(animLengthList));
if (animLengthList) {
nsCOMPtr<nsIDOMSVGLengthList> lengthList;
animLengthList->GetAnimVal(getter_AddRefs(lengthList));
if (lengthList)
NS_REMOVE_SVGVALUE_OBSERVER(lengthList);
}
}
{
nsCOMPtr<nsIDOMSVGLengthList> lengthList = GetY();
if (lengthList)
NS_REMOVE_SVGVALUE_OBSERVER(lengthList);
nsCOMPtr<nsIDOMSVGAnimatedLengthList> animLengthList;
element->GetY(getter_AddRefs(animLengthList));
if (animLengthList) {
nsCOMPtr<nsIDOMSVGLengthList> lengthList;
animLengthList->GetAnimVal(getter_AddRefs(lengthList));
if (lengthList)
NS_REMOVE_SVGVALUE_OBSERVER(lengthList);
}
}
{
@ -108,17 +120,29 @@ nsSVGTSpanFrame::~nsSVGTSpanFrame()
nsresult nsSVGTSpanFrame::InitSVG()
{
nsCOMPtr<nsIDOMSVGTextPositioningElement> element = do_QueryInterface(mContent);
// set us up as a listener for various <tspan>-properties:
{
nsCOMPtr<nsIDOMSVGLengthList> lengthList = GetX();
if (lengthList)
NS_ADD_SVGVALUE_OBSERVER(lengthList);
nsCOMPtr<nsIDOMSVGAnimatedLengthList> animLengthList;
element->GetX(getter_AddRefs(animLengthList));
if (animLengthList) {
nsCOMPtr<nsIDOMSVGLengthList> lengthList;
animLengthList->GetAnimVal(getter_AddRefs(lengthList));
if (lengthList)
NS_ADD_SVGVALUE_OBSERVER(lengthList);
}
}
{
nsCOMPtr<nsIDOMSVGLengthList> lengthList = GetY();
if (lengthList)
NS_ADD_SVGVALUE_OBSERVER(lengthList);
nsCOMPtr<nsIDOMSVGAnimatedLengthList> animLengthList;
element->GetY(getter_AddRefs(animLengthList));
if (animLengthList) {
nsCOMPtr<nsIDOMSVGLengthList> lengthList;
animLengthList->GetAnimVal(getter_AddRefs(lengthList));
if (lengthList)
NS_ADD_SVGVALUE_OBSERVER(lengthList);
}
}
{
@ -272,15 +296,10 @@ NS_IMETHODIMP
nsSVGTSpanFrame::DidModifySVGObservable (nsISVGValue* observable,
nsISVGValue::modificationType aModType)
{
nsISVGTextFrame* text_frame = GetTextFrame();
if (text_frame)
text_frame->NotifyGlyphMetricsChange(this);
nsIFrame* kid = mFrames.FirstChild();
while (kid) {
nsISVGChildFrame* SVGFrame=0;
kid->QueryInterface(NS_GET_IID(nsISVGChildFrame),(void**)&SVGFrame);
if (SVGFrame)
SVGFrame->NotifyCanvasTMChanged(PR_FALSE); // XXX
kid = kid->GetNextSibling();
}
return NS_OK;
}