Bug 299376 - don't assume that both x and y of a tspan are set. r=afri

This commit is contained in:
tor%cs.brown.edu 2005-10-03 01:21:00 +00:00
Родитель 15877de617
Коммит 1aa83717e6
2 изменённых файлов: 17 добавлений и 18 удалений

Просмотреть файл

@ -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<nsIDOMSVGAnimatedLengthList> 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<nsIDOMSVGAnimatedLengthList> animLengthList;
tpElement->GetY(getter_AddRefs(animLengthList));
nsIDOMSVGLengthList *retval;

Просмотреть файл

@ -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<nsIDOMSVGLengthList> list = GetX();
GetSingleValue(firstFragment, list, &x);
}
{
nsCOMPtr<nsIDOMSVGLengthList> list = GetY();
GetSingleValue(firstFragment, list, &y);
}
// loop over chunks
while (firstFragment) {
float x, y;
{
nsCOMPtr<nsIDOMSVGLengthList> 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<nsIDOMSVGLengthList> 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<nsIDOMSVGLengthList> list = fragment->GetDx();