OLD | NEW |
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 27 matching lines...) Expand all Loading... |
38 | 38 |
39 struct SameSizeAsRootInlineBox : public InlineFlowBox { | 39 struct SameSizeAsRootInlineBox : public InlineFlowBox { |
40 unsigned unsignedVariable; | 40 unsigned unsignedVariable; |
41 void* pointers[3]; | 41 void* pointers[3]; |
42 LayoutUnit layoutVariables[6]; | 42 LayoutUnit layoutVariables[6]; |
43 }; | 43 }; |
44 | 44 |
45 static_assert(sizeof(RootInlineBox) == sizeof(SameSizeAsRootInlineBox), "RootInl
ineBox should stay small"); | 45 static_assert(sizeof(RootInlineBox) == sizeof(SameSizeAsRootInlineBox), "RootInl
ineBox should stay small"); |
46 | 46 |
47 typedef WTF::HashMap<const RootInlineBox*, EllipsisBox*> EllipsisBoxMap; | 47 typedef WTF::HashMap<const RootInlineBox*, EllipsisBox*> EllipsisBoxMap; |
48 static EllipsisBoxMap* gEllipsisBoxMap = 0; | 48 static EllipsisBoxMap* gEllipsisBoxMap = nullptr; |
49 | 49 |
50 RootInlineBox::RootInlineBox(LayoutBlockFlow& block) | 50 RootInlineBox::RootInlineBox(LayoutBlockFlow& block) |
51 : InlineFlowBox(block) | 51 : InlineFlowBox(block) |
52 , m_lineBreakPos(0) | 52 , m_lineBreakPos(0) |
53 , m_lineBreakObj(0) | 53 , m_lineBreakObj(nullptr) |
54 , m_lineTop(0) | 54 , m_lineTop(0) |
55 , m_lineBottom(0) | 55 , m_lineBottom(0) |
56 , m_lineTopWithLeading(0) | 56 , m_lineTopWithLeading(0) |
57 , m_lineBottomWithLeading(0) | 57 , m_lineBottomWithLeading(0) |
58 , m_selectionBottom(0) | 58 , m_selectionBottom(0) |
59 , m_paginationStrut(0) | 59 , m_paginationStrut(0) |
60 { | 60 { |
61 setIsHorizontal(block.isHorizontalWritingMode()); | 61 setIsHorizontal(block.isHorizontalWritingMode()); |
62 } | 62 } |
63 | 63 |
64 | 64 |
65 void RootInlineBox::destroy() | 65 void RootInlineBox::destroy() |
66 { | 66 { |
67 detachEllipsisBox(); | 67 detachEllipsisBox(); |
68 InlineFlowBox::destroy(); | 68 InlineFlowBox::destroy(); |
69 } | 69 } |
70 | 70 |
71 void RootInlineBox::detachEllipsisBox() | 71 void RootInlineBox::detachEllipsisBox() |
72 { | 72 { |
73 if (hasEllipsisBox()) { | 73 if (hasEllipsisBox()) { |
74 EllipsisBox* box = gEllipsisBoxMap->take(this); | 74 EllipsisBox* box = gEllipsisBoxMap->take(this); |
75 box->setParent(0); | 75 box->setParent(nullptr); |
76 box->destroy(); | 76 box->destroy(); |
77 setHasEllipsisBox(false); | 77 setHasEllipsisBox(false); |
78 } | 78 } |
79 } | 79 } |
80 | 80 |
81 LineBoxList* RootInlineBox::lineBoxes() const | 81 LineBoxList* RootInlineBox::lineBoxes() const |
82 { | 82 { |
83 return block().lineBoxes(); | 83 return block().lineBoxes(); |
84 } | 84 } |
85 | 85 |
(...skipping 268 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
354 return state; | 354 return state; |
355 } | 355 } |
356 | 356 |
357 InlineBox* RootInlineBox::firstSelectedBox() const | 357 InlineBox* RootInlineBox::firstSelectedBox() const |
358 { | 358 { |
359 for (InlineBox* box = firstLeafChild(); box; box = box->nextLeafChild()) { | 359 for (InlineBox* box = firstLeafChild(); box; box = box->nextLeafChild()) { |
360 if (box->selectionState() != LayoutObject::SelectionNone) | 360 if (box->selectionState() != LayoutObject::SelectionNone) |
361 return box; | 361 return box; |
362 } | 362 } |
363 | 363 |
364 return 0; | 364 return nullptr; |
365 } | 365 } |
366 | 366 |
367 InlineBox* RootInlineBox::lastSelectedBox() const | 367 InlineBox* RootInlineBox::lastSelectedBox() const |
368 { | 368 { |
369 for (InlineBox* box = lastLeafChild(); box; box = box->prevLeafChild()) { | 369 for (InlineBox* box = lastLeafChild(); box; box = box->prevLeafChild()) { |
370 if (box->selectionState() != LayoutObject::SelectionNone) | 370 if (box->selectionState() != LayoutObject::SelectionNone) |
371 return box; | 371 return box; |
372 } | 372 } |
373 | 373 |
374 return 0; | 374 return nullptr; |
375 } | 375 } |
376 | 376 |
377 LayoutUnit RootInlineBox::selectionTop() const | 377 LayoutUnit RootInlineBox::selectionTop() const |
378 { | 378 { |
379 LayoutUnit selectionTop = m_lineTop; | 379 LayoutUnit selectionTop = m_lineTop; |
380 | 380 |
381 if (m_hasAnnotationsBefore) | 381 if (m_hasAnnotationsBefore) |
382 selectionTop -= !layoutObject().style()->isFlippedLinesWritingMode() ? c
omputeOverAnnotationAdjustment(m_lineTop) : computeUnderAnnotationAdjustment(m_l
ineTop); | 382 selectionTop -= !layoutObject().style()->isFlippedLinesWritingMode() ? c
omputeOverAnnotationAdjustment(m_lineTop) : computeUnderAnnotationAdjustment(m_l
ineTop); |
383 | 383 |
384 if (layoutObject().style()->isFlippedLinesWritingMode() || !prevRootBox()) | 384 if (layoutObject().style()->isFlippedLinesWritingMode() || !prevRootBox()) |
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
492 // Return it. | 492 // Return it. |
493 return firstLeaf; | 493 return firstLeaf; |
494 } | 494 } |
495 | 495 |
496 if (leftPosition >= lastLeaf->logicalRight() && !lastLeaf->layoutObject().is
ListMarker() && (!onlyEditableLeaves || isEditableLeaf(lastLeaf))) { | 496 if (leftPosition >= lastLeaf->logicalRight() && !lastLeaf->layoutObject().is
ListMarker() && (!onlyEditableLeaves || isEditableLeaf(lastLeaf))) { |
497 // The leftPosition coordinate is greater or equal to right edge of the
lastLeaf. | 497 // The leftPosition coordinate is greater or equal to right edge of the
lastLeaf. |
498 // Return it. | 498 // Return it. |
499 return lastLeaf; | 499 return lastLeaf; |
500 } | 500 } |
501 | 501 |
502 InlineBox* closestLeaf = 0; | 502 InlineBox* closestLeaf = nullptr; |
503 for (InlineBox* leaf = firstLeaf; leaf; leaf = leaf->nextLeafChildIgnoringLi
neBreak()) { | 503 for (InlineBox* leaf = firstLeaf; leaf; leaf = leaf->nextLeafChildIgnoringLi
neBreak()) { |
504 if (!leaf->layoutObject().isListMarker() && (!onlyEditableLeaves || isEd
itableLeaf(leaf))) { | 504 if (!leaf->layoutObject().isListMarker() && (!onlyEditableLeaves || isEd
itableLeaf(leaf))) { |
505 closestLeaf = leaf; | 505 closestLeaf = leaf; |
506 if (leftPosition < leaf->logicalRight()) { | 506 if (leftPosition < leaf->logicalRight()) { |
507 // The x coordinate is less than the right edge of the box. | 507 // The x coordinate is less than the right edge of the box. |
508 // Return it. | 508 // Return it. |
509 return leaf; | 509 return leaf; |
510 } | 510 } |
511 } | 511 } |
512 } | 512 } |
(...skipping 19 matching lines...) Expand all Loading... |
532 m_lineBreakPos = breakPos; | 532 m_lineBreakPos = breakPos; |
533 m_lineBreakBidiStatusEor = status.eor; | 533 m_lineBreakBidiStatusEor = status.eor; |
534 m_lineBreakBidiStatusLastStrong = status.lastStrong; | 534 m_lineBreakBidiStatusLastStrong = status.lastStrong; |
535 m_lineBreakBidiStatusLast = status.last; | 535 m_lineBreakBidiStatusLast = status.last; |
536 m_lineBreakContext = status.context; | 536 m_lineBreakContext = status.context; |
537 } | 537 } |
538 | 538 |
539 EllipsisBox* RootInlineBox::ellipsisBox() const | 539 EllipsisBox* RootInlineBox::ellipsisBox() const |
540 { | 540 { |
541 if (!hasEllipsisBox()) | 541 if (!hasEllipsisBox()) |
542 return 0; | 542 return nullptr; |
543 return gEllipsisBoxMap->get(this); | 543 return gEllipsisBoxMap->get(this); |
544 } | 544 } |
545 | 545 |
546 void RootInlineBox::removeLineBoxFromLayoutObject() | 546 void RootInlineBox::removeLineBoxFromLayoutObject() |
547 { | 547 { |
548 block().lineBoxes()->removeLineBox(this); | 548 block().lineBoxes()->removeLineBox(this); |
549 } | 549 } |
550 | 550 |
551 void RootInlineBox::extractLineBoxFromLayoutObject() | 551 void RootInlineBox::extractLineBoxFromLayoutObject() |
552 { | 552 { |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
602 ascent = box->baselinePosition(baselineType()); | 602 ascent = box->baselinePosition(baselineType()); |
603 descent = box->lineHeight() - ascent; | 603 descent = box->lineHeight() - ascent; |
604 | 604 |
605 // Replaced elements always affect both the ascent and descent. | 605 // Replaced elements always affect both the ascent and descent. |
606 affectsAscent = true; | 606 affectsAscent = true; |
607 affectsDescent = true; | 607 affectsDescent = true; |
608 } | 608 } |
609 return; | 609 return; |
610 } | 610 } |
611 | 611 |
612 Vector<const SimpleFontData*>* usedFonts = 0; | 612 Vector<const SimpleFontData*>* usedFonts = nullptr; |
613 GlyphOverflow* glyphOverflow = 0; | 613 GlyphOverflow* glyphOverflow = nullptr; |
614 if (box->isText()) { | 614 if (box->isText()) { |
615 GlyphOverflowAndFallbackFontsMap::iterator it = textBoxDataMap.find(toIn
lineTextBox(box)); | 615 GlyphOverflowAndFallbackFontsMap::iterator it = textBoxDataMap.find(toIn
lineTextBox(box)); |
616 usedFonts = it == textBoxDataMap.end() ? 0 : &it->value.first; | 616 usedFonts = it == textBoxDataMap.end() ? 0 : &it->value.first; |
617 glyphOverflow = it == textBoxDataMap.end() ? 0 : &it->value.second; | 617 glyphOverflow = it == textBoxDataMap.end() ? 0 : &it->value.second; |
618 } | 618 } |
619 | 619 |
620 bool includeLeading = includeLeadingForBox(box); | 620 bool includeLeading = includeLeadingForBox(box); |
621 bool includeFont = includeFontForBox(box); | 621 bool includeFont = includeFontForBox(box); |
622 | 622 |
623 bool setUsedFont = false; | 623 bool setUsedFont = false; |
(...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
823 Node* RootInlineBox::getLogicalStartBoxWithNode(InlineBox*& startBox) const | 823 Node* RootInlineBox::getLogicalStartBoxWithNode(InlineBox*& startBox) const |
824 { | 824 { |
825 Vector<InlineBox*> leafBoxesInLogicalOrder; | 825 Vector<InlineBox*> leafBoxesInLogicalOrder; |
826 collectLeafBoxesInLogicalOrder(leafBoxesInLogicalOrder); | 826 collectLeafBoxesInLogicalOrder(leafBoxesInLogicalOrder); |
827 for (size_t i = 0; i < leafBoxesInLogicalOrder.size(); ++i) { | 827 for (size_t i = 0; i < leafBoxesInLogicalOrder.size(); ++i) { |
828 if (leafBoxesInLogicalOrder[i]->layoutObject().nonPseudoNode()) { | 828 if (leafBoxesInLogicalOrder[i]->layoutObject().nonPseudoNode()) { |
829 startBox = leafBoxesInLogicalOrder[i]; | 829 startBox = leafBoxesInLogicalOrder[i]; |
830 return startBox->layoutObject().nonPseudoNode(); | 830 return startBox->layoutObject().nonPseudoNode(); |
831 } | 831 } |
832 } | 832 } |
833 startBox = 0; | 833 startBox = nullptr; |
834 return 0; | 834 return nullptr; |
835 } | 835 } |
836 | 836 |
837 Node* RootInlineBox::getLogicalEndBoxWithNode(InlineBox*& endBox) const | 837 Node* RootInlineBox::getLogicalEndBoxWithNode(InlineBox*& endBox) const |
838 { | 838 { |
839 Vector<InlineBox*> leafBoxesInLogicalOrder; | 839 Vector<InlineBox*> leafBoxesInLogicalOrder; |
840 collectLeafBoxesInLogicalOrder(leafBoxesInLogicalOrder); | 840 collectLeafBoxesInLogicalOrder(leafBoxesInLogicalOrder); |
841 for (size_t i = leafBoxesInLogicalOrder.size(); i > 0; --i) { | 841 for (size_t i = leafBoxesInLogicalOrder.size(); i > 0; --i) { |
842 if (leafBoxesInLogicalOrder[i - 1]->layoutObject().nonPseudoNode()) { | 842 if (leafBoxesInLogicalOrder[i - 1]->layoutObject().nonPseudoNode()) { |
843 endBox = leafBoxesInLogicalOrder[i - 1]; | 843 endBox = leafBoxesInLogicalOrder[i - 1]; |
844 return endBox->layoutObject().nonPseudoNode(); | 844 return endBox->layoutObject().nonPseudoNode(); |
845 } | 845 } |
846 } | 846 } |
847 endBox = 0; | 847 endBox = nullptr; |
848 return 0; | 848 return nullptr; |
849 } | 849 } |
850 | 850 |
851 const char* RootInlineBox::boxName() const | 851 const char* RootInlineBox::boxName() const |
852 { | 852 { |
853 return "RootInlineBox"; | 853 return "RootInlineBox"; |
854 } | 854 } |
855 | 855 |
856 } // namespace blink | 856 } // namespace blink |
OLD | NEW |