From 01048ec6fa58df3d4bfdc9d14ee1ce09d06562e2 Mon Sep 17 00:00:00 2001 From: "tor%cs.brown.edu" Date: Mon, 3 Oct 2005 01:21:00 +0000 Subject: [PATCH] Bug 299376 - don't assume that both x and y of a tspan are set. r=afri git-svn-id: svn://10.0.0.236/trunk@181457 18797224-902f-48f8-a5cc-f745e15eee43 --- .../layout/svg/base/src/nsSVGTSpanFrame.cpp | 18 ++++-------------- mozilla/layout/svg/base/src/nsSVGTextFrame.cpp | 17 +++++++++++++---- 2 files changed, 17 insertions(+), 18 deletions(-) diff --git a/mozilla/layout/svg/base/src/nsSVGTSpanFrame.cpp b/mozilla/layout/svg/base/src/nsSVGTSpanFrame.cpp index 694326ac32b..a7d913b19d9 100644 --- a/mozilla/layout/svg/base/src/nsSVGTSpanFrame.cpp +++ b/mozilla/layout/svg/base/src/nsSVGTSpanFrame.cpp @@ -674,14 +674,9 @@ nsSVGTSpanFrame::GetX() if (!tpElement) return nsnull; - if (!mContent->HasAttr(kNameSpaceID_None, nsSVGAtoms::x)) { - nsISVGTextContainerFrame *parent; - mParent->QueryInterface(NS_GET_IID(nsISVGTextContainerFrame), (void **)&parent); - if (parent) - return parent->GetX(); - else + if (!mContent->HasAttr(kNameSpaceID_None, nsSVGAtoms::x)) return nsnull; - } + nsCOMPtr animLengthList; tpElement->GetX(getter_AddRefs(animLengthList)); nsIDOMSVGLengthList *retval; @@ -696,14 +691,9 @@ nsSVGTSpanFrame::GetY() if (!tpElement) return nsnull; - if (!mContent->HasAttr(kNameSpaceID_None, nsSVGAtoms::y)) { - nsISVGTextContainerFrame *parent; - mParent->QueryInterface(NS_GET_IID(nsISVGTextContainerFrame), (void **)&parent); - if (parent) - return parent->GetY(); - else + if (!mContent->HasAttr(kNameSpaceID_None, nsSVGAtoms::y)) return nsnull; - } + nsCOMPtr animLengthList; tpElement->GetY(getter_AddRefs(animLengthList)); nsIDOMSVGLengthList *retval; diff --git a/mozilla/layout/svg/base/src/nsSVGTextFrame.cpp b/mozilla/layout/svg/base/src/nsSVGTextFrame.cpp index 4076ec531f5..6684aab2bac 100644 --- a/mozilla/layout/svg/base/src/nsSVGTextFrame.cpp +++ b/mozilla/layout/svg/base/src/nsSVGTextFrame.cpp @@ -1053,7 +1053,6 @@ static void GetSingleValue(nsISVGGlyphFragmentLeaf *fragment, nsIDOMSVGLengthList *list, float *val) { - *val = 0.0f; if (!list) return; @@ -1147,9 +1146,19 @@ nsSVGTextFrame::UpdateGlyphPositioning() firstFragment = node->GetFirstGlyphFragment(); + float x, y; + + { + nsCOMPtr list = GetX(); + GetSingleValue(firstFragment, list, &x); + } + { + nsCOMPtr list = GetY(); + GetSingleValue(firstFragment, list, &y); + } + // loop over chunks while (firstFragment) { - float x, y; { nsCOMPtr list = firstFragment->GetX(); GetSingleValue(firstFragment, list, &x); @@ -1173,7 +1182,7 @@ nsSVGTextFrame::UpdateGlyphPositioning() fragment->GetGlyphMetrics(getter_AddRefs(metrics)); if (!metrics) continue; - float advance, dx; + float advance, dx = 0.0f; nsCOMPtr list = fragment->GetDx(); GetSingleValue(fragment, list, &dx); metrics->GetAdvance(&advance); @@ -1197,7 +1206,7 @@ nsSVGTextFrame::UpdateGlyphPositioning() fragment->GetGlyphMetrics(getter_AddRefs(metrics)); if (!metrics) continue; - float baseline_offset, dx, dy; + float baseline_offset, dx = 0.0f, dy = 0.0f; metrics->GetBaselineOffset(baseline, &baseline_offset); { nsCOMPtr list = fragment->GetDx();