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

Side by Side Diff: Source/core/rendering/InlineBox.cpp

Issue 184023003: Make InlineBox::renderer() and related subclass methods return reference. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: No reference reassignment. Created 6 years, 9 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
« no previous file with comments | « Source/core/rendering/InlineBox.h ('k') | Source/core/rendering/InlineFlowBox.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2003, 2004, 2005, 2006, 2007 Apple Inc. All rights reserved. 2 * Copyright (C) 2003, 2004, 2005, 2006, 2007 Apple Inc. 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 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
75 } 75 }
76 76
77 #ifndef NDEBUG 77 #ifndef NDEBUG
78 const char* InlineBox::boxName() const 78 const char* InlineBox::boxName() const
79 { 79 {
80 return "InlineBox"; 80 return "InlineBox";
81 } 81 }
82 82
83 void InlineBox::showTreeForThis() const 83 void InlineBox::showTreeForThis() const
84 { 84 {
85 if (m_renderer) 85 renderer().showTreeForThis();
86 m_renderer->showTreeForThis();
87 } 86 }
88 87
89 void InlineBox::showLineTreeForThis() const 88 void InlineBox::showLineTreeForThis() const
90 { 89 {
91 if (m_renderer) 90 renderer().containingBlock()->showLineTreeAndMark(this, "*");
92 m_renderer->containingBlock()->showLineTreeAndMark(this, "*");
93 } 91 }
94 92
95 void InlineBox::showLineTreeAndMark(const InlineBox* markedBox1, const char* mar kedLabel1, const InlineBox* markedBox2, const char* markedLabel2, const RenderOb ject* obj, int depth) const 93 void InlineBox::showLineTreeAndMark(const InlineBox* markedBox1, const char* mar kedLabel1, const InlineBox* markedBox2, const char* markedLabel2, const RenderOb ject* obj, int depth) const
96 { 94 {
97 int printedCharacters = 0; 95 int printedCharacters = 0;
98 if (this == markedBox1) 96 if (this == markedBox1)
99 printedCharacters += fprintf(stderr, "%s", markedLabel1); 97 printedCharacters += fprintf(stderr, "%s", markedLabel1);
100 if (this == markedBox2) 98 if (this == markedBox2)
101 printedCharacters += fprintf(stderr, "%s", markedLabel2); 99 printedCharacters += fprintf(stderr, "%s", markedLabel2);
102 if (renderer() == obj) 100 if (&renderer() == obj)
103 printedCharacters += fprintf(stderr, "*"); 101 printedCharacters += fprintf(stderr, "*");
104 for (; printedCharacters < depth * 2; printedCharacters++) 102 for (; printedCharacters < depth * 2; printedCharacters++)
105 fputc(' ', stderr); 103 fputc(' ', stderr);
106 104
107 showBox(printedCharacters); 105 showBox(printedCharacters);
108 } 106 }
109 107
110 void InlineBox::showBox(int printedCharacters) const 108 void InlineBox::showBox(int printedCharacters) const
111 { 109 {
112 printedCharacters += fprintf(stderr, "%s\t%p", boxName(), this); 110 printedCharacters += fprintf(stderr, "%s\t%p", boxName(), this);
113 for (; printedCharacters < showTreeCharacterOffset; printedCharacters++) 111 for (; printedCharacters < showTreeCharacterOffset; printedCharacters++)
114 fputc(' ', stderr); 112 fputc(' ', stderr);
115 fprintf(stderr, "\t%s %p\n", renderer() ? renderer()->renderName() : "No Ren derer", renderer()); 113 fprintf(stderr, "\t%s %p\n", renderer().renderName(), &renderer());
116 } 114 }
117 #endif 115 #endif
118 116
119 float InlineBox::logicalHeight() const 117 float InlineBox::logicalHeight() const
120 { 118 {
121 if (hasVirtualLogicalHeight()) 119 if (hasVirtualLogicalHeight())
122 return virtualLogicalHeight(); 120 return virtualLogicalHeight();
123 121
124 if (renderer()->isText()) 122 if (renderer().isText())
125 return m_bitfields.isText() ? renderer()->style(isFirstLineStyle())->fon tMetrics().height() : 0; 123 return m_bitfields.isText() ? renderer().style(isFirstLineStyle())->font Metrics().height() : 0;
126 if (renderer()->isBox() && parent()) 124 if (renderer().isBox() && parent())
127 return isHorizontal() ? toRenderBox(m_renderer)->height() : toRenderBox( m_renderer)->width(); 125 return isHorizontal() ? toRenderBox(renderer()).height() : toRenderBox(r enderer()).width();
128 126
129 ASSERT(isInlineFlowBox()); 127 ASSERT(isInlineFlowBox());
130 RenderBoxModelObject* flowObject = boxModelObject(); 128 RenderBoxModelObject* flowObject = boxModelObject();
131 const FontMetrics& fontMetrics = renderer()->style(isFirstLineStyle())->font Metrics(); 129 const FontMetrics& fontMetrics = renderer().style(isFirstLineStyle())->fontM etrics();
132 float result = fontMetrics.height(); 130 float result = fontMetrics.height();
133 if (parent()) 131 if (parent())
134 result += flowObject->borderAndPaddingLogicalHeight(); 132 result += flowObject->borderAndPaddingLogicalHeight();
135 return result; 133 return result;
136 } 134 }
137 135
138 int InlineBox::baselinePosition(FontBaseline baselineType) const 136 int InlineBox::baselinePosition(FontBaseline baselineType) const
139 { 137 {
140 return boxModelObject()->baselinePosition(baselineType, m_bitfields.firstLin e(), isHorizontal() ? HorizontalLine : VerticalLine, PositionOnContainingLine); 138 return boxModelObject()->baselinePosition(baselineType, m_bitfields.firstLin e(), isHorizontal() ? HorizontalLine : VerticalLine, PositionOnContainingLine);
141 } 139 }
142 140
143 LayoutUnit InlineBox::lineHeight() const 141 LayoutUnit InlineBox::lineHeight() const
144 { 142 {
145 return boxModelObject()->lineHeight(m_bitfields.firstLine(), isHorizontal() ? HorizontalLine : VerticalLine, PositionOnContainingLine); 143 return boxModelObject()->lineHeight(m_bitfields.firstLine(), isHorizontal() ? HorizontalLine : VerticalLine, PositionOnContainingLine);
146 } 144 }
147 145
148 int InlineBox::caretMinOffset() const 146 int InlineBox::caretMinOffset() const
149 { 147 {
150 return m_renderer->caretMinOffset(); 148 return renderer().caretMinOffset();
151 } 149 }
152 150
153 int InlineBox::caretMaxOffset() const 151 int InlineBox::caretMaxOffset() const
154 { 152 {
155 return m_renderer->caretMaxOffset(); 153 return renderer().caretMaxOffset();
156 } 154 }
157 155
158 void InlineBox::dirtyLineBoxes() 156 void InlineBox::dirtyLineBoxes()
159 { 157 {
160 markDirty(); 158 markDirty();
161 for (InlineFlowBox* curr = parent(); curr && !curr->isDirty(); curr = curr-> parent()) 159 for (InlineFlowBox* curr = parent(); curr && !curr->isDirty(); curr = curr-> parent())
162 curr->markDirty(); 160 curr->markDirty();
163 } 161 }
164 162
165 void InlineBox::deleteLine() 163 void InlineBox::deleteLine()
166 { 164 {
167 if (!m_bitfields.extracted() && m_renderer->isBox()) 165 if (!m_bitfields.extracted() && renderer().isBox())
168 toRenderBox(m_renderer)->setInlineBoxWrapper(0); 166 toRenderBox(renderer()).setInlineBoxWrapper(0);
169 destroy(); 167 destroy();
170 } 168 }
171 169
172 void InlineBox::extractLine() 170 void InlineBox::extractLine()
173 { 171 {
174 m_bitfields.setExtracted(true); 172 m_bitfields.setExtracted(true);
175 if (m_renderer->isBox()) 173 if (renderer().isBox())
176 toRenderBox(m_renderer)->setInlineBoxWrapper(0); 174 toRenderBox(renderer()).setInlineBoxWrapper(0);
177 } 175 }
178 176
179 void InlineBox::attachLine() 177 void InlineBox::attachLine()
180 { 178 {
181 m_bitfields.setExtracted(false); 179 m_bitfields.setExtracted(false);
182 if (m_renderer->isBox()) 180 if (renderer().isBox())
183 toRenderBox(m_renderer)->setInlineBoxWrapper(this); 181 toRenderBox(renderer()).setInlineBoxWrapper(this);
184 } 182 }
185 183
186 void InlineBox::adjustPosition(float dx, float dy) 184 void InlineBox::adjustPosition(float dx, float dy)
187 { 185 {
188 m_topLeft.move(dx, dy); 186 m_topLeft.move(dx, dy);
189 187
190 if (m_renderer->isReplaced()) 188 if (renderer().isReplaced())
191 toRenderBox(m_renderer)->move(dx, dy); 189 toRenderBox(renderer()).move(dx, dy);
192 } 190 }
193 191
194 void InlineBox::paint(PaintInfo& paintInfo, const LayoutPoint& paintOffset, Layo utUnit /* lineTop */, LayoutUnit /*lineBottom*/) 192 void InlineBox::paint(PaintInfo& paintInfo, const LayoutPoint& paintOffset, Layo utUnit /* lineTop */, LayoutUnit /*lineBottom*/)
195 { 193 {
196 if (!paintInfo.shouldPaintWithinRoot(renderer()) || (paintInfo.phase != Pain tPhaseForeground && paintInfo.phase != PaintPhaseSelection)) 194 if (!paintInfo.shouldPaintWithinRoot(&renderer()) || (paintInfo.phase != Pai ntPhaseForeground && paintInfo.phase != PaintPhaseSelection))
197 return; 195 return;
198 196
199 LayoutPoint childPoint = paintOffset; 197 LayoutPoint childPoint = paintOffset;
200 if (parent()->renderer()->style()->isFlippedBlocksWritingMode()) // Faster t han calling containingBlock(). 198 if (parent()->renderer().style()->isFlippedBlocksWritingMode()) // Faster th an calling containingBlock().
201 childPoint = renderer()->containingBlock()->flipForWritingModeForChild(t oRenderBox(renderer()), childPoint); 199 childPoint = renderer().containingBlock()->flipForWritingModeForChild(&t oRenderBox(renderer()), childPoint);
202 200
203 RenderBlock::paintAsInlineBlock(renderer(), paintInfo, childPoint); 201 RenderBlock::paintAsInlineBlock(&renderer(), paintInfo, childPoint);
204 } 202 }
205 203
206 bool InlineBox::nodeAtPoint(const HitTestRequest& request, HitTestResult& result , const HitTestLocation& locationInContainer, const LayoutPoint& accumulatedOffs et, LayoutUnit /* lineTop */, LayoutUnit /*lineBottom*/) 204 bool InlineBox::nodeAtPoint(const HitTestRequest& request, HitTestResult& result , const HitTestLocation& locationInContainer, const LayoutPoint& accumulatedOffs et, LayoutUnit /* lineTop */, LayoutUnit /*lineBottom*/)
207 { 205 {
208 // Hit test all phases of replaced elements atomically, as though the replac ed element established its 206 // Hit test all phases of replaced elements atomically, as though the replac ed element established its
209 // own stacking context. (See Appendix E.2, section 6.4 on inline block/tab le elements in the CSS2.1 207 // own stacking context. (See Appendix E.2, section 6.4 on inline block/tab le elements in the CSS2.1
210 // specification.) 208 // specification.)
211 LayoutPoint childPoint = accumulatedOffset; 209 LayoutPoint childPoint = accumulatedOffset;
212 if (parent()->renderer()->style()->isFlippedBlocksWritingMode()) // Faster t han calling containingBlock(). 210 if (parent()->renderer().style()->isFlippedBlocksWritingMode()) // Faster th an calling containingBlock().
213 childPoint = renderer()->containingBlock()->flipForWritingModeForChild(t oRenderBox(renderer()), childPoint); 211 childPoint = renderer().containingBlock()->flipForWritingModeForChild(&t oRenderBox(renderer()), childPoint);
214 212
215 return renderer()->hitTest(request, result, locationInContainer, childPoint) ; 213 return renderer().hitTest(request, result, locationInContainer, childPoint);
216 } 214 }
217 215
218 const RootInlineBox* InlineBox::root() const 216 const RootInlineBox* InlineBox::root() const
219 { 217 {
220 if (m_parent) 218 if (m_parent)
221 return m_parent->root(); 219 return m_parent->root();
222 ASSERT(isRootInlineBox()); 220 ASSERT(isRootInlineBox());
223 return static_cast<const RootInlineBox*>(this); 221 return static_cast<const RootInlineBox*>(this);
224 } 222 }
225 223
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
277 InlineBox* InlineBox::prevLeafChildIgnoringLineBreak() const 275 InlineBox* InlineBox::prevLeafChildIgnoringLineBreak() const
278 { 276 {
279 InlineBox* leaf = prevLeafChild(); 277 InlineBox* leaf = prevLeafChild();
280 if (leaf && leaf->isLineBreak()) 278 if (leaf && leaf->isLineBreak())
281 return 0; 279 return 0;
282 return leaf; 280 return leaf;
283 } 281 }
284 282
285 RenderObject::SelectionState InlineBox::selectionState() 283 RenderObject::SelectionState InlineBox::selectionState()
286 { 284 {
287 return renderer()->selectionState(); 285 return renderer().selectionState();
288 } 286 }
289 287
290 bool InlineBox::canAccommodateEllipsis(bool ltr, int blockEdge, int ellipsisWidt h) const 288 bool InlineBox::canAccommodateEllipsis(bool ltr, int blockEdge, int ellipsisWidt h) const
291 { 289 {
292 // Non-replaced elements can always accommodate an ellipsis. 290 // Non-replaced elements can always accommodate an ellipsis.
293 if (!m_renderer || !m_renderer->isReplaced()) 291 if (!renderer().isReplaced())
294 return true; 292 return true;
295 293
296 IntRect boxRect(left(), 0, m_logicalWidth, 10); 294 IntRect boxRect(left(), 0, m_logicalWidth, 10);
297 IntRect ellipsisRect(ltr ? blockEdge - ellipsisWidth : blockEdge, 0, ellipsi sWidth, 10); 295 IntRect ellipsisRect(ltr ? blockEdge - ellipsisWidth : blockEdge, 0, ellipsi sWidth, 10);
298 return !(boxRect.intersects(ellipsisRect)); 296 return !(boxRect.intersects(ellipsisRect));
299 } 297 }
300 298
301 float InlineBox::placeEllipsisBox(bool, float, float, float, float& truncatedWid th, bool&) 299 float InlineBox::placeEllipsisBox(bool, float, float, float, float& truncatedWid th, bool&)
302 { 300 {
303 // Use -1 to mean "we didn't set the position." 301 // Use -1 to mean "we didn't set the position."
304 truncatedWidth += logicalWidth(); 302 truncatedWidth += logicalWidth();
305 return -1; 303 return -1;
306 } 304 }
307 305
308 void InlineBox::clearKnownToHaveNoOverflow() 306 void InlineBox::clearKnownToHaveNoOverflow()
309 { 307 {
310 m_bitfields.setKnownToHaveNoOverflow(false); 308 m_bitfields.setKnownToHaveNoOverflow(false);
311 if (parent() && parent()->knownToHaveNoOverflow()) 309 if (parent() && parent()->knownToHaveNoOverflow())
312 parent()->clearKnownToHaveNoOverflow(); 310 parent()->clearKnownToHaveNoOverflow();
313 } 311 }
314 312
315 FloatPoint InlineBox::locationIncludingFlipping() 313 FloatPoint InlineBox::locationIncludingFlipping()
316 { 314 {
317 if (!renderer()->style()->isFlippedBlocksWritingMode()) 315 if (!renderer().style()->isFlippedBlocksWritingMode())
318 return FloatPoint(x(), y()); 316 return FloatPoint(x(), y());
319 RenderBlockFlow* block = root()->block(); 317 RenderBlockFlow& block = root()->block();
320 if (block->style()->isHorizontalWritingMode()) 318 if (block.style()->isHorizontalWritingMode())
321 return FloatPoint(x(), block->height() - height() - y()); 319 return FloatPoint(x(), block.height() - height() - y());
322 else 320
323 return FloatPoint(block->width() - width() - x(), y()); 321 return FloatPoint(block.width() - width() - x(), y());
324 } 322 }
325 323
326 void InlineBox::flipForWritingMode(FloatRect& rect) 324 void InlineBox::flipForWritingMode(FloatRect& rect)
327 { 325 {
328 if (!renderer()->style()->isFlippedBlocksWritingMode()) 326 if (!renderer().style()->isFlippedBlocksWritingMode())
329 return; 327 return;
330 root()->block()->flipForWritingMode(rect); 328 root()->block().flipForWritingMode(rect);
331 } 329 }
332 330
333 FloatPoint InlineBox::flipForWritingMode(const FloatPoint& point) 331 FloatPoint InlineBox::flipForWritingMode(const FloatPoint& point)
334 { 332 {
335 if (!renderer()->style()->isFlippedBlocksWritingMode()) 333 if (!renderer().style()->isFlippedBlocksWritingMode())
336 return point; 334 return point;
337 return root()->block()->flipForWritingMode(point); 335 return root()->block().flipForWritingMode(point);
338 } 336 }
339 337
340 void InlineBox::flipForWritingMode(LayoutRect& rect) 338 void InlineBox::flipForWritingMode(LayoutRect& rect)
341 { 339 {
342 if (!renderer()->style()->isFlippedBlocksWritingMode()) 340 if (!renderer().style()->isFlippedBlocksWritingMode())
343 return; 341 return;
344 root()->block()->flipForWritingMode(rect); 342 root()->block().flipForWritingMode(rect);
345 } 343 }
346 344
347 LayoutPoint InlineBox::flipForWritingMode(const LayoutPoint& point) 345 LayoutPoint InlineBox::flipForWritingMode(const LayoutPoint& point)
348 { 346 {
349 if (!renderer()->style()->isFlippedBlocksWritingMode()) 347 if (!renderer().style()->isFlippedBlocksWritingMode())
350 return point; 348 return point;
351 return root()->block()->flipForWritingMode(point); 349 return root()->block().flipForWritingMode(point);
352 } 350 }
353 351
354 } // namespace WebCore 352 } // namespace WebCore
355 353
356 #ifndef NDEBUG 354 #ifndef NDEBUG
357 355
358 void showTree(const WebCore::InlineBox* b) 356 void showTree(const WebCore::InlineBox* b)
359 { 357 {
360 if (b) 358 if (b)
361 b->showTreeForThis(); 359 b->showTreeForThis();
362 } 360 }
363 361
364 void showLineTree(const WebCore::InlineBox* b) 362 void showLineTree(const WebCore::InlineBox* b)
365 { 363 {
366 if (b) 364 if (b)
367 b->showLineTreeForThis(); 365 b->showLineTreeForThis();
368 } 366 }
369 367
370 #endif 368 #endif
OLDNEW
« no previous file with comments | « Source/core/rendering/InlineBox.h ('k') | Source/core/rendering/InlineFlowBox.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698