diff --git a/layout/reftests/svg/reftest.list b/layout/reftests/svg/reftest.list
index 91ba4b22a29..893ff82de17 100644
--- a/layout/reftests/svg/reftest.list
+++ b/layout/reftests/svg/reftest.list
@@ -324,7 +324,6 @@ skip-if(B2G) random-if(/^Windows\x20NT\x205\.1/.test(http.oscpu)) == tspan-rotat
skip-if(B2G) random-if(/^Windows\x20NT\x205\.1/.test(http.oscpu)) == tspan-rotate-04.svg tspan-rotate-ref.svg # Bug 629718 for random failure on WinXP # bug 773482
random-if(/^Windows\x20NT\x205\.1/.test(http.oscpu)) == tspan-rotate-05.svg tspan-rotate-ref.svg # Bug 629718 for random failure on WinXP
skip-if(B2G) random-if(/^Windows\x20NT\x205\.1/.test(http.oscpu)) == tspan-rotate-06.svg tspan-rotate-ref.svg # Bug 629718 for random failure on WinXP # bug 773482
-== tspan-rotate-07.svg tspan-rotate-07-ref.svg
== tspan-rotate-textPath-01.svg tspan-rotate-textPath-01-ref.svg
skip-if(B2G) == tspan-xy-01.svg tspan-xy-ref.svg # bug 773482
skip-if(B2G) == tspan-xy-02.svg tspan-xy-ref.svg # bug 773482
diff --git a/layout/reftests/svg/tspan-rotate-07-ref.svg b/layout/reftests/svg/tspan-rotate-07-ref.svg
deleted file mode 100644
index 5494cda6c2c..00000000000
--- a/layout/reftests/svg/tspan-rotate-07-ref.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
diff --git a/layout/reftests/svg/tspan-rotate-07.svg b/layout/reftests/svg/tspan-rotate-07.svg
deleted file mode 100644
index 83b1dbdde1e..00000000000
--- a/layout/reftests/svg/tspan-rotate-07.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
diff --git a/layout/svg/nsSVGTextFrame2.cpp b/layout/svg/nsSVGTextFrame2.cpp
index 2ff45be5ab5..0c6e55e7d0e 100644
--- a/layout/svg/nsSVGTextFrame2.cpp
+++ b/layout/svg/nsSVGTextFrame2.cpp
@@ -4128,11 +4128,8 @@ nsSVGTextFrame2::ResolvePositions(nsIContent* aContent,
j++;
}
// Propagate final rotate="" value to the end of this element.
- while (j < count &&
- (!mPositions[aIndex + j].IsAngleSpecified() ||
- mPositions[aIndex + j].mAngleImplied)) {
+ while (j < count) {
mPositions[aIndex + j].mAngle = mPositions[aIndex + j - 1].mAngle;
- mPositions[aIndex + j].mAngleImplied = true;
j++;
}
}
@@ -4664,7 +4661,11 @@ nsSVGTextFrame2::DoGlyphPositioning()
}
// Fill in unspecified rotation values.
if (!mPositions[i].IsAngleSpecified()) {
- mPositions[i].mAngle = 0.0f;
+ mPositions[i].mAngle = mPositions[i - 1].mAngle;
+ if (mPositions[i].mAngle != 0.0f) {
+ // Any non-zero rotation must begin a run boundary.
+ mPositions[i].mRunBoundary = true;
+ }
}
}
diff --git a/layout/svg/nsSVGTextFrame2.h b/layout/svg/nsSVGTextFrame2.h
index 49e2b31e47b..c0d3cc3107c 100644
--- a/layout/svg/nsSVGTextFrame2.h
+++ b/layout/svg/nsSVGTextFrame2.h
@@ -47,8 +47,7 @@ struct CharPosition
mUnaddressable(false),
mClusterOrLigatureGroupMiddle(false),
mRunBoundary(false),
- mStartOfChunk(false),
- mAngleImplied(false)
+ mStartOfChunk(false)
{
}
@@ -59,8 +58,7 @@ struct CharPosition
mUnaddressable(false),
mClusterOrLigatureGroupMiddle(false),
mRunBoundary(false),
- mStartOfChunk(false),
- mAngleImplied(false)
+ mStartOfChunk(false)
{
}
@@ -104,10 +102,6 @@ struct CharPosition
// an anchored chunk begins here
bool mStartOfChunk;
- // whether the angle value was implied due to the repetition of the final
- // value in a rotate="" attribute
- bool mAngleImplied;
-
private:
static gfxFloat UnspecifiedCoord()
{