Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(436)

Side by Side Diff: Source/core/rendering/svg/SVGInlineTextBox.cpp

Issue 889563002: Make RenderObject::style() return a const object (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Blind fix for Mac. Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 /** 1 /**
2 * Copyright (C) 2007 Rob Buis <buis@kde.org> 2 * Copyright (C) 2007 Rob Buis <buis@kde.org>
3 * Copyright (C) 2007 Nikolas Zimmermann <zimmermann@kde.org> 3 * Copyright (C) 2007 Nikolas Zimmermann <zimmermann@kde.org>
4 * Copyright (C) Research In Motion Limited 2010. All rights reserved. 4 * Copyright (C) Research In Motion Limited 2010. All rights reserved.
5 * 5 *
6 * This library is free software; you can redistribute it and/or 6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Library General Public 7 * modify it under the terms of the GNU Library General Public
8 * License as published by the Free Software Foundation; either 8 * License as published by the Free Software Foundation; either
9 * version 2 of the License, or (at your option) any later version. 9 * version 2 of the License, or (at your option) any later version.
10 * 10 *
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
76 return 0; 76 return 0;
77 } 77 }
78 78
79 int SVGInlineTextBox::offsetForPositionInFragment(const SVGTextFragment& fragmen t, FloatWillBeLayoutUnit position, bool includePartialGlyphs) const 79 int SVGInlineTextBox::offsetForPositionInFragment(const SVGTextFragment& fragmen t, FloatWillBeLayoutUnit position, bool includePartialGlyphs) const
80 { 80 {
81 RenderSVGInlineText& textRenderer = toRenderSVGInlineText(this->renderer()); 81 RenderSVGInlineText& textRenderer = toRenderSVGInlineText(this->renderer());
82 82
83 float scalingFactor = textRenderer.scalingFactor(); 83 float scalingFactor = textRenderer.scalingFactor();
84 ASSERT(scalingFactor); 84 ASSERT(scalingFactor);
85 85
86 RenderStyle* style = textRenderer.style(); 86 const RenderStyle* style = textRenderer.style();
87 ASSERT(style); 87 ASSERT(style);
88 88
89 TextRun textRun = constructTextRun(style, fragment); 89 TextRun textRun = constructTextRun(style, fragment);
90 90
91 // Eventually handle lengthAdjust="spacingAndGlyphs". 91 // Eventually handle lengthAdjust="spacingAndGlyphs".
92 // FIXME: Handle vertical text. 92 // FIXME: Handle vertical text.
93 AffineTransform fragmentTransform; 93 AffineTransform fragmentTransform;
94 fragment.buildFragmentTransform(fragmentTransform); 94 fragment.buildFragmentTransform(fragmentTransform);
95 if (!fragmentTransform.isIdentity()) 95 if (!fragmentTransform.isIdentity())
96 textRun.setHorizontalGlyphStretch(narrowPrecisionToFloat(fragmentTransfo rm.xScale())); 96 textRun.setHorizontalGlyphStretch(narrowPrecisionToFloat(fragmentTransfo rm.xScale()));
97 97
98 return fragment.characterOffset - start() + textRenderer.scaledFont().offset ForPosition(textRun, position * scalingFactor, includePartialGlyphs); 98 return fragment.characterOffset - start() + textRenderer.scaledFont().offset ForPosition(textRun, position * scalingFactor, includePartialGlyphs);
99 } 99 }
100 100
101 FloatWillBeLayoutUnit SVGInlineTextBox::positionForOffset(int) const 101 FloatWillBeLayoutUnit SVGInlineTextBox::positionForOffset(int) const
102 { 102 {
103 // SVG doesn't use the offset <-> position selection system. 103 // SVG doesn't use the offset <-> position selection system.
104 ASSERT_NOT_REACHED(); 104 ASSERT_NOT_REACHED();
105 return 0; 105 return 0;
106 } 106 }
107 107
108 FloatRectWillBeLayoutRect SVGInlineTextBox::selectionRectForTextFragment(const S VGTextFragment& fragment, int startPosition, int endPosition, RenderStyle* style ) 108 FloatRectWillBeLayoutRect SVGInlineTextBox::selectionRectForTextFragment(const S VGTextFragment& fragment, int startPosition, int endPosition, const RenderStyle* style)
109 { 109 {
110 ASSERT(startPosition < endPosition); 110 ASSERT(startPosition < endPosition);
111 ASSERT(style); 111 ASSERT(style);
112 112
113 RenderSVGInlineText& textRenderer = toRenderSVGInlineText(this->renderer()); 113 RenderSVGInlineText& textRenderer = toRenderSVGInlineText(this->renderer());
114 114
115 float scalingFactor = textRenderer.scalingFactor(); 115 float scalingFactor = textRenderer.scalingFactor();
116 ASSERT(scalingFactor); 116 ASSERT(scalingFactor);
117 117
118 const Font& scaledFont = textRenderer.scaledFont(); 118 const Font& scaledFont = textRenderer.scaledFont();
(...skipping 13 matching lines...) Expand all
132 } 132 }
133 133
134 LayoutRect SVGInlineTextBox::localSelectionRect(int startPosition, int endPositi on) 134 LayoutRect SVGInlineTextBox::localSelectionRect(int startPosition, int endPositi on)
135 { 135 {
136 int boxStart = start(); 136 int boxStart = start();
137 startPosition = std::max(startPosition - boxStart, 0); 137 startPosition = std::max(startPosition - boxStart, 0);
138 endPosition = std::min(endPosition - boxStart, static_cast<int>(len())); 138 endPosition = std::min(endPosition - boxStart, static_cast<int>(len()));
139 if (startPosition >= endPosition) 139 if (startPosition >= endPosition)
140 return LayoutRect(); 140 return LayoutRect();
141 141
142 RenderStyle* style = renderer().style(); 142 const RenderStyle* style = renderer().style();
143 ASSERT(style); 143 ASSERT(style);
144 144
145 AffineTransform fragmentTransform; 145 AffineTransform fragmentTransform;
146 FloatRectWillBeLayoutRect selectionRect; 146 FloatRectWillBeLayoutRect selectionRect;
147 int fragmentStartPosition = 0; 147 int fragmentStartPosition = 0;
148 int fragmentEndPosition = 0; 148 int fragmentEndPosition = 0;
149 149
150 unsigned textFragmentsSize = m_textFragments.size(); 150 unsigned textFragmentsSize = m_textFragments.size();
151 for (unsigned i = 0; i < textFragmentsSize; ++i) { 151 for (unsigned i = 0; i < textFragmentsSize; ++i) {
152 const SVGTextFragment& fragment = m_textFragments.at(i); 152 const SVGTextFragment& fragment = m_textFragments.at(i);
(...skipping 13 matching lines...) Expand all
166 // FIXME: the call to rawValue() below is temporary and should be removed on ce the transition 166 // FIXME: the call to rawValue() below is temporary and should be removed on ce the transition
167 // to LayoutUnit-based types is complete (crbug.com/321237) 167 // to LayoutUnit-based types is complete (crbug.com/321237)
168 return enclosingIntRect(selectionRect.rawValue()); 168 return enclosingIntRect(selectionRect.rawValue());
169 } 169 }
170 170
171 void SVGInlineTextBox::paint(const PaintInfo& paintInfo, const LayoutPoint& pain tOffset, LayoutUnit, LayoutUnit) 171 void SVGInlineTextBox::paint(const PaintInfo& paintInfo, const LayoutPoint& pain tOffset, LayoutUnit, LayoutUnit)
172 { 172 {
173 SVGInlineTextBoxPainter(*this).paint(paintInfo, paintOffset); 173 SVGInlineTextBoxPainter(*this).paint(paintInfo, paintOffset);
174 } 174 }
175 175
176 TextRun SVGInlineTextBox::constructTextRun(RenderStyle* style, const SVGTextFrag ment& fragment) const 176 TextRun SVGInlineTextBox::constructTextRun(const RenderStyle* style, const SVGTe xtFragment& fragment) const
177 { 177 {
178 ASSERT(style); 178 ASSERT(style);
179 179
180 RenderText* text = &renderer(); 180 RenderText* text = &renderer();
181 181
182 // FIXME(crbug.com/264211): This should not be necessary but can occur if we 182 // FIXME(crbug.com/264211): This should not be necessary but can occur if we
183 // layout during layout. Remove this when 264211 is fixed. 183 // layout during layout. Remove this when 264211 is fixed.
184 RELEASE_ASSERT(!text->needsLayout()); 184 RELEASE_ASSERT(!text->needsLayout());
185 185
186 TextRun run(static_cast<const LChar*>(0) // characters, will be set below if non-zero. 186 TextRun run(static_cast<const LChar*>(0) // characters, will be set below if non-zero.
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
227 endPosition = length; 227 endPosition = length;
228 else { 228 else {
229 ASSERT(endPosition >= offset); 229 ASSERT(endPosition >= offset);
230 endPosition -= offset; 230 endPosition -= offset;
231 } 231 }
232 232
233 ASSERT(startPosition < endPosition); 233 ASSERT(startPosition < endPosition);
234 return true; 234 return true;
235 } 235 }
236 236
237 void SVGInlineTextBox::paintDocumentMarker(GraphicsContext*, const FloatPointWil lBeLayoutPoint&, DocumentMarker*, RenderStyle*, const Font&, bool) 237 void SVGInlineTextBox::paintDocumentMarker(GraphicsContext*, const FloatPointWil lBeLayoutPoint&, DocumentMarker*, const RenderStyle*, const Font&, bool)
238 { 238 {
239 // SVG does not have support for generic document markers (e.g., spellchecki ng, etc). 239 // SVG does not have support for generic document markers (e.g., spellchecki ng, etc).
240 } 240 }
241 241
242 void SVGInlineTextBox::paintTextMatchMarker(GraphicsContext* context, const Floa tPointWillBeLayoutPoint& point, DocumentMarker* marker, RenderStyle* style, cons t Font& font) 242 void SVGInlineTextBox::paintTextMatchMarker(GraphicsContext* context, const Floa tPointWillBeLayoutPoint& point, DocumentMarker* marker, const RenderStyle* style , const Font& font)
243 { 243 {
244 SVGInlineTextBoxPainter(*this).paintTextMatchMarker(context, point.toFloatPo int(), marker, style, font); 244 SVGInlineTextBoxPainter(*this).paintTextMatchMarker(context, point.toFloatPo int(), marker, style, font);
245 } 245 }
246 246
247 FloatRectWillBeLayoutRect SVGInlineTextBox::calculateBoundaries() const 247 FloatRectWillBeLayoutRect SVGInlineTextBox::calculateBoundaries() const
248 { 248 {
249 FloatRectWillBeLayoutRect textRect; 249 FloatRectWillBeLayoutRect textRect;
250 250
251 RenderSVGInlineText& textRenderer = toRenderSVGInlineText(this->renderer()); 251 RenderSVGInlineText& textRenderer = toRenderSVGInlineText(this->renderer());
252 252
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
289 renderer().updateHitTestResult(result, locationInContainer.point () - toLayoutSize(accumulatedOffset)); 289 renderer().updateHitTestResult(result, locationInContainer.point () - toLayoutSize(accumulatedOffset));
290 if (!result.addNodeToRectBasedTestResult(renderer().node(), requ est, locationInContainer, rect.rawValue())) 290 if (!result.addNodeToRectBasedTestResult(renderer().node(), requ est, locationInContainer, rect.rawValue()))
291 return true; 291 return true;
292 } 292 }
293 } 293 }
294 } 294 }
295 return false; 295 return false;
296 } 296 }
297 297
298 } // namespace blink 298 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698