| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2000 Lars Knoll (knoll@kde.org) | 2 * Copyright (C) 2000 Lars Knoll (knoll@kde.org) |
| 3 * Copyright (C) 2003, 2004, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All r
ight reserved. | 3 * Copyright (C) 2003, 2004, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All r
ight reserved. |
| 4 * Copyright (C) 2010 Google Inc. All rights reserved. | 4 * Copyright (C) 2010 Google Inc. All rights reserved. |
| 5 * | 5 * |
| 6 * This library is free software; you can redistribute it and/or | 6 * This library is free software; you can redistribute it and/or |
| 7 * modify it under the terms of the GNU Library General Public | 7 * modify it under the terms of the GNU Library General Public |
| 8 * License as published by the Free Software Foundation; either | 8 * License as published by the Free Software Foundation; either |
| 9 * version 2 of the License, or (at your option) any later version. | 9 * version 2 of the License, or (at your option) any later version. |
| 10 * | 10 * |
| (...skipping 346 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 357 int startOverhang; | 357 int startOverhang; |
| 358 int endOverhang; | 358 int endOverhang; |
| 359 RenderObject* nextObject = 0; | 359 RenderObject* nextObject = 0; |
| 360 for (BidiRun* runWithNextObject = run->next(); runWithNextObject; runWithNex
tObject = runWithNextObject->next()) { | 360 for (BidiRun* runWithNextObject = run->next(); runWithNextObject; runWithNex
tObject = runWithNextObject->next()) { |
| 361 if (!runWithNextObject->m_object->isOutOfFlowPositioned() && !runWithNex
tObject->m_box->isLineBreak()) { | 361 if (!runWithNextObject->m_object->isOutOfFlowPositioned() && !runWithNex
tObject->m_box->isLineBreak()) { |
| 362 nextObject = runWithNextObject->m_object; | 362 nextObject = runWithNextObject->m_object; |
| 363 break; | 363 break; |
| 364 } | 364 } |
| 365 } | 365 } |
| 366 renderer->getOverhang(lineInfo.isFirstLine(), renderer->style()->isLeftToRig
htDirection() ? previousObject : nextObject, renderer->style()->isLeftToRightDir
ection() ? nextObject : previousObject, startOverhang, endOverhang); | 366 renderer->getOverhang(lineInfo.isFirstLine(), renderer->style()->isLeftToRig
htDirection() ? previousObject : nextObject, renderer->style()->isLeftToRightDir
ection() ? nextObject : previousObject, startOverhang, endOverhang); |
| 367 setMarginStartForChild(renderer, -startOverhang); | 367 setMarginStartForChild(*renderer, -startOverhang); |
| 368 setMarginEndForChild(renderer, -endOverhang); | 368 setMarginEndForChild(*renderer, -endOverhang); |
| 369 } | 369 } |
| 370 | 370 |
| 371 static inline void setLogicalWidthForTextRun(RootInlineBox* lineBox, BidiRun* ru
n, RenderText* renderer, float xPos, const LineInfo& lineInfo, | 371 static inline void setLogicalWidthForTextRun(RootInlineBox* lineBox, BidiRun* ru
n, RenderText* renderer, float xPos, const LineInfo& lineInfo, |
| 372 GlyphOverflowAndFallbackFontsMap& t
extBoxDataMap, VerticalPositionCache& verticalPositionCache, WordMeasurements& w
ordMeasurements) | 372 GlyphOverflowAndFallbackFontsMap& t
extBoxDataMap, VerticalPositionCache& verticalPositionCache, WordMeasurements& w
ordMeasurements) |
| 373 { | 373 { |
| 374 HashSet<const SimpleFontData*> fallbackFonts; | 374 HashSet<const SimpleFontData*> fallbackFonts; |
| 375 GlyphOverflow glyphOverflow; | 375 GlyphOverflow glyphOverflow; |
| 376 | 376 |
| 377 const Font& font = renderer->style(lineInfo.isFirstLine())->font(); | 377 const Font& font = renderer->style(lineInfo.isFirstLine())->font(); |
| 378 // Always compute glyph overflow if the block's line-box-contain value is "g
lyphs". | 378 // Always compute glyph overflow if the block's line-box-contain value is "g
lyphs". |
| (...skipping 236 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 615 needsWordSpacing = !isSpaceOrNewline(rt->characterAt(r->m_stop -
1)); | 615 needsWordSpacing = !isSpaceOrNewline(rt->characterAt(r->m_stop -
1)); |
| 616 } | 616 } |
| 617 | 617 |
| 618 setLogicalWidthForTextRun(lineBox, r, rt, totalLogicalWidth, lineInf
o, textBoxDataMap, verticalPositionCache, wordMeasurements); | 618 setLogicalWidthForTextRun(lineBox, r, rt, totalLogicalWidth, lineInf
o, textBoxDataMap, verticalPositionCache, wordMeasurements); |
| 619 } else { | 619 } else { |
| 620 isAfterExpansion = false; | 620 isAfterExpansion = false; |
| 621 if (!r->m_object->isRenderInline()) { | 621 if (!r->m_object->isRenderInline()) { |
| 622 RenderBox* renderBox = toRenderBox(r->m_object); | 622 RenderBox* renderBox = toRenderBox(r->m_object); |
| 623 if (renderBox->isRubyRun()) | 623 if (renderBox->isRubyRun()) |
| 624 setMarginsForRubyRun(r, toRenderRubyRun(renderBox), previous
Object, lineInfo); | 624 setMarginsForRubyRun(r, toRenderRubyRun(renderBox), previous
Object, lineInfo); |
| 625 r->m_box->setLogicalWidth(logicalWidthForChild(renderBox).toFloa
t()); | 625 r->m_box->setLogicalWidth(logicalWidthForChild(*renderBox).toFlo
at()); |
| 626 totalLogicalWidth += marginStartForChild(renderBox) + marginEndF
orChild(renderBox); | 626 totalLogicalWidth += marginStartForChild(*renderBox) + marginEnd
ForChild(*renderBox); |
| 627 needsWordSpacing = true; | 627 needsWordSpacing = true; |
| 628 } | 628 } |
| 629 } | 629 } |
| 630 | 630 |
| 631 totalLogicalWidth += r->m_box->logicalWidth(); | 631 totalLogicalWidth += r->m_box->logicalWidth(); |
| 632 previousObject = r->m_object; | 632 previousObject = r->m_object; |
| 633 } | 633 } |
| 634 | 634 |
| 635 if (isAfterExpansion && !expansionOpportunities.isEmpty()) { | 635 if (isAfterExpansion && !expansionOpportunities.isEmpty()) { |
| 636 expansionOpportunities.last()--; | 636 expansionOpportunities.last()--; |
| (...skipping 228 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 865 bidiRuns.deleteRuns(); | 865 bidiRuns.deleteRuns(); |
| 866 resolver.markCurrentRunEmpty(); // FIXME: This can probably be repla
ced by an ASSERT (or just removed). | 866 resolver.markCurrentRunEmpty(); // FIXME: This can probably be repla
ced by an ASSERT (or just removed). |
| 867 | 867 |
| 868 if (lineBox) { | 868 if (lineBox) { |
| 869 lineBox->setLineBreakInfo(endOfLine.object(), endOfLine.offset()
, resolver.status()); | 869 lineBox->setLineBreakInfo(endOfLine.object(), endOfLine.offset()
, resolver.status()); |
| 870 if (layoutState.usesPaintInvalidationBounds()) | 870 if (layoutState.usesPaintInvalidationBounds()) |
| 871 layoutState.updatePaintInvalidationRangeFromBox(lineBox); | 871 layoutState.updatePaintInvalidationRangeFromBox(lineBox); |
| 872 | 872 |
| 873 if (paginated) { | 873 if (paginated) { |
| 874 LayoutUnit adjustment = 0; | 874 LayoutUnit adjustment = 0; |
| 875 adjustLinePositionForPagination(lineBox, adjustment, layoutS
tate.flowThread()); | 875 adjustLinePositionForPagination(*lineBox, adjustment, layout
State.flowThread()); |
| 876 if (adjustment) { | 876 if (adjustment) { |
| 877 LayoutUnit oldLineWidth = availableLogicalWidthForLine(o
ldLogicalHeight, layoutState.lineInfo().isFirstLine()); | 877 LayoutUnit oldLineWidth = availableLogicalWidthForLine(o
ldLogicalHeight, layoutState.lineInfo().isFirstLine()); |
| 878 lineBox->adjustBlockDirectionPosition(adjustment.toFloat
()); | 878 lineBox->adjustBlockDirectionPosition(adjustment.toFloat
()); |
| 879 if (layoutState.usesPaintInvalidationBounds()) | 879 if (layoutState.usesPaintInvalidationBounds()) |
| 880 layoutState.updatePaintInvalidationRangeFromBox(line
Box); | 880 layoutState.updatePaintInvalidationRangeFromBox(line
Box); |
| 881 | 881 |
| 882 if (availableLogicalWidthForLine(oldLogicalHeight + adju
stment, layoutState.lineInfo().isFirstLine()) != oldLineWidth) { | 882 if (availableLogicalWidthForLine(oldLogicalHeight + adju
stment, layoutState.lineInfo().isFirstLine()) != oldLineWidth) { |
| 883 // We have to delete this line, remove all floats th
at got added, and let line layout re-run. | 883 // We have to delete this line, remove all floats th
at got added, and let line layout re-run. |
| 884 lineBox->deleteLine(); | 884 lineBox->deleteLine(); |
| 885 endOfLine = restartLayoutRunsAndFloatsInRange(oldLog
icalHeight, oldLogicalHeight + adjustment, lastFloatFromPreviousLine, resolver,
previousEndofLine); | 885 endOfLine = restartLayoutRunsAndFloatsInRange(oldLog
icalHeight, oldLogicalHeight + adjustment, lastFloatFromPreviousLine, resolver,
previousEndofLine); |
| (...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 995 { | 995 { |
| 996 if (layoutState.endLine()) { | 996 if (layoutState.endLine()) { |
| 997 if (layoutState.endLineMatched()) { | 997 if (layoutState.endLineMatched()) { |
| 998 bool paginated = view()->layoutState() && view()->layoutState()->isP
aginated(); | 998 bool paginated = view()->layoutState() && view()->layoutState()->isP
aginated(); |
| 999 // Attach all the remaining lines, and then adjust their y-positions
as needed. | 999 // Attach all the remaining lines, and then adjust their y-positions
as needed. |
| 1000 LayoutUnit delta = logicalHeight() - layoutState.endLineLogicalTop()
; | 1000 LayoutUnit delta = logicalHeight() - layoutState.endLineLogicalTop()
; |
| 1001 for (RootInlineBox* line = layoutState.endLine(); line; line = line-
>nextRootBox()) { | 1001 for (RootInlineBox* line = layoutState.endLine(); line; line = line-
>nextRootBox()) { |
| 1002 line->attachLine(); | 1002 line->attachLine(); |
| 1003 if (paginated) { | 1003 if (paginated) { |
| 1004 delta -= line->paginationStrut(); | 1004 delta -= line->paginationStrut(); |
| 1005 adjustLinePositionForPagination(line, delta, layoutState.flo
wThread()); | 1005 adjustLinePositionForPagination(*line, delta, layoutState.fl
owThread()); |
| 1006 } | 1006 } |
| 1007 if (delta) { | 1007 if (delta) { |
| 1008 layoutState.updatePaintInvalidationRangeFromBox(line, delta)
; | 1008 layoutState.updatePaintInvalidationRangeFromBox(line, delta)
; |
| 1009 line->adjustBlockDirectionPosition(delta.toFloat()); | 1009 line->adjustBlockDirectionPosition(delta.toFloat()); |
| 1010 } | 1010 } |
| 1011 if (Vector<RenderBox*>* cleanLineFloats = line->floatsPtr()) { | 1011 if (Vector<RenderBox*>* cleanLineFloats = line->floatsPtr()) { |
| 1012 Vector<RenderBox*>::iterator end = cleanLineFloats->end(); | 1012 Vector<RenderBox*>::iterator end = cleanLineFloats->end(); |
| 1013 for (Vector<RenderBox*>::iterator f = cleanLineFloats->begin
(); f != end; ++f) { | 1013 for (Vector<RenderBox*>::iterator f = cleanLineFloats->begin
(); f != end; ++f) { |
| 1014 FloatingObject* floatingObject = insertFloatingObject(*f
); | 1014 FloatingObject* floatingObject = insertFloatingObject(**
f); |
| 1015 ASSERT(!floatingObject->originatingLine()); | 1015 ASSERT(!floatingObject->originatingLine()); |
| 1016 floatingObject->setOriginatingLine(line); | 1016 floatingObject->setOriginatingLine(line); |
| 1017 setLogicalHeight(logicalTopForChild(*f) - marginBeforeFo
rChild(*f) + delta); | 1017 setLogicalHeight(logicalTopForChild(**f) - marginBeforeF
orChild(**f) + delta); |
| 1018 positionNewFloats(); | 1018 positionNewFloats(); |
| 1019 } | 1019 } |
| 1020 } | 1020 } |
| 1021 } | 1021 } |
| 1022 setLogicalHeight(lastRootBox()->lineBottomWithLeading()); | 1022 setLogicalHeight(lastRootBox()->lineBottomWithLeading()); |
| 1023 } else { | 1023 } else { |
| 1024 // Delete all the remaining lines. | 1024 // Delete all the remaining lines. |
| 1025 deleteLineRange(layoutState, layoutState.endLine()); | 1025 deleteLineRange(layoutState, layoutState.endLine()); |
| 1026 } | 1026 } |
| 1027 } | 1027 } |
| (...skipping 526 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1554 Vector<RenderBox*> replacedChildren; | 1554 Vector<RenderBox*> replacedChildren; |
| 1555 for (InlineWalker walker(this); !walker.atEnd(); walker.advance()) { | 1555 for (InlineWalker walker(this); !walker.atEnd(); walker.advance()) { |
| 1556 RenderObject* o = walker.current(); | 1556 RenderObject* o = walker.current(); |
| 1557 | 1557 |
| 1558 if (!layoutState.hasInlineChild() && o->isInline()) | 1558 if (!layoutState.hasInlineChild() && o->isInline()) |
| 1559 layoutState.setHasInlineChild(true); | 1559 layoutState.setHasInlineChild(true); |
| 1560 | 1560 |
| 1561 if (o->isReplaced() || o->isFloating() || o->isOutOfFlowPositioned()
) { | 1561 if (o->isReplaced() || o->isFloating() || o->isOutOfFlowPositioned()
) { |
| 1562 RenderBox* box = toRenderBox(o); | 1562 RenderBox* box = toRenderBox(o); |
| 1563 | 1563 |
| 1564 updateBlockChildDirtyBitsBeforeLayout(relayoutChildren, box); | 1564 updateBlockChildDirtyBitsBeforeLayout(relayoutChildren, *box); |
| 1565 | 1565 |
| 1566 if (o->isOutOfFlowPositioned()) | 1566 if (o->isOutOfFlowPositioned()) |
| 1567 o->containingBlock()->insertPositionedObject(box); | 1567 o->containingBlock()->insertPositionedObject(box); |
| 1568 else if (o->isFloating()) | 1568 else if (o->isFloating()) |
| 1569 layoutState.floats().append(FloatWithRect(box)); | 1569 layoutState.floats().append(FloatWithRect(box)); |
| 1570 else if (isFullLayout || o->needsLayout()) { | 1570 else if (isFullLayout || o->needsLayout()) { |
| 1571 // Replaced element. | 1571 // Replaced element. |
| 1572 box->dirtyLineBoxes(isFullLayout); | 1572 box->dirtyLineBoxes(isFullLayout); |
| 1573 if (isFullLayout) | 1573 if (isFullLayout) |
| 1574 replacedChildren.append(box); | 1574 replacedChildren.append(box); |
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1654 // FIXME: This entire float-checking block needs to be broken into a new fun
ction. | 1654 // FIXME: This entire float-checking block needs to be broken into a new fun
ction. |
| 1655 bool dirtiedByFloat = false; | 1655 bool dirtiedByFloat = false; |
| 1656 if (!layoutState.isFullLayout()) { | 1656 if (!layoutState.isFullLayout()) { |
| 1657 // Paginate all of the clean lines. | 1657 // Paginate all of the clean lines. |
| 1658 bool paginated = view()->layoutState() && view()->layoutState()->isPagin
ated(); | 1658 bool paginated = view()->layoutState() && view()->layoutState()->isPagin
ated(); |
| 1659 LayoutUnit paginationDelta = 0; | 1659 LayoutUnit paginationDelta = 0; |
| 1660 size_t floatIndex = 0; | 1660 size_t floatIndex = 0; |
| 1661 for (curr = firstRootBox(); curr && !curr->isDirty(); curr = curr->nextR
ootBox()) { | 1661 for (curr = firstRootBox(); curr && !curr->isDirty(); curr = curr->nextR
ootBox()) { |
| 1662 if (paginated) { | 1662 if (paginated) { |
| 1663 paginationDelta -= curr->paginationStrut(); | 1663 paginationDelta -= curr->paginationStrut(); |
| 1664 adjustLinePositionForPagination(curr, paginationDelta, layoutSta
te.flowThread()); | 1664 adjustLinePositionForPagination(*curr, paginationDelta, layoutSt
ate.flowThread()); |
| 1665 if (paginationDelta) { | 1665 if (paginationDelta) { |
| 1666 if (containsFloats() || !layoutState.floats().isEmpty()) { | 1666 if (containsFloats() || !layoutState.floats().isEmpty()) { |
| 1667 // FIXME: Do better eventually. For now if we ever shif
t because of pagination and floats are present just go to a full layout. | 1667 // FIXME: Do better eventually. For now if we ever shif
t because of pagination and floats are present just go to a full layout. |
| 1668 layoutState.markForFullLayout(); | 1668 layoutState.markForFullLayout(); |
| 1669 break; | 1669 break; |
| 1670 } | 1670 } |
| 1671 | 1671 |
| 1672 layoutState.updatePaintInvalidationRangeFromBox(curr, pagina
tionDelta); | 1672 layoutState.updatePaintInvalidationRangeFromBox(curr, pagina
tionDelta); |
| 1673 curr->adjustBlockDirectionPosition(paginationDelta.toFloat()
); | 1673 curr->adjustBlockDirectionPosition(paginationDelta.toFloat()
); |
| 1674 } | 1674 } |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1728 | 1728 |
| 1729 unsigned numCleanFloats = 0; | 1729 unsigned numCleanFloats = 0; |
| 1730 if (!layoutState.floats().isEmpty()) { | 1730 if (!layoutState.floats().isEmpty()) { |
| 1731 LayoutUnit savedLogicalHeight = logicalHeight(); | 1731 LayoutUnit savedLogicalHeight = logicalHeight(); |
| 1732 // Restore floats from clean lines. | 1732 // Restore floats from clean lines. |
| 1733 RootInlineBox* line = firstRootBox(); | 1733 RootInlineBox* line = firstRootBox(); |
| 1734 while (line != curr) { | 1734 while (line != curr) { |
| 1735 if (Vector<RenderBox*>* cleanLineFloats = line->floatsPtr()) { | 1735 if (Vector<RenderBox*>* cleanLineFloats = line->floatsPtr()) { |
| 1736 Vector<RenderBox*>::iterator end = cleanLineFloats->end(); | 1736 Vector<RenderBox*>::iterator end = cleanLineFloats->end(); |
| 1737 for (Vector<RenderBox*>::iterator f = cleanLineFloats->begin();
f != end; ++f) { | 1737 for (Vector<RenderBox*>::iterator f = cleanLineFloats->begin();
f != end; ++f) { |
| 1738 FloatingObject* floatingObject = insertFloatingObject(*f); | 1738 FloatingObject* floatingObject = insertFloatingObject(**f); |
| 1739 ASSERT(!floatingObject->originatingLine()); | 1739 ASSERT(!floatingObject->originatingLine()); |
| 1740 floatingObject->setOriginatingLine(line); | 1740 floatingObject->setOriginatingLine(line); |
| 1741 setLogicalHeight(logicalTopForChild(*f) - marginBeforeForChi
ld(*f)); | 1741 setLogicalHeight(logicalTopForChild(**f) - marginBeforeForCh
ild(**f)); |
| 1742 positionNewFloats(); | 1742 positionNewFloats(); |
| 1743 ASSERT(layoutState.floats()[numCleanFloats].object == *f); | 1743 ASSERT(layoutState.floats()[numCleanFloats].object == *f); |
| 1744 numCleanFloats++; | 1744 numCleanFloats++; |
| 1745 } | 1745 } |
| 1746 } | 1746 } |
| 1747 line = line->nextRootBox(); | 1747 line = line->nextRootBox(); |
| 1748 } | 1748 } |
| 1749 setLogicalHeight(savedLogicalHeight); | 1749 setLogicalHeight(savedLogicalHeight); |
| 1750 } | 1750 } |
| 1751 layoutState.setFloatIndex(numCleanFloats); | 1751 layoutState.setFloatIndex(numCleanFloats); |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1813 bool paginated = view()->layoutState() && view()->layoutState()->isPaginated
(); | 1813 bool paginated = view()->layoutState() && view()->layoutState()->isPaginated
(); |
| 1814 if (paginated && layoutState.flowThread()) { | 1814 if (paginated && layoutState.flowThread()) { |
| 1815 // Check all lines from here to the end, and see if the hypothetical new
position for the lines will result | 1815 // Check all lines from here to the end, and see if the hypothetical new
position for the lines will result |
| 1816 // in a different available line width. | 1816 // in a different available line width. |
| 1817 for (RootInlineBox* lineBox = layoutState.endLine(); lineBox; lineBox =
lineBox->nextRootBox()) { | 1817 for (RootInlineBox* lineBox = layoutState.endLine(); lineBox; lineBox =
lineBox->nextRootBox()) { |
| 1818 if (paginated) { | 1818 if (paginated) { |
| 1819 // This isn't the real move we're going to do, so don't update t
he line box's pagination | 1819 // This isn't the real move we're going to do, so don't update t
he line box's pagination |
| 1820 // strut yet. | 1820 // strut yet. |
| 1821 LayoutUnit oldPaginationStrut = lineBox->paginationStrut(); | 1821 LayoutUnit oldPaginationStrut = lineBox->paginationStrut(); |
| 1822 lineDelta -= oldPaginationStrut; | 1822 lineDelta -= oldPaginationStrut; |
| 1823 adjustLinePositionForPagination(lineBox, lineDelta, layoutState.
flowThread()); | 1823 adjustLinePositionForPagination(*lineBox, lineDelta, layoutState
.flowThread()); |
| 1824 lineBox->setPaginationStrut(oldPaginationStrut); | 1824 lineBox->setPaginationStrut(oldPaginationStrut); |
| 1825 } | 1825 } |
| 1826 } | 1826 } |
| 1827 } | 1827 } |
| 1828 | 1828 |
| 1829 if (!lineDelta || !m_floatingObjects) | 1829 if (!lineDelta || !m_floatingObjects) |
| 1830 return true; | 1830 return true; |
| 1831 | 1831 |
| 1832 // See if any floats end in the range along which we want to shift the lines
vertically. | 1832 // See if any floats end in the range along which we want to shift the lines
vertically. |
| 1833 LayoutUnit logicalTop = std::min(logicalHeight(), layoutState.endLineLogical
Top()); | 1833 LayoutUnit logicalTop = std::min(logicalHeight(), layoutState.endLineLogical
Top()); |
| (...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2010 --it; // Last float is newFloat, skip that one. | 2010 --it; // Last float is newFloat, skip that one. |
| 2011 FloatingObjectSetIterator begin = floatingObjectSet.begin(); | 2011 FloatingObjectSetIterator begin = floatingObjectSet.begin(); |
| 2012 while (it != begin) { | 2012 while (it != begin) { |
| 2013 --it; | 2013 --it; |
| 2014 FloatingObject* floatingObject = it->get(); | 2014 FloatingObject* floatingObject = it->get(); |
| 2015 if (floatingObject == lastFloatFromPreviousLine) | 2015 if (floatingObject == lastFloatFromPreviousLine) |
| 2016 break; | 2016 break; |
| 2017 if (logicalTopForFloat(floatingObject) == logicalHeight() + lineInfo.flo
atPaginationStrut()) { | 2017 if (logicalTopForFloat(floatingObject) == logicalHeight() + lineInfo.flo
atPaginationStrut()) { |
| 2018 floatingObject->setPaginationStrut(paginationStrut + floatingObject-
>paginationStrut()); | 2018 floatingObject->setPaginationStrut(paginationStrut + floatingObject-
>paginationStrut()); |
| 2019 RenderBox* floatBox = floatingObject->renderer(); | 2019 RenderBox* floatBox = floatingObject->renderer(); |
| 2020 setLogicalTopForChild(floatBox, logicalTopForChild(floatBox) + margi
nBeforeForChild(floatBox) + paginationStrut); | 2020 setLogicalTopForChild(*floatBox, logicalTopForChild(*floatBox) + mar
ginBeforeForChild(*floatBox) + paginationStrut); |
| 2021 if (floatBox->isRenderBlock()) | 2021 if (floatBox->isRenderBlock()) |
| 2022 floatBox->forceChildLayout(); | 2022 floatBox->forceChildLayout(); |
| 2023 else | 2023 else |
| 2024 floatBox->layoutIfNeeded(); | 2024 floatBox->layoutIfNeeded(); |
| 2025 // Save the old logical top before calling removePlacedObject which
will set | 2025 // Save the old logical top before calling removePlacedObject which
will set |
| 2026 // isPlaced to false. Otherwise it will trigger an assert in logical
TopForFloat. | 2026 // isPlaced to false. Otherwise it will trigger an assert in logical
TopForFloat. |
| 2027 LayoutUnit oldLogicalTop = logicalTopForFloat(floatingObject); | 2027 LayoutUnit oldLogicalTop = logicalTopForFloat(floatingObject); |
| 2028 m_floatingObjects->removePlacedObject(floatingObject); | 2028 m_floatingObjects->removePlacedObject(floatingObject); |
| 2029 setLogicalTopForFloat(floatingObject, oldLogicalTop + paginationStru
t); | 2029 setLogicalTopForFloat(floatingObject, oldLogicalTop + paginationStru
t); |
| 2030 m_floatingObjects->addPlacedObject(floatingObject); | 2030 m_floatingObjects->addPlacedObject(floatingObject); |
| (...skipping 18 matching lines...) Expand all Loading... |
| 2049 float logicalLeft = logicalLeftOffsetForLine(logicalHeight(), false).toFloat
(); | 2049 float logicalLeft = logicalLeftOffsetForLine(logicalHeight(), false).toFloat
(); |
| 2050 float availableLogicalWidth = logicalRightOffsetForLine(logicalHeight(), fal
se) - logicalLeft; | 2050 float availableLogicalWidth = logicalRightOffsetForLine(logicalHeight(), fal
se) - logicalLeft; |
| 2051 updateLogicalWidthForAlignment(textAlign, 0, 0, logicalLeft, totalLogicalWid
th, availableLogicalWidth, 0); | 2051 updateLogicalWidthForAlignment(textAlign, 0, 0, logicalLeft, totalLogicalWid
th, availableLogicalWidth, 0); |
| 2052 | 2052 |
| 2053 if (!style()->isLeftToRightDirection()) | 2053 if (!style()->isLeftToRightDirection()) |
| 2054 return logicalWidth() - logicalLeft; | 2054 return logicalWidth() - logicalLeft; |
| 2055 return logicalLeft; | 2055 return logicalLeft; |
| 2056 } | 2056 } |
| 2057 | 2057 |
| 2058 } | 2058 } |
| OLD | NEW |