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

Side by Side Diff: third_party/WebKit/Source/core/layout/line/RootInlineBox.cpp

Issue 1741073002: Rename enums/functions that collide in chromium style in core/layout/. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@get-names-6
Patch Set: get-names-7: rebase Created 4 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
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2003, 2006, 2008 Apple Inc. All rights reserved. 2 * Copyright (C) 2003, 2006, 2008 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 142 matching lines...) Expand 10 before | Expand all | Expand 10 after
153 153
154 void RootInlineBox::paint(const PaintInfo& paintInfo, const LayoutPoint& paintOf fset, LayoutUnit lineTop, LayoutUnit lineBottom) const 154 void RootInlineBox::paint(const PaintInfo& paintInfo, const LayoutPoint& paintOf fset, LayoutUnit lineTop, LayoutUnit lineBottom) const
155 { 155 {
156 RootInlineBoxPainter(*this).paint(paintInfo, paintOffset, lineTop, lineBotto m); 156 RootInlineBoxPainter(*this).paint(paintInfo, paintOffset, lineTop, lineBotto m);
157 } 157 }
158 158
159 bool RootInlineBox::nodeAtPoint(HitTestResult& result, const HitTestLocation& lo cationInContainer, const LayoutPoint& accumulatedOffset, LayoutUnit lineTop, Lay outUnit lineBottom) 159 bool RootInlineBox::nodeAtPoint(HitTestResult& result, const HitTestLocation& lo cationInContainer, const LayoutPoint& accumulatedOffset, LayoutUnit lineTop, Lay outUnit lineBottom)
160 { 160 {
161 if (hasEllipsisBox() && visibleToHitTestRequest(result.hitTestRequest())) { 161 if (hasEllipsisBox() && visibleToHitTestRequest(result.hitTestRequest())) {
162 if (ellipsisBox()->nodeAtPoint(result, locationInContainer, accumulatedO ffset, lineTop, lineBottom)) { 162 if (ellipsisBox()->nodeAtPoint(result, locationInContainer, accumulatedO ffset, lineTop, lineBottom)) {
163 lineLayoutItem().updateHitTestResult(result, locationInContainer.poi nt() - toLayoutSize(accumulatedOffset)); 163 getLineLayoutItem().updateHitTestResult(result, locationInContainer. point() - toLayoutSize(accumulatedOffset));
164 return true; 164 return true;
165 } 165 }
166 } 166 }
167 return InlineFlowBox::nodeAtPoint(result, locationInContainer, accumulatedOf fset, lineTop, lineBottom); 167 return InlineFlowBox::nodeAtPoint(result, locationInContainer, accumulatedOf fset, lineTop, lineBottom);
168 } 168 }
169 169
170 void RootInlineBox::move(const LayoutSize& delta) 170 void RootInlineBox::move(const LayoutSize& delta)
171 { 171 {
172 InlineFlowBox::move(delta); 172 InlineFlowBox::move(delta);
173 LayoutUnit blockDirectionDelta = isHorizontal() ? delta.height() : delta.wid th(); 173 LayoutUnit blockDirectionDelta = isHorizontal() ? delta.height() : delta.wid th();
174 m_lineTop += blockDirectionDelta; 174 m_lineTop += blockDirectionDelta;
175 m_lineBottom += blockDirectionDelta; 175 m_lineBottom += blockDirectionDelta;
176 m_lineTopWithLeading += blockDirectionDelta; 176 m_lineTopWithLeading += blockDirectionDelta;
177 m_lineBottomWithLeading += blockDirectionDelta; 177 m_lineBottomWithLeading += blockDirectionDelta;
178 m_selectionBottom += blockDirectionDelta; 178 m_selectionBottom += blockDirectionDelta;
179 if (hasEllipsisBox()) 179 if (hasEllipsisBox())
180 ellipsisBox()->move(delta); 180 ellipsisBox()->move(delta);
181 } 181 }
182 182
183 void RootInlineBox::childRemoved(InlineBox* box) 183 void RootInlineBox::childRemoved(InlineBox* box)
184 { 184 {
185 if (box->lineLayoutItem() == m_lineBreakObj) 185 if (box->getLineLayoutItem() == m_lineBreakObj)
186 setLineBreakInfo(0, 0, BidiStatus()); 186 setLineBreakInfo(0, 0, BidiStatus());
187 187
188 for (RootInlineBox* prev = prevRootBox(); prev && prev->lineBreakObj() == bo x->lineLayoutItem(); prev = prev->prevRootBox()) { 188 for (RootInlineBox* prev = prevRootBox(); prev && prev->lineBreakObj() == bo x->getLineLayoutItem(); prev = prev->prevRootBox()) {
189 prev->setLineBreakInfo(0, 0, BidiStatus()); 189 prev->setLineBreakInfo(0, 0, BidiStatus());
190 prev->markDirty(); 190 prev->markDirty();
191 } 191 }
192 } 192 }
193 193
194 static inline void snapHeight(int& maxAscent, int& maxDescent, const ComputedSty le& style) 194 static inline void snapHeight(int& maxAscent, int& maxDescent, const ComputedSty le& style)
195 { 195 {
196 // If position is 0, add spaces to over/under equally. 196 // If position is 0, add spaces to over/under equally.
197 // https://drafts.csswg.org/css-snap-size/#snap-height 197 // https://drafts.csswg.org/css-snap-size/#snap-height
198 int unit = style.snapHeightUnit(); 198 int unit = style.snapHeightUnit();
(...skipping 26 matching lines...) Expand all
225 return LayoutUnit(); 225 return LayoutUnit();
226 226
227 LayoutUnit maxPositionTop; 227 LayoutUnit maxPositionTop;
228 LayoutUnit maxPositionBottom; 228 LayoutUnit maxPositionBottom;
229 int maxAscent = 0; 229 int maxAscent = 0;
230 int maxDescent = 0; 230 int maxDescent = 0;
231 bool setMaxAscent = false; 231 bool setMaxAscent = false;
232 bool setMaxDescent = false; 232 bool setMaxDescent = false;
233 233
234 // Figure out if we're in no-quirks mode. 234 // Figure out if we're in no-quirks mode.
235 bool noQuirksMode = lineLayoutItem().document().inNoQuirksMode(); 235 bool noQuirksMode = getLineLayoutItem().document().inNoQuirksMode();
236 236
237 m_baselineType = dominantBaseline(); 237 m_baselineType = dominantBaseline();
238 238
239 computeLogicalBoxHeights(this, maxPositionTop, maxPositionBottom, maxAscent, maxDescent, setMaxAscent, setMaxDescent, noQuirksMode, textBoxDataMap, baseline Type(), verticalPositionCache); 239 computeLogicalBoxHeights(this, maxPositionTop, maxPositionBottom, maxAscent, maxDescent, setMaxAscent, setMaxDescent, noQuirksMode, textBoxDataMap, baseline Type(), verticalPositionCache);
240 240
241 if (maxAscent + maxDescent < std::max(maxPositionTop, maxPositionBottom)) 241 if (maxAscent + maxDescent < std::max(maxPositionTop, maxPositionBottom))
242 adjustMaxAscentAndDescent(maxAscent, maxDescent, maxPositionTop, maxPosi tionBottom); 242 adjustMaxAscentAndDescent(maxAscent, maxDescent, maxPositionTop, maxPosi tionBottom);
243 243
244 if (lineLayoutItem().styleRef().snapHeightUnit()) 244 if (getLineLayoutItem().styleRef().snapHeightUnit())
245 snapHeight(maxAscent, maxDescent, lineLayoutItem().styleRef()); 245 snapHeight(maxAscent, maxDescent, getLineLayoutItem().styleRef());
246 246
247 LayoutUnit maxHeight = LayoutUnit(maxAscent + maxDescent); 247 LayoutUnit maxHeight = LayoutUnit(maxAscent + maxDescent);
248 LayoutUnit lineTop = heightOfBlock; 248 LayoutUnit lineTop = heightOfBlock;
249 LayoutUnit lineBottom = heightOfBlock; 249 LayoutUnit lineBottom = heightOfBlock;
250 LayoutUnit lineTopIncludingMargins = heightOfBlock; 250 LayoutUnit lineTopIncludingMargins = heightOfBlock;
251 LayoutUnit lineBottomIncludingMargins = heightOfBlock; 251 LayoutUnit lineBottomIncludingMargins = heightOfBlock;
252 LayoutUnit selectionBottom = heightOfBlock; 252 LayoutUnit selectionBottom = heightOfBlock;
253 bool setLineTop = false; 253 bool setLineTop = false;
254 bool hasAnnotationsBefore = false; 254 bool hasAnnotationsBefore = false;
255 bool hasAnnotationsAfter = false; 255 bool hasAnnotationsAfter = false;
(...skipping 20 matching lines...) Expand all
276 { 276 {
277 LayoutUnit maxLogicalTop; 277 LayoutUnit maxLogicalTop;
278 computeMaxLogicalTop(maxLogicalTop); 278 computeMaxLogicalTop(maxLogicalTop);
279 return maxLogicalTop; 279 return maxLogicalTop;
280 } 280 }
281 281
282 LayoutUnit RootInlineBox::beforeAnnotationsAdjustment() const 282 LayoutUnit RootInlineBox::beforeAnnotationsAdjustment() const
283 { 283 {
284 LayoutUnit result; 284 LayoutUnit result;
285 285
286 if (!lineLayoutItem().style()->isFlippedLinesWritingMode()) { 286 if (!getLineLayoutItem().style()->isFlippedLinesWritingMode()) {
287 // Annotations under the previous line may push us down. 287 // Annotations under the previous line may push us down.
288 if (prevRootBox() && prevRootBox()->hasAnnotationsAfter()) 288 if (prevRootBox() && prevRootBox()->hasAnnotationsAfter())
289 result = prevRootBox()->computeUnderAnnotationAdjustment(lineTop()); 289 result = prevRootBox()->computeUnderAnnotationAdjustment(lineTop());
290 290
291 if (!hasAnnotationsBefore()) 291 if (!hasAnnotationsBefore())
292 return result; 292 return result;
293 293
294 // Annotations over this line may push us further down. 294 // Annotations over this line may push us further down.
295 LayoutUnit highestAllowedPosition = prevRootBox() ? std::min(prevRootBox ()->lineBottom(), lineTop()) + result : static_cast<LayoutUnit>(block().borderBe fore()); 295 LayoutUnit highestAllowedPosition = prevRootBox() ? std::min(prevRootBox ()->lineBottom(), lineTop()) + result : static_cast<LayoutUnit>(block().borderBe fore());
296 result = computeOverAnnotationAdjustment(highestAllowedPosition); 296 result = computeOverAnnotationAdjustment(highestAllowedPosition);
297 } else { 297 } else {
298 // Annotations under this line may push us up. 298 // Annotations under this line may push us up.
299 if (hasAnnotationsBefore()) 299 if (hasAnnotationsBefore())
300 result = computeUnderAnnotationAdjustment(prevRootBox() ? prevRootBo x()->lineBottom() : static_cast<LayoutUnit>(block().borderBefore())); 300 result = computeUnderAnnotationAdjustment(prevRootBox() ? prevRootBo x()->lineBottom() : static_cast<LayoutUnit>(block().borderBefore()));
301 301
302 if (!prevRootBox() || !prevRootBox()->hasAnnotationsAfter()) 302 if (!prevRootBox() || !prevRootBox()->hasAnnotationsAfter())
303 return result; 303 return result;
304 304
305 // We have to compute the expansion for annotations over the previous li ne to see how much we should move. 305 // We have to compute the expansion for annotations over the previous li ne to see how much we should move.
306 LayoutUnit lowestAllowedPosition = std::max(prevRootBox()->lineBottom(), lineTop()) - result; 306 LayoutUnit lowestAllowedPosition = std::max(prevRootBox()->lineBottom(), lineTop()) - result;
307 result = prevRootBox()->computeOverAnnotationAdjustment(lowestAllowedPos ition); 307 result = prevRootBox()->computeOverAnnotationAdjustment(lowestAllowedPos ition);
308 } 308 }
309 309
310 return result; 310 return result;
311 } 311 }
312 312
313 SelectionState RootInlineBox::selectionState() const 313 SelectionState RootInlineBox::getSelectionState() const
314 { 314 {
315 // Walk over all of the selected boxes. 315 // Walk over all of the selected boxes.
316 SelectionState state = SelectionNone; 316 SelectionState state = SelectionNone;
317 for (InlineBox* box = firstLeafChild(); box; box = box->nextLeafChild()) { 317 for (InlineBox* box = firstLeafChild(); box; box = box->nextLeafChild()) {
318 SelectionState boxState = box->selectionState(); 318 SelectionState boxState = box->getSelectionState();
319 if ((boxState == SelectionStart && state == SelectionEnd) 319 if ((boxState == SelectionStart && state == SelectionEnd)
320 || (boxState == SelectionEnd && state == SelectionStart)) { 320 || (boxState == SelectionEnd && state == SelectionStart)) {
321 state = SelectionBoth; 321 state = SelectionBoth;
322 } else if (state == SelectionNone || ((boxState == SelectionStart || box State == SelectionEnd) && (state == SelectionNone || state == SelectionInside))) { 322 } else if (state == SelectionNone || ((boxState == SelectionStart || box State == SelectionEnd) && (state == SelectionNone || state == SelectionInside))) {
323 state = boxState; 323 state = boxState;
324 } else if (boxState == SelectionNone && state == SelectionStart) { 324 } else if (boxState == SelectionNone && state == SelectionStart) {
325 // We are past the end of the selection. 325 // We are past the end of the selection.
326 state = SelectionBoth; 326 state = SelectionBoth;
327 } 327 }
328 if (state == SelectionBoth) 328 if (state == SelectionBoth)
329 break; 329 break;
330 } 330 }
331 331
332 return state; 332 return state;
333 } 333 }
334 334
335 InlineBox* RootInlineBox::firstSelectedBox() const 335 InlineBox* RootInlineBox::firstSelectedBox() const
336 { 336 {
337 for (InlineBox* box = firstLeafChild(); box; box = box->nextLeafChild()) { 337 for (InlineBox* box = firstLeafChild(); box; box = box->nextLeafChild()) {
338 if (box->selectionState() != SelectionNone) 338 if (box->getSelectionState() != SelectionNone)
339 return box; 339 return box;
340 } 340 }
341 341
342 return nullptr; 342 return nullptr;
343 } 343 }
344 344
345 InlineBox* RootInlineBox::lastSelectedBox() const 345 InlineBox* RootInlineBox::lastSelectedBox() const
346 { 346 {
347 for (InlineBox* box = lastLeafChild(); box; box = box->prevLeafChild()) { 347 for (InlineBox* box = lastLeafChild(); box; box = box->prevLeafChild()) {
348 if (box->selectionState() != SelectionNone) 348 if (box->getSelectionState() != SelectionNone)
349 return box; 349 return box;
350 } 350 }
351 351
352 return nullptr; 352 return nullptr;
353 } 353 }
354 354
355 LayoutUnit RootInlineBox::selectionTop() const 355 LayoutUnit RootInlineBox::selectionTop() const
356 { 356 {
357 LayoutUnit selectionTop = m_lineTop; 357 LayoutUnit selectionTop = m_lineTop;
358 358
359 if (m_hasAnnotationsBefore) 359 if (m_hasAnnotationsBefore)
360 selectionTop -= !lineLayoutItem().style()->isFlippedLinesWritingMode() ? computeOverAnnotationAdjustment(m_lineTop) : computeUnderAnnotationAdjustment(m _lineTop); 360 selectionTop -= !getLineLayoutItem().style()->isFlippedLinesWritingMode( ) ? computeOverAnnotationAdjustment(m_lineTop) : computeUnderAnnotationAdjustmen t(m_lineTop);
361 361
362 if (lineLayoutItem().style()->isFlippedLinesWritingMode() || !prevRootBox()) 362 if (getLineLayoutItem().style()->isFlippedLinesWritingMode() || !prevRootBox ())
363 return selectionTop; 363 return selectionTop;
364 364
365 LayoutUnit prevBottom = prevRootBox()->selectionBottom(); 365 LayoutUnit prevBottom = prevRootBox()->selectionBottom();
366 if (prevBottom < selectionTop && block().containsFloats()) { 366 if (prevBottom < selectionTop && block().containsFloats()) {
367 // This line has actually been moved further down, probably from a large line-height, but possibly because the 367 // This line has actually been moved further down, probably from a large line-height, but possibly because the
368 // line was forced to clear floats. If so, let's check the offsets, and only be willing to use the previous 368 // line was forced to clear floats. If so, let's check the offsets, and only be willing to use the previous
369 // line's bottom if the offsets are greater on both sides. 369 // line's bottom if the offsets are greater on both sides.
370 LayoutUnit prevLeft = block().logicalLeftOffsetForLine(prevBottom, DoNot IndentText); 370 LayoutUnit prevLeft = block().logicalLeftOffsetForLine(prevBottom, DoNot IndentText);
371 LayoutUnit prevRight = block().logicalRightOffsetForLine(prevBottom, DoN otIndentText); 371 LayoutUnit prevRight = block().logicalRightOffsetForLine(prevBottom, DoN otIndentText);
372 LayoutUnit newLeft = block().logicalLeftOffsetForLine(selectionTop, DoNo tIndentText); 372 LayoutUnit newLeft = block().logicalLeftOffsetForLine(selectionTop, DoNo tIndentText);
373 LayoutUnit newRight = block().logicalRightOffsetForLine(selectionTop, Do NotIndentText); 373 LayoutUnit newRight = block().logicalRightOffsetForLine(selectionTop, Do NotIndentText);
374 if (prevLeft > newLeft || prevRight < newRight) 374 if (prevLeft > newLeft || prevRight < newRight)
375 return selectionTop; 375 return selectionTop;
376 } 376 }
377 377
378 return prevBottom; 378 return prevBottom;
379 } 379 }
380 380
381 LayoutUnit RootInlineBox::selectionBottom() const 381 LayoutUnit RootInlineBox::selectionBottom() const
382 { 382 {
383 LayoutUnit selectionBottom = lineLayoutItem().document().inNoQuirksMode() ? m_selectionBottom : m_lineBottom; 383 LayoutUnit selectionBottom = getLineLayoutItem().document().inNoQuirksMode() ? m_selectionBottom : m_lineBottom;
384 384
385 if (m_hasAnnotationsAfter) 385 if (m_hasAnnotationsAfter)
386 selectionBottom += !lineLayoutItem().style()->isFlippedLinesWritingMode( ) ? computeUnderAnnotationAdjustment(m_lineBottom) : computeOverAnnotationAdjust ment(m_lineBottom); 386 selectionBottom += !getLineLayoutItem().style()->isFlippedLinesWritingMo de() ? computeUnderAnnotationAdjustment(m_lineBottom) : computeOverAnnotationAdj ustment(m_lineBottom);
387 387
388 if (!lineLayoutItem().style()->isFlippedLinesWritingMode() || !nextRootBox() ) 388 if (!getLineLayoutItem().style()->isFlippedLinesWritingMode() || !nextRootBo x())
389 return selectionBottom; 389 return selectionBottom;
390 390
391 LayoutUnit nextTop = nextRootBox()->selectionTop(); 391 LayoutUnit nextTop = nextRootBox()->selectionTop();
392 if (nextTop > selectionBottom && block().containsFloats()) { 392 if (nextTop > selectionBottom && block().containsFloats()) {
393 // The next line has actually been moved further over, probably from a l arge line-height, but possibly because the 393 // The next line has actually been moved further over, probably from a l arge line-height, but possibly because the
394 // line was forced to clear floats. If so, let's check the offsets, and only be willing to use the next 394 // line was forced to clear floats. If so, let's check the offsets, and only be willing to use the next
395 // line's top if the offsets are greater on both sides. 395 // line's top if the offsets are greater on both sides.
396 LayoutUnit nextLeft = block().logicalLeftOffsetForLine(nextTop, DoNotInd entText); 396 LayoutUnit nextLeft = block().logicalLeftOffsetForLine(nextTop, DoNotInd entText);
397 LayoutUnit nextRight = block().logicalRightOffsetForLine(nextTop, DoNotI ndentText); 397 LayoutUnit nextRight = block().logicalRightOffsetForLine(nextTop, DoNotI ndentText);
398 LayoutUnit newLeft = block().logicalLeftOffsetForLine(selectionBottom, D oNotIndentText); 398 LayoutUnit newLeft = block().logicalLeftOffsetForLine(selectionBottom, D oNotIndentText);
399 LayoutUnit newRight = block().logicalRightOffsetForLine(selectionBottom, DoNotIndentText); 399 LayoutUnit newRight = block().logicalRightOffsetForLine(selectionBottom, DoNotIndentText);
400 if (nextLeft > newLeft || nextRight < newRight) 400 if (nextLeft > newLeft || nextRight < newRight)
401 return selectionBottom; 401 return selectionBottom;
402 } 402 }
403 403
404 return nextTop; 404 return nextTop;
405 } 405 }
406 406
407 LayoutUnit RootInlineBox::blockDirectionPointInLine() const 407 LayoutUnit RootInlineBox::blockDirectionPointInLine() const
408 { 408 {
409 return !block().style()->isFlippedBlocksWritingMode() ? std::max(lineTop(), selectionTop()) : std::min(lineBottom(), selectionBottom()); 409 return !block().style()->isFlippedBlocksWritingMode() ? std::max(lineTop(), selectionTop()) : std::min(lineBottom(), selectionBottom());
410 } 410 }
411 411
412 LineLayoutBlockFlow RootInlineBox::block() const 412 LineLayoutBlockFlow RootInlineBox::block() const
413 { 413 {
414 return LineLayoutBlockFlow(lineLayoutItem()); 414 return LineLayoutBlockFlow(getLineLayoutItem());
415 } 415 }
416 416
417 static bool isEditableLeaf(InlineBox* leaf) 417 static bool isEditableLeaf(InlineBox* leaf)
418 { 418 {
419 return leaf && leaf->lineLayoutItem().node() && leaf->lineLayoutItem().node( )->hasEditableStyle(); 419 return leaf && leaf->getLineLayoutItem().node() && leaf->getLineLayoutItem() .node()->hasEditableStyle();
420 } 420 }
421 421
422 InlineBox* RootInlineBox::closestLeafChildForPoint(const LayoutPoint& pointInCon tents, bool onlyEditableLeaves) 422 InlineBox* RootInlineBox::closestLeafChildForPoint(const LayoutPoint& pointInCon tents, bool onlyEditableLeaves)
423 { 423 {
424 return closestLeafChildForLogicalLeftPosition(block().isHorizontalWritingMod e() ? pointInContents.x() : pointInContents.y(), onlyEditableLeaves); 424 return closestLeafChildForLogicalLeftPosition(block().isHorizontalWritingMod e() ? pointInContents.x() : pointInContents.y(), onlyEditableLeaves);
425 } 425 }
426 426
427 InlineBox* RootInlineBox::closestLeafChildForLogicalLeftPosition(LayoutUnit left Position, bool onlyEditableLeaves) 427 InlineBox* RootInlineBox::closestLeafChildForLogicalLeftPosition(LayoutUnit left Position, bool onlyEditableLeaves)
428 { 428 {
429 InlineBox* firstLeaf = firstLeafChild(); 429 InlineBox* firstLeaf = firstLeafChild();
430 InlineBox* lastLeaf = lastLeafChild(); 430 InlineBox* lastLeaf = lastLeafChild();
431 431
432 if (firstLeaf != lastLeaf) { 432 if (firstLeaf != lastLeaf) {
433 if (firstLeaf->isLineBreak()) 433 if (firstLeaf->isLineBreak())
434 firstLeaf = firstLeaf->nextLeafChildIgnoringLineBreak(); 434 firstLeaf = firstLeaf->nextLeafChildIgnoringLineBreak();
435 else if (lastLeaf->isLineBreak()) 435 else if (lastLeaf->isLineBreak())
436 lastLeaf = lastLeaf->prevLeafChildIgnoringLineBreak(); 436 lastLeaf = lastLeaf->prevLeafChildIgnoringLineBreak();
437 } 437 }
438 438
439 if (firstLeaf == lastLeaf && (!onlyEditableLeaves || isEditableLeaf(firstLea f))) 439 if (firstLeaf == lastLeaf && (!onlyEditableLeaves || isEditableLeaf(firstLea f)))
440 return firstLeaf; 440 return firstLeaf;
441 441
442 // Avoid returning a list marker when possible. 442 // Avoid returning a list marker when possible.
443 if (leftPosition <= firstLeaf->logicalLeft() && !firstLeaf->lineLayoutItem() .isListMarker() && (!onlyEditableLeaves || isEditableLeaf(firstLeaf))) { 443 if (leftPosition <= firstLeaf->logicalLeft() && !firstLeaf->getLineLayoutIte m().isListMarker() && (!onlyEditableLeaves || isEditableLeaf(firstLeaf))) {
444 // The leftPosition coordinate is less or equal to left edge of the firs tLeaf. 444 // The leftPosition coordinate is less or equal to left edge of the firs tLeaf.
445 // Return it. 445 // Return it.
446 return firstLeaf; 446 return firstLeaf;
447 } 447 }
448 448
449 if (leftPosition >= lastLeaf->logicalRight() && !lastLeaf->lineLayoutItem(). isListMarker() && (!onlyEditableLeaves || isEditableLeaf(lastLeaf))) { 449 if (leftPosition >= lastLeaf->logicalRight() && !lastLeaf->getLineLayoutItem ().isListMarker() && (!onlyEditableLeaves || isEditableLeaf(lastLeaf))) {
450 // The leftPosition coordinate is greater or equal to right edge of the lastLeaf. 450 // The leftPosition coordinate is greater or equal to right edge of the lastLeaf.
451 // Return it. 451 // Return it.
452 return lastLeaf; 452 return lastLeaf;
453 } 453 }
454 454
455 InlineBox* closestLeaf = nullptr; 455 InlineBox* closestLeaf = nullptr;
456 for (InlineBox* leaf = firstLeaf; leaf; leaf = leaf->nextLeafChildIgnoringLi neBreak()) { 456 for (InlineBox* leaf = firstLeaf; leaf; leaf = leaf->nextLeafChildIgnoringLi neBreak()) {
457 if (!leaf->lineLayoutItem().isListMarker() && (!onlyEditableLeaves || is EditableLeaf(leaf))) { 457 if (!leaf->getLineLayoutItem().isListMarker() && (!onlyEditableLeaves || isEditableLeaf(leaf))) {
458 closestLeaf = leaf; 458 closestLeaf = leaf;
459 if (leftPosition < leaf->logicalRight()) { 459 if (leftPosition < leaf->logicalRight()) {
460 // The x coordinate is less than the right edge of the box. 460 // The x coordinate is less than the right edge of the box.
461 // Return it. 461 // Return it.
462 return leaf; 462 return leaf;
463 } 463 }
464 } 464 }
465 } 465 }
466 466
467 return closestLeaf ? closestLeaf : lastLeaf; 467 return closestLeaf ? closestLeaf : lastLeaf;
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
544 } else { 544 } else {
545 ascent = std::max(ascent, newAscent); 545 ascent = std::max(ascent, newAscent);
546 descent = std::max(descent, newDescent); 546 descent = std::max(descent, newDescent);
547 } 547 }
548 } 548 }
549 549
550 void RootInlineBox::ascentAndDescentForBox(InlineBox* box, GlyphOverflowAndFallb ackFontsMap& textBoxDataMap, int& ascent, int& descent, bool& affectsAscent, boo l& affectsDescent) const 550 void RootInlineBox::ascentAndDescentForBox(InlineBox* box, GlyphOverflowAndFallb ackFontsMap& textBoxDataMap, int& ascent, int& descent, bool& affectsAscent, boo l& affectsDescent) const
551 { 551 {
552 bool ascentDescentSet = false; 552 bool ascentDescentSet = false;
553 553
554 if (box->lineLayoutItem().isAtomicInlineLevel()) { 554 if (box->getLineLayoutItem().isAtomicInlineLevel()) {
555 ascent = box->baselinePosition(baselineType()); 555 ascent = box->baselinePosition(baselineType());
556 descent = roundToInt(box->lineHeight() - ascent); 556 descent = roundToInt(box->lineHeight() - ascent);
557 557
558 // Replaced elements always affect both the ascent and descent. 558 // Replaced elements always affect both the ascent and descent.
559 affectsAscent = true; 559 affectsAscent = true;
560 affectsDescent = true; 560 affectsDescent = true;
561 return; 561 return;
562 } 562 }
563 563
564 Vector<const SimpleFontData*>* usedFonts = nullptr; 564 Vector<const SimpleFontData*>* usedFonts = nullptr;
565 if (box->isText()) { 565 if (box->isText()) {
566 GlyphOverflowAndFallbackFontsMap::iterator it = textBoxDataMap.find(toIn lineTextBox(box)); 566 GlyphOverflowAndFallbackFontsMap::iterator it = textBoxDataMap.find(toIn lineTextBox(box));
567 usedFonts = it == textBoxDataMap.end() ? 0 : &it->value.first; 567 usedFonts = it == textBoxDataMap.end() ? 0 : &it->value.first;
568 } 568 }
569 569
570 bool includeLeading = includeLeadingForBox(box); 570 bool includeLeading = includeLeadingForBox(box);
571 bool setUsedFontWithLeading = false; 571 bool setUsedFontWithLeading = false;
572 572
573 if (usedFonts && !usedFonts->isEmpty() && (box->lineLayoutItem().style(isFir stLineStyle())->lineHeight().isNegative() && includeLeading)) { 573 if (usedFonts && !usedFonts->isEmpty() && (box->getLineLayoutItem().style(is FirstLineStyle())->lineHeight().isNegative() && includeLeading)) {
574 usedFonts->append(box->lineLayoutItem().style(isFirstLineStyle())->font( ).primaryFont()); 574 usedFonts->append(box->getLineLayoutItem().style(isFirstLineStyle())->fo nt().primaryFont());
575 for (size_t i = 0; i < usedFonts->size(); ++i) { 575 for (size_t i = 0; i < usedFonts->size(); ++i) {
576 const FontMetrics& fontMetrics = usedFonts->at(i)->fontMetrics(); 576 const FontMetrics& fontMetrics = usedFonts->at(i)->fontMetrics();
577 int usedFontAscent = fontMetrics.ascent(baselineType()); 577 int usedFontAscent = fontMetrics.ascent(baselineType());
578 int usedFontDescent = fontMetrics.descent(baselineType()); 578 int usedFontDescent = fontMetrics.descent(baselineType());
579 int halfLeading = (fontMetrics.lineSpacing() - fontMetrics.height()) / 2; 579 int halfLeading = (fontMetrics.lineSpacing() - fontMetrics.height()) / 2;
580 int usedFontAscentAndLeading = usedFontAscent + halfLeading; 580 int usedFontAscentAndLeading = usedFontAscent + halfLeading;
581 int usedFontDescentAndLeading = fontMetrics.lineSpacing() - usedFont AscentAndLeading; 581 int usedFontDescentAndLeading = fontMetrics.lineSpacing() - usedFont AscentAndLeading;
582 if (includeLeading) { 582 if (includeLeading) {
583 setAscentAndDescent(ascent, descent, usedFontAscentAndLeading, u sedFontDescentAndLeading, ascentDescentSet); 583 setAscentAndDescent(ascent, descent, usedFontAscentAndLeading, u sedFontDescentAndLeading, ascentDescentSet);
584 setUsedFontWithLeading = true; 584 setUsedFontWithLeading = true;
(...skipping 15 matching lines...) Expand all
600 // If the top of our font box relative to the root box baseline is above the root box baseline, then 600 // If the top of our font box relative to the root box baseline is above the root box baseline, then
601 // we are contributing to the maxAscent value. Descent is similar. If an y part of our font box is below 601 // we are contributing to the maxAscent value. Descent is similar. If an y part of our font box is below
602 // the root box's baseline, then we contribute to the maxDescent value. 602 // the root box's baseline, then we contribute to the maxDescent value.
603 affectsAscent = ascentWithLeading - box->logicalTop() > 0; 603 affectsAscent = ascentWithLeading - box->logicalTop() > 0;
604 affectsDescent = descentWithLeading + box->logicalTop() > 0; 604 affectsDescent = descentWithLeading + box->logicalTop() > 0;
605 } 605 }
606 } 606 }
607 607
608 LayoutUnit RootInlineBox::verticalPositionForBox(InlineBox* box, VerticalPositio nCache& verticalPositionCache) 608 LayoutUnit RootInlineBox::verticalPositionForBox(InlineBox* box, VerticalPositio nCache& verticalPositionCache)
609 { 609 {
610 if (box->lineLayoutItem().isText()) 610 if (box->getLineLayoutItem().isText())
611 return box->parent()->logicalTop(); 611 return box->parent()->logicalTop();
612 612
613 LineLayoutBoxModel boxModel = box->boxModelObject(); 613 LineLayoutBoxModel boxModel = box->boxModelObject();
614 ASSERT(boxModel.isInline()); 614 ASSERT(boxModel.isInline());
615 if (!boxModel.isInline()) 615 if (!boxModel.isInline())
616 return LayoutUnit(); 616 return LayoutUnit();
617 617
618 // This method determines the vertical position for inline elements. 618 // This method determines the vertical position for inline elements.
619 bool firstLine = isFirstLineStyle(); 619 bool firstLine = isFirstLineStyle();
620 if (firstLine && !boxModel.document().styleEngine().usesFirstLineRules()) 620 if (firstLine && !boxModel.document().styleEngine().usesFirstLineRules())
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
674 674
675 // Store the cached value. 675 // Store the cached value.
676 if (isLayoutInline && !firstLine) 676 if (isLayoutInline && !firstLine)
677 verticalPositionCache.set(boxModel, baselineType(), verticalPosition); 677 verticalPositionCache.set(boxModel, baselineType(), verticalPosition);
678 678
679 return verticalPosition; 679 return verticalPosition;
680 } 680 }
681 681
682 bool RootInlineBox::includeLeadingForBox(InlineBox* box) const 682 bool RootInlineBox::includeLeadingForBox(InlineBox* box) const
683 { 683 {
684 return !(box->lineLayoutItem().isAtomicInlineLevel() || (box->lineLayoutItem ().isText() && !box->isText())); 684 return !(box->getLineLayoutItem().isAtomicInlineLevel() || (box->getLineLayo utItem().isText() && !box->isText()));
685 } 685 }
686 686
687 Node* RootInlineBox::getLogicalStartBoxWithNode(InlineBox*& startBox) const 687 Node* RootInlineBox::getLogicalStartBoxWithNode(InlineBox*& startBox) const
688 { 688 {
689 Vector<InlineBox*> leafBoxesInLogicalOrder; 689 Vector<InlineBox*> leafBoxesInLogicalOrder;
690 collectLeafBoxesInLogicalOrder(leafBoxesInLogicalOrder); 690 collectLeafBoxesInLogicalOrder(leafBoxesInLogicalOrder);
691 for (size_t i = 0; i < leafBoxesInLogicalOrder.size(); ++i) { 691 for (size_t i = 0; i < leafBoxesInLogicalOrder.size(); ++i) {
692 if (leafBoxesInLogicalOrder[i]->lineLayoutItem().nonPseudoNode()) { 692 if (leafBoxesInLogicalOrder[i]->getLineLayoutItem().nonPseudoNode()) {
693 startBox = leafBoxesInLogicalOrder[i]; 693 startBox = leafBoxesInLogicalOrder[i];
694 return startBox->lineLayoutItem().nonPseudoNode(); 694 return startBox->getLineLayoutItem().nonPseudoNode();
695 } 695 }
696 } 696 }
697 startBox = nullptr; 697 startBox = nullptr;
698 return nullptr; 698 return nullptr;
699 } 699 }
700 700
701 Node* RootInlineBox::getLogicalEndBoxWithNode(InlineBox*& endBox) const 701 Node* RootInlineBox::getLogicalEndBoxWithNode(InlineBox*& endBox) const
702 { 702 {
703 Vector<InlineBox*> leafBoxesInLogicalOrder; 703 Vector<InlineBox*> leafBoxesInLogicalOrder;
704 collectLeafBoxesInLogicalOrder(leafBoxesInLogicalOrder); 704 collectLeafBoxesInLogicalOrder(leafBoxesInLogicalOrder);
705 for (size_t i = leafBoxesInLogicalOrder.size(); i > 0; --i) { 705 for (size_t i = leafBoxesInLogicalOrder.size(); i > 0; --i) {
706 if (leafBoxesInLogicalOrder[i - 1]->lineLayoutItem().nonPseudoNode()) { 706 if (leafBoxesInLogicalOrder[i - 1]->getLineLayoutItem().nonPseudoNode()) {
707 endBox = leafBoxesInLogicalOrder[i - 1]; 707 endBox = leafBoxesInLogicalOrder[i - 1];
708 return endBox->lineLayoutItem().nonPseudoNode(); 708 return endBox->getLineLayoutItem().nonPseudoNode();
709 } 709 }
710 } 710 }
711 endBox = nullptr; 711 endBox = nullptr;
712 return nullptr; 712 return nullptr;
713 } 713 }
714 714
715 const char* RootInlineBox::boxName() const 715 const char* RootInlineBox::boxName() const
716 { 716 {
717 return "RootInlineBox"; 717 return "RootInlineBox";
718 } 718 }
719 719
720 } // namespace blink 720 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698