| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) Research In Motion Limited 2010-2011. All rights reserved. | 2 * Copyright (C) Research In Motion Limited 2010-2011. All rights reserved. |
| 3 * | 3 * |
| 4 * This library is free software; you can redistribute it and/or | 4 * This library is free software; you can redistribute it and/or |
| 5 * modify it under the terms of the GNU Library General Public | 5 * modify it under the terms of the GNU Library General Public |
| 6 * License as published by the Free Software Foundation; either | 6 * License as published by the Free Software Foundation; either |
| 7 * version 2 of the License, or (at your option) any later version. | 7 * version 2 of the License, or (at your option) any later version. |
| 8 * | 8 * |
| 9 * This library is distributed in the hope that it will be useful, | 9 * This library is distributed in the hope that it will be useful, |
| 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of | 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 91 for (unsigned textPosition = 0; textPosition < textLength; ++textPosition) { | 91 for (unsigned textPosition = 0; textPosition < textLength; ++textPosition) { |
| 92 UChar currentCharacter = text->characterAt(textPosition); | 92 UChar currentCharacter = text->characterAt(textPosition); |
| 93 if (currentCharacter == ' ' && lastCharacter == ' ') | 93 if (currentCharacter == ' ' && lastCharacter == ' ') |
| 94 continue; | 94 continue; |
| 95 | 95 |
| 96 lastCharacter = currentCharacter; | 96 lastCharacter = currentCharacter; |
| 97 ++atCharacter; | 97 ++atCharacter; |
| 98 } | 98 } |
| 99 } | 99 } |
| 100 | 100 |
| 101 static SVGTextPositioningElement* positioningElementFromLayoutObject(LayoutObjec
t& layoutObject) |
| 102 { |
| 103 ASSERT(layoutObject.isSVGText() || layoutObject.isSVGInline()); |
| 104 |
| 105 Node* node = layoutObject.node(); |
| 106 ASSERT(node); |
| 107 ASSERT(node->isSVGElement()); |
| 108 |
| 109 return isSVGTextPositioningElement(*node) ? toSVGTextPositioningElement(node
) : nullptr; |
| 110 } |
| 111 |
| 101 void SVGTextLayoutAttributesBuilder::collectTextPositioningElements(LayoutBoxMod
elObject& start, UChar& lastCharacter) | 112 void SVGTextLayoutAttributesBuilder::collectTextPositioningElements(LayoutBoxMod
elObject& start, UChar& lastCharacter) |
| 102 { | 113 { |
| 103 ASSERT(!start.isSVGText() || m_textPositions.isEmpty()); | 114 ASSERT(!start.isSVGText() || m_textPositions.isEmpty()); |
| 104 | 115 |
| 105 for (LayoutObject* child = start.slowFirstChild(); child; child = child->nex
tSibling()) { | 116 for (LayoutObject* child = start.slowFirstChild(); child; child = child->nex
tSibling()) { |
| 106 if (child->isSVGInlineText()) { | 117 if (child->isSVGInlineText()) { |
| 107 processLayoutSVGInlineText(toLayoutSVGInlineText(child), m_textLengt
h, lastCharacter); | 118 processLayoutSVGInlineText(toLayoutSVGInlineText(child), m_textLengt
h, lastCharacter); |
| 108 continue; | 119 continue; |
| 109 } | 120 } |
| 110 | 121 |
| 111 if (!child->isSVGInline()) | 122 if (!child->isSVGInline()) |
| 112 continue; | 123 continue; |
| 113 | 124 |
| 114 LayoutSVGInline& inlineChild = toLayoutSVGInline(*child); | 125 LayoutSVGInline& inlineChild = toLayoutSVGInline(*child); |
| 115 SVGTextPositioningElement* element = SVGTextPositioningElement::elementF
romLayoutObject(inlineChild); | 126 SVGTextPositioningElement* element = positioningElementFromLayoutObject(
inlineChild); |
| 116 unsigned atPosition = m_textPositions.size(); | 127 unsigned atPosition = m_textPositions.size(); |
| 117 if (element) | 128 if (element) |
| 118 m_textPositions.append(TextPosition(element, m_textLength)); | 129 m_textPositions.append(TextPosition(element, m_textLength)); |
| 119 | 130 |
| 120 collectTextPositioningElements(inlineChild, lastCharacter); | 131 collectTextPositioningElements(inlineChild, lastCharacter); |
| 121 | 132 |
| 122 if (!element) | 133 if (!element) |
| 123 continue; | 134 continue; |
| 124 | 135 |
| 125 // Update text position, after we're back from recursion. | 136 // Update text position, after we're back from recursion. |
| 126 TextPosition& position = m_textPositions[atPosition]; | 137 TextPosition& position = m_textPositions[atPosition]; |
| 127 ASSERT(!position.length); | 138 ASSERT(!position.length); |
| 128 position.length = m_textLength - position.start; | 139 position.length = m_textLength - position.start; |
| 129 } | 140 } |
| 130 } | 141 } |
| 131 | 142 |
| 132 void SVGTextLayoutAttributesBuilder::buildCharacterDataMap(LayoutSVGText& textRo
ot) | 143 void SVGTextLayoutAttributesBuilder::buildCharacterDataMap(LayoutSVGText& textRo
ot) |
| 133 { | 144 { |
| 134 SVGTextPositioningElement* outermostTextElement = SVGTextPositioningElement:
:elementFromLayoutObject(textRoot); | 145 SVGTextPositioningElement* outermostTextElement = positioningElementFromLayo
utObject(textRoot); |
| 135 ASSERT(outermostTextElement); | 146 ASSERT(outermostTextElement); |
| 136 | 147 |
| 137 // Grab outermost <text> element value lists and insert them in the characte
r data map. | 148 // Grab outermost <text> element value lists and insert them in the characte
r data map. |
| 138 TextPosition wholeTextPosition(outermostTextElement, 0, m_textLength); | 149 TextPosition wholeTextPosition(outermostTextElement, 0, m_textLength); |
| 139 fillCharacterDataMap(wholeTextPosition); | 150 fillCharacterDataMap(wholeTextPosition); |
| 140 | 151 |
| 141 // Handle x/y default attributes. | 152 // Handle x/y default attributes. |
| 142 SVGCharacterDataMap::iterator it = m_characterDataMap.find(1); | 153 SVGCharacterDataMap::iterator it = m_characterDataMap.find(1); |
| 143 if (it == m_characterDataMap.end()) { | 154 if (it == m_characterDataMap.end()) { |
| 144 SVGCharacterData data; | 155 SVGCharacterData data; |
| (...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 229 it->value.rotate = lastRotation; | 240 it->value.rotate = lastRotation; |
| 230 } | 241 } |
| 231 } | 242 } |
| 232 | 243 |
| 233 DEFINE_TRACE(SVGTextLayoutAttributesBuilder::TextPosition) | 244 DEFINE_TRACE(SVGTextLayoutAttributesBuilder::TextPosition) |
| 234 { | 245 { |
| 235 visitor->trace(element); | 246 visitor->trace(element); |
| 236 } | 247 } |
| 237 | 248 |
| 238 } // namespace blink | 249 } // namespace blink |
| OLD | NEW |