Index: third_party/WebKit/Source/core/layout/svg/SVGTextLayoutAttributesBuilder.cpp |
diff --git a/third_party/WebKit/Source/core/layout/svg/SVGTextLayoutAttributesBuilder.cpp b/third_party/WebKit/Source/core/layout/svg/SVGTextLayoutAttributesBuilder.cpp |
index 6f2888a4e1bef1841f0a076439862f00a1a75ef5..520f25dcd0ee532c9baea93e40acdeb015200c20 100644 |
--- a/third_party/WebKit/Source/core/layout/svg/SVGTextLayoutAttributesBuilder.cpp |
+++ b/third_party/WebKit/Source/core/layout/svg/SVGTextLayoutAttributesBuilder.cpp |
@@ -175,11 +175,7 @@ public: |
|| m_dxListRemaining || m_dyListRemaining |
|| m_rotateListRemaining; |
} |
- void updateCharacterData(unsigned index, SVGCharacterData&); |
- |
- bool hasRotation() const { return !SVGTextLayoutAttributes::isEmptyValue(m_lastRotation); } |
- float lastRotation() const { return m_lastRotation; } |
- unsigned rotateEnd() const { return m_rotateList->length(); } |
+ void updateCharacterData(size_t index, SVGCharacterData&); |
private: |
SVGLengthContext m_lengthContext; |
@@ -193,7 +189,6 @@ private: |
unsigned m_dyListRemaining; |
Member<SVGNumberList> m_rotateList; |
unsigned m_rotateListRemaining; |
- float m_lastRotation; |
}; |
AttributeListsIterator::AttributeListsIterator(SVGTextPositioningElement* element) |
@@ -208,11 +203,10 @@ AttributeListsIterator::AttributeListsIterator(SVGTextPositioningElement* elemen |
, m_dyListRemaining(m_dyList->length()) |
, m_rotateList(element->rotate()->currentValue()) |
, m_rotateListRemaining(m_rotateList->length()) |
- , m_lastRotation(SVGTextLayoutAttributes::emptyValue()) |
{ |
} |
-inline void AttributeListsIterator::updateCharacterData(unsigned index, SVGCharacterData& data) |
+inline void AttributeListsIterator::updateCharacterData(size_t index, SVGCharacterData& data) |
{ |
if (m_xListRemaining) { |
data.x = m_xList->at(index)->value(m_lengthContext); |
@@ -231,9 +225,10 @@ inline void AttributeListsIterator::updateCharacterData(unsigned index, SVGChara |
--m_dyListRemaining; |
} |
if (m_rotateListRemaining) { |
- data.rotate = m_rotateList->at(index)->value(); |
- m_lastRotation = data.rotate; |
- --m_rotateListRemaining; |
+ data.rotate = m_rotateList->at(std::min(index, m_rotateList->length() - 1))->value(); |
+ // The last rotation value spans the whole scope. |
+ if (m_rotateListRemaining > 1) |
+ --m_rotateListRemaining; |
} |
} |
@@ -246,15 +241,6 @@ void SVGTextLayoutAttributesBuilder::fillCharacterDataMap(const TextPosition& po |
SVGCharacterData& data = m_characterDataMap.add(position.start + i + 1, SVGCharacterData()).storedValue->value; |
attrLists.updateCharacterData(i, data); |
} |
- |
- if (!attrLists.hasRotation()) |
- return; |
- |
- // The last rotation value always spans the whole scope. |
- for (unsigned i = attrLists.rotateEnd(); i < position.length; ++i) { |
- SVGCharacterData& data = m_characterDataMap.add(position.start + i + 1, SVGCharacterData()).storedValue->value; |
- data.rotate = attrLists.lastRotation(); |
- } |
} |
DEFINE_TRACE(SVGTextLayoutAttributesBuilder::TextPosition) |