| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) Research In Motion Limited 2010-2012. All rights reserved. | 2 * Copyright (C) Research In Motion Limited 2010-2012. 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 |
| 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| 12 * Library General Public License for more details. | 12 * Library General Public License for more details. |
| 13 * | 13 * |
| 14 * You should have received a copy of the GNU Library General Public License | 14 * You should have received a copy of the GNU Library General Public License |
| 15 * along with this library; see the file COPYING.LIB. If not, write to | 15 * along with this library; see the file COPYING.LIB. If not, write to |
| 16 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, | 16 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, |
| 17 * Boston, MA 02110-1301, USA. | 17 * Boston, MA 02110-1301, USA. |
| 18 */ | 18 */ |
| 19 | 19 |
| 20 #include "config.h" | 20 #include "config.h" |
| 21 | 21 |
| 22 #include "core/rendering/svg/SVGTextMetrics.h" | 22 #include "core/rendering/svg/SVGTextMetrics.h" |
| 23 | 23 |
| 24 #include "core/rendering/svg/RenderSVGInlineText.h" | 24 #include "core/rendering/svg/RenderSVGInlineText.h" |
| 25 #include "core/rendering/svg/SVGTextRunRenderingContext.h" | |
| 26 | 25 |
| 27 namespace blink { | 26 namespace blink { |
| 28 | 27 |
| 29 SVGTextMetrics::SVGTextMetrics() | 28 SVGTextMetrics::SVGTextMetrics() |
| 30 : m_width(0) | 29 : m_width(0) |
| 31 , m_height(0) | 30 , m_height(0) |
| 32 , m_length(0) | 31 , m_length(0) |
| 33 , m_glyph(0) | 32 , m_glyph(0) |
| 34 { | 33 { |
| 35 } | 34 } |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 79 , textDirection | 78 , textDirection |
| 80 , isOverride(style->unicodeBidi()) /* directionalOverride */); | 79 , isOverride(style->unicodeBidi()) /* directionalOverride */); |
| 81 | 80 |
| 82 if (length) { | 81 if (length) { |
| 83 if (text->is8Bit()) | 82 if (text->is8Bit()) |
| 84 run.setText(text->characters8() + position, length); | 83 run.setText(text->characters8() + position, length); |
| 85 else | 84 else |
| 86 run.setText(text->characters16() + position, length); | 85 run.setText(text->characters16() + position, length); |
| 87 } | 86 } |
| 88 | 87 |
| 89 if (textRunNeedsRenderingContext(style->font())) | |
| 90 run.setRenderingContext(SVGTextRunRenderingContext::create(text)); | |
| 91 | |
| 92 // We handle letter & word spacing ourselves. | 88 // We handle letter & word spacing ourselves. |
| 93 run.disableSpacing(); | 89 run.disableSpacing(); |
| 94 | 90 |
| 95 // Propagate the maximum length of the characters buffer to the TextRun, eve
n when we're only processing a substring. | 91 // Propagate the maximum length of the characters buffer to the TextRun, eve
n when we're only processing a substring. |
| 96 run.setCharactersLength(text->textLength() - position); | 92 run.setCharactersLength(text->textLength() - position); |
| 97 ASSERT(run.charactersLength() >= run.length()); | 93 ASSERT(run.charactersLength() >= run.length()); |
| 98 return run; | 94 return run; |
| 99 } | 95 } |
| 100 | 96 |
| 101 SVGTextMetrics SVGTextMetrics::measureCharacterRange(RenderSVGInlineText* text,
unsigned position, unsigned length, TextDirection textDirection) | 97 SVGTextMetrics SVGTextMetrics::measureCharacterRange(RenderSVGInlineText* text,
unsigned position, unsigned length, TextDirection textDirection) |
| 102 { | 98 { |
| 103 ASSERT(text); | 99 ASSERT(text); |
| 104 return SVGTextMetrics(text, constructTextRun(text, position, length, textDir
ection)); | 100 return SVGTextMetrics(text, constructTextRun(text, position, length, textDir
ection)); |
| 105 } | 101 } |
| 106 | 102 |
| 107 SVGTextMetrics SVGTextMetrics::measureCharacterRange(RenderSVGInlineText* text,
unsigned position, unsigned length) | 103 SVGTextMetrics SVGTextMetrics::measureCharacterRange(RenderSVGInlineText* text,
unsigned position, unsigned length) |
| 108 { | 104 { |
| 109 ASSERT(text); | 105 ASSERT(text); |
| 110 return SVGTextMetrics(text, constructTextRun(text, position, length)); | 106 return SVGTextMetrics(text, constructTextRun(text, position, length)); |
| 111 } | 107 } |
| 112 | 108 |
| 113 SVGTextMetrics::SVGTextMetrics(RenderSVGInlineText* text, unsigned position, uns
igned length, float width, Glyph glyphNameGlyphId) | 109 SVGTextMetrics::SVGTextMetrics(RenderSVGInlineText* text, unsigned position, uns
igned length, float width, Glyph glyphNameGlyphId) |
| 114 { | 110 { |
| 115 ASSERT(text); | 111 ASSERT(text); |
| 116 | 112 |
| 117 bool needsContext = textRunNeedsRenderingContext(text->style()->font()); | |
| 118 float scalingFactor = text->scalingFactor(); | 113 float scalingFactor = text->scalingFactor(); |
| 119 ASSERT(scalingFactor); | 114 ASSERT(scalingFactor); |
| 120 | 115 |
| 121 m_width = width / scalingFactor; | 116 m_width = width / scalingFactor; |
| 122 m_height = text->scaledFont().fontMetrics().floatHeight() / scalingFactor; | 117 m_height = text->scaledFont().fontMetrics().floatHeight() / scalingFactor; |
| 123 m_glyph = needsContext ? glyphNameGlyphId : 0; | 118 m_glyph = 0; |
| 124 | 119 |
| 125 m_length = length; | 120 m_length = length; |
| 126 } | 121 } |
| 127 | 122 |
| 128 } | 123 } |
| OLD | NEW |