| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) | 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) |
| 3 * (C) 1999 Antti Koivisto (koivisto@kde.org) | 3 * (C) 1999 Antti Koivisto (koivisto@kde.org) |
| 4 * (C) 2007 David Smith (catfish.man@gmail.com) | 4 * (C) 2007 David Smith (catfish.man@gmail.com) |
| 5 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc.
All rights reserved. | 5 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc.
All rights reserved. |
| 6 * Copyright (C) Research In Motion Limited 2010. All rights reserved. | 6 * Copyright (C) Research In Motion Limited 2010. All rights reserved. |
| 7 * | 7 * |
| 8 * This library is free software; you can redistribute it and/or | 8 * This library is free software; you can redistribute it and/or |
| 9 * modify it under the terms of the GNU Library General Public | 9 * modify it under the terms of the GNU Library General Public |
| 10 * License as published by the Free Software Foundation; either | 10 * License as published by the Free Software Foundation; either |
| (...skipping 717 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 728 } | 728 } |
| 729 | 729 |
| 730 beforeChild = splitAnonymousBoxesAroundChild(beforeChild); | 730 beforeChild = splitAnonymousBoxesAroundChild(beforeChild); |
| 731 | 731 |
| 732 ASSERT(beforeChild->parent() == this); | 732 ASSERT(beforeChild->parent() == this); |
| 733 if (beforeChild->parent() != this) { | 733 if (beforeChild->parent() != this) { |
| 734 // We should never reach here. If we do, we need to use the | 734 // We should never reach here. If we do, we need to use the |
| 735 // safe fallback to use the topmost beforeChild container. | 735 // safe fallback to use the topmost beforeChild container. |
| 736 beforeChild = beforeChildContainer; | 736 beforeChild = beforeChildContainer; |
| 737 } | 737 } |
| 738 } else { | |
| 739 // We will reach here when beforeChild is a run-in element. | |
| 740 // If run-in element precedes a block-level element, it becomes the | |
| 741 // the first inline child of that block level element. The insertion | |
| 742 // point will be before that block-level element. | |
| 743 ASSERT(beforeChild->isRunIn()); | |
| 744 beforeChild = beforeChildContainer; | |
| 745 } | 738 } |
| 746 } | 739 } |
| 747 | 740 |
| 748 // Nothing goes before the intruded run-in. | |
| 749 if (beforeChild && beforeChild->isRunIn() && runInIsPlacedIntoSiblingBlock(b
eforeChild)) | |
| 750 beforeChild = beforeChild->nextSibling(); | |
| 751 | |
| 752 // Check for a spanning element in columns. | 741 // Check for a spanning element in columns. |
| 753 if (gColumnFlowSplitEnabled) { | 742 if (gColumnFlowSplitEnabled) { |
| 754 RenderBlock* columnsBlockAncestor = columnsBlockForSpanningElement(newCh
ild); | 743 RenderBlock* columnsBlockAncestor = columnsBlockForSpanningElement(newCh
ild); |
| 755 if (columnsBlockAncestor) { | 744 if (columnsBlockAncestor) { |
| 756 TemporaryChange<bool> columnFlowSplitEnabled(gColumnFlowSplitEnabled
, false); | 745 TemporaryChange<bool> columnFlowSplitEnabled(gColumnFlowSplitEnabled
, false); |
| 757 // We are placing a column-span element inside a block. | 746 // We are placing a column-span element inside a block. |
| 758 RenderBlock* newBox = createAnonymousColumnSpanBlock(); | 747 RenderBlock* newBox = createAnonymousColumnSpanBlock(); |
| 759 | 748 |
| 760 if (columnsBlockAncestor != this && !isRenderFlowThread()) { | 749 if (columnsBlockAncestor != this && !isRenderFlowThread()) { |
| 761 // We are nested inside a multi-column element and are being spl
it by the span. We have to break up | 750 // We are nested inside a multi-column element and are being spl
it by the span. We have to break up |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 809 // No suitable existing anonymous box - create a new one. | 798 // No suitable existing anonymous box - create a new one. |
| 810 RenderBlock* newBox = createAnonymousBlock(); | 799 RenderBlock* newBox = createAnonymousBlock(); |
| 811 RenderBox::addChild(newBox, beforeChild); | 800 RenderBox::addChild(newBox, beforeChild); |
| 812 newBox->addChild(newChild); | 801 newBox->addChild(newChild); |
| 813 return; | 802 return; |
| 814 } | 803 } |
| 815 } | 804 } |
| 816 | 805 |
| 817 RenderBox::addChild(newChild, beforeChild); | 806 RenderBox::addChild(newChild, beforeChild); |
| 818 | 807 |
| 819 // Handle placement of run-ins. | |
| 820 placeRunInIfNeeded(newChild); | |
| 821 | |
| 822 if (madeBoxesNonInline && parent() && isAnonymousBlock() && parent()->isRend
erBlock()) | 808 if (madeBoxesNonInline && parent() && isAnonymousBlock() && parent()->isRend
erBlock()) |
| 823 toRenderBlock(parent())->removeLeftoverAnonymousBlock(this); | 809 toRenderBlock(parent())->removeLeftoverAnonymousBlock(this); |
| 824 // this object may be dead here | 810 // this object may be dead here |
| 825 } | 811 } |
| 826 | 812 |
| 827 void RenderBlock::addChild(RenderObject* newChild, RenderObject* beforeChild) | 813 void RenderBlock::addChild(RenderObject* newChild, RenderObject* beforeChild) |
| 828 { | 814 { |
| 829 if (continuation() && !isAnonymousBlock()) | 815 if (continuation() && !isAnonymousBlock()) |
| 830 addChildToContinuation(newChild, beforeChild); | 816 addChildToContinuation(newChild, beforeChild); |
| 831 else | 817 else |
| (...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 919 ASSERT(!insertionPoint || insertionPoint->parent() == this); | 905 ASSERT(!insertionPoint || insertionPoint->parent() == this); |
| 920 | 906 |
| 921 setChildrenInline(false); | 907 setChildrenInline(false); |
| 922 | 908 |
| 923 RenderObject *child = firstChild(); | 909 RenderObject *child = firstChild(); |
| 924 if (!child) | 910 if (!child) |
| 925 return; | 911 return; |
| 926 | 912 |
| 927 deleteLineBoxTree(); | 913 deleteLineBoxTree(); |
| 928 | 914 |
| 929 // Since we are going to have block children, we have to move | |
| 930 // back the run-in to its original place. | |
| 931 if (child->isRunIn()) { | |
| 932 moveRunInToOriginalPosition(child); | |
| 933 child = firstChild(); | |
| 934 } | |
| 935 | |
| 936 while (child) { | 915 while (child) { |
| 937 RenderObject *inlineRunStart, *inlineRunEnd; | 916 RenderObject *inlineRunStart, *inlineRunEnd; |
| 938 getInlineRun(child, insertionPoint, inlineRunStart, inlineRunEnd); | 917 getInlineRun(child, insertionPoint, inlineRunStart, inlineRunEnd); |
| 939 | 918 |
| 940 if (!inlineRunStart) | 919 if (!inlineRunStart) |
| 941 break; | 920 break; |
| 942 | 921 |
| 943 child = inlineRunEnd->nextSibling(); | 922 child = inlineRunEnd->nextSibling(); |
| 944 | 923 |
| 945 RenderBlock* block = createAnonymousBlock(); | 924 RenderBlock* block = createAnonymousBlock(); |
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1009 | 988 |
| 1010 static bool canMergeContiguousAnonymousBlocks(RenderObject* oldChild, RenderObje
ct* prev, RenderObject* next) | 989 static bool canMergeContiguousAnonymousBlocks(RenderObject* oldChild, RenderObje
ct* prev, RenderObject* next) |
| 1011 { | 990 { |
| 1012 if (oldChild->documentBeingDestroyed() || oldChild->isInline() || oldChild->
virtualContinuation()) | 991 if (oldChild->documentBeingDestroyed() || oldChild->isInline() || oldChild->
virtualContinuation()) |
| 1013 return false; | 992 return false; |
| 1014 | 993 |
| 1015 if ((prev && (!prev->isAnonymousBlock() || toRenderBlock(prev)->continuation
() || toRenderBlock(prev)->beingDestroyed())) | 994 if ((prev && (!prev->isAnonymousBlock() || toRenderBlock(prev)->continuation
() || toRenderBlock(prev)->beingDestroyed())) |
| 1016 || (next && (!next->isAnonymousBlock() || toRenderBlock(next)->continuat
ion() || toRenderBlock(next)->beingDestroyed()))) | 995 || (next && (!next->isAnonymousBlock() || toRenderBlock(next)->continuat
ion() || toRenderBlock(next)->beingDestroyed()))) |
| 1017 return false; | 996 return false; |
| 1018 | 997 |
| 1019 // FIXME: This check isn't required when inline run-ins can't be split into
continuations. | |
| 1020 if (prev && prev->firstChild() && prev->firstChild()->isInline() && prev->fi
rstChild()->isRunIn()) | |
| 1021 return false; | |
| 1022 | |
| 1023 if ((prev && (prev->isRubyRun() || prev->isRubyBase())) | 998 if ((prev && (prev->isRubyRun() || prev->isRubyBase())) |
| 1024 || (next && (next->isRubyRun() || next->isRubyBase()))) | 999 || (next && (next->isRubyRun() || next->isRubyBase()))) |
| 1025 return false; | 1000 return false; |
| 1026 | 1001 |
| 1027 if (!prev || !next) | 1002 if (!prev || !next) |
| 1028 return true; | 1003 return true; |
| 1029 | 1004 |
| 1030 // Make sure the types of the anonymous blocks match up. | 1005 // Make sure the types of the anonymous blocks match up. |
| 1031 return prev->isAnonymousColumnsBlock() == next->isAnonymousColumnsBlock() | 1006 return prev->isAnonymousColumnsBlock() == next->isAnonymousColumnsBlock() |
| 1032 && prev->isAnonymousColumnSpanBlock() == next->isAnonymousColumnSpanB
lock(); | 1007 && prev->isAnonymousColumnSpanBlock() == next->isAnonymousColumnSpanB
lock(); |
| (...skipping 554 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1587 RenderTheme::theme().adjustRepaintRect(this, inflatedRect); | 1562 RenderTheme::theme().adjustRepaintRect(this, inflatedRect); |
| 1588 addVisualOverflow(inflatedRect); | 1563 addVisualOverflow(inflatedRect); |
| 1589 } | 1564 } |
| 1590 | 1565 |
| 1591 bool RenderBlock::expandsToEncloseOverhangingFloats() const | 1566 bool RenderBlock::expandsToEncloseOverhangingFloats() const |
| 1592 { | 1567 { |
| 1593 return isInlineBlockOrInlineTable() || isFloatingOrOutOfFlowPositioned() ||
hasOverflowClip() || (parent() && parent()->isFlexibleBoxIncludingDeprecated()) | 1568 return isInlineBlockOrInlineTable() || isFloatingOrOutOfFlowPositioned() ||
hasOverflowClip() || (parent() && parent()->isFlexibleBoxIncludingDeprecated()) |
| 1594 || hasColumns() || isTableCell() || isTableCaption() || isFieldset()
|| isWritingModeRoot() || isRoot(); | 1569 || hasColumns() || isTableCell() || isTableCaption() || isFieldset()
|| isWritingModeRoot() || isRoot(); |
| 1595 } | 1570 } |
| 1596 | 1571 |
| 1597 static void destroyRunIn(RenderBoxModelObject* runIn) | |
| 1598 { | |
| 1599 ASSERT(runIn->isRunIn()); | |
| 1600 ASSERT(!runIn->firstChild()); | |
| 1601 | |
| 1602 // Delete our line box tree. This is needed as our children got moved | |
| 1603 // and our line box tree is no longer valid. | |
| 1604 if (runIn->isRenderBlock()) | |
| 1605 toRenderBlock(runIn)->deleteLineBoxTree(); | |
| 1606 else if (runIn->isRenderInline()) | |
| 1607 toRenderInline(runIn)->deleteLineBoxTree(); | |
| 1608 else | |
| 1609 ASSERT_NOT_REACHED(); | |
| 1610 | |
| 1611 runIn->destroy(); | |
| 1612 } | |
| 1613 | |
| 1614 void RenderBlock::placeRunInIfNeeded(RenderObject* newChild) | |
| 1615 { | |
| 1616 if (newChild->isRunIn()) | |
| 1617 moveRunInUnderSiblingBlockIfNeeded(newChild); | |
| 1618 else if (RenderObject* prevSibling = newChild->previousSibling()) { | |
| 1619 if (prevSibling->isRunIn()) | |
| 1620 moveRunInUnderSiblingBlockIfNeeded(prevSibling); | |
| 1621 } | |
| 1622 } | |
| 1623 | |
| 1624 RenderBoxModelObject* RenderBlock::createReplacementRunIn(RenderBoxModelObject*
runIn) | |
| 1625 { | |
| 1626 ASSERT(runIn->isRunIn()); | |
| 1627 ASSERT(runIn->node()); | |
| 1628 | |
| 1629 RenderBoxModelObject* newRunIn = 0; | |
| 1630 if (!runIn->isRenderBlockFlow()) | |
| 1631 newRunIn = new RenderBlockFlow(runIn->node()); | |
| 1632 else | |
| 1633 newRunIn = new RenderInline(toElement(runIn->node())); | |
| 1634 | |
| 1635 runIn->node()->setRenderer(newRunIn); | |
| 1636 newRunIn->setStyle(runIn->style()); | |
| 1637 | |
| 1638 runIn->moveAllChildrenTo(newRunIn, true); | |
| 1639 | |
| 1640 return newRunIn; | |
| 1641 } | |
| 1642 | |
| 1643 void RenderBlock::moveRunInUnderSiblingBlockIfNeeded(RenderObject* runIn) | |
| 1644 { | |
| 1645 ASSERT(runIn->isRunIn()); | |
| 1646 | |
| 1647 // See if we have inline children. If the children aren't inline, | |
| 1648 // then just treat the run-in as a normal block. | |
| 1649 if (!runIn->childrenInline()) | |
| 1650 return; | |
| 1651 | |
| 1652 // FIXME: We don't handle non-block flow elements with run-in for now. | |
| 1653 if (!runIn->isRenderBlockFlow()) | |
| 1654 return; | |
| 1655 | |
| 1656 // FIXME: We don't support run-ins with or as part of a continuation | |
| 1657 // as it makes the back-and-forth placing complex. | |
| 1658 if (runIn->isElementContinuation() || runIn->virtualContinuation()) | |
| 1659 return; | |
| 1660 | |
| 1661 // Check if this node is allowed to run-in. E.g. <select> expects its render
er to | |
| 1662 // be a RenderListBox or RenderMenuList, and hence cannot be a RenderInline
run-in. | |
| 1663 if (!runIn->canBeReplacedWithInlineRunIn()) | |
| 1664 return; | |
| 1665 | |
| 1666 RenderObject* curr = runIn->nextSibling(); | |
| 1667 if (!curr || !curr->isRenderBlock() || !curr->childrenInline()) | |
| 1668 return; | |
| 1669 | |
| 1670 // Per CSS3, "A run-in cannot run in to a block that already starts with a | |
| 1671 // run-in or that itself is a run-in". | |
| 1672 if (curr->isRunIn() || (curr->firstChild() && curr->firstChild()->isRunIn())
) | |
| 1673 return; | |
| 1674 | |
| 1675 if (curr->isAnonymous() || curr->isFloatingOrOutOfFlowPositioned()) | |
| 1676 return; | |
| 1677 | |
| 1678 // FIXME: We don't support run-ins with or as part of a continuation | |
| 1679 // as it makes the back-and-forth placing complex. | |
| 1680 if (curr->isElementContinuation() || curr->virtualContinuation()) | |
| 1681 return; | |
| 1682 | |
| 1683 RenderBoxModelObject* oldRunIn = toRenderBoxModelObject(runIn); | |
| 1684 RenderBoxModelObject* newRunIn = createReplacementRunIn(oldRunIn); | |
| 1685 destroyRunIn(oldRunIn); | |
| 1686 | |
| 1687 // Now insert the new child under |curr| block. Use addChild instead of inse
rtChildNode | |
| 1688 // since it handles correct placement of the children, especially where we c
annot insert | |
| 1689 // anything before the first child. e.g. details tag. See https://bugs.webki
t.org/show_bug.cgi?id=58228. | |
| 1690 curr->addChild(newRunIn, curr->firstChild()); | |
| 1691 | |
| 1692 // Make sure that |this| get a layout since its run-in child moved. | |
| 1693 curr->setNeedsLayoutAndPrefWidthsRecalc(); | |
| 1694 } | |
| 1695 | |
| 1696 bool RenderBlock::runInIsPlacedIntoSiblingBlock(RenderObject* runIn) | |
| 1697 { | |
| 1698 ASSERT(runIn->isRunIn()); | |
| 1699 | |
| 1700 // If we don't have a parent, we can't be moved into our sibling block. | |
| 1701 if (!parent()) | |
| 1702 return false; | |
| 1703 | |
| 1704 // An intruded run-in needs to be an inline. | |
| 1705 if (!runIn->isRenderInline()) | |
| 1706 return false; | |
| 1707 | |
| 1708 return true; | |
| 1709 } | |
| 1710 | |
| 1711 void RenderBlock::moveRunInToOriginalPosition(RenderObject* runIn) | |
| 1712 { | |
| 1713 ASSERT(runIn->isRunIn()); | |
| 1714 | |
| 1715 if (!runInIsPlacedIntoSiblingBlock(runIn)) | |
| 1716 return; | |
| 1717 | |
| 1718 // FIXME: Run-in that are now placed in sibling block can break up into cont
inuation | |
| 1719 // chains when new children are added to it. We cannot easily send them back
to their | |
| 1720 // original place since that requires writing integration logic with RenderI
nline::addChild | |
| 1721 // and all other places that might cause continuations to be created (withou
t blowing away | |
| 1722 // |this|). Disabling this feature for now to prevent crashes. | |
| 1723 if (runIn->isElementContinuation() || runIn->virtualContinuation()) | |
| 1724 return; | |
| 1725 | |
| 1726 RenderBoxModelObject* oldRunIn = toRenderBoxModelObject(runIn); | |
| 1727 RenderBoxModelObject* newRunIn = createReplacementRunIn(oldRunIn); | |
| 1728 destroyRunIn(oldRunIn); | |
| 1729 | |
| 1730 // Add the run-in block as our previous sibling. | |
| 1731 parent()->addChild(newRunIn, this); | |
| 1732 | |
| 1733 // Make sure that the parent holding the new run-in gets layout. | |
| 1734 parent()->setNeedsLayoutAndPrefWidthsRecalc(); | |
| 1735 } | |
| 1736 | |
| 1737 LayoutUnit RenderBlock::computeStartPositionDeltaForChildAvoidingFloats(const Re
nderBox* child, LayoutUnit childMarginStart, RenderRegion* region) | 1572 LayoutUnit RenderBlock::computeStartPositionDeltaForChildAvoidingFloats(const Re
nderBox* child, LayoutUnit childMarginStart, RenderRegion* region) |
| 1738 { | 1573 { |
| 1739 LayoutUnit startPosition = startOffsetForContent(region); | 1574 LayoutUnit startPosition = startOffsetForContent(region); |
| 1740 | 1575 |
| 1741 // Add in our start margin. | 1576 // Add in our start margin. |
| 1742 LayoutUnit oldPosition = startPosition + childMarginStart; | 1577 LayoutUnit oldPosition = startPosition + childMarginStart; |
| 1743 LayoutUnit newPosition = oldPosition; | 1578 LayoutUnit newPosition = oldPosition; |
| 1744 | 1579 |
| 1745 LayoutUnit blockOffset = logicalTopForChild(child); | 1580 LayoutUnit blockOffset = logicalTopForChild(child); |
| 1746 if (region) | 1581 if (region) |
| (...skipping 3373 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5120 // adding and removing children of firstLetterContainer. | 4955 // adding and removing children of firstLetterContainer. |
| 5121 LayoutStateDisabler layoutStateDisabler(view()); | 4956 LayoutStateDisabler layoutStateDisabler(view()); |
| 5122 | 4957 |
| 5123 createFirstLetterRenderer(firstLetterBlock, currChild, length); | 4958 createFirstLetterRenderer(firstLetterBlock, currChild, length); |
| 5124 } | 4959 } |
| 5125 | 4960 |
| 5126 // Helper methods for obtaining the last line, computing line counts and heights
for line counts | 4961 // Helper methods for obtaining the last line, computing line counts and heights
for line counts |
| 5127 // (crawling into blocks). | 4962 // (crawling into blocks). |
| 5128 static bool shouldCheckLines(RenderObject* obj) | 4963 static bool shouldCheckLines(RenderObject* obj) |
| 5129 { | 4964 { |
| 5130 return !obj->isFloatingOrOutOfFlowPositioned() && !obj->isRunIn() | 4965 return !obj->isFloatingOrOutOfFlowPositioned() |
| 5131 && obj->isRenderBlock() && obj->style()->height().isAuto() | 4966 && obj->isRenderBlock() && obj->style()->height().isAuto() |
| 5132 && (!obj->isDeprecatedFlexibleBox() || obj->style()->boxOrient() == VERT
ICAL); | 4967 && (!obj->isDeprecatedFlexibleBox() || obj->style()->boxOrient() == VERT
ICAL); |
| 5133 } | 4968 } |
| 5134 | 4969 |
| 5135 static int getHeightForLineCount(RenderBlock* block, int l, bool includeBottom,
int& count) | 4970 static int getHeightForLineCount(RenderBlock* block, int l, bool includeBottom,
int& count) |
| 5136 { | 4971 { |
| 5137 if (block->style()->visibility() == VISIBLE) { | 4972 if (block->style()->visibility() == VISIBLE) { |
| 5138 if (block->childrenInline()) { | 4973 if (block->childrenInline()) { |
| 5139 for (RootInlineBox* box = block->firstRootBox(); box; box = box->nex
tRootBox()) { | 4974 for (RootInlineBox* box = block->firstRootBox(); box; box = box->nex
tRootBox()) { |
| 5140 if (++count == l) | 4975 if (++count == l) |
| 5141 return box->lineBottom() + (includeBottom ? (block->borderBo
ttom() + block->paddingBottom()) : LayoutUnit()); | 4976 return box->lineBottom() + (includeBottom ? (block->borderBo
ttom() + block->paddingBottom()) : LayoutUnit()); |
| 5142 } | 4977 } |
| 5143 } | 4978 } |
| 5144 else { | 4979 else { |
| 5145 RenderBox* normalFlowChildWithoutLines = 0; | 4980 RenderBox* normalFlowChildWithoutLines = 0; |
| 5146 for (RenderBox* obj = block->firstChildBox(); obj; obj = obj->nextSi
blingBox()) { | 4981 for (RenderBox* obj = block->firstChildBox(); obj; obj = obj->nextSi
blingBox()) { |
| 5147 if (shouldCheckLines(obj)) { | 4982 if (shouldCheckLines(obj)) { |
| 5148 int result = getHeightForLineCount(toRenderBlock(obj), l, fa
lse, count); | 4983 int result = getHeightForLineCount(toRenderBlock(obj), l, fa
lse, count); |
| 5149 if (result != -1) | 4984 if (result != -1) |
| 5150 return result + obj->y() + (includeBottom ? (block->bord
erBottom() + block->paddingBottom()) : LayoutUnit()); | 4985 return result + obj->y() + (includeBottom ? (block->bord
erBottom() + block->paddingBottom()) : LayoutUnit()); |
| 5151 } else if (!obj->isFloatingOrOutOfFlowPositioned() && !obj->isRu
nIn()) | 4986 } else if (!obj->isFloatingOrOutOfFlowPositioned()) |
| 5152 normalFlowChildWithoutLines = obj; | 4987 normalFlowChildWithoutLines = obj; |
| 5153 } | 4988 } |
| 5154 if (normalFlowChildWithoutLines && l == 0) | 4989 if (normalFlowChildWithoutLines && l == 0) |
| 5155 return normalFlowChildWithoutLines->y() + normalFlowChildWithout
Lines->height(); | 4990 return normalFlowChildWithoutLines->y() + normalFlowChildWithout
Lines->height(); |
| 5156 } | 4991 } |
| 5157 } | 4992 } |
| 5158 | 4993 |
| 5159 return -1; | 4994 return -1; |
| 5160 } | 4995 } |
| 5161 | 4996 |
| (...skipping 785 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5947 return "RenderBlock (anonymous)"; | 5782 return "RenderBlock (anonymous)"; |
| 5948 // FIXME: Temporary hack while the new generated content system is being imp
lemented. | 5783 // FIXME: Temporary hack while the new generated content system is being imp
lemented. |
| 5949 if (isPseudoElement()) | 5784 if (isPseudoElement()) |
| 5950 return "RenderBlock (generated)"; | 5785 return "RenderBlock (generated)"; |
| 5951 if (isAnonymous()) | 5786 if (isAnonymous()) |
| 5952 return "RenderBlock (generated)"; | 5787 return "RenderBlock (generated)"; |
| 5953 if (isRelPositioned()) | 5788 if (isRelPositioned()) |
| 5954 return "RenderBlock (relative positioned)"; | 5789 return "RenderBlock (relative positioned)"; |
| 5955 if (isStickyPositioned()) | 5790 if (isStickyPositioned()) |
| 5956 return "RenderBlock (sticky positioned)"; | 5791 return "RenderBlock (sticky positioned)"; |
| 5957 if (isRunIn()) | |
| 5958 return "RenderBlock (run-in)"; | |
| 5959 return "RenderBlock"; | 5792 return "RenderBlock"; |
| 5960 } | 5793 } |
| 5961 | 5794 |
| 5962 template <typename CharacterType> | 5795 template <typename CharacterType> |
| 5963 static inline TextRun constructTextRunInternal(RenderObject* context, const Font
& font, const CharacterType* characters, int length, RenderStyle* style, TextRun
::ExpansionBehavior expansion) | 5796 static inline TextRun constructTextRunInternal(RenderObject* context, const Font
& font, const CharacterType* characters, int length, RenderStyle* style, TextRun
::ExpansionBehavior expansion) |
| 5964 { | 5797 { |
| 5965 ASSERT(style); | 5798 ASSERT(style); |
| 5966 | 5799 |
| 5967 TextDirection textDirection = LTR; | 5800 TextDirection textDirection = LTR; |
| 5968 bool directionalOverride = style->rtlOrdering() == VisualOrder; | 5801 bool directionalOverride = style->rtlOrdering() == VisualOrder; |
| (...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6089 void RenderBlock::showLineTreeAndMark(const InlineBox* markedBox1, const char* m
arkedLabel1, const InlineBox* markedBox2, const char* markedLabel2, const Render
Object* obj) const | 5922 void RenderBlock::showLineTreeAndMark(const InlineBox* markedBox1, const char* m
arkedLabel1, const InlineBox* markedBox2, const char* markedLabel2, const Render
Object* obj) const |
| 6090 { | 5923 { |
| 6091 showRenderObject(); | 5924 showRenderObject(); |
| 6092 for (const RootInlineBox* root = firstRootBox(); root; root = root->nextRoot
Box()) | 5925 for (const RootInlineBox* root = firstRootBox(); root; root = root->nextRoot
Box()) |
| 6093 root->showLineTreeAndMark(markedBox1, markedLabel1, markedBox2, markedLa
bel2, obj, 1); | 5926 root->showLineTreeAndMark(markedBox1, markedLabel1, markedBox2, markedLa
bel2, obj, 1); |
| 6094 } | 5927 } |
| 6095 | 5928 |
| 6096 #endif | 5929 #endif |
| 6097 | 5930 |
| 6098 } // namespace WebCore | 5931 } // namespace WebCore |
| OLD | NEW |