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 |