| Index: Source/core/rendering/svg/SVGTextMetricsBuilder.cpp
|
| diff --git a/Source/core/rendering/svg/SVGTextMetricsBuilder.cpp b/Source/core/rendering/svg/SVGTextMetricsBuilder.cpp
|
| index 55dc71f7ab71e0af722c755874900b889f7cfeea..c11ee7532ec01c59658c4dbd3db4a0bde47a4e71 100644
|
| --- a/Source/core/rendering/svg/SVGTextMetricsBuilder.cpp
|
| +++ b/Source/core/rendering/svg/SVGTextMetricsBuilder.cpp
|
| @@ -183,27 +183,22 @@ void SVGTextMetricsBuilder::measureTextRenderer(RenderSVGInlineText* text, Measu
|
|
|
| void SVGTextMetricsBuilder::walkTree(RenderObject* start, RenderSVGInlineText* stopAtLeaf, MeasureTextData* data)
|
| {
|
| - for (RenderObject* child = start->firstChild(); child; child = child->nextSibling()) {
|
| + RenderObject* child = start->firstChild();
|
| + while (child) {
|
| if (child->isSVGInlineText()) {
|
| RenderSVGInlineText* text = toRenderSVGInlineText(child);
|
| - if (stopAtLeaf && stopAtLeaf != text) {
|
| - data->processRenderer = false;
|
| - measureTextRenderer(text, data);
|
| - continue;
|
| - }
|
| -
|
| - data->processRenderer = true;
|
| + data->processRenderer = !stopAtLeaf || stopAtLeaf == text;
|
| measureTextRenderer(text, data);
|
| - if (stopAtLeaf)
|
| + if (stopAtLeaf && stopAtLeaf == text)
|
| return;
|
| -
|
| - continue;
|
| + } else if (child->isSVGInline()) {
|
| + // Visit children of text content elements.
|
| + if (RenderObject* inlineChild = child->firstChild()) {
|
| + child = inlineChild;
|
| + continue;
|
| + }
|
| }
|
| -
|
| - if (!child->isSVGInline())
|
| - continue;
|
| -
|
| - walkTree(child, stopAtLeaf, data);
|
| + child = child->nextInPreOrderAfterChildren(start);
|
| }
|
| }
|
|
|
|
|